Vâng, có những trường hợp như vậy.
Trong trường hợp liên kết tượng trưng trên hệ thống Linux với GNU ls
, ls -l
sẽ đưa ra kích thước của liên kết, trong khi wc -c
sẽ giải quyết tệp thực tế và đọc số byte ở đó. Dưới đây bạn có thể thấy rằng ls -l
báo cáo 29 byte, trong khi wc
báo cáo 172 byte trong tệp thực tế.
$ 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
Trong trường hợp hệ thống tệp ảo , chẳng hạn như/proc
hoặc /sys
, nhiều tệp ở đó sẽ hiển thị là có kích thước 0 ls -l
. Trong /dev
hệ thống tệp, chúng tôi có nhiều tệp đặc biệt, chẳng hạn như thiết bị ký tự và thiết bị khối - wc -c
treo trên đó và ls -l
hiển thị số lớn và số nhỏ thay vì kích thước.
Các đường ống được đặt tên sẽ được báo cáo là 0
byte theo ls -c
, nhưng wc -c
thực tế sẽ đọc nội dung của đường ống, vì vậy về mặt kỹ thuật, nó sẽ cho bạn biết có bao nhiêu dữ liệu trong đường ống được đặt tên:
$ 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
Đối với một tệp thông thường, kích thước phải bằng nhau.
Điểm của ls -l
và wc -c
, và cách họ làm việc cũng khác nhau. wc -c
thực sự mở tệp để đọc (bạn có thể thấy rằng nếu bạn chạy strace wc -c /etc/passwd
chẳng hạn). ls -l
chỉ thực hiện stat()
cuộc gọi trên những. Điều này cũng giải thích tại sao trong /proc
ls -l
hiển thị kích thước 0 - bạn không thể thống kê các tệp đó vì chúng không "thực" hoặc thực sự được lưu trữ trên ổ cứng / ssd. wc -c
thay vào đó, đọc nội dung của tệp đó và tính kích thước của nó.
Cuối cùng, ls -l
chỉ là một công cụ để liệt kê các mục tương tác. Nó hiếm khi phù hợp để viết kịch bản. Khi bạn thực sự cần đọc dữ liệu, sử dụng wc -c
thay thế.
Xin lưu ý rằng đối với kịch bản và đánh giá kích thước của tệp, ls
không phải là ứng cử viên tốt nhất. Trong thực tế, đó là một trong những thực tiễn phổ biến để tránh phân tích cú pháp ls
đầu ra . Vui lòng sử dụng du -b
để tìm ra kích thước của một tập tin.