当前位置: 首页 > 科技观察

du命令的五个替代方案!

时间:2023-03-15 13:34:28 科技观察

在Linux环境下,du命令大家都很熟悉了,它可以计算总结Linux系统中文件和目录的空间使用情况。当文件占用了80%的磁盘空间,空间暂时无法扩展时,我们可以找出系统中占用大量磁盘空间的特定目录下的文件,并进行清理。只需执行以下命令即可查看文件夹大小所占用的空间。#du-sh进入占用空间大的文件夹,执行以下命令,将当前目录下的文件从大到小排序。#du-sh*|sort-rh根据实际情况判断输出后占用空间大的文件是否可以正常删除,以释放磁盘空间,观察磁盘使用情况。当文件占用大量磁盘空间时,du执行起来会很慢。每次查找大文件都会重复执行,效率低下。这时候ncdu就可以解决这个问题。1、ncduncdu是一个使用C语言和ncurses接口开发的简单快速的磁盘使用分析器,可以用来查看本地或远程系统上的目录或文件所占用的磁盘空间。在Ubuntu21.10上安装ncdu:#sudoapt-getinstallncduncdu参数选项:-h:帮助信息-q:静默模式,刷新间隔2秒-v:打印版本-x:相同的文件系统-e:启用扩展信息-r:仅读取-o文件:将扫描目录导出为文件-f文件:从文件导入扫描目录-0、-1、-2:扫描时使用的UI(0=无,2=完整ncurses)--si:使用基数10(SI)前缀而不是基数2--excludePATTERN:排除匹配PATTERN的文件-X,--exclude-fromFILE:排除匹配文件中任何模式的文件-L,--follow-symlinks:按照符号链接(不包括目录)--exclude-caches:排除包含CACHEDIR.TAG的目录--exclude-kernfs:排除Linux伪文件系统(procfs、sysfs、cgroup...)--confirm-quit:确认退出--colorSCHEME:设置配色方案如果不使用任何参数选项,可以直接在要分析的目录下执行命令ncdu。ncdu扫描完成后,此时会弹出一个交互式终端界面。您可以清楚地看到每个目录的大小,并使用方向键或回车键进入或退出选定的特定目录。当您发现某个目录或文件占用空间较大时,您可以按照上述使用键盘找到该文件,并根据实际情况确认是否可以删除,不需要退出ncdu。选择要删除的目录或文件后,按d键。删除,如果删除完成,按q键退出。2.dustdust(du+rust=dust)是一个免费、开源、更直观的du工具,用rust编写,是一个提供文件类型和元数据的工具。在Ubuntu21.10上安装dust:du-dust_0.7.1_amd64.deb是dustGitHub仓库中的最新版本,在dust的发布页面下载.deb文件,执行以下命令下载安装。#wgethttps://github.com/bootandy/dust/releases/du-dust_0.7.1_amd64.deb#dpkg-idu-dust_0.7.1_amd64.deb其他系统可以参考dust上其他操作系统的安装方法GitHub。dust使用:dust[FLAGS][OPTIONS][--][inputs]...dust参数选项:-f:目录“大小”是子文件/目录的数量,而不是磁盘大小-s:使用文件长度而不是块-p:子目录的路径不会被缩短-h:帮助信息-i:不显示隐藏文件-x:只计算与提供的目录在同一文件系统上的文件和目录-b:不会显示百分比条或百分比-c:不打印颜色(通常最大的目录是彩色的)-r:打印树倒置(最大最高)-t:只显示这些文件类型-V:版本信息将被打印-d:深度将是displayed-e:只包含与这个正则表达式匹配的文件。对于png文件类型:-e".png$"-X:排除具有此名称的任何文件或目录-v:排除与此正则表达式匹配的文件。忽略png文件类型:-v".png$"-n:要显示的输出行数。这是高度,(但h有帮助)[默认:23]-w:指定输出宽度覆盖终端宽度的自动检测灰尘使用:查看当前目录和所有子目录中的文件大小,可以执行如下命令:#dust-p参数可以按照从当前目录开始的完整目录显示#dust-p如果只想查看多个目录的大小,只需要列出这些目录在同时用空格隔开:#dust/bin/etc显示文件长度:#dust-s只显示10个目录:#dust-n103.duuduu是DirectoryUsageUtility(目录使用实用程序)的缩写,一个基于Python语言的检查指定目录大小的工具,具有跨平台特性,可在Windows、Linux和MacOS操作系统上使用,以千字节为单位显示目录磁盘使用情况。在Ubuntu21.10上安装duu:在安装duu工具之前,需要确保系统已经安装了Python3环境。如果没有,则需要安装它。如果有,你可以忽略它。不过,目前大多数Linux发行版中默认的软件仓库都有Python3的。v2.22.tar.gz是duuGitHub仓库中最新版本的源码包,从duu发布页面下载.tar.gz文件,执行以下命令下载安装。#wgethttps://github.com/jftuga/duu/archive/refs/tags/v2.22.tar.gz#tar-zxvfv2.22.tar.gz解压后进入duu-2.22文件夹,查看duu。py文件存在。#ls|grepduudu-2.22#cdduu-2.22/#lsduu.pyLICENSEREADME.mdduu用法:duu.py[-h][-b][-e][-q][-sSTATUS][-n][-N][-f][-S][-H][-TTHREADS][-xEXCLUDE][-XREGEXPR][-oOUTPUT][dname]duu参数选项:-h:帮助信息-b:不打印摘要或统计信息,专门用于排序-e:汇总文件扩展名-q:不显示个别目录-s:将处理状态发送到STDERR,每个STATUS的目录数-n:跳过以“.”开头的目录-N:无递归-f:显示每个目录中的文件数-S:显示均值、中值、模式和标准差文件统计信息-H:以更易读的格式显示数字-T:并发线程数,考虑SAN-x:以冒号分隔的列表,排除不区分大小写的字符串-X:以冒号分隔的列表,排除不区分大小写的正则表达式-o:输出到CSV文件duu用途:查看当前目录的大小,只需执行下面命令:#python3duu.py如上图所示,可以看出duu会显示当前目录下的文件和目录的数量,并以个为单位显示这些文件的总大小和每个文件的大小字节、KB和MB。查看一个目录的大小,只需要加上目录的绝对路径即可:#python3duu.py/etc/init.d/4.diskusdiskus也是一个小巧、快速、可替换的基于Rust编写的du-sh命令的一个开放source工具,diskus会计算当前目录下所有文件的大小,执行命令diskus的效果与du-sh和du-sh--bytes一样。据diskusGitHub仓库的开发者说,在他的8核笔记本电脑上,用hyperfine命令行基准测试工具测试了一个中等大小的文件夹(15GB,100k目录,400k文件),而对于更小的文件夹测试真的毫无意义由于所有程序都将在合理的时间内完成而不会中断您的工作流程,因此得出结论,diskus比du冷磁盘缓存快十倍,热磁盘缓存快三倍。下面是基于diskus、du-sh、snp-d0-j8和dust-d0命令对冷盘缓存和热盘缓存的测试结果对比。冷磁盘缓存CommandMean[s]Min[s]Max[s]Relativediskus1.746±0.0171.7281.7701.00du-sh17.776±0.54917.13918.41310.18snp-d0-j818.094±0.56617.48218.57910.36dust-d021.357±0.32820.97421.75912.23HotDiskCacheCommandMean[s]Min[s]Max[s]Relativediskus500.3±17.3472.9530.61.00du-sh1098.3±10.01087.81122.42.20snp-d0-j81122.2±18.21107.31170.12.24dust-d03532.1±26.43490.03563.17.06Ubuntu21.10Installdiskus:diskus_0.7.0_amd64.diskus是从版本库下载的最新版本GitHub.deb文件deb从发布页面,可以执行以下命令下载安装#wgethttps://github.com/sharkdp/diskus/releases/download/v0.7.0/diskus_0.7.0_amd64.deb#dpkg-idiskus_0.7.0_amd64.deb对于其他系统,可以参考GitHub上diskus的其他操作系统安装方法进行安装。diskus用法:diskus[OPTIONS][path]...diskus参数选项:-j:设置线程数(默认:3xnumcores),文件大小的输出格式(十进制:MB,二进制:MiB)[默认值:十进制][可能值:十进制、二进制]-v:不隐藏文件系统错误-b:计算表观大小而不是磁盘使用情况-h:帮助信息-v:版本信息磁盘使用情况:使用du-sh的命令path可以查看某个目录的大小,其中-s参数表示显示总大小。#du-sh/etc16M/etc如果使用diskus,可以直接显示当前目录的总大小。#diskus如果想查看某个目录的大小,可以在diskus后面加一个绝对路径。#diskus/etc16.66MB(16,662,528bytes)5.tin-summertin-summer(sn)是一个基于Rust语言编写的开源工具,是du命令的替代品。它可以用来查找占用磁盘空间的文件以获得更好的输出、更清晰的命令和默认值,并且由于多线程,它甚至可以比du命令更快地计算大目录的大小,tin-summer和du命令的区别在于前者读取文件,后者读取磁盘使用情况。另外,tin-summer的开发者也对du和sn的原因做了明确的对比。使用du的原因:可以读取磁盘使用情况,而不仅仅是文件大小可选地在小目录上取消引用符号链接的速度稍微快一些--exclude标志。默认为可读输出彩色输出通过获得更好的帮助来提供排序输出查找构建工件读取文件大小而不是磁盘使用情况在Rust中可扩展还进行了基准测试以比较不同目录大小的sn和du执行时间结果。目录大小工具命令时间600MBsnsnp60.74ms600MBsnsnd99.92ms600MBdudu-hacd288.28ms4GBsnsnp185.2ms4GBsnsnd271.9ms4GBdudu-hacd2195.5ms700MBsnsnp91.05ms700MBsnsnd176.3ms700MBdudu-hacd2153.8ms7MBsnsnp19.48ms7MBsnsnd12.72ms7MBdudu-hacd210.13ms安装tin-summer:#curl-LSfshttps://japaric.github.io/trust/install.shsh-s-----gitvmchale/tin-summer您可以使用cargopackagemanager安装tin-summer。前提是你需要在系统上安装Rust。如果已经安装了Rust,可以执行以下命令:#cargoinstalltin-summer如果以上两种安装方式都没有成功安装tin-summer,也可以通过tin的releases部分下载最新版本的二进制文件来手动安装-夏季GitHub存储库。tin-summer的使用:查看当前目录的文件大小,不加任何参数。默认情况下,tin-summer还以易于阅读的格式向用户输出。可以执行以下命令:#snf查看特定目录的文件大小,可以执行以下命令:#snf在当前目录下搜索包含buildartifacts的目录,您可以执行以下命令:#snar查找占用超过200MB磁盘空间的工件或包含工件的目录,您可以执行以下命令:#snar-t200M获取$DIR中最大的10个目录的排序列表,可以执行如下命令:#snsort$DIR-n12sn其实操作大目录时速度比较快,操作小目录时速度相对较慢。