Ja, es gibt solche Fälle.
Im Fall von Symlinks auf Linux - System mit GNU ls
, die ls -l
die Größe der Verbindung löschen, während wc -c
die tatsächliche Datei und liest Anzahl von Bytes , die dort zu lösen. Unten sehen Sie, dass ls -l
29 Bytes gemeldet werden, während wc
die 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 /dev
Dateisystem haben wir eine Vielzahl von speziellen Dateien, wie Zeichengeräte und Blockgeräte - wc -c
hängt an diesen und ls -l
zeigt statt der Größe Haupt- und Nebenzahlen an.
Named Pipes werden als 0
Bytes von gemeldet ls -c
, wc -c
lesen 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 -l
und wc -c
und wie sie funktionieren ist ebenfalls unterschiedlich. wc -c
Tatsächlich öffnet sich die Datei zum Lesen (Sie können das sehen, wenn Sie strace wc -c /etc/passwd
zum Beispiel ausführen ). ls -l
führt nur einen stat()
Anruf auf diesen durch. Dies erklärt auch, warum in /proc
ls -l
Shows 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 -c
Liest stattdessen den Inhalt dieser Datei und berechnet ihre Größe.
Schließlich ls -l
ist 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 -c
stattdessen.
Bitte beachten Sie, dass für die Skripterstellung und die Größenbestimmung einer Datei ls
nicht der beste Kandidat ist. Tatsächlich ist es eine der gebräuchlichsten Methoden, das Parsen von ls
Ausgaben zu vermeiden . Bitte verwenden Sie du -b
, um die Größe einer Datei zu ermitteln.