1. 程式人生 > >常用命令lsof netstat 介紹

常用命令lsof netstat 介紹

註釋:在linux下一切皆檔案,包括磁碟 tty 串列埠,包括硬體裝置,套介面;

既然linux下一切都是以檔案形式存在,那我們是不是可以通過訪問檔案來檢視資料以及網路連線以及tcp和udp等socket套接字;

系統在後臺會為每個應用程式分配一個檔案描述符,檔案描述符為應用程式和作業系統交換提供介面,應用程式在開啟檔案的描述符列表提供了一些應用程式的資訊;

lsof  (list   openfile)      列出開啟檔案; 

註釋:losf  會訪問linux核心檔案以及記憶體,所以一般需要使用root使用者的許可權;

losf     選項

註釋:每行會顯示一個開啟的檔案,若直接輸入  losf  ,不指定任何選項會顯示所有程序開啟的所有檔案;

常用的選項如下;

lsof   /filename        檢視當前誰正在使用這個檔案;  如:   lsof    /root

lsof  +D   /root           可以遞迴檢視某個目錄下的目錄;

 

 

(1):lsof預設選項:如下顯示;

COMMAND       PID           TID          USER       FD              TYPE                DEVICE      SIZE/OFF              NODE                       NAME

程序名稱           程序ID      執行緒ID        使用者     檔案描述符      型別            指定磁碟的名稱      檔案大小    索引階段                  開啟檔案的名稱

[root@localhost_002 ~]# lsof |head -n10
COMMAND    PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd      1         root  cwd       DIR                8,3       268         64 /
systemd      1         root  rtd       DIR                8,3       268         64 /
systemd      1         root  txt       REG                8,3   1523568     279801 /usr/lib/systemd/systemd
systemd      1         root  mem       REG                8,3     20040      60007 /usr/lib64/libuuid.so.1.3.0
systemd      1         root  mem       REG                8,3    261336     190815 /usr/lib64/libblkid.so.1.1.0
systemd      1         root  mem       REG                8,3     90664      59990 /usr/lib64/libz.so.1.2.7
systemd      1         root  mem       REG                8,3    157424      59996 /usr/lib64/liblzma.so.5.2.2
systemd      1         root  mem       REG                8,3     23968      60084 /usr/lib64/libcap-ng.so.0.0.0
lsof      1704         root    2u      CHR              136,0       0t0          3 /dev/pts/0
pickup    1696      postfix    7u     unix 0xffff88003a44dc00       0t0      31732 socket
pickup    1696      postfix   92w     FIFO                0,8       0t0      18922 pipe

註釋: FD:檔案描述符; 

cwd(應用程式在那個目錄啟動的)     

txt(txt型別是程式程式碼,應用程式本身或者共享庫 如/sbin/init)

2u:表示檔案描述符是2,  該檔案處於讀取/寫入模式       

w:表示只寫模式;               

W:表示該程式對真個應用程式可寫;

  type:型別;DIR(目錄)     REG(檔案)          CHR(字元)      BLK(塊裝置)        unix(域套接字)    FIFO(先進先出)

(2):       lsof    /root             檢視當前誰正在使用/root這個檔案;

[root@localhost_002 ~]# lsof /root
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
bash    1198 root  cwd    DIR    8,3     4096 33574977 /root
bash    1242 root  cwd    DIR    8,3     4096 33574977 /root
bash    1624 root  cwd    DIR    8,3     4096 33574977 /root
vim     1725 root  cwd    DIR    8,3     4096 33574977 /root
lsof    1744 root  cwd    DIR    8,3     4096 33574977 /root
lsof    1745 root  cwd    DIR    8,3     4096 33574977 /root

(3):lsof  +D   /root           可以遞迴檢視某個目錄下的目錄有誰在使用;

[root@localhost_002 ~]# lsof +D /root
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
bash    1198 root  cwd    DIR    8,3     4096 33574977 /root
bash    1242 root  cwd    DIR    8,3     4096 33574977 /root
bash    1624 root  cwd    DIR    8,3     4096 33574977 /root
vim     1725 root  cwd    DIR    8,3     4096 33574977 /root
vim     1725 root    4u   REG    8,3    16384 37237431 /root/.2.txt.swp
lsof    1756 root  cwd    DIR    8,3     4096 33574977 /root
lsof    1757 root  cwd    DIR    8,3     4096 33574977 /root

註釋:如上圖例,檢視到/root/.2.txt.swp的;因為我剛剛在另外一個終端編輯過這個檔案;