Ich beginne mit einem Beispiel:
$ ls -l dir1
total 4
-rw-r--r-- 4 maythux maythux 1650 2008-01-10 16:33 file
lrwxrwxrwx 1 maythux maythux 7 2008-01-15 15:17 symfile -> file
symfile
ist ein Symlink der Datei file
Auch wie ich weiß, 1650
wäre die Größe der Datei file
, aber wie lautet die Nummer 7
, die unter der Größenspalte liegt?
EDIT: Laufen du
:
$ du -sh symfile
0 symfile
Wie können Sie also beweisen, dass 7 die Symlink-Größe ist?!
AKTUALISIEREN:
Versuche dies
$ touch file
$ du -sh file
0 file
$ ls -l file
-rw-rw-r-- 1 maythux maythux 0 Jun 1 19:42 file
Beachten Sie, dass die Größe auch hier 0 ist.
Jetzt:
$ ln -s file sym
$ du -sh sym
0 sym
$ ls -l sym
lrwxrwxrwx 1 maythux maythux 4 Jun 1 19:44 sym -> file
Ich nehme an, es ist nicht nur eine Größe
symbolic-link
ls
Maythux
quelle
quelle
7
hängt vom Dateisystem (und möglicherweise anderen Parametern) ab. Es ist 7 auf ext4, könnte aber 13 auf btrfs und 3 auf tmpfs sein.mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo
.Antworten:
Symbolische Links nehmen den Raum ein, der zum Speichern des Namens und des Ziels sowie einiger Bytes für andere Metadaten benötigt wird.
Es ist also die Größe des Symlinks.
In Bezug auf die Größe von
du -sh
: wirddu
nur geprüft, wie viele Blöcke zugewiesen sind, und kann daher 0 anzeigen,stat
undls -l
es ist besser, die Größe in dieser Hinsicht anzuzeigen.quelle
du -sh symfile
gibt es dann 0? -Dies ist die Größe des Symlinks in Bytes.
Einige Dateisysteme haben einen kleinen Bereich innerhalb des Verzeichniseintrags, der für den Anfang der Datei verwendet wird, was die Verarbeitung von Symlinks und kleinen Lesevorgängen (think
file
) auf Kosten größerer Verzeichniseinträge erheblich beschleunigt .Wenn der gesamte Symlink-Inhalt in den Verzeichniseintrag passt, werden keine Datenblöcke zugewiesen, und die
du
Größe wird als Null angezeigt. Wenn der Symlink nicht passt, wird der Speicherplatz normal zugewiesen (sodass Sie eine einzelne Blockzuweisung erhalten), die vom Dateisystem mithilfe der Endverschmelzung optimiert werden kann (es gibt jedoch keine APIdu
, um dies zu wissen).Das
ext4
Dateisystem führt diese Optimierung nur für Symlinks durch. Die Kriterien finden Sie in der Funktion ext4_inode_is_fast_symlink .quelle
Dies ist die Größe der Symlink-Datei in Bytes.
Die Symlink-Datei ist eine normale Datei, in der Daten darüber gespeichert werden, wo sich die Datei befindet, auf die sie zeigt. In ext 4 sind es 7 Bytes.
quelle
du -sh symfile
gibt es dann 0?