Zag*_*rax 14 disk-usage coreutils symlink
du当-L命令与命令行选项一起使用时,我注意到命令的奇怪行为。
我正在使用 Slackware 14 和 Coreutils 8.19。
要重现奇怪的行为,请创建两个文件夹:
mkdir foo
mkdir bar
Run Code Online (Sandbox Code Playgroud)
在其中一个文件夹中创建一个文件:
perl -e 'print "A"x10000' > foo/text
另一个文件夹中的符号链接:
ln -s ../foo/text bar/text
现在,如果你输入:
du -h -L bar
你会得到:
16k bar
由于符号链接被取消引用。但是如果你输入:
du -h -L *
你会得到:
16K foo
4.0K bar
Run Code Online (Sandbox Code Playgroud)
并且符号链接不会被取消引用。我错过了什么吗?
Dav*_*man 25
默认情况下,du如果每个文件被链接多次,则只计算一次。如果你运行du -L bar它会计算文件,因为它只到达它一次。但是,如果您运行du -L *它,它只会在第一次看到它时计算它。例如:
$ du -L foo bar
16K foo
4.0K bar
$ du -L bar foo
16K bar
4.0K foo
Run Code Online (Sandbox Code Playgroud)
请注意,交换参数的顺序会更改哪个文件夹被报告为 16K。
您可以du通过传递-l参数来强制对文件进行两次计数。
编辑:
符号链接是一种特殊的文件,需要一个额外的步骤来跟随链接。du除非-L启用该选项,否则不会遵循符号链接。
另一方面,硬链接基本上是存在于两个(或更多)文件夹中的一个文件。du大概跟踪它通过 inode 编号看到的文件,以避免将这些文件计数两次。-l禁用此行为。
因此,使用 just -L,它将遵循符号链接,但如果目标文件具有它已经看到的 inode 编号,则不会重新计数。只是-l它会计算重复的硬链接,但不会遵循符号链接。
如果您一起使用-l和-L,它将遵循符号链接,并且还允许多次计算目标文件。
| 归档时间: |
|
| 查看次数: |
18361 次 |
| 最近记录: |