unix进程使用的文件

lam*_*cro 14 unix command-line solaris pid fuser

fuser命令让我知道哪些进程正在使用文件或目录.

我正在寻找相反的命令:让我知道进程正在使用哪些文件.


更新

忘记提到它是用于Solaris系统的.

Joh*_*itb 41

lsof -p <pid>
Run Code Online (Sandbox Code Playgroud)

这里开始

lsof代表" LiSt Open Files ".这个shell命令看起来很简单:它列出了有关UNIX框上进程打开的文件的信息.

尽管它的(明显的)适度的任务声明,lsof实际上是最强大和最有用的UNIX命令之一.它的原始功能来自UNIX的设计原则之一,通常被描述为"在UNIX中,一切都是文件".这意味着打开文件的lsof概念不仅涵盖常规文件,还包括以下内容:

  • 目录
  • 流或网络文件(例如,Internet或UNIX域套接字和NFS文件)
  • 本机库(例如,链接到进程的.soor .dylibdynamic库)
  • 块和字符特殊文件(例如,磁盘卷,外部硬盘驱动器,控制台或鼠标)
  • 管道

等等,我找不到我的系统上的lsof!

lsof是一种非常流行的工具,它已被移植到几乎所有UNIX方言(Linux,Mac OS X,BSD,Solaris等).如果您的盒子上没有它,请使用常用的包管理系统进行安装.您可以在Sun免费软件上找到Solaris的lsof软件包.


小智 13

虽然我不会吝惜任何人学习的Dtrace或获取经验安装软件,Solaris中有一个命令来查看一个进程打开文件:在/ usr/bin中/ 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
Run Code Online (Sandbox Code Playgroud)