Sim, existem esses casos.
No caso de links simbólicos no sistema Linux com GNU ls
, o ls -l
exibirá o tamanho do link, enquanto wc -c
resolverá o arquivo real e lerá o número de bytes lá. Abaixo, você pode ver que ls -l
informa 29 bytes, enquanto wc
informa 172 bytes no arquivo real.
$ 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
No caso de sistemas de arquivos virtuais , como /proc
ou /sys
, muitos arquivos serão mostrados como tendo tamanho 0 ls -l
. Sob o sistema de arquivos /dev
, temos vários arquivos especiais, como dispositivos de caracteres e dispositivos de bloco - wc -c
trava e ls -l
mostra
Os pipes nomeados serão informados como 0
bytes por ls -c
, mas wc -c
lerá o conteúdo do canal, então, tecnicamente, ele informará quantos dados estão no canal. pipe nomeado:
$ 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
Para arquivos regulares, o tamanho deve ser igual.
O ponto de ls -l
e wc -c
e como eles funcionam também difere. wc -c
na verdade abre o arquivo para leitura (você pode ver isso se você executar strace wc -c /etc/passwd
por exemplo). ls -l
realiza apenas stat()
sobre esses. Isso também explica porque em /proc
ls -l
mostra tamanho 0 - você não pode registrar esses arquivos porque eles não são "reais" ou realmente armazenados no disco rígido / ssd. wc -c
, lê os conteúdos desse arquivo e calcula seu tamanho.
Por fim, ls -l
é apenas uma ferramenta para listar itens de forma interativa. Raramente é um bom ajuste para scripts. Quando você realmente precisa ler os dados, use wc -c
.
Por favor, note que para o script e avaliar o tamanho de um arquivo, ls
não é o melhor candidato. Na verdade, é uma das práticas comuns para evitar a análise de ls
output . Por favor, use du -b
para descobrir o tamanho de um arquivo.