【linux命令詳解】lsof命令

lsof用於查看文件的打開狀況,用於調試程序,查看系統情況

輸出的各項信息
lsof輸出各列信息的意義如下:
COMMAND:進程的名稱
PID:進程標識符
USER:進程所有者
FD:文件描述符,應用程序通過文件描述符識別該文件。每個進程都有自己的文件描述符表,因此FD可能會重名
TYPE:文件類型
DEVICE:指定磁盤的名稱
SIZE:文件的大小
NODE:索引節點(文件在磁盤上的標識)
NAME:打開文件的確切名稱

-p 選項,列出pid所打開的文件

sudo lsof -p 32463 //展示進程號32463所打開的文件情況, 如果要多個,則用逗號隔開

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 32463 root cwd DIR 8,8 4096 2121777 /www/data/tomcat/bin

-u 選項, 列出某個用戶打開的文件

lsof -u wang

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 2104 wang cwd unknown /proc/2104/cwd (readlink: Permission denied)
sshd 2104 wang rtd unknown /proc/2104/root (readlink: Permission denied)

-i 的使用,這個比較有用
整體格式如下:
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 –> IPv4 or IPv6
protocol –> TCP or UDP
hostname –> Internet host name
hostaddr –> IPv4地址
service –> /etc/service中的 service name (可以不止一個)
port –> 端口號 (可以不止一個)

sudo lsof -i 4 //IpV4網絡文件的打開情況

sudo lsof -n -i [email protected]:30085 //展示TCP連接192.168.20.31:30085的連接情況

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 6418 root 3231u IPv4 871410697 0t0 TCP 192.168.20.30:6380->192.168.20.31:30085 (ESTABLISHED)

sudo lsof -i @192.168.20.31 //查看與192.168.20.31連接的情況

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1818 root 387u IPv4 884293373 0t0 TCP wang_zk1:wang.com:30471 (ESTABLISHED)
java 1818 root 388u IPv4 884293374 0t0 TCP wang_zk1:wang.com:30469 (ESTABLISHED)

sudo lsof -i @192.168.20.31:30471 //查看與192.168.20.31的30471端口的文件打開情況

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1818 root 387u IPv4 884293373 0t0 TCP wang_zk1:wang.com:30471 (ESTABLISHED)

sudo lsof -i:1883 查看1883端口的

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 8743 root 49u IPv4 771370268 0t0 TCP *:1883 (LISTEN)

sudo lsof -i:1883,1885 //可以查看1883,1885端口使用情況

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 8743 root 49u IPv4 771370268 0t0 TCP *:1883 (LISTEN)
main 16184 root 13u IPv4 225274829 0t0 TCP localhost:w1884 (LISTEN)

sudo lsof -i TCP:80 //打開TCP 80端口

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5604 www 16u IPv4 82923 0t0 TCP *:http (LISTEN)
nginx 5605 www 16u IPv4 82923 0t0 TCP *:http (LISTEN)

sudo lsof -T s -i UDP //顯示UDP端口的狀況

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
memcached 7777 nobody 27u IPv4 140461247 0t0 UDP wang_zk1:22622

sudo lsof -i //顯示所有internet

memcached 12659 nobody 41u IPv4 771440826 0t0 TCP wang_zk1:memcache->wang_zk1:16054 (ESTABLISHED)
memcached 12659 nobody 42u IPv4 771248651 0t0 TCP wang_zk1:memcache->wang_zk1:46769 (ESTABLISHED)
memcached 12659 nobody 43u IPv4 771379102 0t0 TCP wang_zk1:memcache->wang_zk1:10402 (ESTABLISHED)
memcached 12659 nobody 44u IPv4 3907515697 0t0 TCP wang_zk1:memcache->wang_zk1:56351 (ESTABLISHED)

sudo lsof -i :80

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5604 www 16u IPv4 82923 0t0 TCP *:http (LISTEN)
nginx 5605 www 16u IPv4 82923 0t0 TCP *:http (LISTEN)
nginx 5606 www 16u IPv4 82923 0t0 TCP *:http (LISTEN)

sudo lsof -n -i [email protected] //展示與192.168.20.31的連接情況,並直接展示ip出來

redis-ser 6418 root 3231u IPv4 871410697 0t0 TCP 192.168.20.30:6380->192.168.20.31:30085 (ESTABLISHED)

sudo lsof -n -i :80 //-n 表示阻止把主機ip轉換爲主機名

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 32463 root 51u IPv4 3511973379 0t0 TCP 192.168.20.30:25285->192.168.7.141:http (CLOSE_WAIT)
java 32463 root 53u IPv4 3511079896 0t0 TCP 192.168.20.30:35451->192.168.7.141:http (CLOSE_WAIT)

-c 選項

sudo lsof -c java 顯示command列中以java的所有打開的文件

sudo lsof -c java -c sh 顯示command列中以java開頭或以sh開頭的打開的文件

sudo lsof -c ^java 顯示command列中所有不以java開頭的打開的文件

-s 選項,選擇TCP,UDP的連接狀況

sudo lsof -iTCP -sTCP:LISTEN

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 632 monitor 6u IPv4 156403268 0t0 TCP *:monitor-agent (LISTEN)

sudo lsof -n -i TCP:8092 -s TCP:ESTABLISHED //展示TCP端口8092且狀態爲ESTABLIESHED的情況

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 13413 root 94u IPv4 844561512 0t0 TCP 192.168.20.30:59289->192.168.20.30:8092 (ESTABLISHED)

TCP狀態:CLOSED,IDLE,BOUND,LISTEN,ESTABLISHED,SYN_SENT,SYN_RCDV,CLOSE_WAIT,FIN_WAIT1,CLOSING,LAST_ACK,FIN_WAIT_2,TIME_WAIT
UDB狀態: Unbound , Idle

-T 選項,顯示網絡端口的情況

sudo lsof -T q -i :1883 //顯示QR(length of read queue), QS(length of send queue)

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 3603 root 49u IPv4 884372618 0t0 TCP *:1883 (QR=0 QS=0)

sudo lsof -T s -i :80 //顯示端口的狀態

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5604 www 16u IPv4 82923 0t0 TCP *:http (LISTEN)

查看某個文件的打開情況

sudo lsof /data/tomcat/

[sudo] password for wang:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 8743 root cwd DIR 8,8 4096 3014674 /www/data/tomcat

sudo lsof /dev/sda7 //某個文件系統的打開情況

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1818 root mem REG 8,7 32768 394070 /tmp/hsperfdata_root/1818

+d 選項

sudo lsof +d /data/tomcat/ //搜索/data/tomcat/ 目錄以及目錄下文件,目錄下目錄打開情況,不會搜索子目錄

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 3603 root cwd DIR 8,8 4096 3014674 /www/data/tomcat

-d 選項

sudo lsof -d 16 //查看16號FD的打開情況,因爲每個進程有自己獨立的文件描述符表。因此-d 16 會展示很多16號fd

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ntpd 553 ntp 16u IPv4 1954763371 0t0 UDP *:ntp
hald 1237 haldaemon 16r REG 0,3 0 4026531979 /proc/mdstat

+D 選項

sudo lsof +D /data/tomcat/ //查看/data/tomcat 以及所有子目錄文件的打開情況

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python 2806 root 6r REG 8,8 159675 3024730 /www/data/tomcat/logs/bigdata.log
java 8743 root cwd DIR 8,8 4096 3014674 /www/data/tomcat
java 8743 root mem REG 8,8 124266 3015949 /www/data/tomcat/lib/jasper-e

-a 選項 多個條件AND

sudo lsof -i 4 -a -p 32463 //顯示32463這個進程打開Ipv4的網絡端口文件情況

-U 顯示所有Unix domain sockets相關情況

sudo lsof -U //顯示所有Unix domain sockets 這是一種特殊的本機內進程通訊方式

sudo 1808 root 4u unix 0xffff88032a858d80 0t0 2191544754 socket
java 2545 root 48u unix 0xffff8802f487cec0 0t0 3146212706 socket
sudo 2697 root 4u unix 0xffff88010cadf7c0 0t0 841102828 socket
java 2698 root 26u unix 0xffff88032a859740 0t0 841102853 socket
java 2698 root 36u unix 0xffff88042b642f40 0t0 841102861 socket
nginx 3096 www 17u unix 0xffff880429f07400 0t0 4166624772 socket

sudo lsof -U -a -c java //顯示所有COMMAND中含有java,同時是Unix domain sockets的文件打開方式

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 2545 root 48u unix 0xffff8802f487cec0 0t0 3146212706 socket
java 2698 root 26u unix 0xffff88032a859740 0t0 841102853 socket
java 2698 root 36u unix 0xffff88042b642f40 0t0 841102861 socket
java 3241 root 53u unix 0xffff8802fe1cbac0 0t0 3920291480 socket
java 3241 root 172u unix 0xffff8802fe1ca740 0t0 3920299347 socket
java 3865 root 26u unix 0xffff88019c8c8c00 0t0 841135846 socket
java 3865 root 37u unix 0xffff88022c3f9500 0t0 841136956 socket

-l 選項,展示USER ID, 不展示具體用戶名,輔助選項

sudo lsof -l -i :80 // -l USER這一列只展示ID,不展示具體的用戶名

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5604 514 16u IPv4 82923 0t0 TCP *:http (LISTEN)
nginx 5605 514 16u IPv4 82923 0t0 TCP *:http (LISTEN)

-n 選項,展示主機ip而不是主機名,輔助選項

sudo lsof -n -i [email protected] //展示把主機ip而不是主機名1

redis-ser 6418 root 3231u IPv4 871410697 0t0 TCP 192.168.20.30:6380->192.168.20.31:30085 (ESTABLISHED)

-o 選項,把SIZE/OFF 換成OFFSET,輔助選項

sudo lsof -o +d /data/tomcat/ //把SIZE/OFF 換成OFFSET

COMMAND PID USER FD TYPE DEVICE OFFSET NODE NAME
java 3603 root cwd DIR 8,8 3014674 /www/data/tomcat

-P 選項,實現端口數字,而不是端口含義,輔助選項

sudo lsof -P -i :80 //-P 直接顯示端口號,而不是端口含義

-r 選項,每隔多少秒顯示一次,輔助選項

sudo lsof -i :80 -r 3 //每隔3秒顯示一次lsof -i :80,直到ctrl+c 退出

+r 選項,每隔多少秒顯示一次,輔助選項

sudo lsof -i :80 +r 3 //每隔3秒顯示一次lsof -i :80 直到lsof中沒有數據了,或ctrl+c退出

-s 選項,SIZE/OFF 只展示SIZE 輔助選項

sudo lsof -s -p 32463 // -s SIZE/OFF 只展示SIZE

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章