摘自《鳥哥的Linux私房菜》第十七章、程序管理與 SELinux 初探
查詢已開啟文件或已運行程序開啟之文件
- fuser : 藉由文件(或文件系統(tǒng))找出正在使用該文件的程序
[root@www ~]# fuser [-umv] [-k [i] [-signal]] file/dir
選項:
-u :除了程序的 PID 之外,同時列出該程序的擁有者;
-m :后面接的那個檔名會主動的上提到該文件系統(tǒng)的最頂層,對 umount 不成功很有效!
-v :可以列出每個文件與程序還有命令的完整相關性!
-k :找出使用該文件/目錄的 PID ,并試圖以 SIGKILL 這個訊號給予該 PID;
-i :必須與 -k 配合,在刪除 PID 之前會先詢問使用者意愿!
-signal:例如 -1 -15 等等,若不加的話,默認是 SIGKILL (-9) 羅!
范例一:找出目前所在目錄的使用 PID/所屬帳號/權限 為何?
[root@croot t]# fuser -uv .
USER PID ACCESS COMMAND
.: scu 9678 ..c.. (scu)bash
root 9794 ..c.. (root)su
root 9795 ..c.. (root)bash
ACCESS:
c :此程序在當前的目錄下(非次目錄);
e :可被觸發(fā)為運行狀態(tài);
f :是一個被開啟的文件;
r :代表頂層目錄 (root directory);
F :該文件被開啟了,不過在等待回應中;
m :可能為分享的動態(tài)函式庫;
范例二:找到所有使用到 /etc 這個文件系統(tǒng)的程序吧!
[root@croot /]# fuser -uv /etc
# 不會顯示任何數(shù)據(jù),因為沒有任何程序會去使用 /proc 這個目錄!
# 會被用到的是 /proc 底下的文件!所以你應該要這樣做:
[root@croot /]# fuser -muv /etc
USER PID ACCESS COMMAND
/etc: root 1 Frce. (root)init
root 2 .rc.. (root)kthreadd/133118
root 3 .rc.. (root)khelper/133118
root 143 .rce. (root)udevd
dbus 552 .rce. (dbus)dbus-daemon
root 568 .rce. (root)udevd
...
范例三:找到 /var 底下屬於 Socket 類型的文件,并且找出存取該文件的程序
[root@croot /]# find /var -type s
/var/run/cups/cups.sock
/var/run/charon.ctl
/var/run/charon.vici
/var/run/dbus/system_bus_socket
[root@croot /]# fuser -uv /var/run/cups/cups.sock
USER PID ACCESS COMMAND
/var/run/cups/cups.sock:
root 592 F.... (root)cupsd
范例四:同范例三,但試圖刪除該 PID?但『不要』刪除喔!
[root@croot /]# fuser -ki /var/run/cups/cups.sock
/var/run/cups/cups.sock: 592
Kill process 592 ? (y/N) n
-
lsof : 列出被程序所開啟的文件檔名
轉(zhuǎn)自《每天一個linux命令(51):lsof命令》
[root@www ~]# lsof [-aUu] [+d]
選項與參數(shù):
-a 列出打開文件存在的進程
-c<進程名> 列出指定進程所打開的文件
-g 列出GID號進程詳情
-d<文件號> 列出占用該文件號的進程
+d<目錄> 列出目錄下被打開的文件
+D<目錄> 遞歸列出目錄下被打開的文件
-n<目錄> 列出使用NFS的文件
-i<條件> 列出符合條件的進程。(4、6、協(xié)議、:端口、 @ip )
-p<進程號> 列出指定進程號所打開的文件
-u 列出UID號進程詳情
-h 顯示幫助信息
-v 顯示版本信息
[root@croot /]# lsof -i4:21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
pure-ftpd 1087 root 3u IPv4 491026879 0t0 TCP *:ftp (LISTEN)
COMMAND:進程的名稱
PID:進程標識符
PPID:父進程標識符(需要指定-R參數(shù))
USER:進程所有者
PGID:進程所屬組
FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等
(1)cwd:表示current work dirctory,即:應用程序的當前工作目錄,這是該應用程序啟動的目錄,除非它本身對這個目錄進行更改
(2)txt :該類型的文件是程序代碼,如應用程序二進制文件本身或共享庫,如上列表中顯示的 /sbin/init 程序
(3)lnn:library references (AIX);
(4)er:FD information error (see NAME column);
(5)jld:jail directory (FreeBSD);
(6)ltx:shared library text (code and data);
(7)mxx :hex memory-mapped type number xx.
(8)m86:DOS Merge mapped file;
(9)mem:memory-mapped file;
(10)mmap:memory-mapped device;
(11)pd:parent directory;
(12)rtd:root directory;
(13)tr:kernel trace file (OpenBSD);
(14)v86 VP/ix mapped file;
(15)0:表示標準輸出
(16)1:表示標準輸入
(17)2:表示標準錯誤
一般在標準輸出、標準錯誤、標準輸入后還跟著文件狀態(tài)模式:r、w、u等
(1)u:表示該文件被打開并處于讀取/寫入模式
(2)r:表示該文件被打開并處于只讀模式
(3)w:表示該文件被打開并處于
(4)空格:表示該文件的狀態(tài)模式為unknow,且沒有鎖定
(5)-:表示該文件的狀態(tài)模式為unknow,且被鎖定
同時在文件狀態(tài)模式后面,還跟著相關的鎖
(1)N:for a Solaris NFS lock of unknown type;
(2)r:for read lock on part of the file;
(3)R:for a read lock on the entire file;
(4)w:for a write lock on part of the file;(文件的部分寫鎖)
(5)W:for a write lock on the entire file;(整個文件的寫鎖)
(6)u:for a read and write lock of any length;
(7)U:for a lock of unknown type;
(8)x:for an SCO OpenServer Xenix lock on part of the file;
(9)X:for an SCO OpenServer Xenix lock on the entire file;
(10)space:if there is no lock.
TYPE:文件類型,如DIR、REG等,常見的文件類型
(1)DIR:表示目錄
(2)CHR:表示字符類型
(3)BLK:塊設備類型
(4)UNIX: UNIX 域套接字
(5)FIFO:先進先出 (FIFO) 隊列
(6)IPv4:網(wǎng)際協(xié)議 (IP) 套接字
DEVICE:指定磁盤的名稱
SIZE:文件的大小
NODE:索引節(jié)點(文件在磁盤上的標識)
NAME:打開文件的確切名稱
- pidof : 找出某支正在運行的程序的 PID
[root@www ~]# pidof [-sx] program_name
選項與參數(shù):
-s :僅列出一個 PID 而不列出所有的 PID
-x :同時列出該 program name 可能的 PPID 那個程序的 PID
[root@croot /]# pidof init su bash
1 9794 9795
[root@croot /]#