I увидеть, что ваш Auto Mute включен. Однажды была эта проблема, и я переключил ее на Disabled. После этого работал. Хотя теперь у меня возникла новая проблема после попытки установить Pipelight в качестве альтернативы Silverlight. Так что, если у кого-то есть какие-либо решения помимо этого, это было бы здорово.
ls -l
вернет размер файла, о котором сообщает файловая система.
wc -c
попытается прочитать файл, чтобы определить «фактический» размер. По моим наблюдениям, сначала кажется, что он пытается искать до конца, и если это не сработает, он считывает весь файл, считая его размер.
Это простое описание того, что делают эти два инструмента, но оно приводит к ряду последствий для результатов:
ls
выдаст неверный результат для определенных файловых систем. Например, виртуализированные файловые системы, такие как / proc
, будут сообщать нулевой размер для многих файлов, потому что эти «файлы» физически нигде не хранятся; они генерируются в соответствии с требованиями программного обеспечения.
wc
не будет работать вообще для файлов без разрешений на чтение, тогда как ls
требует только разрешений для перечисления каталога (сравните ls -l / etc / shadow
с wc -c / etc / shadow
).
Как упоминалось в других ответах, поведение символических ссылок также отличается. Поскольку wc
пытается их прочитать, он заканчивает чтение файла, на который указывает символическая ссылка, тогда как поскольку ls
просто запрашивает файловую систему, он сообщит размер, используемый для хранения символической ссылки. сам.
Я уверен, что есть и другие отличия, о которых я еще не думал, но я подумал, что дам ясное и простое объяснение основной причины этих различий.
Да, такие случаи бывают.
В случае символических ссылок в системе 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
отображается нулевой размер - вы не можете определить эти файлы, потому что они не являются "настоящими" или фактически хранятся на жестком диске / ssd. wc -c
вместо этого считывает содержимое этого файла и вычисляет его размер.
Наконец, ls -l
- это всего лишь инструмент для интерактивного вывода списка элементов. Он редко подходит для написания сценариев. Если вам действительно нужно прочитать данные, используйте вместо них wc -c
.
Обратите внимание, что для написания сценариев и оценки размера файла ls
не лучший кандидат. Фактически, это одна из общепринятых практик, избегая синтаксического анализа ls
вывода . Используйте du -b
, чтобы узнать размер файла.
Для обычного файла ls и wc вызывают stat. Однако для файла / proc или / sys ls возвращает 0, а wc возвращает другое число:
$ ls -l /proc/modules
-r--r--r-- 1 root root 0 Jan 16 14:56 modules
^ this one
$ wc -c /proc/modules
7621 modules
Это, вероятно, способ узнать, является ли что-то специальным файлом.