Was bedeutet die „Größe“ eines Symlinks in seiner Ausgabe?

11

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ß, 1650wä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

Maythux
quelle
2
Das 7hä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.
Muru
1
Es ist eine Größe, aber die Größe hängt vom Dateisystem ab (btrfs speichert vermutlich mehr Metadaten als ext4 und ext4 mehr als tmpfs). Sie können Ihre Festplatte mit Links füllen. Ich sage nur, wundern Sie sich nicht, wenn Sie eine andere Nummer in einem anderen Dateisystem sehen.
Muru
1
Ihr Verzeichniseintrag hat eine Mindestgröße, die größer ist als erforderlich. Wenn Sie genügend Einträge vornehmen, wird das Verzeichnis größer. Überprüfen Sie mit : mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo.
Muru

Antworten:

13

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: wird du nur geprüft, wie viele Blöcke zugewiesen sind, und kann daher 0 anzeigen, statund ls -les ist besser, die Größe in dieser Hinsicht anzuzeigen.

Rinzwind
quelle
Warum du -sh symfilegibt es dann 0? -
Maythux
du siehst nur, wie viele Blöcke zugeordnet sind, und kann daher 0 anzeigen. stat und ls -l sind schlauer.
Rinzwind
Bitte lesen Sie das Update
Maythux
Siehe meine Antwort: Es ist der Name, das Ziel und einige Metadaten. Insgesamt macht es 7 Bytes aus. Andere Betriebssysteme speichern andere Metadaten und haben daher eine andere Größe.
Rinzwind
Die Frage war "Wie können Sie es beweisen?"
Pilot6
5

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 duGröß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 API du, um dies zu wissen).

Das ext4Dateisystem führt diese Optimierung nur für Symlinks durch. Die Kriterien finden Sie in der Funktion ext4_inode_is_fast_symlink .

Simon Richter
quelle
" Einige Dateisysteme ... " - Ihre Antwort würde verbessert, wenn Sie die gängigen Dateisysteme mit dieser Funktion (und alle gängigen ohne) auflisten würden.
RM
1

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.

Pilot6
quelle
Größe in was? ist es Bytes oder Bits oder was?
Maythux
Größe in Bytes ..
Pilot6
1
Warum du -sh symfilegibt es dann 0?
Maythux
du hast keine Größe mit sehr kleinen Dateien. Versuchen Sie, du bei einer 99-Byte-Datei zu verwenden. Es werden 4.0K angezeigt.
Pilot6
Das ist auch mein Punkt, dann sollte es mindestens 4k für den Symlink anzeigen, da im OS-Konzept ein Cluster für diese Datei
registriert wird