linux--積累--分析清理服務器大文件--分析清理磁盤空間

Linux系統中如果發現/目錄剩餘空間不足,又不新增磁盤掛載,可以使用du和df命令來對找到 不用的大文件,對它們進行刪除,從而騰出足夠的空間。

詳細的操作步驟記錄如下:

df判斷佔空間多的目錄

使用df命令輸出如下:

[root@VM_0_9_centos /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        50G   15G   32G  32% /
devtmpfs        911M     0  911M   0% /dev
tmpfs           920M   24K  920M   1% /dev/shm
tmpfs           920M  388K  920M   1% /run
tmpfs           920M     0  920M   0% /sys/fs/cgroup
tmpfs           184M     0  184M   0% /run/user/0
[root@VM_0_9_centos /]# df 
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/vda1       51474044 15601312  33251368  32% /
devtmpfs          932296        0    932296   0% /dev
tmpfs             941920       24    941896   1% /dev/shm
tmpfs             941920      388    941532   1% /run
tmpfs             941920        0    941920   0% /sys/fs/cgroup
tmpfs             188388        0    188388   0% /run/user/0

-h表示 用human方便理解的單位進行顯示,如果不加-h則顯示的爲千字節Kilobytes(KB).

佔空間比較多的是根目錄 /, 對它進行詳細分析

du命令分析詳細目錄大小

使用命令如下:

[root@VM_0_9_centos /]# du -h --max-depth=1 / |sort -nr
du: cannot access ‘/proc/11318/task/11318/fd/4’: No such file or directory
du: cannot access ‘/proc/11318/task/11318/fdinfo/4’: No such file or directory
du: cannot access ‘/proc/11318/fd/4’: No such file or directory
du: cannot access ‘/proc/11318/fdinfo/4’: No such file or directory
416K	/run
136M	/boot
60K	/tmp
34M	/etc
28K	/home
16K	/lost+found
15G	/
8.0K	/opt
7.8G	/var
4.0K	/srv
4.0K	/mnt
4.0K	/media
3.3G	/usr
2.6G	/root
1.2G	/data
0	/sys
0	/proc
0	/dev

-h 表示 用human方便理解的單位進行顯示,如果不加-h則顯示的爲千字節Kilobytes(KB).
–max-depth=1 僅列出該目錄下面所有的一級目錄文件大小
|sort -nr 根據數字大小進行排序

我們注意到 這裏雖然進行了排序,但是因爲 使用的單位不同,導致不是很好判斷哪個目錄 最大,所以 最好統一單位,使用參數

-hm 統一使用M兆作爲單位顯示,輸出如下:

[root@VM_0_9_centos /]# du -hm --max-depth=1 / |sort -nr
du: cannot access ‘/proc/11770/task/11770/fd/4’: No such file or directory
du: cannot access ‘/proc/11770/task/11770/fdinfo/4’: No such file or directory
du: cannot access ‘/proc/11770/fd/4’: No such file or directory
du: cannot access ‘/proc/11770/fdinfo/4’: No such file or directory
15203	/
7943	/var
3287	/usr
2622	/root
1183	/data
136	/boot
34	/etc
1	/tmp
1	/srv
1	/run
1	/opt
1	/mnt
1	/media
1	/lost+found
1	/home
0	/sys
0	/proc
0	/dev
[root@VM_0_9_centos /]# 

所以 最大的目錄是/var

繼續用這種方式循環分析

[root@VM_0_9_centos /]# du -hm --max-depth=1 /var |sort -nr
7943	/var
4632	/var/log
2993	/var/mysql
189	/var/lib
129	/var/cache
1	/var/yp
1	/var/tmp
1	/var/spool
1	/var/preserve
1	/var/opt
1	/var/nis
1	/var/local
1	/var/kerberos
1	/var/gopher
1	/var/games
1	/var/empty
1	/var/db
1	/var/crash
1	/var/adm

/var/mysql是mysql的數據保存,不可以刪除

ll或者ls命令查看目錄下的文件是否可刪除

log目錄可以刪除,循環分析後發現 /var/log目錄下的文件都可以刪除

[root@VM_0_9_centos /]# ll /var/log/
total 441256
drwxr-xr-x. 2 root   root                 4096 Apr 21  2016 anaconda
drwxr-x---. 2 root   root                 4096 Jun 16 15:50 audit
-rw-r--r--  1 root   root                    0 Jun 19  2019 auth.log
-rw-r--r--  1 root   root                 8668 Mar  7  2018 boot.log
-rw-------  1 root   utmp             78690432 Jun 16 16:17 btmp
-rw-------  1 root   utmp            173324160 Jun  1 03:47 btmp-20200601
drwxr-xr-x. 2 chrony chrony               4096 Nov 24  2015 chrony

rm刪除不保留的文件

重要提示,在執行刪除前 最後先全部備份都 另一個目錄中,以防操作失誤。 在確保刪除正確之後 再把備份目錄刪除即可。

linux下刪除指定文件、文件夾:rm

Linux下刪除文件和文件夾常用命令如下:

  刪除文件: rm file1  file2  
  刪除文件夾: rm -rf dir

刪除指定文件(夾)之外的所有文件

需要在當前文件夾中進行:

刪除指定目錄之外的 文件

#刪除folder目錄之外的所有文件
rm -rf !(folder)

#刪除folder1和folder2文件之外的所有文件
rm -rf !(folder1 | folder2) 

當前文件夾中結合使用grep和xargs來處理文件名:

使用grep 刪除keep文件之外的所有文件

ls | grep -v keep | xargs rm 

說明: ls先得到當前的所有文件和文件夾的名字, grep -v keep,進行grep正則匹配查找keep,-v參數決定了結果爲匹配之外的結果,也就是的到了keep之外的所有文件名,然後 xargs用於從 標準輸入獲得參數 並且傳遞給後面的命令,這裏使用的命令是 rm,然後由rm刪除前面選擇的文件。

好處:使用了grep來正則表達式來匹配文件名字,可以一次保留多個文件,從而進行更加準確的處理。

使用find命令代替ls,改進方法3從而能夠處理制定文件夾的文件:

# 刪除當前test文件夾中keep文件之外的所有文件
find ./test/ | grep -v keep | xargs rm

說明,用grep而不用find -name選取名字,因爲find選取名字時比較麻煩,對正則表達式支持不夠,無法排除指定文件名。

直接使用find命令刪除其他文件:

# 刪除keep以外的其他文件。

find ./ -name '[^k][^e][^e][^p]*' -exec rm -rf {} \;

# 刪除keep以外的其他文件。推薦!

find ./ -name '[^k][^e][^e][^p]*' | xargs rm -rf 

說明:上面使用-exec的代碼效率高些,原因在於刪除多個文件時 -exec會啓動多個進程來處理,而xargs會啓動一個rm進程來處理。

例子 刪除debug.log 和sys.out 文件外的所有文件。

#建立查找規則
 vi test.txt 

^debug.log$
^sys.out$

#嘗試查找:
ls | grep -f test.txt 
debug.log
sys.out

#刪除要保留文件外的其它文件:
ls | grep -vf test.txt |xargs rm
#記得加v,保留要保留的文件,不要刪錯了

刪除超過一個月時間的日誌文件:

#刪除,文件名中帶有數字,超過30天的日誌:
cd /var/log
find -mtime +30 -name "*[0-9]*" -exec rm {} \;

#刪除,文件名中帶有gz,超過30天的日誌:
cd /var/log
find -mtime +30 -name "*gz*" -exec rm {} \;


#刪除,文件名中帶有log,超過30天的日誌:
cd /var/log
find -mtime +30 -name "*log*" -exec rm {}  \;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章