识别在Linux上打开特定进程的文件

我需要一个脚本来识别在linux上打开特定进程的文件

识别fd:

>cd /proc/<PID>/fd; ls |wc –l 

我期望看到一个数字列表,这是在这个过程中使用的文件描述符的编号列表。 请告诉我如何查看在这个过程中使用的所有文件。 谢谢。

你可能想要使用的命令是lsof 。 这比在/proc更好一些,因为这个命令是获取系统信息的更加清晰和稳定的方式。

 lsof -p pid 

但是,如果您对/proc有兴趣,可能会注意到files /proc/<pid>/fd/x是与其关联的文件的符号链接。 您可以使用readlink命令读取符号链接值。 例如,这显示终端stdin被绑定到:

 $ readlink /proc/self/fd/0 /dev/pts/43 

或者,要获取某个进程的所有文件,

 ls /proc/<pid>/fd/* | xargs -L 1 readlink 

虽然LSF很好,你可以做:

 ls -l /proc/pidoftheproces/fd 
 lsof -p <pid number here> | wc -l 

如果你没有lsof,你可以用/proc来做大致相同的操作

例如

 $ pid=1825 $ ls -1 /proc/$pid/fd/* $ awk '!/\[/&&$6{_[$6]++}END{for(i in _)print i}' /proc/$pid/maps 

你需要lsof 。 获取打开foo.txt的应用程序的PID:

 lsof | grep foo.txt | awk -F\ '{print $2}' 

或Macmede所说的做相反的事情(列表文件由一个进程打开)。

 lsof | grep processName