作者介紹:簡歷上沒有一個精通的運維工程師。請點擊上方的藍色《運維小路》關注我,下面的思維導圖也是預計更新的內容和當前進度(不定時更新)。
在上一章節中,我們詳細講解了linux系統自帶的日志服務,幫助大家對其有了初步的了解。接下來,我們將深入探討一些進階命令,這些命令涵蓋了系統操作、系統查看和處理、Linux文本處理、邏輯判斷、重定向、網絡傳輸、服務啟動、文件句柄等方面。通過學習這些操作,您將能夠更加靈活地操作Linux系統。具體內容將分為以下章節進行講解:
Linux進階命令-top
Linux進階命令-ps&kill
Linux進階命令-sort&wc
Linux進階命令-sed&split
Linux進階命令-awk&uniq
Linux進階命令-邏輯或&邏輯與
Linux進階命令-重定向
Linux進階命令-scp
Linux進階命令-rsync
Linux進階命令-rsync-daemon
Linux進階命令-nohup&screen
Linux進階命令-lsof(本章節)
Linux進階命令-小結
在介紹Linux入門-Linux目錄時,我們提到過,Linux系統中一切皆文件;在講解Linux基礎軟件-庫文件時,我們也提到,庫文件實際上是系統自帶的一些函數的集合,普通應用程序通過調用這些函數來實現對文件的增刪查改等操作。同樣,在Linux中有一個命令lsof,可以用來顯示所有打開的文件。這個命令與ps命令類似,ps用于查看所有進程,而lsof則用于查看所有打開的文件。
lsof
lsof是一個在類unix操作系統中用于列出打開文件的工具。這個命令的名字源自“list open files”的縮寫。在Unix和類Unix系統中,文件不僅僅指的是磁盤上的文件,還包括各種類型的文件,如目錄、設備、管道、套接字等。使用lsof命令,您可以查看哪些進程打開了哪些文件,以及這些文件的狀態。
在最小化安裝的情況下,lsof命令通常不會自帶,需要手動安裝。
yum -y install lsof
常用選項和用法
- 列出所有打開的文件
lsof
這個命令將列出系統中所有打開的文件和相關的進程信息,但由于信息量巨大,通常不具備參考意義,除非用于過濾和搜索。
- 根據文件名查找
lsof /path/to/file
顯示哪個進程打開了指定路徑的文件。
- 根據進程ID查找
lsof -p <pid>
顯示指定進程ID打開的所有文件。在實際應用中,如果某些應用程序找不到它們使用的配置或日志文件,可以通過這種方式找到它們所使用的配置或日志文件。
- 根據用戶查找
lsof -u <username>
顯示由指定用戶打開的所有文件。
- 根據端口查找
lsof -i :<port>
顯示所有使用指定端口的網絡連接和進程,可以替代netstat和ss命令的部分功能。
- 查看網絡文件
lsof -i
列出所有網絡連接和相關的進程,相當于ss和netstat命令。
- 查看目錄文件
lsof +D /usr
列出該目錄下被打開的文件。
- 檢查是否有刪除的文件仍然被打開
lsof | grep '(deleted)'
顯示那些被刪除的文件仍然被進程打開,因此某些未確定的大文件可以通過Linux進階命令-重定向的方式來釋放空間。
COMMAND:啟動文件的命令名。PID:進程ID。TID:線程ID(對于多線程進程)。USER:打開文件的用戶。FD:文件描述符,指示文件在進程中的訪問方式。TYPE:文件類型(如REG表示常規文件,DIR表示目錄,CHR表示字符設備等)。DEVICE:設備號,標識文件所在的設備。SIZE/OFF:文件大小或偏移量。NODE:文件的節點號。NAME:文件的名稱或路徑。
總結
lsof最常用的可能是找出刪除文件而空間未釋放的問題,也就是第八個用法。當然,這個時候文件仍然可以恢復,具體內容將在講解proc時詳細說明。