Ja, es gibt solche Fälle.
Im Fall von Symlinks auf Linux - System mit GNU ls, die ls -ldie Größe der Verbindung löschen, während wc -cdie tatsächliche Datei und liest Anzahl von Bytes , die dort zu lösen. Unten sehen Sie, dass ls -l29 Bytes gemeldet werden, während wcdie aktuelle Datei 172 Bytes enthält.
$ 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
Im Fall eines virtuellen Dateisysteme , wie/proc oder /sys, werden viele Dateien dort zeigen , wie Größe 0 mit ls -l. Unter /devDateisystem haben wir eine Vielzahl von speziellen Dateien, wie Zeichengeräte und Blockgeräte - wc -chängt an diesen und ls -lzeigt statt der Größe Haupt- und Nebenzahlen an.
Named Pipes werden als 0Bytes von gemeldet ls -c, wc -clesen jedoch tatsächlich den Inhalt der Pipe. Technisch wird Ihnen also mitgeteilt , wie viele Daten sich in der Named Pipes befinden :
$ 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
Bei normalen Dateien sollte die Größe gleich sein.
Der Sinn von ls -lund wc -cund wie sie funktionieren ist ebenfalls unterschiedlich. wc -cTatsächlich öffnet sich die Datei zum Lesen (Sie können das sehen, wenn Sie strace wc -c /etc/passwdzum Beispiel ausführen ). ls -lführt nur einen stat()Anruf auf diesen durch. Dies erklärt auch, warum in /proc ls -lShows der Größe 0 diese Dateien nicht angegeben werden können, da sie nicht "echt" oder tatsächlich auf der Festplatte / ssd gespeichert sind. wc -cLiest stattdessen den Inhalt dieser Datei und berechnet ihre Größe.
Schließlich ls -list nur ein Tool zum interaktiven Auflisten von Elementen. Es ist selten gut für Skripte geeignet. Wenn Sie die Daten tatsächlich lesen müssen, verwenden Sie wc -cstattdessen.
Bitte beachten Sie, dass für die Skripterstellung und die Größenbestimmung einer Datei lsnicht der beste Kandidat ist. Tatsächlich ist es eine der gebräuchlichsten Methoden, das Parsen von lsAusgaben zu vermeiden . Bitte verwenden Sie du -b , um die Größe einer Datei zu ermitteln.