0?前言
今天國產(chǎn)電腦提示磁盤空間已耗盡,使用用df命令檢查文件系統(tǒng)情況,發(fā)現(xiàn)/dev/sda2已使用100%。
Linux shell編程學習筆記39:df命令https://blog.csdn.net/Purpleendurer/article/details/135577571于是開始清理磁盤空間。
第一步是查看已刪除、但空間卻沒有釋放的進程。
這里要用到 lsof命令。
1?lsof命令的安裝
PurpleEndurer @ ?bash ~ $ lsof --help
bash: lsof: command not found
PurpleEndurer @ ?bash ~ $?
?
lsof 命令默認是沒有安裝的,如果你的系統(tǒng)中沒有安裝這個命令,那么可以?使用以下命令安裝:
yum install -y lsof
PurpleEndurer @ ?bash ~ $ yum install -y lsof
Loaded plugins: fastestmirror, ovl
ovl: Error while doing RPMdb copy-up:
[Errno 13] Permission denied: '/var/lib/rpm/Providename'
You need to be root to perform this command.
PurpleEndurer @ ?bash ~ $?
?
?
2? lsof命令的功能、格式和選項說明
我們像往常輸入lsof?--help命令,想查看 lsof命令的幫助信息。
purpleEndurer?@bash?~?$? lsof?--help
lsof:?illegal?option?character:?-
lsof:?-e?not?followed?by?a?file?system?path:?"lp"
lsof?4.89
?latest?revision:?ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
?latest?FAQ:?ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
?latest?man?page:?ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
?usage:?[-?abhKlnNoOPRtUvVX]?[+|-c?c]?[+|-d?s]?[+D?D]?[+|-E]?[+|-e?s]?[+|-f[gG]]
?[-F?[f]]?[-g?[s]]?[-i?[i]]?[+|-L?[l]]?[+m?[m]]?[+|-M]?[-o?[o]]?[-p?s]
?[+|-r?[t]]?[-s?[p:s]]?[-S?[t]]?[-T?[t]]?[-u?s]?[+|-w]?[-x?[fl]]?[--]?[names]
Defaults?in?parentheses;?comma-separated?set?(s)?items;?dash-separated?ranges.
??-?|-h?list?help??????????-a?AND?selections?(OR)?????-b?avoid?kernel?blocks
??-c?c??cmd?c?^c?/c/[bix]??+c?w??COMMAND?width?(9)????+d?s??dir?s?files
??-d?s??select?by?FD?set???+D?D??dir?D?tree?*SLOW?*???+|-e?s??exempt?s?*RISKY*
??-i?select?IPv[46]?files??-K?list?tasKs?(threads)????-l?list?UID?numbers
??-n?no?host?names?????????-N?select?NFS?files????????-o?list?file?offset
??-O?no?overhead?*RISKY*???-P?no?port?names???????????-R?list?paRent?PID
??-s?list?file?size????????-t?terse?listing???????????-T?disable?TCP/TPI?info
??-U?select?Unix?socket????-v?list?version?info???????-V?verbose?search
??+|-w??Warnings?(+)???????-X?skip?TCP&UDP*?files?????-Z?Z??context?[Z]
??--?end?option?scan?????
??-E?display?endpoint?info??????????????+E?display?endpoint?info?and?files
??+f|-f??+filesystem?or?-file?names?????+|-f[gG]?flaGs?
??-F?[f]?select?fields;?-F??for?help??
??+|-L?[l]?list?(+)?suppress?(-)?link?counts?<?l?(0?=?all;?default?=?0)
????????????????????????????????????????+m?[m]?use|create?mount?supplement
??+|-M???portMap?registration?(-)???????-o?o???o?0t?offset?digits?(8)
??-p?s???exclude(^)|select?PIDs?????????-S?[t]?t?second?stat?timeout?(15)
??-T?qs?TCP/TPI?Q,St?(s)?info
??-g?[s]?exclude(^)|select?and?print?process?group?IDs
??-i?i???select?by?IPv[46]?address:?[46][proto][@host|addr][:svc_list|port_list]
??+|-r?[t[m<fmt>]]?repeat?every?t?seconds?(15);??+?until?no?files,?-?forever.
???????An?optional?suffix?to?t?is?m<fmt>;?m?must?separate?t?from?<fmt>?and
??????<fmt>?is?an?strftime(3)?format?for?the?marker?line.
??-s?p:s??exclude(^)|select?protocol?(p?=?TCP|UDP)?states?by?name(s).
??-u?s???exclude(^)|select?login|UID?set?s
??-x?[fl]?cross?over?+d|+D?File?systems?or?symbolic?Links
??names??select?named?files?or?files?on?named?file?systems
Anyone?can?list?all?files;?/dev?warnings?disabled;?kernel?ID?check?disabled.
purpleEndurer?@bash?~?$?
?
盡管 lsof命令不支持--help選項,但給出了幫助信息。
查看?lsof命令?幫助信息正確選項是 -??或 -h。
2.1?命令功能
lsof 是 List Open File 的縮寫, 主要功能是獲取和顯示被進程打開文件的信息。
2.2?命令格式
lsof [-?abhKlnNoOPRtUvVX]?[+|-c?c]?[+|-d?s]?[+D?D]?[+|-E]?[+|-e?s]?[+|-f[gG]]
?[-F?[f]]?[-g?[s]]?[-i?[i]]?[+|-L?[l]]?[+m?[m]]?[+|-M]?[-o?[o]]?[-p?s]
?[+|-r?[t]]?[-s?[p:s]]?[-S?[t]]?[-T?[t]]?[-u?s]?[+|-w]?[-x?[fl]]?[--]?[names]
2.3?選項說明
選項 | 描述 |
---|---|
-h | 顯示幫助信息 |
-a | AND選擇(默認是或) |
-b | 避免內(nèi)核塊 |
-c c | cmd c ^c /c/[bix] |
+c w | 命令寬度(默認為9) |
+d s | 顯示目錄集合s下被打開的文件 |
-d s | 通過文件描述符(FD)集合s來選擇 |
+D D | 遞歸處理所有子文件 *慢?* |
+|-e s | 豁免 s *風險* |
-E | 顯示端點信息 |
+E | 顯示端點信息和文件 |
+f|-f | +文件系統(tǒng)或 -文件名 |
+|-f[gG] | flaGs |
-F [f] | 選擇字段;-F?尋求幫助 |
-g [s] | 排除(^)或選擇并打印進程組ID |
-i | ?按 IPv[46] 地址選擇:[46][proto][@host|addr][:svc_list|port_list] |
-K | 列出tasKs(線程) |
-l | 列出UID號 |
+|-L [l] | 列表 (+) 抑制 (-) 鏈路計數(shù) < l (0 = all; default = 0) |
+m [m] | 使用或創(chuàng)建安裝補充 |
+|-M | 端口映射注冊 (-)? |
-n | 沒有主機名 |
-N | 選擇NFS文件列表 |
-o | 列出文件偏移量 -o o o 0t 偏移位數(shù)(8) |
-O | 無開銷?*風險* |
-p s | 排除(^)或選擇PIDs -S [t]? t秒統(tǒng)計超時(15) |
-P | 無端口名稱 |
-R | 列出paRent PID |
+ | -r [t[m<fmt>]] |
-s | 列表文件大小 |
-s p:s | 排除(^)或選擇protocol(p = TCP|UDP) 按名稱表示。 |
S [t] | t 秒統(tǒng)計超時 (默認為15秒) |
-t | 簡潔列表 |
-T | 禁用TCP/TPI信息 |
-Tqs | TCP/TPI Q,St(s)信息 |
-u s | 排除(^)或 選擇登錄 或 UID集s |
-U | 選擇Unix套接字 |
-v | 顯示版本信息 |
-V | 詳細搜索 |
+|-w?? ? | 警告 |
-x [fl] | 跨越 +d|+D 文件系統(tǒng)或符號鏈接 |
-X | 跳過TCP&UDP*文件 |
-Z Z | 上下文[Z] |
-- | 結束選項掃描 |
name | 選擇命名文件或命名文件系統(tǒng)上的文件 |
- 括號中的是默認值
- 集合項使用逗號分隔
- 范圍使用破折號分隔
3?使用實例
3.1 lsof :?顯示當前所有活躍進程打開的所有文件
顯示的內(nèi)容很多,不好截圖。
3.2 lsof | more:分頁顯示顯示當前所有活躍進程打開的所有文件
我們可以使用管道操作符和more命令來分實現(xiàn)分頁顯示
purpleEndurer?@bash?/?$?lsof?|?more
COMMAND?????PID???TID?????????????USER???FD??????TYPE?????????????DEVICE??SIZE/OFF???????NODE?NAME
systemd???????1???????????????????root??cwd???unknown?????????????????????????????????????????/proc/1/cwd?(
readlink:?Permission?denied)
systemd???????1???????????????????root??rtd???unknown?????????????????????????????????????????/proc/1/root?
(readlink:?Permission?denied)
systemd???????1???????????????????root??txt???unknown?????????????????????????????????????????/proc/1/exe?(
readlink:?Permission?denied)
systemd???????1???????????????????root?NOFD???????????????????????????????????????????????????/proc/1/fd?(o
pendir:?Permission?denied)
kthreadd??????2???????????????????root??cwd???unknown?????????????????????????????????????????/proc/2/cwd?(
readlink:?Permission?denied)
kthreadd??????2???????????????????root??rtd???unknown?????????????????????????????????????????/proc/2/root?
(readlink:?Permission?denied)
kthreadd??????2???????????????????root??txt???unknown?????????????????????????????????????????/proc/2/exe?(
readlink:?Permission?denied)
kthreadd??????2???????????????????root?NOFD???????????????????????????????????????????????????/proc/2/fd?(o
pendir:?Permission?denied)
ksoftirqd?????3???????????????????root??cwd???unknown?????????????????????????????????????????/proc/3/cwd?(
readlink:?Permission?denied)
ksoftirqd?????3???????????????????root??rtd???unknown?????????????????????????????????????????/proc/3/root?
(readlink:?Permission?denied)
ksoftirqd?????3???????????????????root??txt???unknown?????????????????????????????????????????/proc/3/exe?(
readlink:?Permission?denied)
ksoftirqd?????3???????????????????root?NOFD???????????????????????????????????????????????????/proc/3/fd?(o
pendir:?Permission?denied)
kworker/0?????5???????????????????root??cwd???unknown?????????????????????????????????????????/proc/5/cwd?(
readlink:?Permission?denied)
kworker/0?????5???????????????????root??rtd???unknown?????????????????????????????????????????/proc/5/root?
(readlink:?Permission?denied)
?
命令執(zhí)行后返回的信息默認有10列,說明如下:
1.?COMMAND:進程名稱
2.PID:進程ID
3.TID:線程ID
4.USER:所屬用戶
5.FD:文件描述符
可能的類型以及說明如下:
FD | 說明 |
---|---|
cwd | 當前目錄 |
txt | txt文件 |
rtd | root目錄 |
mem | 內(nèi)存映射文件 |
6.?TYPE:
文件類型
可能的值以及說明如下:
TYPE | 說明 |
---|---|
DIR | 目錄 |
REG | 普通文件 |
CHR | 字符 |
a_inode | Inode文件 |
FIFO | 管道或者socket文件 |
netlink | 網(wǎng)絡 |
unknown | 未知 |
7.DEVICE:
設備ID
8.?SIZE/OFF:
進程大小
9.NODE:
文件的Inode號
10.NAME:
路徑或者鏈接
后面?zhèn)渥?readlink:?Permission?denied),是因為當前用戶相應的訪問權限。
所以使用lsof命令最好有root權限或者賦予普通用于sudo權限。
3.3 lsof +d proc:顯示當前目錄下的proc目錄中被打開的文件信息
purpleEndurer?@bash?/?$?lsof?+d?proc?|?more
COMMAND?????PID?USER???FD???TYPE?DEVICE?SIZE/OFF???????NODE?NAME
systemd????2641?gxxc???12r???REG????0,4????????0?4026531994?proc/swaps
lsof??????12178?gxxc????3r???DIR????0,4????????0??????????1?proc
qaxbrowse?14744?gxxc???12r???DIR????0,4????????0??????????1?proc
qaxbrowse?14770?gxxc???19r???DIR????0,4????????0??????????1?proc
purpleEndurer?@bash?/?$?
?
3.4 lsof +d proc +l:顯示當前目錄下的proc目錄中被打開的文件信息,其中USER列不顯示用戶名而顯示UID
purpleEndurer?@bash?/?$?lsof?+d?proc?-l?|?more
COMMAND?????PID?????USER???FD???TYPE?DEVICE?SIZE/OFF???????NODE?NAME
systemd????2641?????1000???12r???REG????0,4????????0?4026531994?proc/swaps
qaxbrowse?14744?????1000???12r???DIR????0,4????????0??????????1?proc
qaxbrowse?14770?????1000???19r???DIR????0,4????????0??????????1?proc
lsof??????14916?????1000????3r???DIR????0,4????????0??????????1?proc
purpleEndurer?@bash?/?$?
文章來源:http://www.zghlxwxcb.cn/news/detail-860058.html
由于我們使用了 -l選項,所以執(zhí)行結果中USER列顯示的1000是UID文章來源地址http://www.zghlxwxcb.cn/news/detail-860058.html
到了這里,關于Linux shell編程學習筆記47:lsof命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!