shell進階之tree、pstree、lsof命令詳解


一、tree命令詳解:

主要功能是創建文件列表,將所有文件以樹的形式列出來

-a 顯示所有文件和目錄。

-A 使用ASNI繪圖字符顯示樹狀圖而非以ASCII字符組合。

-C 在文件和目錄清單加上色彩,便於區分各種類型。

-d 顯示目錄名稱而非內容。

-D 列出文件或目錄的更改時間。

-f 在每個文件或目錄之前,顯示完整的相對路徑名稱。

-F 在執行文件,目錄,Socket,符號連接,管道名稱名稱,各自加上"*","/","=","@","|"號。

-g 列出文件或目錄的所屬群組名稱,沒有對應的名稱時,則顯示群組識別碼。

-i 不以階梯狀列出文件或目錄名稱。

-I 不顯示符合范本樣式的文件或目錄名稱。

-l 如遇到性質為符號連接的目錄,直接列出該連接所指向的原始目錄。

-n 不在文件和目錄清單加上色彩。

-N 直接列出文件和目錄名稱,包括控制字符。

-p 列出權限標示。

-P 只顯示符合范本樣式的文件或目錄名稱。

-q "?"號取代控制字符,列出文件和目錄名稱。

-s 列出文件或目錄大小。

-t 用文件和目錄的更改時間排序。

-u 列出文件或目錄的擁有者名稱,沒有對應的名稱時,則顯示用戶識別碼。

-x 將范圍局限在現行的文件系統中,若指定目錄下的某些子目錄,其存放於另一個文件系統上,則將該子目錄予以排除在尋找范圍外。

二、pstree命令詳解

pstree命令是用於查看進程樹之間的關系,即哪個進程是父進程,哪個是子進程,可以清楚的看出來是誰創建了誰

pstree命令以樹狀圖顯示進程間的關系(display a tree of processes)。ps命令可以顯示當前正在運行的那些進程的信息,但是對於它們之間的關系卻顯示得不夠清晰。在Linux系統中,系統調用fork可以創建子進程,通過子shell也可以創建子進程,Linux系統中進程之間的關系天生就是一棵樹,樹的根就是進程PID1init進程。

幾個重要的參數:

-A: 各進程樹之間的連接以ASCII碼字符來連接

-U:各進程樹之間的連接以utf8字符來連接,某些終端可能會有錯誤

-p:同時列出每個進程的PID

-u: 同時列出每個進程的所屬賬號名稱:

例子1:以樹狀圖只顯示進程的名字,且相同進程合並顯示:

格式:pstree

例子2:以樹狀圖顯示進程同時還顯示PID

格式:pstree -p

例子3:以樹狀圖顯示進程PID<pid>的進程以及子孫進程,如果有-p參數則同時顯示每個進程的PID

格式:pstree [-p] <pid>

[root@localhost ~]# pstree 2500

mysqld_safe───mysqld───22*[{mysqld}]

[root@localhost ~]# pstree -p 2500

例子4:以樹狀圖顯示進程,相同名稱的進程不合並顯示,並且會顯示命令行參數,如果有-p參數則同時顯示每個進程的PID

格式:pstree -a

注:因為pstree輸出的信息可能比較多,所以最好與more/less配合使用,使用上下箭頭查看,按q退出。

[root@localhost ~]# pstree -p | less

三、lsof命令

lsof(list open files)是一個列出當前系統打開文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件。所以如傳輸控制協議 (TCP) 和用戶數據報協議 (UDP) 套接字等,系統在后台都為該應用程序分配了一個文件描述符,無論這個文件的本質如何,該文件描述符為應用程序與基礎操作系統之間的交互提供了通用接口。因為應用程序打開文件的描述符列表提供了大量關於這個應用程序本身的信息,因此通過lsof工具能夠查看這個列表對系統監測以及排錯將是很有幫助的。

1.列出所有打開的文件:

lsof

備注: 如果不加任何參數,就會打開所有被打開的文件,建議加上一下參數來具體定位

2. 查看誰正在使用某個文件

lsof   /filepath/file

3.遞歸查看某個目錄的文件信息

lsof +D /filepath/filepath2/

備注: 使用了+D,對應目錄下的所有子目錄和文件都會被列出

4. 比使用+D選項,遍歷查看某個目錄的所有文件信息 的方法

lsof | grep ‘/filepath/filepath2/’

5. 列出某個用戶打開的文件信息

lsof  -u username

備注: -u 選項,u其實是user的縮寫

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

lsof -c mysql

備注: -c 選項將會列出所有以mysql開頭的程序的文件,其實你也可以寫成lsof | grep mysql,但是第一種方法明顯比第二種方法要少打幾個字符了

7. 列出多個程序多打開的文件信息

lsof -c mysql -c apache

8. 列出某個用戶以及某個程序所打開的文件信息

lsof -u test -c mysql

9. 列出除了某個用戶外的被打開的文件信息

lsof   -u ^root

備注:^這個符號在用戶名之前,將會把是root用戶打開的進程不讓顯示

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

lsof -p 1

11. 列出多個進程號對應的文件信息

lsof -p 123,456,789

12. 列出除了某個進程號,其他進程號所打開的文件信息

lsof -p ^1

13 . 列出所有的網絡連接

lsof -i

14. 列出所有tcp 網絡連接信息

lsof  -i tcp

15. 列出所有udp網絡連接信息

lsof  -i udp

16. 列出誰在使用某個端口

lsof -i :3306

17. 列出誰在使用某個特定的udp端口

lsof -i udp:55

特定的tcp端口

lsof -i tcp:80

18. 列出某個用戶的所有活躍的網絡端口

lsof  -a -u test -i

19. 列出所有網絡文件系統

lsof -N

20.域名socket文件

lsof -u

21.某個用戶組所打開的文件信息

lsof -g 5555

22. 根據文件描述列出對應的文件信息

lsof -d description(like 2)

23. 根據文件描述范圍列出文件信息

lsof -d 2-3


免責聲明!

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



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