99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

linux lsof 命令如何使用?

發(fā)布時間:2017-05-21 22:56  回復(fù):0  查看:2113   最后回復(fù):2017-05-21 22:56  
本文和大家分享的主要是linux系統(tǒng)中l(wèi)sof 命令的使用相關(guān)內(nèi)容,一起來看看吧,希望對大家 學(xué)習(xí)linux有所幫助。
  lsof 是 list open files 的簡稱,正如名字所示,它的作用主要是列出系統(tǒng)中打開的文件。乍看起來,這是個功能非常簡單,使用場景不多的命令,不過是 ls 的另一個版本。但是因為 unix 系統(tǒng)的 everything is a file 的哲學(xué),基本上 *nix 系統(tǒng)所有的對象都可以看做對象,再加上這個命令提供的各種參數(shù),使得它其實非常強(qiáng)大,能夠輕松地獲得很多非常有用的信息,有些用其他工具會非常麻煩。
  lsof 可以知道用戶和進(jìn)程操作了哪些文件,也可以查看系統(tǒng)中網(wǎng)絡(luò)的使用情況,以及設(shè)備的信息。它的參數(shù)也非常多,manoage 顯示的使用方法如下,這篇文章會介紹比較常見的使用方法。
  lsof  [ -?abChKlnNOPRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D D ] [ +|-e s ] [ +|-f [cfgGn] ] [ -F [f] ] [ -g  ] [ -i  ] [ -k k ] [ +|-L [l] ] [ +|-m m ] [
  +|-M ] [ -o [o] ] [ -p s ] [ +|-r [t[m]] ] [ -s [p:s] ] [ -S [t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -x [fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [names]
  直接運(yùn)行 lsof ,不使用任何的參數(shù),會列出系統(tǒng)中所有的打開文件,每個文件一行。
  ?  —— sudo lsof | head
  COMMAND     PID   TID             USER   FD      TYPE             DEVICE    SIZE/OFF       NODE NAME
  systemd       1                   root  cwd       DIR               8,18        4096          2 /
  systemd       1                   root  rtd       DIR               8,18        4096          2 /
  systemd       1                   root  txt       REG               8,18     1577232    5247327 /lib/systemd/systemd
  systemd       1                   root  mem       REG               8,18       18976    5247628 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
  systemd       1                   root  mem       REG               8,18      262408    5247436 /lib/x86_64-linux-gnu/libblkid.so.1.1.0
  systemd       1                   root  mem       REG               8,18       14608    5250746 /lib/x86_64-linux-gnu/libdl-2.23.so
  上面的輸入每列的內(nèi)容分別是:命令名稱,進(jìn)程 id、用戶名、FD、文件類型、文件所在的設(shè)備、文件大小或者所在設(shè)備的偏移量、node/inode 編號、文件名。我們來介紹一下幾個比較不那么容易理解的項,F(xiàn)D(file descriptor)表示文件描述符或者文件的描述,包括:
  · cwd:當(dāng)前工作目錄
  · mem:內(nèi)存映射文件
  · mmap:內(nèi)存映射設(shè)備
  · txt:應(yīng)用文本(代碼和數(shù)據(jù))
  · ……
  TYPE 表示文件的類型,比如:
  · IPv4:IPv4 socket
  · IPv6:IPv6 socket
  · inet:Internet Domain Socket
  · unix:unix domain socket
  · BLK:設(shè)備文件
  · CHR:字符文件
  · DIR:文件夾
  · FIFO:FIFO 文件
  · LINK:符號鏈接文件
  · REG:普通文件
  · ……
  更多的選項可以參考 lsof manpage。
  NOTE: 請使用 sudo 或者 root 用戶來運(yùn)行 lsof ,以便查看所有的打開文件。
  文件和進(jìn)程信息
  列出某個進(jìn)程打開的所有文件
  sudo lsof -p 1190
  列出某個用戶打開的文件
  sudo lsof -u cizixs
  也可以取反,列出所有不是某個用戶打開的文件,只要在用戶名之前加上 ^ 符號:
  sudo lsof -u ^cizixs
  列出某個文件被哪些進(jìn)程打開(使用)
  sudo lsof /path/to/file
  列出訪問某個目錄的所有進(jìn)程
  sudo lsof +d /path/to/dir/
  這個命令并不會遞歸地去訪問子目錄,如果想做到這一點(diǎn),可以使用 +D :
  sudo ls +D /var/log/apache/
  列出某個命令使用的文件信息
  sudo lsof -c nginx
  -c 參數(shù)后面跟著命令的開頭字符串,不一定是具體的程序名稱,比如 sudo lsof -c n 也是合法的,會列出所有名字開頭字母是 n 的程序打開的文件信息。
  這個命令雖然沒有 -p 查看某個進(jìn)程更直接,但是對于不能直接查到進(jìn)程號,或者程序包含多個進(jìn)程的場景還是有用的。
  網(wǎng)絡(luò)信息
  lsof 另一個比較常用的功能是查看網(wǎng)絡(luò)信息,雖然有 netstat 這個專門的工具,但是 lsof有時候會更方便,比如查看某個端口的使用情況。
  列出所有的網(wǎng)絡(luò)連接信息
  sudo lsof -i
  只顯示 TCP 或者 UDP 連接
  在 -i 后面直接跟著協(xié)議的類型(TCP 或者 UDP)就能只顯示該網(wǎng)絡(luò)協(xié)議的連接信息:
  sudo lsof -i TCP
  查看某個端口的網(wǎng)絡(luò)連接情況
  這個命令非常常用,一般要運(yùn)行服務(wù)的時候發(fā)現(xiàn)網(wǎng)絡(luò)沖突,或者需要了解某個端口被哪個進(jìn)程使用的時候非常方便:
  sudo lsof -i :80
  查看連接到某個主機(jī)的網(wǎng)絡(luò)情況
  sudo lsof -i @172.16.1.14
  端口和主機(jī)還可以放在一起使用,表示連接到某個主機(jī)特定端口的網(wǎng)絡(luò)情況:
  sudo lsof -i @172.16.1.14:22
  列出當(dāng)前機(jī)器監(jiān)聽的端口
  sudo lsof -i -s TCP:LISTEN
  -s p:s 參數(shù)跟著兩個字段:協(xié)議和狀態(tài),中間用冒號隔開。比如這里 TCP:LISTEN 表示處于監(jiān)聽狀態(tài)的 TCP 協(xié)議,類似的,你也可以查看處于已連接的 TCP 網(wǎng)絡(luò):
  sudo lsof -i -s TCP:ESTABLISHED
  組合用法
  lsof 的過濾參數(shù)是可以組合起來的,但是默認(rèn)情況下是 OR 邏輯,也就是會列出所有過濾條件的總和??梢允褂?-a 參數(shù)告訴 lsof 列出同時滿足所有條件的結(jié)果,比如列出某個進(jìn)程監(jiān)聽的所有網(wǎng)絡(luò)連接:
  sudo lsof -a -p 12345 -i -s TCP:LISTEN
  來源:Cizixs Writes Here
您還未登錄,請先登錄

熱門帖子

最新帖子

?