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 {} \;