Oui, il y a de tels cas.
En cas de liens symboliques sur un système Linux avec GNU ls
, le ls -l
affichera la taille du lien, tandis que wc -c
résoudra le fichier réel et y lira le nombre d'octets. Ci-dessous, vous pouvez voir que ls -l
rapporte 29 octets, alors que wc
172 rapporte dans le fichier réel.
$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 29 1月 17 2016 /etc/resolv.conf -> ../run/resolvconf/resolv.conf
$ wc -c /etc/resolv.conf
172 /etc/resolv.conf
$ wc -c /var/run/resolvconf/resolv.conf
172 /var/run/resolvconf/resolv.conf
$ ls -l /var/run/resolvconf/resolv.conf
-rw-r--r-- 1 root root 172 1月 15 15:49 /var/run/resolvconf/resolv.conf
Dans le cas de systèmes de fichiers virtuels , tels que/proc
ou /sys
, de nombreux fichiers s'affichent comme ayant une taille 0 ls -l
. Sous le /dev
système de fichiers, nous avons une variété de fichiers spéciaux, tels que les périphériques de caractères et les périphériques de bloc - se wc -c
bloque sur ceux-ci et ls -l
affiche des nombres majeurs et mineurs au lieu de la taille.
Les canaux nommés seront signalés en 0
octets par ls -c
, mais wc -c
liront en fait le contenu du canal, donc techniquement, il vous indiquera la quantité de données dans le canal nommé:
$ mkfifo named.pipe
$ echo "This is a test" > named.pipe &
[1] 2129
$ ls -l named.pipe
prw-rw-r-- 1 xieerqi xieerqi 0 1月 16 08:40 named.pipe|
$ wc -c named.pipe
15 named.pipe
[1] + Done echo "This is a test" >named.pipe
Pour un fichier normal, la taille doit être égale.
Le point de ls -l
et wc -c
, et leur fonctionnement diffèrent également. wc -c
ouvre réellement le fichier pour la lecture (vous pouvez le voir si vous exécutez strace wc -c /etc/passwd
par exemple). ls -l
effectue uniquement l' stat()
appel sur ceux-ci. Cela explique également pourquoi, dans la /proc
ls -l
taille 0, vous ne pouvez pas statiser ces fichiers car ils ne sont pas "réels" ou réellement stockés sur le disque dur / ssd.wc -c
à la place, lit le contenu de ce fichier et calcule sa taille.
Finalement, ls -l
n'est qu'un outil pour répertorier les éléments de manière interactive. C'est rarement un bon choix pour les scripts. Lorsque vous avez réellement besoin de lire les données, utilisez wc -c
plutôt.
Veuillez noter que pour l'écriture de scripts et l'évaluation de la taille d'un fichier, ce ls
n'est pas le meilleur candidat. En fait, c'est l'une des pratiques courantes pour éviter l'analyse de la ls
sortie . Veuillez utiliser du -b
pour connaître la taille d'un fichier.