Ich habe ein seltsames Verhalten mit du
Befehl bemerkt, wenn es mit -L
Befehlszeilenoption verwendet wird.
Ich verwende Slackware 14 und Coreutils 8.19.
Erstellen Sie zwei Ordner, um das seltsame Verhalten zu reproduzieren:
mkdir foo
mkdir bar
Erstellen Sie eine Datei in einem der Ordner:
perl -e 'print "A"x10000' > foo/text
Und ein Symlink im anderen Ordner:
ln -s ../foo/text bar/text
Wenn Sie jetzt Folgendes eingeben:
du -h -L bar
Du wirst kriegen:
16k bar
Da wurde der Symlink dereferenziert. Aber wenn Sie eingeben:
du -h -L *
Du wirst kriegen:
16K foo
4.0K bar
Und der Symlink wird nicht dereferenziert. Vermisse ich etwas
symlink
disk-usage
coreutils
Zagorax
quelle
quelle
du
hier klug spielen zu wollen, aber wenn Sie laufen, istdf -a -L bar foo
die Ausgabe sehr falsch (das Zählen der 16K in bar lässt foo leer).Antworten:
Standardmäßig
du
wird jede Datei nur einmal gezählt, wenn sie mehrmals verknüpft ist. Wenn Sie es ausführendu -L bar
, wird die Datei gezählt, da sie nur einmal erreicht wird. Wenn Sie es jedoch ausführendu -L *
, wird es nur gezählt , wenn es zum ersten Mal angezeigt wird. Beispielsweise:Beachten Sie, dass durch das Austauschen der Reihenfolge der Argumente geändert wird, welcher Ordner als 16 KB gemeldet wird.
Sie können
du
das zweimalige Zählen der Datei erzwingen , indem Sie den-l
Parameter übergeben.Bearbeiten:
Symbolische Links sind eine spezielle Art von Datei, und ein zusätzlicher Schritt ist erforderlich, um dem Link zu folgen.
du
folgt keinen symbolischen Links, es sei denn, die-L
Option ist aktiviert.Ein fester Link ist im Grunde eine Datei, die in zwei (oder mehr) Ordnern vorhanden ist.
du
Verfolgt vermutlich anhand der Inode-Nummer, welche Dateien es gesehen hat, um zu vermeiden, dass diese zweimal gezählt werden.-l
Deaktiviert dieses Verhalten.Mit just
-L
folgt es also dem symbolischen Link, aber wenn die Zieldatei eine Inode-Nummer hat, die sie bereits gesehen hat, wird sie nicht erneut gezählt. Mit nur wird-l
es doppelte harte Links zählen, aber nicht symbolischen Links folgen.Wenn Sie
-l
und-L
zusammen verwenden, folgt es sowohl den symbolischen Links als auch dem mehrmaligen Zählen der Zieldatei (en).quelle
-l
tutcount sizes many times if hard linked
, aber hier arbeite ich mit Symlink. Darüber hinaus-l
löst allein nicht das Problem, während, wenn ich beide benutze-l
und-L
es die Größe richtig zählt.-l
und wie sie-L
interagieren. Die Erklärung wurde für einen Kommentar etwas zu lang, daher habe ich meine Antwort aktualisiert.