df -k
/dev/sda6 25396228 21249088 2836240 89% /export
21G used
Run Code Online (Sandbox Code Playgroud)
相对
du -sh /export
3.4G /export
Run Code Online (Sandbox Code Playgroud)
3.4G 是正确的,因为我们已经删除了所有非必要文件,但是 df 报告的可用空间与应该存在的实际可用空间不一致。
为什么会这样?
我正在开发一个用 bash 编写的小实用工具,它为我提供了有关 Linux 上游戏服务器的一些信息。因此,我需要能够显示文件内容的大小。
我现在正在这样做:
du -Lshc *
Run Code Online (Sandbox Code Playgroud)
它几乎完美!唯一的缺陷是它显示如下内容:
21G backups
22G server
8.0K start.sh
151M world.zip
43G total
Run Code Online (Sandbox Code Playgroud)
这很好,但我想要更多的数字。这意味着它应该是这样的:
21.587G backups
22.124G server
8.089K start.sh
151.198M world.zip
43.436G total
Run Code Online (Sandbox Code Playgroud)
有没有可能做到这一点?
我不介意使用复杂的命令,因为我在.sh文件中使用它,所以我不会每次都手动输入。
如果我尝试
du -s -h -x /*
Run Code Online (Sandbox Code Playgroud)
它将尝试检查直接安装在 / 下的所有文件系统(真实的和伪的),例如 /dev、/proc、/sys、/run 和 /home(/home 位于额外的分区上)。
我认为它来自*的shell扩展,给du一个明确包含这些挂载点的参数列表。
有没有办法让 du 不检查挂载的文件系统,即使挂载点包含在参数列表中?
我真的不想输入 / 的所有子目录只是为了避免它们出现在参数列表中。
我曾经cp -rl复制一个文件夹。在测量源和副本结果的du -sl大小时,返回的大小略有不同,即使diff确认它们的内容相同:
$ cp -rl folderA/ folderB/
$ du -sl folderA folderB
98561224 folderA
98590512 folderB
$ diff --brief -ra folderA/ folderB/
$
Run Code Online (Sandbox Code Playgroud)
两个文件夹都驻留在同一个硬盘上,在复制和测量之间没有对它们中的任何一个进行任何修改。我什么也没发现的文档du和cp这可以解释的差异。
我正在寻找一个 GUI 程序,它可以解析 du 输出并显示可浏览的文件树和树状图。
到目前为止,我已经尝试过:
我有几个非常大的目录,我想知道它们的估计大小。我主要用于此目的du,但每个文件夹大约需要 3 分钟,所以我问是否有替代方案du或stat需要更少的时间(可能不精确:~10% 就可以了)
我最近遇到了这个问题:
find /tmp/tmp33hn25wv -type f -exec stat --format='%s' {} + | awk '{s+=$1} END {print s}'
10420224
du -bs /tmp/tmp33hn25wv
12198004 /tmp/tmp33hn25wv
Run Code Online (Sandbox Code Playgroud)
结果始终不同。所有文件都以块大小字节的倍数写入。
du在哪里找到这些额外的字节?我知道文件系统可能需要更多或更少的空间来存储文件的内容,但我希望该-b选项du意味着它必须计算“表观”大小,而不是文件系统使用的大小......
我想获取目录的总大小以及其中的所有目录。
我正在使用命令
du -h -c "$input_variable" | grep total
Run Code Online (Sandbox Code Playgroud)
它打印结果和单词total。如何在没有单词的情况下获得结果total?
我正在编写一个geektool 3脚本来显示特定 VMware Fusion 虚拟机的大小。这样的.vmwarevm“文件”其实就是一个打包好的目录。
Finder 中的获取信息显示该文件为“52.91 GB”。我运行以下du命令来获取文件大小:
> du -hs ~/Documents/Virtual\ Machines.localized/MY-PRECIOUS-7.vmwarevm | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
此du -hs命令返回文件大小为“49G”。与 Finder 报告的差异的原因是什么?
或者,我尝试用如下-s选项替换该选项-d:
du -hd ~/Documents/Virtual\ Machines.localized/MY-PRECIOUS-7.vmwarevm | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
此du -hd命令返回文件大小为“59G”。Finder du -hd、 和之间的区别是du -hs什么?
此外,此du -hd命令在 geektool 3 中不产生任何输出。什么给出了?
我们有两个目录:
$ ls -l
total 8
drwxr-x--- 2 nimmy nimmy 4096 Nov 15 19:42 jeter
drwxr-x--- 2 nimmy nimmy 4096 Nov 15 19:42 mariano
Run Code Online (Sandbox Code Playgroud)
我在第一个文件夹中创建一个文件:
$ dd if=/dev/zero of=jeter/zero_file.1 bs=512000 count=1
1+0 records in
1+0 records out
512000 bytes (512 kB) copied, 0.268523 s, 1.9 MB/s
Run Code Online (Sandbox Code Playgroud)
这是输出du:
$ du -sh *
504K jeter
4.0K mariano
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,如果我zero_file.在另一个文件夹中放置一个硬链接,du输出不会改变:
$ ln jeter/zero_file.1 mariano/zero_file.2
$ du -sh *
504K jeter
4.0K mariano
Run Code Online (Sandbox Code Playgroud)
但是,据我所知,文件系统中没有任何内容指向zero_file.1原始文件。那么如何du知道数zero_file.1 …