lsof(list open files)是一個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連接和硬體。
在終端下輸入lsof即可顯示系統開啟的檔案,因為 lsof 需要訪問核心記憶體和各種檔案,所以必須以 root 使用者的身份運行它才能夠充分地發揮其功能。
[root@master ~]# lsof -p 22529
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 22529 hadoop cwd DIR 8,3 4096 68255745 /home/hadoop/hadoop-1.0.3
java 22529 hadoop rtd DIR 8,3 4096 2 /
java 22529 hadoop txt REG 8,3 270055 62390291 /home/hadoop/jrockit-jdk1.6.0_29/bin/java
java 22529 hadoop mem REG 8,3 144776 19431601 /lib64/ld-2.5.so
java 22529 hadoop mem REG 8,3 1726320 19431605 /lib64/libc-2.5.so
java 22529 hadoop mem REG 8,3 614992 19431684 /lib64/libm-2.5.so
java 22529 hadoop mem REG 8,3 23360 19431672 /lib64/libdl-2.5.so
java 22529 hadoop mem REG 8,3 149968 19431652 /lib64/libpthread-2.5.so
java 22529 hadoop mem REG 8,3 53448 19431661 /lib64/librt-2.5.so
java 22529 hadoop mem REG 8,3 114352 19431671 /lib64/libnsl-2.5.so
java 22529 hadoop mem REG 8,3 92816 19431752 /lib64/libresolv-2.5.so
java 22529 hadoop mem REG 8,3 23684216 62456020 /home/hadoop/jrockit-jdk1.6.0_29/jre/lib/amd64/jrockit/libjvm.so
java 22529 hadoop mem REG 8,3 492348 62456055 /home/hadoop/jrockit-jdk1.6.0_29/jre/lib/amd64/libosal.so
java 22529 hadoop mem REG 8,3 233295 62456060 /home/hadoop/jrockit-jdk1.6.0_29/jre/lib/amd64/libutil.so
java 22529 hadoop mem REG 8,3 32768 112656417 /tmp/hsperfdata_hadoop/22529
java 22529 hadoop mem REG 8,3 53880 19431603 /lib64/libnss_files-2.5.so
java 22529 hadoop mem REG 8,3 261428 62456041 /home/hadoop/jrockit-jdk1.6.0_29/jre/lib/amd64/libjfr.so
java 22529 hadoop mem REG 8,3 66580 62456061 /home/hadoop/jrockit-jdk1.6.0_29/jre/lib/amd64/libverify.so
java 22529 hadoop mem REG 8,3 234440 62456036 /home/hadoop/jrockit-jdk1.6.0_29/jre/lib/amd64/libjava.so
java 22529 hadoop mem REG 8,3 55818 62488580 /home/hadoop/jrockit-jdk1.6.0_29/jre/lib/amd64/native_threads/libhpi.so
java 22529 hadoop mem REG 8,3 56471376 16979795 /usr/lib/locale/locale-archive
java 22529 hadoop mem REG 8,3 92253 62456062 /home/hadoop/jrockit-jdk1.6.0_29/jre/lib/amd64/libzip.so
java 22529 hadoop mem REG 8,3 39481 62456047 /home/hadoop/jrockit-jdk1.6.0_29/jre/lib/amd64/libmanagement.so
COMMAND:進程的名稱
PID:進程標識符
USER:進程所有者
FD:檔案描述符,應用程式通過檔案描述符識別該檔案。如cwd、txt等
TYPE:檔案類型,如DIR、REG等
DEVICE:指定磁碟的名稱
SIZE:檔案的大小
NODE:索引節點(檔案在磁碟上的標識)
NAME:開啟檔案的確切名稱
其中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) 通訊端。