output
lsof每一次執行時輸出欄位的size都會動態的調整,保證每一個欄寬都是最小的,並且確保每一個欄位之間都會有一個空白的距離,底下是所有輸出的相關介紹:
欄位名稱 | 描述 |
---|---|
COMMAND | 包含了繫結了這個行程的所有命令的前9個字元,如果有搭配到『+c w』的option的話,就會隨著這個option做變動。 |
PID | 就是行程的識別碼(Process IDentification number)。 |
TID | task/thread的ID,在Linux上空的TID代表的是這是一個行程(process)而不是一個task。 |
ZONE | Solaris 10以上的zone名稱,在Linux裡面沒有。 |
SECURITY-CONTEXT | SELinux的security context。這個欄位必須用『-Z』來啟用。如果你的kernel的SELinux是不啟用的話,則這個選項將會被抑制。 |
PPID | 是這個行程的『Parent Process ID』,只有使用『-R』時才會被顯示。 |
PGID | 與這個行程繫結的『Process Group ID』,只有在使用『-g』時才會被顯示。 |
USER | 是這個行程擁有著的登入名稱或ID,通常會跟ps一樣,但是在Linux裡面其實會是lsof在『/proc』底下找到的資料夾的擁有者,一般來說也是會跟ps一樣,但是有可能會被EUID給影響到就對了。 |
FD | 是檔案的檔案描述子(File Descriptor)編號,或者是底下這幾種可能: |
- cwd current working directory;
- Lnn library references (AIX);
- err FD information error (see NAME column);
- jld jail directory (FreeBSD);
- ltx shared library text (code and data);
- Mxx hex memory-mapped type number xx.
- m86 DOS Merge mapped file;
- mem memory-mapped file;
- mmap memory-mapped device;
- pd parent directory;
- rtd root directory;
- tr kernel trace file (OpenBSD);
- txt program text (code and data);
- v86 VP/ix mapped file;
FD通常都會在底下這幾種『mode模式字元』表示狀態:
- 『r』 讀取
- 『w』 寫入
- 『空白』代表不知名模式或是沒有lock字元
- 『-』代表不知名模式或是沒有lock字元
mode模式字元都會伴隨著下面的幾種lock字元,來描述套用到這個檔案的lock類別:
- N 是一個不知名類別的Solaris NFS lock;
- r 是在部份檔案的read lock。
- R 是在整個檔案的read lock。
- w 是在部份檔案的read lock。
- W是在整個檔案的read lock。
- u 任何長度的讀寫lock。
- U 不知名類型的lock。
- x 是一個部份檔案上的SCO OpenServer Xenix lock。
- X是一個整個檔案上的SCO OpenServer Xenix lock。
- 空白的話代表沒有lock。
TYPE | 是與這個檔案繫結的node type,底下列出一些可能出現的類型: |
- 『IPv4』 - 一個IPv4的socket。
- 『IPv6』 - 一個已經開啟的IPv6網路裝置檔,即使他的位址是IPv4,但是已經對映給IPv6。
- 『ax25』- 是一個 Linux AX.25 socket。
- 『inet』- 是一個 Internet domain socket。
- 『lla』- 是一個 HP-UX link level access file。
- 『rte』- 是一個 AF_ROUTE socket。
- 『sock』- 是一個未知domain的socket。
- 『unix』 是一個 UNIX domain socket。
- 『x.25』 - 是一個 HP-UX x.25 socket。
- 『BLK』 - 是一個區塊檔。
- 『CHR』 - 是一個字元檔。
- 『DEL』 - 是一個已經被刪除的 Linux map file。
- 『DIR』 是一個資料夾。
- 『DOOR』 是一個 VDOOR 檔。
- 『FIFO』是一個 FIFO 檔案。
- 『KQUEUE』是一個 BSD style的 kernel event queue file。
- 『LINK』 是一個連結檔。
- 『MPB』 是一個多工( multiplexed)的區塊(block)檔。
- 『MPC』 是一個多工( multiplexed)的字元(character)檔。
- 『NOFD』 是一個無法打開的 Linux /proc/
/fd 資料夾,欄位『NAME』會有資料夾的路徑伴隨著錯誤的訊息。 - 『PAS』 是一個 /proc/as 檔案。
- 『PAXV』 是一個 /proc/auxv 檔案。
- 『PCRE』 是一個 /proc/cred 檔案。
- 『PCTL』 是一個 /proc control 檔案。
- 『PCUR』 是目前的 /proc 行程。
- 『PCWD』 是一個/proc current working directory。
- 『PDIR』 是一個/proc資料夾。
- 『PETY』是一個/proc可執行類型(etype)。
- 『PFD』 是一個/proc 檔案描述子(file descriptor)。
- 『PFDR』 是一個/proc 檔案描述子資料夾。
- 『PFIL』 是一個可執行的/proc檔案。
- 『PFPR』 是一個/proc FP register set。
- 『PGD』 是一個/proc/pagedata 檔案。
- 『PGID』 是一個/proc group notifier檔案。
- 『PIPE』 用於 pipes。
- 『PLC』 是一個/proc/lwpctl檔案。
- 『PLDR』 是一個/proc/lpw資料夾。
- 『PLDT』 是一個/proc/ldt檔案。
- 『PLPI』 是一個/proc/lpsinfo檔案。
- 『PLST』 是一個/proc/lstatus檔案。
- 『PLU』 是一個/proc/lusage檔案。
- 『PLWG』 是一個/proc/gwindows檔案。
- 『PLWI』 是一個/proc/lwpsinfo檔案。
- 『PLWS』 是一個/proc/lwpstatus檔案。
- 『PLWU』 是一個/proc/lwpusage檔案。
- 『PLWX』 是一個/proc/xregs檔案。
- 『PMAP』 是一個/proc map file (map)。
- 『PMEM』 是一個/proc memory image file。
- 『PNTF』 是一個/proc process notifier file。
- 『POBJ』 是一個/proc/object檔案。
- 『PODR』 是一個/proc/object資料夾。
- 『POLP』 是一個舊格式的/proc light weight process檔案。
- 『POPF』 是一個舊格式的/proc PID檔案。
- 『POPG』 是一個舊格式的/proc page data檔案。
- 『PORT』 是一個SYSV named pipe。
- 『PREG』 是一個/proc register檔案。
- 『PRMP』 是一個/proc/rmap檔案。
- 『PRTD』 是一個/proc root 資料夾。
- 『PSGA』 是一個/proc/sigact 檔案。
- 『PSIN』 是一個/proc/psinfo 檔案。
- 『PSTA』 是一個/proc status 檔案。
- 『PSXSEM』 是一個 POSIX semaphore檔案。
- 『PSXSHM』 是一個 POSIX shared memory檔案。
- 『PUSG』 是一個 /proc/usage檔案。
- 『PW』 是一個 /proc/watch檔案。
- 『PXMP』 是一個 /proc/xmap檔案。
- 『REG』 是一個 regular檔案。
- 『SMT』是一個 shared memory transport檔案。
- 『STSO』 是一個 stream socket。
- 『UNNM』 是一個 unnamed type檔案。
- 『XNAM』 是一個 不知名類型的OpenServer Xenix檔案。
- 『XSEM』 是一個 OpenServer Xenix semaphore檔案。
- 『XSD』 是一個 OpenServer Xenix shared data檔案。
FILE-ADDR | 如果『f』有具體指定『+f』的話,就會包含kernel的檔案結構位址。 |
FCT | 如果『c』有具體指定『+f』的話,就會從kernel檔案結構包含參考計數。 |
FILE-FLAG | 當『g』或『G』有特別指定『+f』的話,這個欄位就會包含在kernel檔案結構成員『f_flag[s]』和kernel中每個行程開啟檔案的flag的內容,『G』會顯示16進制的格式而『g』則是會縮寫,會有兩個清單被顯示,第一個為縮寫(也就是f_flag[s]的值),然後在用『;』隔開,組合有底下幾種: |
- AIO asynchronous I/O (e.g., FAIO)
- AP append
- ASYN asynchronous I/O (e.g., FASYNC)
- BAS block, test, and set in use
- BKIU block if in use
- BL use block offsets
- BSK block seek
- CA copy avoid
- CIO concurrent I/O
- CLON clone
- CLRD CL read
- CR create
- DF defer
- DFI defer IND
- DFLU data flush
- DIR direct
- DLY delay
- DOCL do clone
- DSYN data-only integrity
- DTY must be a directory
- EVO event only
- EX open for exec
- EXCL exclusive open
- FSYN synchronous writes
- GCDF defer during unp_gc() (AIX)
- GCMK mark during unp_gc() (AIX)
- GTTY accessed via /dev/tty
- HUP HUP in progress
- KERN kernel
- KIOC kernel-issued ioctl
- LCK has lock
- LG large file
- MBLK stream message block
- MK mark
- MNT mount
- MSYN multiplex synchronization
- NATM don't update atime
- NB non-blocking I/O
- NBDR no BDRM check
- NBIO SYSV non-blocking I/O
- NBF n-buffering in effect
- NC no cache
- ND no delay
- NDSY no data synchronization
- NET network
- NFLK don't follow links
- NMFS NM file system
- NOTO disable background stop
- NSH no share
- NTTY no controlling TTY
- OLRM OLR mirror
- PAIO POSIX asynchronous I/O
- PP POSIX pipe
- R read
- RC file and record locking cache
- REV revoked
- RSH shared read
- RSYN read synchronization
- RW read and write access
- SL shared lock
- SNAP cooked snapshot
- SOCK socket
- SQSH Sequent shared set on open
- SQSV Sequent SVM set on open
- SQR Sequent set repair on open
- SQS1 Sequent full shared open
- SQS2 Sequent partial shared open
- STPI stop I/O
- SWR synchronous read
- SYN file integrity while writing
- TCPM avoid TCP collision
- TR truncate
- W write
- WKUP parallel I/O synchronization
- WTG parallel I/O synchronization
- VH vhangup pending
- VTXT virtual text
XL exclusive lock
上面這個清單是從幾個定義裡面萃取出來的,像是『< fcntl.h>』,『< linux/fs.h>』,『< sys/fcntl.c>』,『< sys/fcntlcom.h>』,『< sys/file.h>』,這部份有需要的話請直接看『lsof.h』。
接下來有第二份清單,主要是包含kernel每個行程開啟檔案的falg:
- ALLC allocated
- BR the file has been read
- BHUP activity stopped by SIGHUP
- BW the file has been written
- CLSG closing
- CX close-on-exec (see fcntl(F_SETFD))
- LCK lock was applied
- MP memory-mapped
- OPIP open pending - in progress
- RSVW reserved wait
- SHMT UF_FSHMAT set (AIX)
- USE in use (multi-threaded)
NODE-ID | 如果『n』有具體指定『+f』的話,就會包含對於檔案節點(node)的獨特id(通常是kernel的vnode或是inode位址但是有時候會有裝置節點號碼)。 |
DEVICE | 包欄了裝置號碼,對於『字元裝置』,『區塊裝置』,『一般裝置』,『資料夾』,『NFS檔案』,會用逗號隔開。除了上敘的裝置以外,還有還有底下幾種:『memory』,在Tru64 UNIX之下的記憶體檔案系統節點。或者是kernel 參照的位址,而這個位址可以去識別這個檔案,舉個例子來說可以用來使用在FIFO上。又或者是Linux AX.25 socket裝置上的裝置名稱或是基底位址。 |
SIZE, SIZE/OFF, or OFFSET | 是檔案的size或檔案的偏移量,在某些Unix-like的系統上lsof無法的從kernel的data source那邊去取得準確檔案偏移量,有時候只能在特定類型的檔案上才能。而有時候檔案不會有正確的size,像是sockets, FIFOs, Pipes等等,這時lsof就會將其所有的總量加起來。 |
NLINK | 當有具體指定『+L』時,就會顯示檔案連結數量。 |
NODE | 這個欄位有底下幾種可能: |
- 是本地端檔案的節點(node)數。
- 在伺服器端NFS系統上的inode數。
- 協定的類型,像是『TCP』。
- 如果是『STR』的話,就代表是『stream』。
- 『CCITT』的話就是HP-UX x.25 socket。
在Linux AX.25 socket裝置的inode號碼或是IRQ。
| NAME | 這個欄位的選擇也非常多,有底下這些可能:|掛載點和檔案系統的名字。
- 具體在『names』option後面描述的名稱。
- 字元裝置或是區塊裝置的名稱。
- 一個網路檔案的本地端或是遠端的位址,還有其狀態。
- 一個UNIX domain socket的位址或名稱,有可能是包含了一個『stream clone 』的裝置名稱,一個檔案系統物件的路徑名稱,本地或是外部的kernel位址,socket pair資訊和『bound vnode address』。
- 一個NFS檔案本地端和遠端的掛載點名稱。
- 如果是『STR』的話,就是『stream』的名稱。
- 一個串流字元裝置名稱(stream character device),通常會跟隨者一個『->』後面才會是串流的名稱或是一系列的串流模組名稱。
- 如果是『STR:』,後面跟隨著SCO OpenServer stream 裝置和模組名稱。
- 系統資料夾名稱『--』,還有lsof在這個kernel name cache下可以找到的元件的路徑名稱。
- 『address family』。
- 『HP-UX x.25』本地端位址。
- 『(dead)』的話就代表與『Tru64』解除關聯的Unix檔案,通常是terminal檔案被使用『TIOCNOTTY』ioctl標記或是使用daemon關閉了。
- 『rd=< offset>』或是『wr=< offset>』,代表的是FIFO的讀寫偏移量。
- 『clone n:/dev/event』是『/dev/event』裝置的SCO OpenServer檔案的複製,n代表的是檔案的次要裝置序號。
- 『no PCB』,代表的是socket檔沒有『protocol block』與其繫結。其他更多的選項請看手冊。
- 一個IPX socket檔的本地端或是遠端位址,格式為『< net>:[< node>]< port>』。
- 在類型UnixWare 7.1.1或是之上的『dgram』或是『stream』。
- 或者是與SCTP sockets的任何繫結的值,索引,endpoint值,本地端位址,本地端埠口,遠端位址埠口等資訊。
- 或者是Linux socket 的任何協定。