コマンドラインオプションでdu
使用すると、コマンドが奇妙に動作することがわかりました。-L
私はSlackware 14とCoreutils 8.19を使用しています。
奇妙な動作を再現するには、2つのフォルダを作成します。
mkdir foo
mkdir bar
次のいずれかのフォルダにファイルを作成します。
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
そしてシンボリックリンクは逆参照されません。私は何を逃したことがありませんか?
答え1
デフォルトでは、du
各ファイルは複数回接続されている場合は一度だけカウントされます。実行すると、du -L bar
ファイルは一度だけ到着するため、ファイル数が計算されます。ただし、実行すると、du -L *
最初に見たときにのみ計算されます。たとえば、
$ du -L foo bar
16K foo
4.0K bar
$ du -L bar foo
16K bar
4.0K foo
パラメータの順序を変更すると、16Kとして報告されたフォルダが変更されます。
du
パラメータを渡すと、ファイルが2回計算されるように強制できます-l
。
編集する:
シンボリックリンクは、リンクを追跡するために追加の手順を必要とする特別な種類のファイルです。このオプションを有効にしないと、du
シンボリックリンクをたどることはできません。-L
一方、ハードリンクは基本的に複数のフォルダに存在するファイルです。du
おそらく、そのファイルを2回カウントするのを避けるために、inode番号で表されるファイルを追跡します。-l
この動作を無効にします。
したがって、を使用すると-L
シンボリックリンクに従いますが、ターゲットファイルにすでに表示されているinode番号があるかどうかは計算されません。これを使用すると、-l
重複したハードリンクは計算されますが、シンボリックリンクは続きません。
-l
と両方を使用している場合は、両方-L
ともシンボリックリンクに従い、ターゲットファイルを複数回計算できます。