5 款可替代 du 命令的工具!

作者:JackTian
文章首發(fā)于公眾號:【杰哥的IT之旅】

大家好恳不,我是杰哥。

上篇文章中开呐,給大家介紹了《10 款你不知道的 Linux 環(huán)境下的替代工具烟勋!》主要包括:bat、duf筐付、tldr卵惦、htop、glances瓦戚、exa沮尿、fd、ag较解、axel畜疾、pydf 方面的內(nèi)容及運(yùn)用赴邻,后來我繼續(xù)摸索,又發(fā)現(xiàn)一些很好的替代品并進(jìn)行歸納庸疾。

那么乍楚,我相信這篇文章基于原生的命令你也知道,在 Linux 環(huán)境下届慈,du 命令大家都不陌生徒溪,它可以對 Linux 系統(tǒng)中的文件和目錄空間使用情況進(jìn)行計(jì)算和匯總。

當(dāng)文件占用磁盤空間 80 % 且在暫時(shí)無法擴(kuò)容空間的情況下金顿,我們可以找出系統(tǒng)中占比磁盤空間較大的具體目錄下的文件進(jìn)行清理臊泌,只需執(zhí)行如下命令即可查看文件夾占用空間大小。

# du -sh

進(jìn)入占用空間較大的文件夾執(zhí)行如下命令可以將當(dāng)前目錄下的文件從大到小排序揍拆。

# du -sh * |sort -rh

將輸出后占用空間較大的文件根據(jù)實(shí)際情況判斷是否可以正常刪除渠概,從而來釋放磁盤空間并進(jìn)行觀察磁盤使用率。

當(dāng)文件占用磁盤空間較多時(shí)嫂拴,du 就會(huì)執(zhí)行很慢播揪,每次會(huì)反復(fù)執(zhí)行來找出大文件,效率較低筒狠,此時(shí)ncdu就可以來解決該問題猪狈。

一、ncdu

ncdu 是一個(gè)使用 C 語言和 ncurses 接口開發(fā)的簡易快速的磁盤用量分析器辩恼,可以用來查看目錄或文件在本地或遠(yuǎn)程系統(tǒng)上占用磁盤空間的情況雇庙。

Ubuntu 21.10 安裝 ncdu:

# sudo apt-get install ncdu

ncdu 參數(shù)選項(xiàng):

  • -h:幫助信息
  • -q:靜音模式,刷新間為 2 秒
  • -v:打印版本
  • -x:相同的文件系統(tǒng)
  • -e:啟用擴(kuò)展信息
  • -r:只讀
  • -o FILE:將掃描目錄導(dǎo)出為文件
  • -f FILE:從文件中導(dǎo)入掃描目錄
  • -0,-1,-2:掃描時(shí)使用的 UI (0=none,2=full ncurses)
  • --si:使用基數(shù) 10 (SI) 前綴而不是基數(shù) 2
  • --exclude PATTERN:排除匹配 PATTERN 的文件
  • -X, --exclude-from FILE:排除與文件中任何模式匹配的文件
  • -L, --follow-symlinks:按照符號鏈接(不包括目錄)
  • --exclude-caches:排除包含 CACHEDIR.TAG 的目錄
  • --exclude-kernfs:排除 Linux 偽文件系統(tǒng)(procfs灶伊、sysfs疆前、cgroup…)
  • --confirm-quit:確認(rèn)退出
  • --color SCHEME:設(shè)置配色方案

如果不使用任何參數(shù)選項(xiàng),可直接在需要分析的目錄下執(zhí)行命令ncdu聘萨,等待 ncdu 掃描完畢后竹椒,此時(shí)就會(huì)彈出一個(gè)交互式的終端界面。

可以清晰的看出每個(gè)目錄的大小米辐,使用方向鍵Enter鍵可進(jìn)入或退出所選的具體目錄碾牌。

當(dāng)發(fā)現(xiàn)某個(gè)目錄或文件占用空間較大時(shí),可根據(jù)上述使用鍵盤情況找到那個(gè)文件儡循,切合實(shí)際情況確認(rèn)如果可以刪除的話,無需退出 ncdu征冷,選中要?jiǎng)h除的目錄或文件后择膝,按d鍵即可刪除,若刪除完畢检激,按q鍵即可退出肴捉。

image

二腹侣、dust

dust(du + rust = dust)是用 rust 編寫的一個(gè)免費(fèi)、開源齿穗、更直觀的 du 工具傲隶,也是一個(gè)提供文件類型和元數(shù)據(jù)的工具。

Ubuntu 21.10 安裝 dust:

du-dust_0.7.1_amd64.deb 是 dust GitHub 存儲(chǔ)庫中的最新版本窃页,從 dust 的發(fā)布頁面下載.deb文件跺株,可執(zhí)行如下命令進(jìn)行下載和安裝。

# wget https://github.com/bootandy/dust/releases/du-dust_0.7.1_amd64.deb
# dpkg -i du-dust_0.7.1_amd64.deb

對于其他系統(tǒng)脖卖,可以參考 GitHub 上 dust 的其他操作系統(tǒng)安裝方式乒省。

dust 用法:

dust [FLAGS] [OPTIONS] [--] [inputs]...

dust 參數(shù)選項(xiàng):

  • -f:目錄“大小”是子文件/目錄的數(shù)量,而不是磁盤大小
  • -s:使用文件長度而不是塊
  • -p:子目錄的路徑不會(huì)縮短
  • -h:幫助信息
  • -i:不顯示隱藏文件
  • -x:僅計(jì)算與提供的目錄位于同一文件系統(tǒng)上的文件和目錄
  • -b:不會(huì)顯示百分比條或百分比
  • -c:不會(huì)打印顏色(通常最大的目錄是彩色的)
  • -r:打印樹倒置(最大的最高)
  • -t:僅顯示這些文件類型
  • -V:打印版本信息
  • -d:顯示深度
  • -e:僅包含與此正則表達(dá)式匹配的文件畦木。對于 png 文件類型:-e ".png$"
  • -X:排除任何具有此名稱的文件或目錄
  • -v:排除與此正則表達(dá)式匹配的文件袖扛。忽略 png 文件類型:-v ".png$"
  • -n:要顯示的輸出行數(shù)。這是高度十籍,(但 h 有幫助)[默認(rèn)值:23]
  • -w:指定輸出的寬度覆蓋終端寬度的自動(dòng)檢測

dust 使用:

查看當(dāng)前目錄及所有子目錄下的文件大小蛆封,可以執(zhí)行以下命令:

# dust

-p參數(shù)可以按照從當(dāng)前目錄起始的完整目錄進(jìn)行顯示

# dust -p

如果只查看多個(gè)目錄的大小,只需要同時(shí)列出這些目錄勾栗,并用空格分隔開即可:

# dust /bin /etc

顯示文件的長度:

# dust -s

只顯示 10 個(gè)目錄:

# dust -n 10

三惨篱、duu

duu 是 Directory Usage Utility(目錄使用實(shí)用程序)的縮寫,基于 Python 語言編寫的查看指定目錄大小的工具械姻,具有跨平臺(tái)特性妒蛇,可以在 Windows、Linux 和 MacOS 操作系統(tǒng)上使用楷拳,它是以千字節(jié)為單位顯示目錄磁盤使用情況绣夺。

Ubuntu 21.10 安裝 duu:

安裝 duu 工具之前需要先確保系統(tǒng)有沒有安裝 Python 3 環(huán)境,沒有的話需要安裝一下欢揖,有的話忽略即可陶耍,不過目前在大多數(shù) Linux 發(fā)行版中默認(rèn)軟件倉庫都是有 Python 3 的。

v2.22.tar.gz 是 duu GitHub 存儲(chǔ)庫中最新版本的源碼包她混,從 duu 的發(fā)布頁面下載.tar.gz文件烈钞,可執(zhí)行如下命令進(jìn)行下載和安裝。

# wget https://github.com/jftuga/duu/archive/refs/tags/v2.22.tar.gz
# tar -zxvf v2.22.tar.gz

解壓完畢后坤按,進(jìn)入 duu-2.22 文件夾毯欣,查看duu.py文件是否存在。

# ls | grep duu
duu-2.22
# cd duu-2.22/
# ls
duu.py  LICENSE  README.md

duu 用法:

duu.py [-h] [-b] [-e] [-q] [-s STATUS] [-n] [-N] [-f] [-S] [-H] [-T THREADS] [-x EXCLUDE] [-X REGEXPR] [-o OUTPUT] [dname]

duu 參數(shù)選項(xiàng):

  • -h:幫助信息
  • -b:不打印摘要或統(tǒng)計(jì)數(shù)據(jù)臭脓,專門用于排序時(shí)使用
  • -e:總結(jié)文件擴(kuò)展名
  • -q:不顯示單個(gè)目錄
  • -s:將處理狀態(tài)發(fā)送到 STDERR酗钞,每個(gè) STATUS 目錄數(shù)
  • -n:跳過以“.”開頭的目錄
  • -N:不遞歸
  • -f:顯示每個(gè)目錄中的文件數(shù)
  • -S:顯示均值、中值、眾數(shù)和標(biāo)準(zhǔn)差文件統(tǒng)計(jì)信息
  • -H:以更易讀的格式顯示數(shù)字
  • -T:并發(fā)線程數(shù)砚作,考慮 SAN
  • -x:排除不分大小寫字符串的冒號分隔列表
  • -X:排除不分大小寫正則表達(dá)式的冒號分隔列表
  • -o:輸出到 CSV 文件

duu 使用:

查看當(dāng)前目錄的大小窘奏,只需要執(zhí)行如下命令:

# python3 duu.py

如上圖,可以看出 duu 會(huì)顯示當(dāng)前目錄下文件和目錄的數(shù)量并按照 Bytes葫录、KB着裹、MB 為單位顯示這些文件的總大小,以及每個(gè)文件的大小米同。

查看某個(gè)目錄的大小骇扇,只需要把目錄的絕對路徑加上即可:

# python3 duu.py /etc/init.d/

四、diskus

diskus 也是基于 Rust 編寫的一個(gè)小型窍霞、快速匠题、可替代du -sh命令的開源工具,diskus 會(huì)計(jì)算當(dāng)前目錄下所有文件的大小但金,執(zhí)行命令diskus效果和du -sh韭山、du -sh --bytes是一樣的。

根據(jù) diskus GitHub 存儲(chǔ)庫的開發(fā)者表示冷溃,在他的 8 核筆記本電腦上钱磅,以 hyperfine 命令行基準(zhǔn)測試工具將中等大小的文件夾(15GB、100k 目錄似枕、400k 文件)進(jìn)行測試盖淡,對于較小的文件夾測試實(shí)際上是沒有意義的,因?yàn)樗谐绦蚨紩?huì)在合理的時(shí)間內(nèi)完成凿歼,而不會(huì)中斷您的工作流程褪迟,從而得出的結(jié)論是:diskus 比 du 冷磁盤緩存快十倍左右,熱磁盤緩存快三倍多答憔。

以下是冷磁盤緩存熱磁盤緩存基于diskus味赃、du -shsn p -d0 -j8dust -d0命令測試出的結(jié)果對比虐拓。

冷磁盤緩存

Command Mean [s] Min [s] Max [s] Relative
diskus 1.746 ± 0.017 1.728 1.770 1.00
du -sh 17.776 ± 0.549 17.139 18.413 10.18
sn p -d0 -j8 18.094 ± 0.566 17.482 18.579 10.36
dust -d0 21.357 ± 0.328 20.974 21.759 12.23

熱磁盤緩存

Command Mean [s] Min [s] Max [s] Relative
diskus 500.3 ± 17.3 472.9 530.6 1.00
du -sh 1098.3 ± 10.0 1087.8 1122.4 2.20
sn p -d0 -j8 1122.2 ± 18.2 1107.3 1170.1 2.24
dust -d0 3532.1 ± 26.4 3490.0 3563.1 7.06

Ubuntu 21.10 安裝 diskus:

diskus_0.7.0_amd64.deb 是 diskus GitHub 存儲(chǔ)庫中的最新版本心俗,從 diskus 的發(fā)布頁面下載.deb文件,可執(zhí)行如下命令進(jìn)行下載和安裝蓉驹。

# wget https://github.com/sharkdp/diskus/releases/download/v0.7.0/diskus_0.7.0_amd64.deb
# dpkg -i diskus_0.7.0_amd64.deb

對于其他系統(tǒng)城榛,可以參考 GitHub 上 diskus 的其他操作系統(tǒng)安裝方式進(jìn)行安裝。

diskus 用法:

diskus [OPTIONS] [path]...

diskus 參數(shù)選項(xiàng):

  • -j:設(shè)置線程數(shù)(默認(rèn):3 x num cores)态兴,文件大小的輸出格式(十進(jìn)制:MB狠持,二進(jìn)制:MiB)[默認(rèn):十進(jìn)制] [可能的值:十進(jìn)制、二進(jìn)制]
  • -v:不隱藏文件系統(tǒng)錯(cuò)誤
  • -b:計(jì)算表觀大小而不是磁盤使用量
  • -h:幫助信息
  • -v:版本信息

diskus 使用:

使用du -sh 路徑的命令可以查看某個(gè)目錄的大小瞻润,這里的-s參數(shù)表示顯示總大小喘垂。

# du -sh /etc
16M    /etc

如果使用diskus可直接顯示當(dāng)前目錄的總大小献汗。

# diskus

如果你想查看某個(gè)目錄的大小,可以在diskus后面加絕對路徑王污。

# diskus /etc
16.66 MB (16,662,528 bytes)

五、tin-summer

tin-summer(sn)是基于 Rust 語言編寫的開源工具楚午,也是du命令的替代品昭齐,可以用于查找占用磁盤空間的文件,以更好的輸出矾柜、更清晰的命令和默認(rèn)值阱驾,而且由于多線程,它甚至可以在計(jì)算大目錄下的大小時(shí)會(huì)比 du 命令運(yùn)行得更快怪蔑,tin-summer 與 du 命令之間的區(qū)別是前者讀取文件的大小里覆,而后者則讀取磁盤使用情況。

此外缆瓣,tin-summer 的開發(fā)者也針對 du 和 sn 做了鮮明的使用理由對比喧枷。

使用 du 的理由:

  • 可讀取磁盤使用情況,而不僅僅是文件大小
  • 可選的取消引用符號鏈接
  • 可在小目錄上稍微快一點(diǎn)
  • 穩(wěn)定且支持良好

使用 sn 的理由:

  • 在大目錄下更快
  • 使用正則表達(dá)式進(jìn)行排除弓坞,使其在與 --exclude 標(biāo)志一起使用時(shí)比 du 快得多隧甚。
  • 默認(rèn)為可讀的輸出
  • 彩色輸出
  • 通過獲得更好的幫助
  • 提供排序輸出
  • 查找構(gòu)建工件
  • 讀取文件大小,而不是磁盤使用情況
  • 在 Rust 中可擴(kuò)展

同時(shí)渡冻,也做了基準(zhǔn)測試戚扳,從而來對比 sn 和 du 執(zhí)行不同目錄大小的時(shí)間結(jié)果。

Directory Size Tool Command Time
600MB sn sn p 60.74 ms
600MB sn sn d 99.92 ms
600MB du du -hacd2 88.28 ms
4GB sn sn p 185.2 ms
4GB sn sn d 271.9 ms
4GB du du -hacd2 195.5 ms
700MB sn sn p 91.05 ms
700MB sn sn d 176.3 ms
700MB du du -hacd2 153.8 ms
7MB sn sn p 19.48 ms
7MB sn sn d 12.72 ms
7MB du du -hacd2 10.13 ms

安裝 tin-summer:

# curl -LSfs https://japaric.github.io/trust/install.sh | sh -s -- --git vmchale/tin-summer

也可以使用cargo軟件包管理器安裝tin-summer族吻,前提是需要在系統(tǒng)上安裝 Rust帽借。如果 Rust 已安裝好的話,可執(zhí)行如下命令:

# cargo install tin-summer

如果上述兩種安裝方式都尚未成功安裝 tin-summer超歌,還可以通過 tin-summer GitHub 存儲(chǔ)庫的發(fā)布區(qū)下載最新版本的二進(jìn)制文件進(jìn)行手動(dòng)安裝砍艾。

tin-summer 的使用:

查看當(dāng)前目錄文件大小,無需添加任何參數(shù)握础,tin-summer 也是默認(rèn)以易讀的格式向用戶進(jìn)行輸出辐董,可執(zhí)行如下命令:

# sn f

查看某個(gè)特定目錄的文件大小,可執(zhí)行如下命令:

# sn f <path-to-the-directory>

在當(dāng)前目錄中搜索包含構(gòu)建工件的目錄禀综,可執(zhí)行如下命令:

# sn ar

查找占用超過 200MB 磁盤空間的工件或包含工件的目錄简烘,可執(zhí)行如下命令:

# sn ar -t200M

獲取 $DIR 中 10 個(gè)最大目錄的排序列表,可執(zhí)行如下命令:

# sn sort $DIR -n12

sn 實(shí)際在操作大目錄的時(shí)候速度比較快定枷,在操作小目錄的時(shí)候孤澎,速度會(huì)相對比較慢一些。

參考文獻(xiàn)

dust:https://github.com/bootandy/dust/
duu:https://github.com/jftuga/duu
diskus:https://github.com/sharkdp/diskus/
tin-summer:https://github.com/vmchale/tin-summer

推薦閱讀

10 款你不知道的 Linux 環(huán)境下的替代工具欠窒!

11 款可替代 top 命令的工具覆旭!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末退子,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子型将,更是在濱河造成了極大的恐慌寂祥,老刑警劉巖缠借,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砖织,死亡現(xiàn)場離奇詭異咽块,居然都是意外死亡龙助,警方通過查閱死者的電腦和手機(jī)徽缚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門实辑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尘奏,“玉大人马昨,你說我怎么就攤上這事狠裹∷浣纾” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵涛菠,是天一觀的道長莉御。 經(jīng)常有香客問我,道長碗暗,這世上最難降的妖魔是什么颈将? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮言疗,結(jié)果婚禮上晴圾,老公的妹妹穿的比我還像新娘。我一直安慰自己噪奄,他們只是感情好死姚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著勤篮,像睡著了一般都毒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碰缔,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天账劲,我揣著相機(jī)與錄音,去河邊找鬼金抡。 笑死瀑焦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梗肝。 我是一名探鬼主播榛瓮,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼巫击!你這毒婦竟也來了禀晓?” 一聲冷哼從身側(cè)響起精续,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粹懒,沒想到半個(gè)月后重付,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凫乖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年堪夭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拣凹。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖恨豁,靈堂內(nèi)的尸體忽然破棺而出嚣镜,到底是詐尸還是另有隱情,我是刑警寧澤橘蜜,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布菊匿,位于F島的核電站,受9級特大地震影響计福,放射性物質(zhì)發(fā)生泄漏跌捆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一象颖、第九天 我趴在偏房一處隱蔽的房頂上張望佩厚。 院中可真熱鬧,春花似錦说订、人聲如沸抄瓦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钙姊。三九已至,卻和暖如春埂伦,著一層夾襖步出監(jiān)牢的瞬間煞额,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工沾谜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膊毁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓类早,卻偏偏與公主長得像媚媒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子涩僻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容