lsof命令
问题由来:
1.如何查看某个文件被哪个进程打开
答案:
lsof |grep -i file
案例:
[root@iZ280vfehieZXZ ~]# lsof /usr/sbin/crond COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME crond 991 root txt REG 202,1 64096 1058361 /usr/sbin/crond
结果注释:
每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。
lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符pid
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
案例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 202,1 4096 2 / init 1 root rtd DIR 202,1 4096 2 / init 1 root txt REG 202,1 150352 655401 /sbin/init init 1 root mem REG 202,1 65928 262212 /lib64/libnss_files-2.12.so init 1 root DEL REG 202,1 262156 /lib64/libc-2.12.so init 1 root DEL REG 202,1 262147 /lib64/libgcc_s-4.4.7-20120601.so.1.#prelink#.FilsAv init 1 root DEL REG 202,1 268866 /lib64/librt-2.12.so init 1 root DEL REG 202,1 262180 /lib64/libpthread-2.12.so.#prelink#.gv3uO3 init 1 root DEL REG 202,1 262211 /lib64/libdbus-1.so.3.4.0.#prelink#.5jXtwN init 1 root mem REG 202,1 39896 265469 /lib64/libnih-dbus.so.1.0.0 init 1 root mem REG 202,1 101920 265471 /lib64/libnih.so.1.0.0 init 1 root DEL REG 202,1 268698 /lib64/ld-2.12.so init 1 root 0u CHR 1,3 0t0 3923 /dev/null init 1 root 1u CHR 1,3 0t0 3923 /dev/null init 1 root 2u CHR 1,3 0t0 3923 /dev/null init 1 root 3r FIFO 0,8 0t0 6773 pipe init 1 root 4w FIFO 0,8 0t0 6773 pipe init 1 root 5r DIR 0,10 0 1 inotify init 1 root 6r DIR 0,10 0 1 inotify init 1 root 7u unix 0xffff8800378df400 0t0 6774 socket kthreadd 2 root cwd DIR 202,1 4096 2 / kthreadd 2 root rtd DIR 202,1 4096 2 / kthreadd 2 root txt unknown /proc/2/exe
关于FD 文件描述符的讲解:
cwd 值表示应用程序的当前工作目录,就是该应用程序的启动目录,,txt 类型的文件,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。
文件和目录分别称为 REG 和 DIR。而CHR 和 BLK,分别表示字符和块设备;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。
参考的文章:
http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316599.html
http://wowubuntu.com/lsof.html
http://www.cnblogs.com/wangkangluo1/archive/2012/04/18/2454916.html
联系我->邮件写信