Que représente la «taille» d'un lien symbolique dans la sortie ls?

11

Je vais commencer par l'exemple:

$ 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 est un lien symbolique du fichier file

Aussi, comme je sais, 1650serait la taille du fichier file, mais quel est le nombre 7qui est placé sous la colonne de taille?

EDIT: En cours d'exécution du:

$ du -sh symfile
0   symfile

Alors, comment pouvez-vous prouver que 7 est la taille du lien symbolique?!


METTRE À JOUR:

essaye ça

$ touch file
$ du -sh file
0 file
$ ls -l file
-rw-rw-r-- 1 maythux maythux 0 Jun  1 19:42 file

notez que la taille est également ici 0.

Maintenant:

$ ln -s file sym
$ du -sh sym
0 sym
$ ls -l sym
lrwxrwxrwx 1 maythux maythux 4 Jun  1 19:44 sym -> file

Donc, je suppose que ce n'est pas seulement une taille

Maythux
la source
2
Cela 7dépend du système de fichiers (et éventuellement d'autres paramètres). C'est 7 sur ext4, mais pourrait être 13 sur btrfs et 3 sur tmpfs.
muru du
1
C'est une taille, mais la taille dépend du système de fichiers (btrfs stocke probablement plus de métadonnées que ext4, et ext4 plus que tmpfs). Vous pouvez remplir votre disque avec des liens. Je dis juste, ne soyez pas surpris si vous voyez un nombre différent sur un système de fichiers différent.
muru
1
Votre entrée de répertoire a une taille minimale, plus grande que nécessaire. Faites suffisamment d'entrées et la taille du répertoire augmentera. Vérifiez auprès de : mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo.
muru

Réponses:

13

Les liens symboliques prennent la place nécessaire pour stocker le nom et la cible plus quelques octets pour d'autres métadonnées.

C'est donc la taille du lien symbolique.

En ce qui concerne la taille de du -sh: du ne regarde que le nombre de blocs alloués, et peut donc afficher 0. statet ls -lest mieux en montrant la taille à cet égard.

Rinzwind
la source
alors pourquoi du -sh symfiledonne 0? -
Maythux
du ne regarde que le nombre de blocs alloués et peut donc afficher 0. stat et ls -l sont plus intelligents.
Rinzwind
Veuillez lire la mise à jour
Maythux
Voir ma réponse: c'est le nom, la cible et quelques métadonnées. Au total, il représente 7 octets. Les autres systèmes d'exploitation stockent d'autres métadonnées et auront donc une taille différente.
Rinzwind
La question était "Comment pouvez-vous le prouver?"
Pilot6
5

C'est la taille du lien symbolique en octets.

Certains systèmes de fichiers ont une petite zone à l'intérieur de l'entrée de répertoire utilisée pour le début du fichier, ce qui accélère considérablement le traitement des liens symboliques et des petites lectures (pensez file) au détriment des entrées de répertoire plus grandes.

Si l'intégralité du contenu du lien symbolique tient dans l'entrée de répertoire, aucun bloc de données n'est alloué et la dutaille s'affiche à zéro. Si le lien symbolique ne convient pas, l'espace est alloué normalement (vous vous retrouvez donc avec une allocation de bloc unique), qui peut être optimisée par le système de fichiers à l'aide de la fusion de queue (mais il n'y a pas d'API pour dule savoir).

Le ext4système de fichiers effectue cette optimisation pour les liens symboliques uniquement, les critères se trouvent dans la fonction ext4_inode_is_fast_symlink .

Simon Richter
la source
" Certains systèmes de fichiers ... " - votre réponse serait améliorée si vous répertoriez les systèmes de fichiers courants avec cette fonctionnalité (et tous les systèmes communs sans).
RM
1

Il s'agit de la taille du fichier de lien symbolique en octets.

Le fichier Symlink est un fichier normal qui stocke des données concernant l'emplacement du fichier vers lequel il pointe. Dans le poste 4, c'est 7 octets.

Pilot6
la source
taille dans quoi? est-ce des octets ou des bits ou quoi?
Maythux
Taille en octets ..
Pilot6
1
alors pourquoi du -sh symfiledonne 0?
Maythux
du n'est pas presize avec de très petits fichiers. Essayez d'utiliser du à un fichier de 99 octets. Il affichera 4.0K.
Pilot6
c'est aussi mon pioint alors il devrait au moins afficher 4k pour le lien symbolique car dans le concept OS, il enregistre un cluster pour ce fichier
Maythux