如何在 Linux 中查找大文件和目錄

在 Linux 服務器中查找大文件和目錄的大小是每個系統管理員在日常工作中遇到的最重要的任務之一。 因此,每個系統管理員都必須了解多種方法來找出佔用硬盤的較大磁盤和文件的大小。

有時,當您的系統磁盤如此迅速地被填滿並且您必鬚髮現哪些文件或目錄正在攝取時,它變得更加重要,Linux 上的所有磁盤區域。 在這種情況下,我們應該能夠找到正在填充數據的特定目錄位置。 由於沒有這樣的快捷命令可用於在 Linux 或 UNIX 文件系統上發現最大的文檔或目錄,但有一些可能通過使用一些命令行實用程序來幫助我們到達源位置。

因此,本教程將幫助您使用可在 Linux 或類 UNIX 系統上使用的多個命令來查找文件系統上最大的文件或目錄。

1) 使用查找命令

“查找”命令對於在目錄層次結構中搜索文件以及在系統中查找大文件和目錄非常有用。 讓我們運行下面的命令來列出大小大於 50MB 的所有文件,您可以指定更大的數字。

# find / -xdev -type f -size +50M

要查找有關這些大文件的更多詳細結果,您可以在參數下方擴展“查找”命令。

# find / -xdev -type f -size +50M -exec ls -alh {} ; | sort -nk 5

使用以下命令在系統的特定目錄中查找 10 個最大的文件。

# find /usr -type f -printf "%s %pn" | sort -rn | head -n 10
114973832 /usr/share/fonts/opentype/noto/NotoSansCJK.ttc
83333096 /usr/lib/thunderbird/libxul.so
78809336 /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.0
71551944 /usr/lib/firefox/libxul.so
58250232 /usr/lib/libreoffice/program/libmergedlo.so
41729688 /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.19.4
41587032 /usr/lib/x86_64-linux-gnu/libLLVM-3.8.so.1
41294304 /usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitPluginProcess2
37857816 /usr/lib/x86_64-linux-gnu/libQt5WebKit.so.5.5.1
35945726 /usr/local/bin/consul

2) 使用 ls 命令

‘ls’ 是一個 Linux shell 命令,用於列出文件和目錄的目錄內容。 您可以通過多種方式使用此命令來列出文件和文件夾。 要檢查當前目錄中按大小排序的文件列表,在頂部運行以下命令。

# ls -alhS
-rw-------  1 root root  59K Apr 18 20:57 agedu.dat
-rw-------  1 root root  13K Apr 20 18:27 .gt5.html
-rw-r--r--  1 root root  10K Jan 25 03:43 index.html
-rw-------  1 root root 4.1K Apr 22 22:06 .bash_history
drwx------  6 root root 4.0K Apr 18 20:57 .
drwxr-xr-x 24 root root 4.0K Apr 17 10:40 ..
drwx------  2 root root 4.0K Apr 20 17:03 .cache
drwx------  3 root root 4.0K Apr 12 15:38 .gnupg
drwx------  2 root root 4.0K Apr 20 18:27 .gt5-diffs
drwx------  2 root root 4.0K Apr 20 18:29 .w3m
-rw-r--r--  1 root root 3.1K Oct 22  2015 .bashrc
-rw-------  1 root root 1.1K Apr 12 15:43 .viminfo
-rw-r--r--  1 root root  148 Aug 17  2015 .profile

同樣,您可以使用 ‘ls’ 命令添加 r 用於遞歸顯示當前目錄中文件的大小,或者您可以指定該目錄的路徑,您希望看到那裡的文件大小。

# ls -lhtr
# ls -lhtr /var/log/

要在當前目錄中遞歸獲取前 10 個最大文件的列表,請使用以下命令。

# ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n10
456K initial-status.gz
356K syslog
248K dpkg.log
216K syslog.1
168K kern.log
160K kern.log.1
100K dpkg.log.2.gz
96K partman
92K syslog
84K syslog.6.gz

要獲得更多使用 ‘ls’ 命令的幫助,您可以使用以下命令。

# ls --help

3)使用gt5工具

‘gt5’ 是另一個很棒的命令行工具,可用於檢查 Linux 系統上文件和目錄的大小。 但是,它必須先安裝在您的系統上,然後才能開始使用。 要安裝“gt5”,您可以在 Linux 系統上使用以下命令。

# apt install gt5

安裝後,您可以使用以下命令檢查系統文件和目錄的大小。

# gt5
# gt5 /var

您可以指定任何由 ‘gt5’ 命令擴展的目錄來檢查最大大小的目錄和文件。 要進一步擴展目錄,請將鼠標光標拖到該目錄上並按 Enter。

# gt5 /var/log

讓我們將您的目錄更改為另一個路徑並運行“gt5”命令以查看頂級文件和目錄的內部視圖。

# cd /usr/src/linux-headers-4.10.0-20-generic/
#gt5

4) 使用 du 命令

“du”命令縮寫為磁盤使用情況,報告目錄樹的大小,包括其所有內容和單個文件的大小。 這使得它可用於跟踪空間豬,即在硬盤驅動器或其他存儲介質上消耗大量或過多空間的目錄和文件。

‘du’ 的基本語法如下所示。

# du [options] [directories and/or files]

要找出 Linux/UNIX 文件系統上的頂級文件和目錄,沒有任何適當的 du 命令來獲取所需的輸出,而是將其與其他命令(如“sort”、“head”和“find”)一起使用,如下所示. 要以更易讀的形式獲得輸出,您可以在 ‘du’ 命令中使用 ‘-h’ 參數。

# du -ah /var | sort -n -r | head -n 10
1020K   /var/cache/apt/archives/fonts-dejavu-core_2.37-1_all.deb
1016K   /var/cache/apt/archives/udev_232-21ubuntu3_amd64.deb
1016K   /var/cache/apt/archives/libxatracker2_12.0.6-0ubuntu0.16.04.1_amd64.deb
1016K   /var/cache/apt/archives/colord-data_1.3.3-2_all.deb
1016K   /var/cache/apt/archives/colord-data_1.3.2-1_all.deb
1004K   /var/cache/apt/archives/libxatracker2_12.0.6-0ubuntu0.16.10.1_amd64.deb
1004K   /var/cache/app-info/gv
1000K   /var/cache/app-info/gv/en_US.gvz
996K    /var/cache/apt/archives/udev_231-9ubuntu4_amd64.deb
996K    /var/cache/apt/archives/netpbm_2%3a10.0-15.3build1_amd64.deb

接下來,您可以通過移動到您想要檢查頂級文件的所需目錄來使用以下命令,如圖所示。

# cd /var/log/
# du -hsx * | sort -rh | head -10
2.9M    dpkg.log.1
2.0M    dist-upgrade
1.6M    kern.log.1
932K    installer
232K    syslog.2.gz
228K    tomcat8
188K    syslog.1
188K    auth.log.1
144K    kern.log
136K    apt

5) Ncdu 命令來檢查磁盤使用情況

Ncdu 是一個帶有 Ncurses 接口的磁盤使用分析器。 在跟踪佔用空間的文件和目錄時,它非常有用且易於使用。 您可以在 Ubuntu 或 RHEL 系統上使用以下命令簡單地安裝它。

# apt install ncdu
# yum install ncdu

安裝後,您可以開始使用此命令來檢查系統的磁盤使用情況。

# ncdu

運行此命令後,它將開始更新您的磁盤並在終端上顯示結果。 使用以下命令檢查系統根分區的磁盤使用情況。

# ncdu /

最大的文件夾出現在頂部,方便您進行故障排除。 您可以使用它的幫助命令來了解更多有關它的用法的信息,從而從中獲得更多好處。

6) 查找磁盤消耗最高的目錄的 Shell 腳本

在這個 shell 腳本中,我們將看到哪些頂級目錄正在消耗大量磁盤空間,以便我們可以在緊急情況下釋放一些空間。 我們在這個腳本中使用的命令是帶有不同鍵的 ‘du’,’sort’ 和 ‘head’。

讓我們使用命令行編輯器(如“vi”)創建一個新文件,並將以下內容放入其中,如下所示。

# vim topdir.sh
#/bin/bash

    #check if user input argument

    if [ $# -eq 0 ]; then

    #if no argument print next messge and exit from script
    echo "Usage: $0 "

    exit 1

    fi
    # Save first arguments to variables
    CheckedDir="$1"
    #
    HeadValue=$2
    #set value for variable count value 1
    count=1

    #just print empty line
    echo ""

    #Print next message:
    echo "Here is the ${HeadValue} biggest directories located in ${CheckedDir}:"

    echo ""

    #Getting list of directories and space they use.
    du -a --max-depth=1 --one-file-system ${CheckedDir}/ |

    #next we sort result
    sort -rn |

    sed "1d" |

    # next we get only first X directories
    head -"${HeadValue}" |

    #next print result to user
    while read size dirrr ; do
    #counting size in Mb

    size="$(( size / 1024 ))"

    #show output for user
    echo "N°${count} : ${dirrr} is ${size} Mb"

    ((count++))

    done

    echo ""

Save 和 close 配置文件,賦予文件可執行權限,然後運行腳本以在您定義的位置下查找頂級目錄,如圖所示。

# chmod +x topdir.sh
# ./topdir.sh /var/log/

結論

在本教程中,我們使用了多個命令行實用程序來檢查 Linux 系統磁盤上的大型目錄。 我們經常使用多種方式來訪問那些佔用大量磁盤空間的文件或目錄,並且必須使用此類命令來訪問這些文件和目錄。 在本文中,我們僅介紹了用於查找磁盤空間使用情況的命令行工具,同時還有許多其他 Web 分析器可用於查找和監視包含大文件和目錄的磁盤空間。