J'ai remarqué un comportement étrange avec la du
commande lorsqu'elle est utilisée avec l' -L
option de ligne de commande.
J'utilise Slackware 14 et Coreutils 8.19.
Pour reproduire l'étrange comportement, créez deux dossiers:
mkdir foo
mkdir bar
Créez un fichier dans l'un des dossiers:
perl -e 'print "A"x10000' > foo/text
Et un lien symbolique dans l'autre dossier:
ln -s ../foo/text bar/text
Maintenant, si vous tapez:
du -h -L bar
Tu auras:
16k bar
Depuis le lien symbolique a été déréférencé. Mais si vous tapez:
du -h -L *
Tu auras:
16K foo
4.0K bar
Et le lien symbolique ne sera pas déréférencé. Suis-je en train de manquer quelque chose?
symlink
disk-usage
coreutils
Zagorax
la source
la source
du
vouloir jouer intelligemment ici, mais si vous exécutezdf -a -L bar foo
la sortie est très fausse (compter les 16K en barre en laissant foo vide).Réponses:
Par défaut,
du
ne comptera chaque fichier qu'une seule fois s'il est lié plusieurs fois. Si vous l'exécutez,du -L bar
il comptera le fichier car il ne l'atteint qu'une seule fois. Cependant, si vous l'exécutez,du -L *
il ne comptera que la première fois qu'il le verra. Par exemple:Notez que l'échange de l'ordre des arguments change le dossier qui est signalé comme 16 Ko.
Vous pouvez forcer
du
à compter le fichier deux fois en passant le-l
paramètre.Éditer:
Les liens symboliques sont un type de fichier spécial et une étape supplémentaire est nécessaire pour suivre le lien.
du
ne suivra pas les liens symboliques à moins que l'-L
option ne soit activée.Un lien dur, d'autre part, est essentiellement un fichier existant dans deux (ou plusieurs) dossiers.
du
présume les fichiers qu'il a vus par numéro d'inode pour éviter de les compter deux fois.-l
désactive ce comportement.Donc, avec juste
-L
, il suivra le lien symbolique, mais si le fichier cible a un numéro d'inode, il a déjà vu qu'il ne sera pas recompté. Avec juste,-l
il comptera les liens durs en double, mais ne suivra pas les liens symboliques.Si vous utilisez
-l
et-L
ensemble, il suivra à la fois les liens symboliques et permettra également de compter le (s) fichier (s) cible (s) plus d'une fois.la source
-l
ne faitcount sizes many times if hard linked
, mais ici je travaille avec symlink. De plus,-l
seul ne résout pas le problème, alors que si j'utilise les deux-l
et-L
qu'il compte correctement la taille.-l
et l'-L
interaction. L'explication est devenue un peu trop longue pour un commentaire, j'ai donc mis à jour ma réponse.