我正在使用这些命令:
du -sh --apparent-size ./*
du -sh ./*
Run Code Online (Sandbox Code Playgroud)
两个报告:
4.0K ./Lightroom_catalog_from_win_backup
432M ./Lightroom catalog - wine_backup
Run Code Online (Sandbox Code Playgroud)
而这些目录包含:
$ll ./"Lightroom catalog - wine_backup"
total 432M
-rwxrwx--- 1 gigi gigi 432M Mar 18 2018 Lightroom 5 Catalog Linux.lrcat
-rwxrwx--- 1 gigi gigi 227 Nov 21 2015 zbackup.bat
$ll ./Lightroom_catalog_from_win_backup
total 396M
-rwxrwx--- 3 gigi gigi 396M Dec 17 09:35 Lightroom 5 Catalog Linux.lrcat
-rwxrwx--- 3 gigi gigi 227 Dec 17 09:35 zbackup.bat
Run Code Online (Sandbox Code Playgroud)
为什么du
报告4.0K
./Lightroom_catalog_from_win_backup 以及如何使其正确报告?
PS:其他系统信息:
$stat --file-system $HOME
File: "/home/gigi"
ID: 5b052c62a5a527bb Namelen: 255 Type: ext2/ext3
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 720651086 Free: 155672577 Available: 119098665
Inodes: Total: 183050240 Free: 178896289
$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
Release: 16.04
Codename: xenial
Run Code Online (Sandbox Code Playgroud)
mur*_*uru 23
如果文件是硬链接,我可以重现:
~ mkdir foo bar
~ dd if=/dev/urandom of=bar/file1 count=1k bs=1k
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00985276 s, 106 MB/s
~ ln bar/file1 foo/file1
~ du -sh --apparent-size foo bar
1.1M foo
4.0K bar
Run Code Online (Sandbox Code Playgroud)
这是预期的行为。来自GNUdu
文档:
如果两个或多个硬链接指向同一个文件,则只计算其中一个硬链接。文件参数顺序会影响计数的链接,更改参数顺序可能会更改 du 输出的数字和条目。
如果您确实需要重复大小的硬链接,请尝试以下-l
选项:
'
-l
'
'--count-links
'
计算所有文件的大小,即使它们已经出现(作为硬链接)。
~ du -sh --apparent-size foo bar -l
1.1M foo
1.1M bar
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 15
通知中的链接数是如何3
的两个文件Lightroom 5 Catalog Linux.lrcat
,并zbackup.bat
在Lightroom_catalog_from_win_backup
。
这意味着这两个文件在某处硬链接到(附加名称)其他文件。当您du
在一个目录或一组文件上运行时,每个硬链接只计算一次。
例子:
$ ls -l
total 41024
-rw-r--r-- 2 kk wheel 10485760 Dec 17 09:07 file1
-rw-r--r-- 2 kk wheel 10485760 Dec 17 09:07 file2
$ du -h file1
10.0M file1
$ du -h file2
10.0M file2
$ du -h .
10.0M .
Run Code Online (Sandbox Code Playgroud)
此行为由实用程序的 POSIX 标准du
明确规定:
在一个文件操作数下多次出现且链接数大于 1 的文件应仅计入一个条目并写入。
某些du
实现具有禁用此行为的非标准选项。对于 GNU du
,这是通过-l
选项完成的。