Sì, ci sono casi del genere.
In caso di collegamenti simbolici su un sistema Linux con GNU ls, ls -lverrà visualizzata la dimensione del collegamento, mentre wc -csi risolverà il file effettivo e si leggerà il numero di byte lì. Di seguito puoi vedere che ls -lriporta 29 byte, mentre wcriporta 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 /devfilesystem abbiamo una varietà di file speciali, come dispositivi a caratteri e dispositivi a blocchi - si wc -cblocca su questi e ls -lmostra numeri maggiori e minori invece di dimensioni.
Le pipe nominate verranno riportate come 0byte da ls -c, ma wc -cin 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 -le wc -c, e come funzionano, differisce. wc -capre effettivamente il file per la lettura (puoi vederlo se, strace wc -c /etc/passwdad esempio, lo esegui ). ls -lesegue solo stat()chiamate su quelli. Questo spiega anche perché in /proc ls -lmostra 0 dimensioni - non è possibile stat quei file perché non sono "reali" o effettivamente memorizzati sul disco rigido / SSD. wc -cinvece, 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 -cinvece.
Si noti che per lo scripting e la valutazione delle dimensioni di un file lsnon è il candidato migliore. In effetti, è una delle pratiche comuni per evitare l'analisi lsdell'output . Si prega di utilizzare du -b per scoprire la dimensione di un file.