fuser
命令让我知道哪些进程正在使用文件或目录。
我正在寻找相反的命令:让我知道进程正在使用哪些文件。
忘了提到它是用于Solaris系统的。
答案 0 :(得分:41)
lsof -p <pid>
来自here
lsof代表“ LiSt Open Files ”。这个shell命令看起来很简单:它列出了有关UNIX机器上进程打开的文件的信息。
尽管它的(明显的)适度的任务声明,lsof实际上是最强大和最有用的UNIX命令之一。它的原始功能来自UNIX的设计原则之一,通常被描述为“在UNIX中,一切都是文件”。这意味着打开文件的lsof概念不仅涵盖常规文件,还包括以下内容:
等等,我无法在我的系统上找到lsof!
lsof是一种非常流行的工具,它已被移植到几乎所有UNIX方言(Linux,Mac OS X,BSD,Solaris等)。如果您的盒子上没有它,请使用常用的包管理系统进行安装。您可以在Sun Freeware上找到Solaris的lsof软件包。
答案 1 :(得分:13)
虽然我不会嫉妒任何学习Dtrace或获得安装软件经验的人,但在Solaris中是一个命令来查看进程已打开的文件: 的/ usr /斌/ PFILES
% tail -f /etc/motd &
[1] 6033
% pfiles 6033
6033: tail -f /etc/motd
Current rlimit: 256 file descriptors
0: S_IFREG mode:0644 dev:182,65538 ino:163065 uid:0 gid:3 size:54
O_RDONLY|O_LARGEFILE
/etc/motd
1: S_IFCHR mode:0620 dev:299,0 ino:718837882 uid:101 gid:7 rdev:24,3
O_RDWR|O_NOCTTY|O_LARGEFILE
/dev/pts/3
2: S_IFCHR mode:0620 dev:299,0 ino:718837882 uid:101 gid:7 rdev:24,3
O_RDWR|O_NOCTTY|O_LARGEFILE
/dev/pts/3
答案 2 :(得分:1)
您可以从http://www.sunfreeware.com/programlistsparc10.html#lsof
获取lsof你也可以试试pfiles:
http://docs.oracle.com/cd/E23823_01/html/816-5165/pfiles-1.html#scrolltoc
答案 3 :(得分:1)
这是 dtrace 的经典应用。
我无法准确记住语法,但每次系统上的任何进程打开文件时都可以触发跟踪。它可以在正在运行的系统上完成,而不会像我预期的那样接近那么多的开销。如果您以管理员身份运行solaris,dtrace是您最好的朋友。即使你不是程序员,它也很容易学习,并且是一个非常强大的系统查询工具。
答案 4 :(得分:1)
在某些unix系统(IE:Linux)下,进程打开的所有文件都有FD ID。
这些可以在
下看到/ proc / $ PID / fd
ls -la /proc/2055/fd
total 0
dr-x------ 2 kent kent 0 Nov 19 21:44 .
dr-xr-xr-x 7 kent kent 0 Nov 19 21:42 ..
lr-x------ 1 kent kent 64 Nov 19 21:44 0 -> /dev/null
l-wx------ 1 kent kent 64 Nov 19 21:44 1 -> /home/kent/.xsession-errors
lrwx------ 1 kent kent 64 Nov 19 21:44 10 -> socket:[3977613]
lrwx------ 1 kent kent 64 Nov 19 21:44 11 -> /home/kent/.googleearth/Cache/dbCache.dat
lrwx------ 1 kent kent 64 Nov 19 21:44 12 -> /home/kent/.googleearth/Cache/dbCache.dat.index
lrwx------ 1 kent kent 64 Nov 19 21:44 13 -> socket:[3978765]
lrwx------ 1 kent kent 64 Nov 19 21:44 14 -> socket:[3978763]
lrwx------ 1 kent kent 64 Nov 19 21:44 15 -> socket:[3978766]
lrwx------ 1 kent kent 64 Nov 19 21:44 17 -> socket:[3978764]
l-wx------ 1 kent kent 64 Nov 19 21:44 2 -> /home/kent/.xsession-errors
lr-x------ 1 kent kent 64 Nov 19 21:44 3 -> pipe:[3977583]
l-wx------ 1 kent kent 64 Nov 19 21:44 4 -> pipe:[3977583]
lr-x------ 1 kent kent 64 Nov 19 21:44 5 -> pipe:[3977584]
l-wx------ 1 kent kent 64 Nov 19 21:44 6 -> pipe:[3977584]
lr-x------ 1 kent kent 64 Nov 19 21:44 7 -> pipe:[3977587]
l-wx------ 1 kent kent 64 Nov 19 21:44 8 -> pipe:[3977587]
lrwx------ 1 kent kent 64 Nov 19 21:44 9 -> socket:[3977588]
此外,有时你甚至会得到“FDINFO”(我认为这是linux上的内核标志)
cat /proc/2055/fdinfo/11
pos: 232741818
flags: 02
答案 5 :(得分:1)
$ ls -l / proc / * / fd | grep“chrome”
lrwx ------ 1 ba abc 64 Jul 16 22:19 104 - &gt; /home/abc/.config/google-chrome/Default/Cookies
lr-x ------ 1 abc abc 64 Jul 16 22:19 113 - &gt; /opt/google/chrome/nacl_irt_x86_64.nexe
lrwx ------ 1 abc abc 64 Jul 16 22:19 121 - &gt; /home/abc/.cache/google-chrome/Default/Cache/data_0
lrwx ------ 1 abc abc 64 Jul 16 22:19 122 - &gt; /home/abc/.cache/google-chrome/Default/Cache/data_1
lrwx ------ 1 abc abc 64 Jul 16 22:19 123 - &gt; /home/abc/.cache/google-chrome/Default/Cache/data_2
lr-x ------ 1 abc abc 64 Jul 16 22:19 125 - &gt; /home/abc/.config/google-chrome/Dictionaries/en-US-3-0.bdic
使用 lsof 和 grep
找出结果的另一个命令$ lsof | grep“chrome”
chrome 2204 abc cwd DIR 8,5 4096 1441794 / home / abc
chrome 2204 abc rtd DIR 8,5 4096 2 /
chrome 2204 abc txt REG 8,5 87345336 5111885 / opt / google / chrome / chrome
chrome 2204 abc mem REG 8,5 4202496 1443927 /home/abc/.cache/google-chrome/Default/Media Cache / data_3
chrome 2204 abc mem REG 8,5 1056768 1443926 /home/abc/.cache/google-chrome/Default/Media Cache / data_2
chrome 2204 abc mem REG 8,5 270336 1443925 /home/abc/.cache/google-chrome/Default/Media Cache / data_1
chrome 2204 abc mem REG 8,5 45056 1443924 /home/abc/.cache/google-chrome/Default/Media Cache / data_0