2018年11月15日 星期四

[Linux 文章收集] 查詢已開啟檔案或已執行程序開啟之檔案

來源自 這裡 
fuser:藉由檔案(或檔案系統)找出正在使用該檔案的程序 
# fuser [-umv] [-k [i] [-signal]] file/dir 
選項與參數: 
-u :除了程序的 PID 之外,同時列出該程序的擁有者; 
-m :後面接的那個檔名會主動的上提到該檔案系統的最頂層,對 umount 不成功很有效! 
-v :可以列出每個檔案與程序還有指令的完整相關性! 
-k :找出使用該檔案/目錄的 PID ,並試圖以 SIGKILL 這個訊號給予該 PID; 
-i :必須與 -k 配合,在刪除 PID 之前會先詢問使用者意願! 
-signal:例如 -1 -15 等等,若不加的話,預設是 SIGKILL (-9) 囉!

範例一:找出目前所在目錄的使用 PID/所屬帳號/權限 為何? 
# fuser -uv . 
USER PID ACCESS COMMAND 
.: root 17232 ..c.. (root)bash 
root 17255 ..c.. (root)bash


lsof :列出被程序所開啟的檔案檔名 
相對於 fuser 是由檔案或者裝置去找出使用該檔案或裝置的程序,反過來說, 如何查出某個程序開啟或者使用的檔案與裝置呢?就是使用 lsof. 
# lsof [-aUu] [+d] 
選項與參數: 
-a :多項資料需要『同時成立』才顯示出結果時! 
-U :僅列出 Unix like 系統的 socket 檔案類型; 
-u :後面接 username,列出該使用者相關程序所開啟的檔案; 
+d :後面接目錄,亦即找出某個目錄底下已經被開啟的檔案!

範例一:列出目前系統上面所有已經被開啟的檔案與裝置: 
# lsof 
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME 
init 1 root cwd DIR 3,2 4096 2 / 
init 1 root rtd DIR 3,2 4096 2 / 
init 1 root txt REG 3,2 38620 1426405 /sbin/init 
....(底下省略)....
 
# 注意到了嗎?是的,在預設的情況下, lsof 會將目前系統上面已經開啟的 
# 檔案全部列出來~所以,畫面多的嚇人啊!您可以注意到,第一個檔案 init 執行的 
# 地方就在根目錄,而根目錄,嘿嘿!所在的 inode 也有顯示出來喔

pidof :找出某支正在執行的程式的 PID 
# pidof [-sx] program_name 
選項與參數: 
-s :僅列出一個 PID 而不列出所有的 PID 
-x :同時列出該 program name 可能的 PPID 那個程序的 PID

範例一:列出目前系統上面 init 以及 syslogd 這兩個程式的 PID 
# pidof init syslogd 
1 4286 
# 理論上,應該會有兩個 PID 才對。上面的顯示也是出現了兩個 PID 喔。 
# 分別是 init 及 syslogd 這兩支程式的 PID 啦。


沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...