跳转到内容

Unix/命令/设备指南

来自维基教科书,开放世界中的开放书籍

fuser 会告诉你哪个进程正在使用指示的文件系统对象(普通文件、设备等)。

$ fuser /dev/dsp
/dev/dsp:             8369

链接

lsof 列出所有打开的文件,比 fuser 更详细。

例子

$ lsof /dev/dsp
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
mplayer 8406 alex    7w   CHR   14,3       389 /dev/sound/dsp

提示

使用 -i 4 选项将报告当前正在使用 IPv4 网络的所有程序,这对于观察访问网络和互联网资源的程序很有用。

$ lsof -i 4
COMMAND    PID   USER   FD   TYPE DEVICE SIZE NODE NAME
btdownloa 2618 arky    3u  IPv4   9524       TCP *:6886 (LISTEN)
btdownloa 2618 arky    6u  IPv4   9544       TCP  dsl-KK-229.53.101.203.ttel.net:1539->cpc1-leed3-3-0-cust10.ldst.cable.ntl.com:59074 (ESTABLISHED)

链接

  • lsof, freebsd.org
  • lsof, manpages.ubuntu.com

fstat 列出所有打开的文件。

前两个命令 (fuser 和 lsof) 并非所有系统都存在。4.3BSD-Tahoe 系统引入了在许多 *BSD 系统上都可以找到的 "fstat" 命令。与前两个命令不同,它似乎不知道每个文件的准确路径,只知道它位于哪个文件系统?

一些选项是

 -p PROCESSID  show open files of this process
 -u USERNAME   show open files of this user

示例:列出每个用户(包括 root!)打开的所有文件。将其管道输出到分页程序。

$ fstat | less

获取正在运行的 Bourne shell 的进程 ID,然后列出它打开的文件。

$ echo $$
5283
$ fstat -p 5283
USER     CMD          PID   FD MOUNT      INUM MODE       R/W    DV|SZ
...

init 进程的 ID 始终为 1。列出它打开的文件。在本例中,它只在 / 文件系统上的某个地方打开了一个文件。

$ fstat -v -p 1
USER     CMD          PID   FD MOUNT      INUM MODE       R/W    DV|SZ
root     init           1   wd /             2 drwxr-xr-x   r      512

链接

华夏公益教科书