如何找出Linux系統(tǒng)中最大的N個文件?講解15種方法
1. 前言
經(jīng)過一段時間使用后,我們會發(fā)現(xiàn)Linux的可用磁盤空間越來越少,這時我們就需要準(zhǔn)確地定位哪些文件或者哪些目錄占用了空間,并且有按大小排序文件或目錄的需求。
那么,如何使用Linux命令對系統(tǒng)文件中的目錄或者文件進(jìn)行統(tǒng)計,并查找出Linux系統(tǒng)上最大的文件呢?
通常我們有必要需要知道哪些文件或者目錄正在吞噬著磁盤空間。更進(jìn)一步來說,就是需要在文件系統(tǒng)中的特定目錄如 /tmp, /var 或者 /home 下查找。這篇文章將幫助我們在文件系統(tǒng)中查找最大的文件或目錄。
2. linux按硬盤空間占用的大小查找文件或者目錄相關(guān)的命令
這里沒有簡單的命令讓我們在 Linux/UNIX/BSD 文件系統(tǒng)中找到最大的文件/目錄。但我們可以通過如下的四個命令組合使用來實現(xiàn):
- du命令:估計磁盤空間使用量
- sort命令:排序
- head命令:取前幾條輸出
- find命令:查找文件
3. linux查找最大文件和目錄(文件夾)實用案例
在控制臺輸入如下命令找出/var/mysql目錄下最大的 10 個文件和目錄:
- [root@zcwyou ~]# du -a /var/mysql -h | sort -n -r | head -n 10
如果需要更佳的可讀性,可以執(zhí)行以下命令:
- [root@zcwyou ~]# cd /path/to/some/where
- [root@zcwyou ~]# du -hsx * | sort -rh | head -10
linux查找最大文件和目錄(文件夾)實用案例
參數(shù)解釋:du -h : 以人可讀的格式顯示 (eg. 1K, 234M, 2G)
du -s : 顯示每個參數(shù)的總數(shù)。 (summary)
du -x : 排除目錄
sort -r : 逆序 (reverse)
sort -h : human readable
head -10 或者 head -n 10 : 顯示前 10 條。
用如下的命令找出/usr/share/zcwyou目錄和其子目錄下最大的文件:
- [root@zcwyou ~]# find /usr/share/zcwyou -printf '%s %p\n'| sort -nr | head -10
找出當(dāng)前目錄和其子目錄下最大的文件:
- [root@zcwyou ~]# find . -printf '%s %p\n'| sort -nr | head -10
我們可以跳過某些特定目錄,僅顯示文件,輸入:
- [root@zcwyou ~]# find /path/to/search/ -type f -printf '%s %p\n'| sort -nr | head -10
或者
- [root@zcwyou ~]# find /path/to/search/ -type f -iname "*.mp4" -printf '%s %p\n'| sort -nr | head -10
或者建立一個命令別名,用命令abc代替du -cks * | sort -rn | head
采用 alias
- alias abc='du -cks * | sort -rn | head'
運(yùn)行如下命令來獲取最大的 10 個文件或目錄:
- [root@zcwyou ~]# abc
4. linux查找最大文件和目錄(文件夾)常見應(yīng)用場景
du命令的常用使用場景
使用語法
du -sh [dirname|filename]
統(tǒng)計并顯示當(dāng)前目錄占用的磁盤空間大小
- [root@zcwyou ~]# du -sh .
當(dāng)前目錄下個文件或目錄的大小:
- [root@zcwyou ~]# du -sh *
顯示前10個占用空間最大的文件或目錄:
- [root@zcwyou ~]# du -s * | sort -nr | head
選項-h
以人類易讀的格式顯示指定目錄或文件的大小
選項-s
選項指定對于目錄不詳細(xì)顯示每個子目錄或文件的大小
找到Linux磁盤或目錄中最大的n個文件
du加上了-a選項,可以看到所有的目錄和文件大小,按照大小排序,就可以得到最大的n個文件了:
在目錄/var/zcwyou中統(tǒng)計文件和目錄大小,使用du命令,du -k選項表示文件大小顯示為KB,之后按照大小排序,顯示前n行,這里n=10:
- [root@zcwyou ~]# du -ak /var/zcwyou | sort -nrk 1 | head -n 10
上面的命令不但顯示文件,而且顯示目錄,如果不想顯示目錄,可以先用find命令找出所有的文件,再執(zhí)行上面的命令:
- [root@zcwyou ~]# find /var/zcwyou -type f -exec du -k '{}' \; | sort -nrk 1 | head -n 10
下面的命令同樣可以實現(xiàn)類似的效果:
- [root@zcwyou ~]# find /var/zcwyou -type f -exec ls -l '{}' \; | awk '{print $5,$NF}' | sort -nrk 1 | head -n 10
上面的命令查找的都是目錄及子目錄下的文件,如果不找子目錄,那就簡單了,因為ls有個選項,可以按照文件大小排序,執(zhí)行以下命令
- [root@zcwyou ~]# ls -lhS /home/zcwyou | head -n 11
5. Linux 查找最大的文件夾
運(yùn)維的時候經(jīng)常遇到df -h磁盤空間快滿了的情況,一般來說是由于循環(huán)日志過大導(dǎo)致 。
使用下面的命令,能更快地定位問題所在。
案例:查找根目錄下的最大文件夾:
- [root@zcwyou ~]# cd /
- [root@zcwyou ~]# du -sh ./* sort
6. 結(jié)合`find`命令找到Linux文件系統(tǒng)里最大的10個文件
使用方法如下:
- [root@zcwyou ~]# find / -type f -print0 | xargs -0 du -h | sort -rh | head -n 10
7. linux查找最大文件或目錄相關(guān)的命令應(yīng)用
命令作用find搜索文件命令/在整個/目錄搜索-type指定文件類型f類型為普通文件-print0標(biāo)準(zhǔn)輸出完整文件名,后跟空字符(null)|管道符,前的命令給后的命令處理xargs把標(biāo)準(zhǔn)輸出轉(zhuǎn)換為命令行參數(shù)-0以空字符(null)來分割記錄du -h查看磁盤使用情況(可讀格式計算)sort文本排序-r反轉(zhuǎn)結(jié)果-h打印輸出(可讀格式)head開頭n -10打印前十
8. 總結(jié)
在Linux系統(tǒng)里靈活結(jié)合各種命令工具,可以非常高效地根據(jù)各種條件找到相關(guān)的文件。