Ya, ada beberapa kasus seperti itu.
Dalam kasus symlink pada sistem Linux dengan GNU ls
, ls -l
akan mengeluarkan ukuran tautan, sementara wc -c
akan menyelesaikan file aktual dan membaca jumlah byte di sana. Di bawah ini Anda dapat melihat bahwa ls -l
laporan 29 byte, sedangkan wc
laporan 172 byte di file yang sebenarnya.
$ 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
Dalam hal sistem file virtual , seperti/proc
atau /sys
, banyak file di sana akan menunjukkan memiliki ukuran 0 ls -l
. Di bawah /dev
sistem file, kami memiliki beragam file khusus, seperti perangkat karakter dan perangkat blok - wc -c
menggantungnya dan ls -l
menunjukkan angka-angka besar dan kecil alih-alih ukuran.
Pipa yang dinamai akan dilaporkan sebagai 0
byte oleh ls -c
, tetapi wc -c
sebenarnya akan membaca isi pipa, jadi secara teknis akan memberi tahu Anda berapa banyak data dalam pipa bernama:
$ 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
Untuk file biasa, ukurannya harus sama.
Titik ls -l
dan wc -c
, dan cara kerjanya juga berbeda. wc -c
sebenarnya membuka file untuk dibaca (Anda dapat melihat bahwa jika Anda menjalankan strace wc -c /etc/passwd
misalnya). ls -l
hanya melakukan stat()
panggilan pada mereka. Ini juga menjelaskan mengapa dalam /proc
ls -l
menunjukkan ukuran 0 - Anda tidak dapat membuat stat file-file itu karena mereka tidak "asli" atau benar-benar disimpan pada hard-drive / ssd. wc -c
alih-alih, baca konten file itu, dan hitung ukurannya.
Akhirnya, ls -l
hanya alat untuk mendaftarkan item secara interaktif. Jarang cocok untuk skrip. Saat Anda benar-benar perlu membaca data, gunakan wc -c
saja.
Harap dicatat, bahwa untuk skrip dan menilai ukuran file, ls
bukan kandidat terbaik. Sebenarnya, ini adalah salah satu praktik umum untuk menghindari penguraian ls
output . Silakan gunakan du -b
untuk mengetahui ukuran file.