Sim, existem casos assim.
No caso de links simbólicos no sistema Linux com GNU ls
, ele 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
reporta 29 bytes, enquanto wc
reporta 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 com tamanho 0 ls -l
. No /dev
sistema de arquivos, temos uma variedade de arquivos especiais, como dispositivos de caracteres e dispositivos de bloco - wc -c
trava neles e ls -l
mostra números maiores e menores em vez de tamanho.
Os pipes nomeados serão relatados como 0
bytes por ls -c
, mas wc -c
realmente lerão o conteúdo do pipe, portanto, tecnicamente, ele informará quantos dados há no 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
abre realmente o arquivo para leitura (você pode ver isso se executar, strace wc -c /etc/passwd
por exemplo). ls -l
só realiza stat()
chamadas naqueles. Isso também explica o motivo pelo qual /proc
ls -l
mostra o tamanho 0 - você não pode declarar esses arquivos porque eles não são "reais" ou realmente armazenados no disco rígido / ssd. wc -c
em vez disso, lê o conteúdo desse arquivo e calcula seu tamanho.
Por fim, ls -l
é apenas uma ferramenta para listar itens interativamente. Raramente é um bom ajuste para scripts. Quando você realmente precisar ler os dados, use wc -c
.
Observe que, para criar scripts e avaliar o tamanho de um arquivo, ls
não é o melhor candidato. De fato, é uma das práticas comuns evitar a análise de ls
saída . Por favor, use du -b
para descobrir o tamanho de um arquivo.