溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux中的lsof命令怎么用

發(fā)布時(shí)間:2022-01-21 09:25:58 來源:億速云 閱讀:226 作者:柒染 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Linux中的lsof命令怎么用,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

lsof 命令是 Linux 系統(tǒng)的擴(kuò)展工具,它的含義是 list opened filedesciptor (列出已經(jīng)打開的文件描述符),在 Linux 系統(tǒng)中,所有的與資源句柄相關(guān)的東西都可以統(tǒng)一抽象成文件描述符(filedescriptor,簡稱 fd)。一個(gè)文件句柄是一個(gè) fd,一個(gè) socket 對(duì)象也可以稱之為 fd 等等。
默認(rèn)情況下,系統(tǒng)是不存在這個(gè)命令的,你需要安裝一下,使用如下命令安裝:

yum install lsof

我們來看一下這個(gè)命令的使用效果:

COMMAND     PID   TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAMEsystemd       1          root  cwd       DIR              202,1      4096          2 /nscd        453   469    nscd    8u  netlink                          0t0      11017 ROUTEnscd        453   470    nscd  cwd       DIR              202,1      4096          2 /nscd        453   470    nscd  rtd       DIR              202,1      4096          2 /nscd        453   470    nscd  txt       REG              202,1    180272     146455 /usr/sbin/nscdnscd        453   470    nscd  mem       REG              202,1    217032     401548 /var/db/nscd/hostsnscd        453   470    nscd  mem       REG              202,1     90664     132818 /usr/lib64/libz.so.1.2.7nscd        453   470    nscd  mem       REG              202,1     68192     133155 /usr/lib64/libbz2.so.1.0.6nscd        453   470    nscd  mem       REG              202,1    153192     133002 /usr/lib64/liblzma.so.5.0.99nscd        453   470    nscd  mem       REG              202,1     91496     133088 nscd        453   471    nscd    5u  a_inode                0,9         0       4796 [eventpoll]nscd        453   471    nscd    6r      REG              202,1    217032     401548 /var/db/nscd/hostsnscd        453   471    nscd    7u     unix 0xffff880037497440       0t0      11015 /var/run/nscd/socketnscd        453   471    nscd    8u  netlink                          0t0      11017 ROUTEimgserver   611       zhangyl  cwd       DIR              202,1      4096    1059054 /home/zhangyl/flamingoserverimgserver   611       zhangyl  rtd       DIR              202,1      4096          2 /imgserver   611       zhangyl  txt       REG              202,1   4788917    1057044 /home/zhangyl/flamingoserver/imgserverimgserver   611       zhangyl   24u  a_inode                0,9         0       4796 [eventfd]imgserver   611       zhangyl   25u     IPv4           55707643       0t0        TCP *:commtact-http (LISTEN)imgserver   611       zhangyl   26r      CHR                1,3       0t0       4800 /dev/nullimgserver   611   613 zhangyl   32w      REG              202,1    131072    2754609 /home/zhangyl/flamingoserver/imgcache/258bfb8945288a117d98d440986d7a03

結(jié)果顯示中列出了各個(gè)進(jìn)程打開的各種 fd 類型,對(duì)于 Uinx Socket,lsof 命令會(huì)顯示出其詳細(xì)的路徑,打開的文件 fd 亦是如此。

使用 lsof 命令有三點(diǎn)需要注意:

  • 默認(rèn)情況下,lsof 的輸出比較多,我們可以使用 grep 命令過濾我們想要查看的進(jìn)程打開的 fd 信息,如:

    lsof -i | grep myapp

    或者使用 lsof -p pid 也能過濾出指定的進(jìn)程打開的 fd 信息:

    [root@iZ238vnojlyZ ~]# lsof -p 26621COMMAND     PID    USER   FD      TYPE   DEVICE SIZE/OFF    NODE NAMEchatserve 26621 zhangyl  cwd       DIR    202,1     4096 1059054 /home/zhangyl/flamingoserverchatserve 26621 zhangyl  rtd       DIR    202,1     4096       2 /chatserve 26621 zhangyl  txt       REG    202,1  8027035 1051942 /home/zhangyl/flamingoserver/chatserverchatserve 26621 zhangyl  mem       REG    202,1    61928  141417 /usr/lib64/libnss_files-2.17.sochatserve 26621 zhangyl  mem       REG    202,1    44096  143235 /usr/lib64/librt-2.17.sochatserve 26621 zhangyl  mem       REG    202,1    19520  137064 /usr/lib64/libdl-2.17.sochatserve 26621 zhangyl  mem       REG    202,1  2112384  132824 /usr/lib64/libc-2.17.sochatserve 26621 zhangyl  mem       REG    202,1   142304  132850 /usr/lib64/libpthread-2.17.sochatserve 26621 zhangyl  mem       REG    202,1    88720  135291 /usr/lib64/libgcc_s-4.8.5-20150702.so.1chatserve 26621 zhangyl  mem       REG    202,1  1141560  137077 /usr/lib64/libm-2.17.sochatserve 26621 zhangyl  mem       REG    202,1   999944  140059 /usr/lib64/libstdc++.so.6.0.19chatserve 26621 zhangyl  mem       REG    202,1  9879756  269001 /usr/lib64/mysql/libmysqlclient.so.20.3.4chatserve 26621 zhangyl  mem       REG    202,1   164440  133622 /usr/lib64/ld-2.17.sochatserve 26621 zhangyl    0u      CHR      1,3      0t0    4800 /dev/nullchatserve 26621 zhangyl    1u      CHR      1,3      0t0    4800 /dev/nullchatserve 26621 zhangyl    2u      CHR      1,3      0t0    4800 /dev/nullchatserve 26621 zhangyl    3u  a_inode      0,9        0    4796 [eventpoll]chatserve 26621 zhangyl    4u  a_inode      0,9        0    4796 [timerfd]chatserve 26621 zhangyl    5u  a_inode      0,9        0    4796 [eventfd]chatserve 26621 zhangyl    7u  a_inode      0,9        0    4796 [eventpoll]
  • lsof 命令只能查看到當(dāng)前用戶有權(quán)限查看到的進(jìn)程 fd 信息,對(duì)于其沒有權(quán)限的進(jìn)程,最右邊一列會(huì)顯示 “Permission denied”。如下所示:

    sshd      26759          root  cwd   unknown                              /proc/26759/cwd (readlink: Permission denied)sshd      26759          root  rtd   unknown                              /proc/26759/root (readlink: Permission denied)sshd      26759          root  txt   unknown                              /proc/26759/exe (readlink: Permission denied)sshd      26759          root NOFD                                        /proc/26759/fd (opendir: Permission denied)bash      26761          root  cwd   unknown                              /proc/26761/cwd (readlink: Permission denied)bash      26761          root  rtd   unknown                              /proc/26761/root (readlink: Permission denied)bash      26761          root  txt   unknown                              /proc/26761/exe (readlink: Permission denied)bash      26761          root NOFD                                        /proc/26761/fd (opendir: Permission denied)
  • lsof 命令第一欄進(jìn)程名在顯示的時(shí)候,默認(rèn)顯示前 n 個(gè)字符,這樣如果我們需要顯示完整的進(jìn)程名以方便過濾的話,可以使用 +c 選項(xiàng)。用法如下:

    #最左側(cè)的程序名最大顯示 15 個(gè)字符[zhangyl@iZ238vnojlyZ ~]$ lsof +c 15

    當(dāng)然,如果你設(shè)置值太大, lsof 便不會(huì)采用你設(shè)置的最大值,而是使用默認(rèn)最大值。

上文也介紹了,socket 也是一種 fd,如果需要僅顯示系統(tǒng)的網(wǎng)絡(luò)連接信息,使用的是 -i 選項(xiàng)即可,這個(gè)選項(xiàng)可以形象地顯示出系統(tǒng)當(dāng)前的出入連接情況:
Linux中的lsof命令怎么用

看到圖中的連接方向了吧?

當(dāng)然,和 netstat 命令一樣,lsof -i 默認(rèn)也會(huì)顯示 ip 地址和端口號(hào)的別名,我們只要使用 -n-P 選項(xiàng)就能相對(duì)應(yīng)地顯示 ip 地址和端口號(hào)了,綜合起來就是 lsof -Pni
Linux中的lsof命令怎么用

什么是Linux系統(tǒng)

Linux是一種免費(fèi)使用和自由傳播的類UNIX操作系統(tǒng),是一個(gè)基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),使用Linux能運(yùn)行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。

上述就是小編為大家分享的Linux中的lsof命令怎么用了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI