Да, есть такие случаи.
В случае символьных ссылок в системе Linux с GNU ls, он ls -lвыдаст размер ссылки, а wc -cтакже разрешит фактический файл и прочитает количество байтов там. Ниже вы можете видеть, что ls -lсообщает 29 байтов, а wcсообщает 172 байта в реальном файле.
$ 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
В случае виртуальных файловых систем , таких как/proc или /sys, многие файлы там будут иметь размер 0 ls -l. Под /devфайловой системой у нас есть множество специальных файлов, таких как символьные устройства и блочные устройства - они wc -cподвешены на них и ls -lпоказывают большие и младшие числа вместо размера.
Именованные каналы будут сообщаться как 0байты ls -c, но на wc -cсамом деле будут читать содержимое канала, поэтому технически он скажет вам, сколько данных находится в именованном канале:
$ 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
Для обычных файлов размер должен быть одинаковым.
Суть ls -lи wc -c, и как они работают, также отличается. wc -cфактически открывает файл для чтения (вы можете увидеть это, если вы запустите, strace wc -c /etc/passwdнапример). ls -lтолько выполняет stat()вызов на тех. Это также объясняет, почему в /proc ls -lшоу отображается размер 0 - вы не можете определить эти файлы, потому что они не являются «настоящими» или фактически хранятся на жестком диске / ssd. wc -cвместо этого читает содержимое этого файла и вычисляет его размер.
Наконец, ls -lэто всего лишь инструмент для интерактивного перечисления предметов. Это редко подходит для сценариев. Когда вам действительно нужно прочитать данные, используйте wc -cвместо этого.
Обратите внимание, что для написания сценариев и оценки размера файла, lsэто не лучший кандидат. Фактически, это одна из распространенных практик, позволяющая избегать анализа lsвывода . Пожалуйста, используйте du -b для выяснения размера файла.