Sí, hay tales casos.
En el caso de los enlaces simbólicos en el sistema Linux con GNU ls
, se ls -l
mostrará el tamaño del enlace, mientras wc -c
que resolverá el archivo real y leerá el número de bytes allí. A continuación puede ver que ls -l
informa 29 bytes, mientras que wc
informa 172 bytes en el archivo real.
$ 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
En el caso de sistemas de archivos virtuales , como/proc
o /sys
, muchos archivos aparecerán como de tamaño 0 ls -l
. Bajo el /dev
sistema de archivos tenemos una variedad de archivos especiales, como dispositivos de caracteres y dispositivos de bloque: se wc -c
cuelga de ellos y ls -l
muestra números mayores y menores en lugar de tamaño.
Las canalizaciones con nombre se informarán como 0
bytes ls -c
, pero en wc -c
realidad leerán el contenido de la canalización, por lo que técnicamente le dirá cuántos datos hay en la canalización con nombre:
$ 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
Para archivos normales, el tamaño debe ser igual.
El punto de ls -l
y wc -c
, y cómo funcionan también difiere. wc -c
en realidad abre un archivo para leer (puedes verlo si corres, strace wc -c /etc/passwd
por ejemplo). ls -l
solo realiza stat()
llamadas en esos. Esto también explica por qué en los /proc
ls -l
shows de tamaño 0: no puede registrar esos archivos porque no son "reales" o están almacenados en el disco duro / ssd. wc -c
en su lugar, lee el contenido de ese archivo y calcula su tamaño.
Finalmente, ls -l
es solo una herramienta para enumerar elementos de forma interactiva. Rara vez es una buena opción para las secuencias de comandos. Cuando realmente necesite leer los datos, use wc -c
en su lugar.
Tenga en cuenta que, para crear secuencias de comandos y evaluar el tamaño de un archivo, ls
no es el mejor candidato. De hecho, es una de las prácticas comunes para evitar el análisis de ls
salida . Úselo du -b
para averiguar el tamaño de un archivo.