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 threadlinux-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)?
總結
以上是生活随笔為你收集整理的linux常用命令之lsof 、netstat、ipcs、ldd的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MP4大文件虚拟HLS分片技术,避免服务
- 下一篇: 如何理解Generator