5 款可替代 du 命令的工具!
大家好,我是杰哥。
上篇文章中,給大家介紹了《10 款你不知道的 Linux 環境下的替代工具!》主要包括:bat、duf、tldr、htop、glances、exa、fd、ag、axel、pydf 方面的內容及運用,后來我繼續摸索,又發現一些很好的替代品并進行歸納。
那么,我相信這篇文章基于原生的命令你也知道,在 Linux 環境下,du 命令大家都不陌生,它可以對 Linux 系統中的文件和目錄空間使用情況進行計算和匯總。
當文件占用磁盤空間 80 % 且在暫時無法擴容空間的情況下,我們可以找出系統中占比磁盤空間較大的具體目錄下的文件進行清理,只需執行如下命令即可查看文件夾占用空間大小。
#?du?-sh進入占用空間較大的文件夾執行如下命令可以將當前目錄下的文件從大到小排序。
#?du?-sh?*?|sort?-rh將輸出后占用空間較大的文件根據實際情況判斷是否可以正常刪除,從而來釋放磁盤空間并進行觀察磁盤使用率。
當文件占用磁盤空間較多時,du 就會執行很慢,每次會反復執行來找出大文件,效率較低,此時ncdu就可以來解決該問題。
一、ncdu
ncdu 是一個使用 C 語言和 ncurses 接口開發的簡易快速的磁盤用量分析器,可以用來查看目錄或文件在本地或遠程系統上占用磁盤空間的情況。
Ubuntu 21.10 安裝 ncdu:
#?sudo?apt-get?install?ncduncdu 參數選項:
-h:幫助信息
-q:靜音模式,刷新間為 2 秒
-v:打印版本
-x:相同的文件系統
-e:啟用擴展信息
-r:只讀
-o FILE:將掃描目錄導出為文件
-f FILE:從文件中導入掃描目錄
-0,-1,-2:掃描時使用的 UI (0=none,2=full ncurses)
--si:使用基數 10 (SI) 前綴而不是基數 2
--exclude PATTERN:排除匹配 PATTERN 的文件
-X, --exclude-from FILE:排除與文件中任何模式匹配的文件
-L, --follow-symlinks:按照符號鏈接(不包括目錄)
--exclude-caches:排除包含 CACHEDIR.TAG 的目錄
--exclude-kernfs:排除 Linux 偽文件系統(procfs、sysfs、cgroup…)
--confirm-quit:確認退出
--color SCHEME:設置配色方案
如果不使用任何參數選項,可直接在需要分析的目錄下執行命令ncdu,等待 ncdu 掃描完畢后,此時就會彈出一個交互式的終端界面。
可以清晰的看出每個目錄的大小,使用方向鍵或Enter鍵可進入或退出所選的具體目錄。
當發現某個目錄或文件占用空間較大時,可根據上述使用鍵盤情況找到那個文件,切合實際情況確認如果可以刪除的話,無需退出 ncdu,選中要刪除的目錄或文件后,按d鍵即可刪除,若刪除完畢,按q鍵即可退出。
二、dust
dust(du + rust = dust)是用 rust 編寫的一個免費、開源、更直觀的 du 工具,也是一個提供文件類型和元數據的工具。
Ubuntu 21.10 安裝 dust:
du-dust_0.7.1_amd64.deb 是 dust GitHub 存儲庫中的最新版本,從 dust 的發布頁面下載.deb文件,可執行如下命令進行下載和安裝。
# wget?https://github.com/bootandy/dust/releases/du-dust_0.7.1_amd64.deb # dpkg?-i?du-dust_0.7.1_amd64.deb對于其他系統,可以參考 GitHub 上 dust 的其他操作系統安裝方式。
dust 用法:
dust?[FLAGS]?[OPTIONS]?[--]?[inputs]...dust 參數選項:
-f:目錄“大小”是子文件/目錄的數量,而不是磁盤大小
-s:使用文件長度而不是塊
-p:子目錄的路徑不會縮短
-h:幫助信息
-i:不顯示隱藏文件
-x:僅計算與提供的目錄位于同一文件系統上的文件和目錄
-b:不會顯示百分比條或百分比
-c:不會打印顏色(通常最大的目錄是彩色的)
-r:打印樹倒置(最大的最高)
-t:僅顯示這些文件類型
-V:打印版本信息
-d:顯示深度
-e:僅包含與此正則表達式匹配的文件。對于 png 文件類型:-e ".png$"
-X:排除任何具有此名稱的文件或目錄
-v:排除與此正則表達式匹配的文件。忽略 png 文件類型:-v ".png$"
-n:要顯示的輸出行數。這是高度,(但 h 有幫助)[默認值:23]
-w:指定輸出的寬度覆蓋終端寬度的自動檢測
dust 使用:
查看當前目錄及所有子目錄下的文件大小,可以執行以下命令:
# dust-p參數可以按照從當前目錄起始的完整目錄進行顯示
# dust?-p如果只查看多個目錄的大小,只需要同時列出這些目錄,并用空格分隔開即可:
#?dust?/bin?/etc顯示文件的長度:
#?dust?-s只顯示 10 個目錄:
#?dust?-n?10三、duu
duu 是 Directory Usage Utility(目錄使用實用程序)的縮寫,基于 Python 語言編寫的查看指定目錄大小的工具,具有跨平臺特性,可以在 Windows、Linux 和 MacOS 操作系統上使用,它是以千字節為單位顯示目錄磁盤使用情況。
Ubuntu 21.10 安裝 duu:
安裝 duu 工具之前需要先確保系統有沒有安裝 Python 3 環境,沒有的話需要安裝一下,有的話忽略即可,不過目前在大多數 Linux 發行版中默認軟件倉庫都是有 Python 3 的。
v2.22.tar.gz 是 duu GitHub 存儲庫中最新版本的源碼包,從 duu 的發布頁面下載.tar.gz文件,可執行如下命令進行下載和安裝。
#?wget?https://github.com/jftuga/duu/archive/refs/tags/v2.22.tar.gz #?tar?-zxvf?v2.22.tar.gz解壓完畢后,進入 duu-2.22 文件夾,查看duu.py文件是否存在。
#?ls?|?grep?duu duu-2.22 #?cd?duu-2.22/ #?ls duu.py??LICENSE??README.mdduu 用法:
duu.py?[-h]?[-b]?[-e]?[-q]?[-s?STATUS]?[-n]?[-N]?[-f]?[-S]?[-H]?[-T?THREADS]?[-x?EXCLUDE]?[-X?REGEXPR]?[-o?OUTPUT]?[dname]duu 參數選項:
-h:幫助信息
-b:不打印摘要或統計數據,專門用于排序時使用
-e:總結文件擴展名
-q:不顯示單個目錄
-s:將處理狀態發送到 STDERR,每個 STATUS 目錄數
-n:跳過以“.”開頭的目錄
-N:不遞歸
-f:顯示每個目錄中的文件數
-S:顯示均值、中值、眾數和標準差文件統計信息
-H:以更易讀的格式顯示數字
-T:并發線程數,考慮 SAN
-x:排除不分大小寫字符串的冒號分隔列表
-X:排除不分大小寫正則表達式的冒號分隔列表
-o:輸出到 CSV 文件
duu 使用:
查看當前目錄的大小,只需要執行如下命令:
#?python3?duu.py如上圖,可以看出 duu 會顯示當前目錄下文件和目錄的數量并按照 Bytes、KB、MB 為單位顯示這些文件的總大小,以及每個文件的大小。
查看某個目錄的大小,只需要把目錄的絕對路徑加上即可:
#?python3?duu.py?/etc/init.d/四、diskus
diskus 也是基于 Rust 編寫的一個小型、快速、可替代du -sh命令的開源工具,diskus 會計算當前目錄下所有文件的大小,執行命令diskus效果和du -sh、du -sh --bytes是一樣的。
根據 diskus GitHub 存儲庫的開發者表示,在他的 8 核筆記本電腦上,以 hyperfine 命令行基準測試工具將中等大小的文件夾(15GB、100k 目錄、400k 文件)進行測試,對于較小的文件夾測試實際上是沒有意義的,因為所有程序都會在合理的時間內完成,而不會中斷您的工作流程,從而得出的結論是:diskus 比 du 冷磁盤緩存快十倍左右,熱磁盤緩存快三倍多。
以下是冷磁盤緩存和熱磁盤緩存基于diskus、du -sh、sn p -d0 -j8和dust -d0命令測試出的結果對比。
冷磁盤緩存
| 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 |
熱磁盤緩存
| 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 存儲庫中的最新版本,從 diskus 的發布頁面下載.deb文件,可執行如下命令進行下載和安裝。
#?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對于其他系統,可以參考 GitHub 上 diskus 的其他操作系統安裝方式進行安裝。
diskus 用法:
diskus?[OPTIONS]?[path]...diskus 參數選項:
-j:設置線程數(默認:3 x num cores),文件大小的輸出格式(十進制:MB,二進制:MiB)[默認:十進制] [可能的值:十進制、二進制]
-v:不隱藏文件系統錯誤
-b:計算表觀大小而不是磁盤使用量
-h:幫助信息
-v:版本信息
diskus 使用:
使用du -sh 路徑的命令可以查看某個目錄的大小,這里的-s參數表示顯示總大小。
#?du?-sh?/etc 16M????/etc如果使用diskus可直接顯示當前目錄的總大小。
#?diskus如果你想查看某個目錄的大小,可以在diskus后面加絕對路徑。
#?diskus?/etc 16.66?MB?(16,662,528?bytes)五、tin-summer
tin-summer(sn)是基于 Rust 語言編寫的開源工具,也是du命令的替代品,可以用于查找占用磁盤空間的文件,以更好的輸出、更清晰的命令和默認值,而且由于多線程,它甚至可以在計算大目錄下的大小時會比 du 命令運行得更快,tin-summer 與 du 命令之間的區別是前者讀取文件的大小,而后者則讀取磁盤使用情況。
此外,tin-summer 的開發者也針對 du 和 sn 做了鮮明的使用理由對比。
使用 du 的理由:
可讀取磁盤使用情況,而不僅僅是文件大小
可選的取消引用符號鏈接
可在小目錄上稍微快一點
穩定且支持良好
使用 sn 的理由:
在大目錄下更快
使用正則表達式進行排除,使其在與 --exclude 標志一起使用時比 du 快得多。
默認為可讀的輸出
彩色輸出
通過獲得更好的幫助
提供排序輸出
查找構建工件
讀取文件大小,而不是磁盤使用情況
在 Rust 中可擴展
同時,也做了基準測試,從而來對比 sn 和 du 執行不同目錄大小的時間結果。
| 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,前提是需要在系統上安裝 Rust。如果 Rust 已安裝好的話,可執行如下命令:
#?cargo?install?tin-summer如果上述兩種安裝方式都尚未成功安裝 tin-summer,還可以通過 tin-summer GitHub 存儲庫的發布區下載最新版本的二進制文件進行手動安裝。
tin-summer 的使用:
查看當前目錄文件大小,無需添加任何參數,tin-summer 也是默認以易讀的格式向用戶進行輸出,可執行如下命令:
#?sn?f查看某個特定目錄的文件大小,可執行如下命令:
#?sn?f?<path-to-the-directory>在當前目錄中搜索包含構建工件的目錄,可執行如下命令:
#?sn?ar查找占用超過 200MB 磁盤空間的工件或包含工件的目錄,可執行如下命令:
#?sn?ar?-t200M獲取 $DIR 中 10 個最大目錄的排序列表,可執行如下命令:
#?sn?sort?$DIR?-n12sn 實際在操作大目錄的時候速度比較快,在操作小目錄的時候,速度會相對比較慢一些。
參考
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
總結
以上是生活随笔為你收集整理的5 款可替代 du 命令的工具!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个傻瓜式构建可视化 web的 Pyth
- 下一篇: 几款强大的 Pandas 数据探索工具,