前言
測驗人員最常見和繁瑣的任務之一就是清理環境,比如防止磁盤空間出現不足,下面是我收集的一些常用的 Linux 檔案系統相關命令,
1.檢查可用空間
要查找服務器上所有檔案系統上的可用空間,請執行以下命令:
-
$ df -h -
檔案系統 容量 已用 可用 已用% 掛載點 -
/dev/vda1 40G 32G 6.0G 84% / -
devtmpfs 1.9G 0 1.9G 0% /dev -
tmpfs 1.9G 0 1.9G 0% /dev/shm -
tmpfs 1.9G 2.0M 1.9G 1% /run -
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup -
tmpfs 379M 0 379M 0% /run/user/1001 -
tmpfs 379M 0 379M 0% /run/user/1000
對于特定的目錄:
-
$ df -h /home -
檔案系統 容量 已用 可用 已用% 掛載點 -
/dev/vda1 40G 32G 6.0G 84% /
按占用順序顯示檔案系統,可以知道的更全面:
-
~$ df -h | awk '{print $5 " " $6}' | sort -n | tail -5 -
22% / -
23% /home -
43% /var/datos -
52% /usr -
77% /boot
2.計算目錄大小
-h 引數以友好的可讀方式顯示目錄大小,以千位元組、兆位元組、千兆位元組為單位
-
$ du -h -s /var/log -
76M /var/log
3.清理檔案
我們通常使用 rm 命令洗掉檔案以釋放空間,但是,我們無法洗掉檔案是非常常見的,因為應用程式當時正在使用該檔案,這對于無法停止的壓測中系統上的日志檔案最為常見,直接洗掉它們會產生有害影響,例如掛起應用程式,或者更溫和但也不合適,因為這些檔案的轉儲資料會被中斷并且不再有用,
為了不改變應用程式行為并實作釋放磁盤空間的目標,我們將清空檔案而不是洗掉它們:
-
~# >/var/log/syslog
而后檔案將是0位元組大小,
如果需要使用單命令一次清空多個檔案:
-
~# for I in `ls "/var/log/*.log"`;do >"$I";done
4.計算目錄中的檔案數量
-
$ ls -l /var/log | wc -l
5.檔案系統中查找大檔案
當你想清理空間的時候,此命令很有用,它會顯示目錄及子目錄中的最大檔案
-
~# du -k /var/log | sort -n | tail -5 -
36904 /var/log/audit -
45780 /var/log/sa -
4120792 /var/log/journal/f0f31005fb5a436d88e3c6cbf54e25aa -
4120800 /var/log/journal -
4207856 /var/log
TIPS:
-
檔案大小必須以千位元組(引數
-k)顯示,如果引數是-h,sort-n命令不會按串列排序 -
tail-x限制顯示檔案數,x 是數字,如果目錄有數百或數千個檔案,此引數就尤為重要了,
6.列出檔案系統中最大檔案
與上面類似,不過此命令不包括子目錄
-
[root@7dgroup3 log]# ls -lSr | tail -5 -
-rw------- 1 root root 468120 12月 16 03:20 messages-20181216 -
-rw------- 1 root root 470853 12月 2 03:24 messages-20181202 -
-rw------- 1 root root 470862 12月 9 03:43 messages-20181209 -
-rw------- 1 root root 476536 12月 23 03:20 messages-20181223 -
-rw------- 1 root root 500087 12月 30 00:20 messages
如果洗掉 -r 引數,列出的檔案將是最小而不是最大檔案,
7.計算指定檔案大小
如果想獲取指定目錄中 .log 檔案的總大小:
-
~$ du -ch /var/log/*.log | grep total -
20M total
8.查找范圍內的大檔案
例如,檔案大小超過 100MB
-
~$ find . -type f -size +100M -ls
或者在 100MB 到 1GB之間的那些檔案
-
~$ find . -type f -size +100M -size -1G -ls
9.列出最近修改的檔案
-
~# ls -larth /var/log | tail -5 -
-rw------- 1 root root 5.2K 12月 30 00:14 secure -
-rw-r--r-- 1 root root 0 12月 30 00:14 syslog -
drwxr-xr-x. 14 root root 4.0K 12月 30 00:14 . -
-rw------- 1 root root 118K 12月 30 00:30 cron -
-rw------- 1 root root 489K 12月 30 00:30 messages
引數 -a 表示必須顯示隱藏檔案
10.查找舊檔案(一)
很多時候我們需要知道在給定時間間隔內修改的檔案,在以下示例中,定位了超過90天的檔案,以便找出不再使用的舊檔案,可以安全地洗掉這些檔案以釋放空間,
-
?#find / var / log - mtime + 90 - ls
-
?#find / var / log - mtime + 90 - ls - exec rm {} \; -
第一個命令僅定位檔案,第二個命令還能洗掉它們,
11.查找舊檔案(二)
與上面相同,另外一種情況,還考慮在指定時間間隔內已訪問,修改或未修改的檔案,
-
?#find / var / log - atime + 90 - ls
12.查找空檔案
以下命令允許你查找當前目錄中大小為 0 位元組的檔案,即空檔案,這在生成此檔案的例外情況下非常有用,例如在檔案系統 100% 已滿并且應用程式嘗試不成功地寫入磁盤或例外應用程式行為之后,在這些情況下,清理是必要的,因為盡管這些空檔案不占用磁盤空間,但如果大量創建0位元組檔案,它們可以使用所有可用的檔案系統 inodes,這反過來導致不再創建檔案,
-
~$ find . -type f -size 0b -ls
或者
-
~$ find . -type f -empty -ls
要了解檔案系統中可用的可用 inode 數,請使用 df-i 命令,
-
~# df -i -
檔案系統 Inode 已用(I) 可用(I) 已用(I)% 掛載點 -
/dev/vda1 2621440 704450 1916990 27% / -
devtmpfs 482468 331 482137 1% /dev -
tmpfs 485118 1 485117 1% /dev/shm -
tmpfs 485118 1041 484077 1% /run -
tmpfs 485118 16 485102 1% /sys/fs/cgroup -
tmpfs 485118 1 485117 1% /run/user/1001
13.打包及壓縮目錄內容
有時將目錄中的所有日志檔案打包到單個壓縮的 tar 檔案中以保留給定時間點的該目錄的狀態,然后安全地洗掉或清空所有這些檔案以釋放空間是有用的,
-
~# tar -zcvf var_log.`date +%Y%m%d`.tar.gz /var/log/*.log
上一個命令將所有日志檔案壓縮為擴展名為.tar.gz 的單個檔案和當天的日期,以便將來容易找到,讓我們看看如何節省空間,將此示例從 468 MB壓縮到 35 MB:
-
~# du -ch /var/log/*.log | grep total -
468M total -
~# ls -lh var_log.20181230.tar.gz -
-rw-r--r-- 1 root root 35M sep 30 13:36 var_log.20181230.tar.gz
之后,我們可以繼續清空所有日志檔案,如第3節所述,
14.回收站中查找檔案
通常當我們將檔案發送到回收站時,它只是移動到主目錄中的隱藏檔案夾,但是存在一些應用程式使用它們自己的目錄來存盤垃圾,其名稱是大寫或小寫的單詞 trash 的組合,并結合一系列數字,例如 .Trash001, .trash-002 , .Trash_0003 等
此外,當安裝來自外部硬碟驅動器或SD卡的檔案系統時,回收站的名稱可能因作業系統而異,導致無法識別,因此盡管垃圾箱已清空,但設備繼續使用大量空間沒有明顯的理由,
因此,解決方案在于搜索系統中沒有大小寫差異的所有 * trash *子目錄,并分析其內容以查看是否可以洗掉它(并不總是找到所有找到的專案都是垃圾),
以下是必需的命令,它的執行可能非常耗時,因此你可能想要輸入特定的檔案系統或目錄:
-
?$ find / - iname “* trash *” - ls
15.查找重復檔案
最后這是一個巨長的命令,允許你在目錄下查找和洗掉重復檔案,以避免不必要的冗余,這在消耗的磁盤空間方面可能非常昂貴,
-
~$ find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate | cut -f3-100 -d ' ' | tr '\n.' '\t.' | sed 's/\t\t/\n/g' | cut -f2-100 | tr '\t' '\n' | perl -i -pe 's/([ (){}-])/\\$1/g' | perl -i -pe 's/'\''/\\'\''/g' | xargs -pr rm -v
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/295860.html
標籤:Linux
