lsof 命令简介
losf 命令可以列出某個進程打開的所有文件信息。打開的文件可能是普通的文件,目錄,NFS文件,塊文件,字符文件,共享庫,常規管道,明明管道,符號鏈接,Socket流,網絡Socket,UNIX域Socket,以及其它更多。 1 列出系統上所有打開的文件: [root@rac1 mysql]# lsof | more COMMAND ? ? PID ? ? ?USER ? FD ? ? ?TYPE ? ? ? ? ? ? DEVICE ? ? ? SIZE ? ? ? NODE NAME init ? ? ? ? ?1 ? ? ?root ?cwd ? ? ? DIR ? ? ? ? ? ? ? ?8,3 ? ? ? 4096 ? ? ? ? ?2 / init ? ? ? ? ?1 ? ? ?root ?rtd ? ? ? DIR ? ? ? ? ? ? ? ?8,3 ? ? ? 4096 ? ? ? ? ?2 / init ? ? ? ? ?1 ? ? ?root ?txt ? ? ? REG ? ? ? ? ? ? ? ?8,3 ? ? ?43496 ? 17727785 /sbin/init ? 2 查看誰在使用指定的文件 [root@rac1 ~]# lsof /tmp/mysql.sock ? ? ? ? ? ? ? ? ? ? ? ? ? ? COMMAND ? PID ?USER ? FD ? TYPE ? ? ? ? ? ? DEVICE SIZE ? ? NODE NAME mysqld ?24319 mysql ? 16u ?unix 0xffff8100918a8c00 ? ? ?44743909 /tmp/mysql.sock ? 3 遞歸查看指定目錄下所有打開的文件 [root@rac1 ~]# ?lsof +D /opt/mysql/ ? COMMAND ? PID ?USER ? FD ? TYPE DEVICE ? ? ? SIZE ? ? NODE NAME mysqld ?24319 mysql ?cwd ? ?DIR ? ?8,3 ? ? ? 4096 19824642 /opt/mysql/data mysqld ?24319 mysql ? ?3u ? REG ? ?8,3 ? ? ? ?152 19824646 /opt/mysql/data/mysql-log-bin.index mysqld ?24319 mysql ? ?4uW ?REG ? ?8,3 4875878400 20283611 /opt/mysql/data/ibdata1 mysqld ?24319 mysql ? ?9uW ?REG ? ?8,3 ? ?5242880 20283612 /opt/mysql/data/ib_logfile0 mysqld ?24319 mysql ? 10uW ?REG ? ?8,3 ? ?5242880 20283613 /opt/mysql/data/ib_logfile1 mysqld ?24319 mysql ? 12w ? REG ? ?8,3 ? ? ?12957 19824652 /opt/mysql/data/slow_query.log ? 4 查看指定用戶打開的所有文件 [root@rac1 ~]# lsof -u oracle COMMAND ? ?PID ? USER ? FD ? TYPE ? ? ? ? ? ? DEVICE ? ? SIZE ? ? NODE NAME nmz ? ? ? 3211 oracle ?cwd ? ?DIR ? ? ? ? ? ? ? ?8,3 ? ? 4096 10813466 /home/oracle nmz ? ? ? 3211 oracle ?rtd ? ?DIR ? ? ? ? ? ? ? ?8,3 ? ? 4096 ? ? ? ?2 / nmz ? ? ? 3211 oracle ?txt ? ?REG ? ? ? ? ? ? ? ?8,3 ? 673908 19398913 /opt/rac/oracle/11.2.0/rac/ccr/bin/nmz nmz ? ? ? 3211 oracle ?mem ? ?REG ? ? ? ? ? ? ? ?8,3 ? 125736 ?2820762 /lib/ld-2.5.so nmz ? ? ? 3211 oracle ?mem ? ?REG ? ? ? ? ? ? ? ?8,3 ?1606808 ?2818065 /lib/libc-2.5.so nmz ? ? ? 3211 oracle ? ?3uW ?REG ? ? ? ? ? ? ? ?8,3 ? ? ? ?0 19398727 /opt/rac/oracle/11.2.0/rac/ccr/hosts/rac1/log/sched.lock nmz ? ? ? 3211 oracle ? ?4w ? REG ? ? ? ? ? ? ? ?8,3 ? ? ?853 19398726 /opt/rac/oracle/11.2.0/rac/ccr/hosts/rac1/log/sched.log nmz ? ? ? 3211 oracle ? ?5r ? REG ? ? ? ? ? ? ? ?8,3 ? ?16896 20906832 /opt/rac/oracle/11.2.0/rac/ccr/mesg/nmzus.msb 注意:^符號,它執行取反操作 lsof -u ^oracle 表示除oracle 之外的用戶打開的文件 5 查看某個程序打開的所有文件 -c選項限定只列出以apache開頭的進程打開的文件: root@rac1 shell]# lsof -c mysql COMMAND ? PID ?USER ? FD ? TYPE ? ? ? ? ? ? DEVICE ? ? ? SIZE ? ? NODE NAME mysqld ?24319 mysql ?cwd ? ?DIR ? ? ? ? ? ? ? ?8,3 ? ? ? 4096 19824642 /opt/mysql/data mysqld ?24319 mysql ?rtd ? ?DIR ? ? ? ? ? ? ? ?8,3 ? ? ? 4096 ? ? ? ?2 / mysqld ?24319 mysql ?txt ? ?REG ? ? ? ? ? ? ? ?8,3 ? 45648978 23429121 /usr/sbin/mysqld mysqld ?24319 mysql ?mem ? ?REG ? ? ? ? ? ? ? ?8,3 ? ? 139416 21201203 /lib64/ld-2.5.so mysqld ?24319 mysql ?mem ? ?REG ? ? ? ? ? ? ? ?8,3 ? ?1713160 21201204 /lib64/libc-2.5.so mysqld ?24319 mysql ?mem ? ?REG ? ? ? ? ? ? ? ?8,3 ? ? ?23360 21201206 /lib64/libdl-2.5.so 6 查看某個用戶與某個程序打開的文件 lsof -u username -c 進程名 ? ?是或的關系,表示所有由某個用戶或某個進程打開的文件 lsof -a -u username -c 進程名 是與的關系? 7 查看所有由某個PID對應的進程打開的文件 ? 使用 -p 參數來過濾輸出 [root@rac1 ~]# lsof ?-p 1 COMMAND PID USER ? FD ? TYPE DEVICE ? ?SIZE ? ? NODE NAME init ? ? ?1 root ?cwd ? ?DIR ? ?8,3 ? ?4096 ? ? ? ?2 / init ? ? ?1 root ?rtd ? ?DIR ? ?8,3 ? ?4096 ? ? ? ?2 / init ? ? ?1 root ?txt ? ?REG ? ?8,3 ? 43496 17727785 /sbin/init init ? ? ?1 root ?mem ? ?REG ? ?8,3 ?139416 21201203 /lib64/ld-2.5.so init ? ? ?1 root ?mem ? ?REG ? ?8,3 1713160 21201204 /lib64/libc-2.5.so init ? ? ?1 root ?mem ? ?REG ? ?8,3 ? 23360 21201206 /lib64/libdl-2.5.so init ? ? ?1 root ?mem ? ?REG ? ?8,3 ? 95464 21201216 /lib64/libselinux.so.1 init ? ? ?1 root ?mem ? ?REG ? ?8,3 ?247528 21201215 /lib64/libsepol.so.1 init ? ? ?1 root ? 10u ?FIFO ? 0,17 ? ? ? ? ? ? 1477 /dev/initctl 8 查看網絡連接 -i 參數列出所有打開了網絡套接字(TCP和UDP)的進程 ?a 查看tcp 連接 ?b 查看udp 連接 ?c 找到使用某個端口的進程 ? ?# lsof -i :3306 ? ?:3306和-i選項組合可以讓lsof列出占用TCP或UDP的25端口的進程。 ? ?d 找到使用某個udp端口號的進程 ? ?# lsof -i udp:53 ?e 可以找到使用某個tcp端口的進程: ? ?# lsof -i tcp:80 ?f 找到某個用戶的所有網絡連接 ? ?# lsof -a -u mysql -i ? ?[root@rac1 ~]# lsof -a -u mysql -i ? ?COMMAND ? PID ?USER ? FD ? TYPE ? DEVICE SIZE NODE NAME ? ?mysqld ?24319 mysql ? 11u ?IPv6 48586515 ? ? ? TCP rac1:mysql->rac1:39045 (ESTABLISHED) ? ?mysqld ?24319 mysql ? 14u ?IPv6 44743908 ? ? ? TCP *:mysql (LISTEN) 9 列出所有NFS(網絡文件系統)文件 ? ?# lsof -N ? ?這個參數很好記,-N就對應NFS。 ? 10 列出所有對應某個組id的進程 ? ?# lsof -g 1234 ? ?進程組用來來邏輯上對進程進行分組,這個例子查找所有PGID為1234的進程打開的文件。 11 列出所有與某個描述符關聯的文件 ? ?# lsof -d 2 ? 會列出所有以描述符2打開的文件。 ? ?可以為描述符指定一個范圍: ? ?# lsof -d 0-2 會列出所有描述符為0,1,2的文件。 ? ?-d選項還支持其它很多特殊值,下面的命令列出所有內存映射文件: ? ?# lsof -d mem ? ?txt則列出所有加載在內存中并正在執行的進程: ? ?# lsof -d txt 12 輸出使用某些資源的進程pid ? ?# lsof -t -i ? ?-t選項輸出進程的PID,你可以將它和-i選項組合輸出使用某個端口的進程的PID,下面的命令將會殺掉所有使用網絡的進程: ? ?# kill -9 `lsof -t -i` 13 ?循環列出文件 ? # lsof -r 1 ? ?-r選項讓lsof可以循環列出文件直到被中斷,參數1的意思是每秒鐘重復打印一次,這個選項最好同某個范圍比較小的查詢組合使用,比如用來監測網絡活動: ? # lsof -r 1 -u john -i -a
轉載于:https://www.cnblogs.com/liang545621/p/7528491.html
總結
- 上一篇: easyUI创建人员树
- 下一篇: react redux学习之路