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, 1650
serait la taille du fichier file
, mais quel est le nombre 7
qui 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
symbolic-link
ls
Maythux
la source
la source
7
dé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.mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo
.Réponses:
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.stat
etls -l
est mieux en montrant la taille à cet égard.la source
du -sh symfile
donne 0? -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
du
taille 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 pourdu
le savoir).Le
ext4
système de fichiers effectue cette optimisation pour les liens symboliques uniquement, les critères se trouvent dans la fonction ext4_inode_is_fast_symlink .la source
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.
la source
du -sh symfile
donne 0?