【工具】lsof 的使用
(list open files) 是一個列出當前系統開啟檔案的工具!
原理:
在linux環境下,任何事物都以檔案的形式存在,系統在後臺都為應用程式分配了一個對應的檔案描述符,該檔案描述符為應用程式與基礎作業系統之間的互動提供了通用介面。因此透過lsof工具能夠檢視應用程式開啟檔案的描述符列表,以便檢視應用程式的資訊!
用法以及含義:
losf 的語法:
lsof [options] filename
如果不使用引數的話,預設顯示所有程式開啟的所有檔案。
[root@rac3 ~]# lsof | more
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,3 4096 2 /
init 1 root rtd DIR 8,3 4096 2 /
init 1 root txt REG 8,3 43496 2450664 /sbin/init
init 1 root mem REG 8,3 95464 1764613 /lib64/libselinux.so.1
init 1 root 10u FIFO 0,17 1204 /dev/initctl
migration 2 root cwd DIR 8,3 4096 2 /
migration 2 root rtd DIR 8,3 4096 2 /
migration 2 root txt unknown /proc/2/exe
rpc.statd 2567 root 0u CHR 1,3 1432 /dev/null
sdpd 2643 root 2u CHR 1,3 1432 /dev/null
oracle 10970 oracle 17u IPv6 21324 UDP rac3:30005
sdpd 2643 root 4u sock 0,5 7350 can t identify protocol
sdpd 2643 root 5u unix 0xffff81012e52e380 7358 /var/run/sdp
rpc.statd 2567 root 4w FIFO 0,6 7128 pipe
rpc.statd 2567 root 5u unix 0xffff81013f84cb80 7131 socket
rpc.statd 2567 root 7u IPv4 7218 TCP *:3com-amp3 (LISTEN)
lsof輸出各列資訊的意義如下:
COMMAND:程式的名稱!
PID: 程式識別符號!
USER: 程式所有者!
FD: 檔案描述符,應用程式透過檔案描述符識別該檔案。如cwd、txt等!
TYPE: 檔案型別,如DIR、REG,MEM等!
DEVICE: 指定磁碟的名稱!
SIZE: 檔案的大小!
NODE: 索引節點(檔案在磁碟上的標識)!
NAME: 開啟的檔名稱 !
FD 列中的檔案描述符意義:
cwd 表示應用程式的當前工作目錄,也是該應用程式啟動的目錄,除非它本身對這個目錄進行更改。
txt 表示該型別的檔案是程式程式碼,如應用程式二進位制檔案本身或共享庫,如上列表中顯示的/sbin/init程式。
數值 表示應用程式的檔案描述符,開啟該檔案時返回的整數。如上的最後一行檔案/dev/initctl,其檔案描述符為 10;/dev/null的描述符為2!
u 表示該檔案被開啟並處於讀取/寫入模式,而不是隻讀(r)或只寫(w)模式。大寫的W表示該應用程式具有對整個檔案的寫鎖。該檔案描述符用於確保每次只能開啟一個應用程式例項!
初始開啟每個應用程式時,都具有三個檔案描述符,從0到2,分別表示標準輸入、輸出和錯誤流。所以大多數應用程式所開啟的檔案的FD都是從3開始。
Type 列中的檔案描述符意義:
REG 表示檔案
DIR 表示目錄
CHR 表示字元裝置
BLK 表示和塊裝置
UNIX 表示UNIX 域套接字
FIFO 表示先進先出(FIFO)佇列
IPv4 表示網際協議(IP)套接字。
瞭解了lsof的原理,那losf到底有什麼用呢?下面介紹losf的用處
1 檢視埠的使用 比如1521,檢視有多少機器建立了與當前機器oracle資料庫的連線!
oracle@rac3:/home/oracle>lsof -i :1521 | more
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
oracle 329 oracle 13u IPv4 6167257 TCP dba-host1.hz.ali.com:1521->10.250.3.44:44782 (ESTABLISHED)
oracle 331 oracle 15u IPv4 6167274 TCP dba-host1.hz.ali.com:1521->10.250.3.56:45332 (ESTABLISHED)
oracle 515 oracle 15u IPv4 6167700 TCP dba-host1.hz.ali.com:1521->10.250.3.47:43180 (ESTABLISHED)
oracle 1436 oracle 15u IPv4 6169854 TCP dba-host1.hz.ali.com:1521->10.249.196.131:39527 (ESTABLISHED)
oracle 1468 oracle 15u IPv4 6169968 TCP dba-host1.hz.ali.com:1521->10.250.3.34:52021 (ESTABLISHED)
oracle 1470 oracle 15u IPv4 6169977 TCP dba-host1.hz.ali.com:1521->10.250.3.34:52022 (ESTABLISHED)
檢視mysql的3306 rac3-->rac4 是一個主從架構
[root@rac3 ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mysqld 3181 mysql 12u IPv6 8063 TCP *:mysql (LISTEN)
mysqld 3181 mysql 39u IPv6 8070 TCP rac3:mysql->rac4:36554 (ESTABLISHED)
2 檢視某個使用者開啟的型別mem的檔案:
[root@rac3 ~]# lsof -a -u oracle -d mem | more
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bash 9625 oracle mem REG 8,3 139416 1764595 /lib64/ld-2.5.so
bash 9625 oracle mem REG 8,3 1713160 1764596 /lib64/libc-2.5.so
bash 9625 oracle mem REG 8,3 23360 1764602 /lib64/libdl-2.5.so
bash 9625 oracle mem REG 8,3 15584 1764624 /lib64/libtermcap.so.2.0.8
bash 9625 oracle mem REG 8,3 53880 1764315 /lib64/libnss_files-2.5.so
bash 9625 oracle mem REG 8,3 56462864 4447583 /usr/lib/locale/locale-archive
bash 9625 oracle mem REG 8,3 25464 4541667 /usr/lib64/gconv/gconv-modules.cache
oracle 10970 oracle mem REG 0,20 16777216 21166 /dev/shm/ora_yangdb_98305_0
oracle 10970 oracle mem REG 0,20 0 21167 /dev/shm/ora_yangdb_98305_1
oracle 10970 oracle mem REG 0,20 0 21168 /dev/shm/ora_yangdb_98305_2
oracle 10970 oracle mem REG 0,20 0 21169 /dev/shm/ora_yangdb_98305_3
...省略...
3 檢視那些程式在使用某個檔案:
[root@rac3 ~]# lsof /opt/mysql/data/
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mysqld 3181 mysql cwd DIR 8,3 4096 2842467 /opt/mysql/data/
4 恢復誤刪除的檔案:
os 原理:
當程式開啟了某個檔案時,只要該程式保持開啟該檔案,即使將其刪除,它依然存在於磁碟中。這意味著,程式並不知道檔案已經被刪除,它仍然可以向開啟該檔案時提供給它的檔案描述符進行讀取和寫入。除了該程式之外,這個檔案是不可見的,因為已經刪除了其相應的目錄索引節點。
在/proc 目錄下,其中包含了反映核心和程式樹的各種檔案。/proc目錄掛載的是在記憶體中所對映的一塊區域,所以這些檔案和目錄並不存在於磁碟中,因此當我們對這些檔案進行讀取和寫入時,實際上是在從記憶體中獲取相關資訊。
大多數與lsof相關的資訊都儲存於以程式的PID命名的目錄中,即/proc/123中包含的是 PID為123的程式的資訊。
這裡引用一個kamus的文章《》,此文比較詳細的介紹了具體的恢復步驟,同時也告訴我們對於資料庫的操作一定要謹慎小心!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-714321/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【lsof】使用lsof獲得打來 1521埠的程式清單
- linux下的一個診斷分析工具lsof(轉)Linux
- fuser與lsof命令使用簡介
- 使用lsof恢復誤刪除的檔案
- 使用 lsof 查詢開啟的檔案(轉)
- lsof 命令
- lsof命令
- 使用 lsof 查詢開啟的檔案 (ibm)IBM
- solaris下使用lsof恢復刪除的檔案
- ZT:使用lsof恢復誤刪除的檔案
- Linux下使用lsof恢復刪除的檔案Linux
- Linuxt恢復誤刪內容:命令lsof、extundelete工具Linuxdelete
- lsof 詳解
- lsof簡介
- Linux命令--lsofLinux
- lsof命令簡介
- lsof命令詳解
- lsof命令小結
- Linux lsof命令如何使用?其作用是什麼?Linux
- Unix 高階使用者命令 lsof 和 fuser (zt)
- lsof恢復誤刪的檔案
- Unix除錯的瑞士軍刀:lsof除錯
- Linux 有用的命令之 - lsof(轉)Linux
- Linux lsof詳解Linux
- lsof命令功能說明
- lsof for aix下載地址AI
- Linux lsof命令解析Linux
- lsof命令學習筆記筆記
- linux沒有lsof命令Linux
- 每日Linux命令(4):lsofLinux
- 【系統】lsof命令簡介
- linux lsof命令詳解Linux
- 【系統】lsof 命令簡介
- Linux lsof 命令簡介Linux
- linux每日命令(39):lsof命令Linux
- Linux-lsof命令詳解Linux
- 還在佔用儲存的程式lsof grep deleted;delete
- lsof |grep deleted 釋放磁碟空間delete