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 -lsẽ đưa ra kích thước của liên kết, trong khi wc -csẽ 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 -lbáo cáo 29 byte, trong khi wcbá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 /devhệ 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 -ctreo trên đó và ls -lhiể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à 0byte theo ls -c, nhưng wc -cthự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 -lvà wc -c, và cách họ làm việc cũng khác nhau. wc -cthực sự mở tệp để đọc (bạn có thể thấy rằng nếu bạn chạy strace wc -c /etc/passwdchẳng hạn). ls -lchỉ 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 -lhiể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 -cthay 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 -lchỉ 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 -cthay thế.
Xin lưu ý rằng đối với kịch bản và đánh giá kích thước của tệp, lskhô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.