Achado muito interessante. Embora eu nunca tenha usado ls -s
para verificar se um arquivo está vazio ou não, eu teria assumido que ele reporta 0
para arquivos vazios também.
Para sua pergunta: Como o Mat já comentou, mostre os resultados do seu teste. Para explicar os resultados a eles, declare que ls -s
informa a quantidade de blocos alocados no sistema de arquivos, não o tamanho real em bytes. Obviamente, algumas implementações do sistema de arquivos alocam blocos, mesmo que não precisem armazenar nenhum dado, em vez de armazenar apenas um ponteiro NULL no inode.
A explicação para isso pode estar relacionada ao desempenho. Criar arquivos vazios que ficarão vazios é uma exceção para o processamento normal (o uso mais comum que eu vi seria a criação de arquivos de status onde a existência de um arquivo representa um certo estado do software).
Mas normalmente um arquivo criado obterá alguns dados em breve, portanto os projetistas de um determinado FS podem ter assumido que vale a pena alocar imediatamente um bloco de dados na criação do arquivo; assim, quando os primeiros dados chegam, essa tarefa já está concluída.
O segundo motivo pode ser que um arquivo continha dados no passado que foram apagados. Em vez de liberar o último bloco de dados, pode ser útil manter esse bloco de dados para reutilização pelo mesmo arquivo.
EDITAR:
Mais uma razão veio à mente: os sistemas de arquivos nos quais você encontrou valores > 0 são ZFS , a implementação do RAID + LVM + FS e GFS , um sistema de arquivos em cluster. Ambos podem ter que armazenar metadados para manter a integridade do arquivo que não é armazenado em inodes. Pode ser que ls -s
contagens em blocos de dados alocados para esses metadados.