Sì, ci sono casi del genere.
In caso di collegamenti simbolici su un sistema Linux con GNU ls
, ls -l
verrà visualizzata la dimensione del collegamento, mentre wc -c
si risolverà il file effettivo e si leggerà il numero di byte lì. Di seguito puoi vedere che ls -l
riporta 29 byte, mentre wc
riporta 172 byte nel file effettivo.
$ 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
Nel caso di filesystem virtuali , come/proc
o /sys
, molti file mostreranno la dimensione 0 ls -l
. Nel /dev
filesystem abbiamo una varietà di file speciali, come dispositivi a caratteri e dispositivi a blocchi - si wc -c
blocca su questi e ls -l
mostra numeri maggiori e minori invece di dimensioni.
Le pipe nominate verranno riportate come 0
byte da ls -c
, ma wc -c
in realtà leggeranno il contenuto della pipe, quindi tecnicamente ti dirà quanti dati sono nella pipe denominata:
$ 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
Per un file normale, la dimensione dovrebbe essere uguale.
Anche il punto di ls -l
e wc -c
, e come funzionano, differisce. wc -c
apre effettivamente il file per la lettura (puoi vederlo se, strace wc -c /etc/passwd
ad esempio, lo esegui ). ls -l
esegue solo stat()
chiamate su quelli. Questo spiega anche perché in /proc
ls -l
mostra 0 dimensioni - non è possibile stat quei file perché non sono "reali" o effettivamente memorizzati sul disco rigido / SSD. wc -c
invece, legge il contenuto di quel file e calcola la sua dimensione.
Infine, ls -l
è solo uno strumento per elencare gli oggetti in modo interattivo. Raramente si adatta bene agli script. Quando devi effettivamente leggere i dati, usa wc -c
invece.
Si noti che per lo scripting e la valutazione delle dimensioni di un file ls
non è il candidato migliore. In effetti, è una delle pratiche comuni per evitare l'analisi ls
dell'output . Si prega di utilizzare du -b
per scoprire la dimensione di un file.