linux常用命令之lsof 、netstat、ipcs、ldd


一、lsof

lsof(list open files)是一個列出當前系統打開文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件。每行顯示一個打開的文件,若不指定條件默認將顯示所有進程打開的所有文件。lsof輸出各列信息的意義如下:

#COMMAND:進程的名稱
#PID:進程標識符
#USER:進程所有者
#FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等
#TYPE:文件類型,如DIR、REG等
#DEVICE:指定磁盤的名稱
#SIZE:文件的大小
#NODE:索引節點(文件在磁盤上的標識)
#NAME:打開文件的確切名稱

 

lsof常用參數

lsof abc.txt 顯示開啟文件abc.txt的進程
lsof -c abc 顯示abc進程現在打開的文件
lsof -c -p 1234 列出進程號為1234的進程所打開的文件
lsof -g gid 顯示歸屬gid的進程情況
lsof +d /usr/local/ 顯示目錄下被進程開啟的文件
lsof +D /usr/local/ 同上,但是會搜索目錄下的目錄,時間較長
lsof -d 4 顯示使用fd為4的進程

 

1.1   字段說明

其中FD 列中的文件描述符

cwd   值表示應用程序的當前工作目錄,這是該應用程序啟動的目錄,除非它本身對這個目錄進行更改。

txt      類型的文件是程序代碼,如應用程序二進制文件本身或共享庫,如上列表中顯示的 /sbin/init 程序。其次數值表示應用程序的文件描述符,這是打開該文件時返回的一個整數。如上的最后一行文件/dev/initctl,其文件描述符為10。

u        表示該文件被打開並處於讀取/寫入模式,而不是只讀 ® 或只寫 (w) 模式。同時還有大寫 W 表示該應用程序具有對整個文件的寫鎖。該文件描述符用於確保每次只能打開一個應用程序實例。初始打開每個應用程序時,都具有三個文件描述符,從 0 到 2,分別表示標准輸入、輸出和錯誤流。所以大多數應用程序所打開的文件的 FD 都是從 3 開始。與 FD 列相比,

 

Type 列則比較直觀。

文件和目錄分別稱為 REG 和 DIR。CHR 和 BLK,分別表示字符和塊設備;或者 UNIX、FIFO 和 IPv4,分別表示 UNIX 域套接字、先進先出 (FIFO) 隊列和網際協議 (IP) 套接字。

 

lsof 常見的用法是查找應用程序打開的文件的名稱和數目。可用於查找出某個特定應用程序將日志數據記錄到何處,或者正在跟蹤某個問題。

例如,linux限制了進程能夠打開文件的數目。通常這個數值很大,所以不會產生問題,並且在需要時,應用程序可以請求更大的值(直到某個上限)。

如果你懷疑應用程序耗盡了文件描述符,那么可以使用 lsof 統計打開的文件數目,以進行驗證。

lsof |wc -l

 

 1.2  常用例子說明

1)查找指定端口號的進程信息

-i  //顯示所有打開的端口
[ztao@MongoDB ~]$ lsof -i:6379
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 5341 ztao    4u  IPv6  23457      0t0  TCP *:6379 (LISTEN)
redis-ser 5341 ztao    5u  IPv4  23459      0t0  TCP *:6379 (LISTEN)
redis-ser 5341 ztao    6u  IPv4  23533      0t0  TCP localhost:6379->localhost:6633 (ESTABLISHED)
redis-ser 5341 ztao    7u  IPv4  23535      0t0  TCP localhost:6379->localhost:6634 (ESTABLISHED)
redis-ser 5341 ztao    8u  IPv4  23538      0t0  TCP localhost:6379->localhost:6635 (ESTABLISHED)
redis-ser 5341 ztao    9u  IPv4  23540      0t0  TCP localhost:6379->localhost:6636 (ESTABLISHED)
redis-ser 5341 ztao   10u  IPv4  23839      0t0  TCP localhost:6379->localhost:6747 (ESTABLISHED)
redis-ser 5341 ztao   11u  IPv4  23842      0t0  TCP localhost:6379->localhost:6748 (ESTABLISHED)
newsProvi 5349 ztao    6u  IPv4  23530      0t0  TCP localhost:6633->localhost:6379 (ESTABLISHED)
newsProvi 5349 ztao    7u  IPv4  23532      0t0  TCP localhost:6634->localhost:6379 (ESTABLISHED)
newsProvi 5349 ztao    8u  IPv4  23536      0t0  TCP localhost:6635->localhost:6379 (ESTABLISHED)
newsProvi 5349 ztao    9u  IPv4  23539      0t0  TCP localhost:6636->localhost:6379 (ESTABLISHED)
newsDistr 5456 ztao   12u  IPv4  23838      0t0  TCP localhost:6747->localhost:6379 (ESTABLISHED)
newsDistr 5456 ztao   13u  IPv4  23841      0t0  TCP localhost:6748->localhost:6379 (ESTABLISHED)

 

2. 列出某個程序所打開的文件信息

lsof -c mysql

備注: -c 選項將會列出所有以mysql開頭的程序的文件,

其實你也可以寫成 lsof | grep mysql, 但是第一種方法明顯比第二種方法要少打幾個字符了

 

3. 通過某個進程號顯示該進行打開的文件

lsof -p 1972

 

4.查找誰在使用某個文件

可以查看 在使用某個目錄的的程序的相關信息

這里可以看到  smbd(samba服務)在使用 /home/james目錄

[root@centos1 src]# lsof /home/james/

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME

smbd    1972 root  cwd    DIR  253,2     4096 2093057 /home/james

smbd    1975 root  cwd    DIR  253,2     4096 2093057 /home/james

nmbd    1981 root  cwd    DIR  253,2     4096 2093057 /home/james

smbd    6191 root  cwd    DIR  253,2     4096 2093057 /home/james

 

5、列出某個用戶打開的所有文件

[root@centos1 src]# lsof -u james

 

 

二、 IPCS

pcs是一個uinx/linux的命令。用於報告系統的消息隊列、信號量、共享內存等

ipcs -a  是默認的輸出信息 打印出當前系統中所有的進程間通信方式的信息

ipcs -m  打印出使用共享內存進行進程間通信的信息

ipcs -q   打印出使用消息隊列進行進程間通信的信息

ipcs -s  打印出使用信號進行進程間通信的信息 

 

 

ldd查看動態庫依賴

 

[ztteng@ztteng boost]$ ldd thread
        linux-gate.so.1 =>  (0x00151000)
        libboost_thread.so.1.55.0 => /usr/local/lib/libboost_thread.so.1.55.0 (0x009fe000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00cd7000)
        libm.so.6 => /lib/libm.so.6 (0x007d3000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00cb1000)
        libc.so.6 => /lib/libc.so.6 (0x0061d000)
        libboost_system.so.1.55.0 => /usr/local/lib/libboost_system.so.1.55.0 (0x00b0c000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x007b6000)
        librt.so.1 => /lib/librt.so.1 (0x00814000)
        /lib/ld-linux.so.2 (0x005f7000)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM