Várias perguntas foram feitas sobre isso, como Entendendo a saída de ls , O que são colunas em ls -la? , O que 'ls -la' faz? , O que significam os campos na saída ls -al? , etc.
Também encontrei muitos outros sites com artigos tentando explicar isso.
O que cada um deles parece ter em comum é que, apesar de anotar o significado das colunas, nunca há links/referências de onde eles adquiriram essa informação. Uma resposta na terceira pergunta está vinculada ao manual coreutils , mas muito parecida com a página de manual que ainda não fornece esclarecimentos.
Os recursos mencionados acima estão incompletos, pois estou desenvolvendo um driver e descobri que ls -l
fornece o número maior e menor para dispositivos de bloco/caractere (que é diferente da saída normal para arquivos ou diretórios):
Aqui estão os números maiores/secundários do dispositivo são 1 e 3 respectivamente.
Só descobri isso porque alguém mencionou isso em uma resposta (pergunta não relacionada). Se eu quisesse saber o que esses números significavam antes, provavelmente não teria sido capaz de descobrir, exceto pelo caso improvável de ter encontrado essa resposta. Ou procurei no código-fonte.
Parece muito estranho para uma ferramenta que praticamente todo usuário Linux usa, não ter nenhuma informação adequada disponível sobre sua saída. Então estou faltando alguma coisa? Onde está documentado?
EDIT: Muru nos comentários referiu-se a mais uma pergunta Como descobrir o que os campos em ls -l significam - as respostas sugeridas nessa pergunta mencionam principalmente as páginas de manual (uma cola diretamente), que para GNU coreutils não fornece uma resposta completa (a página de manual não menciona números de dispositivos principais/secundários). A página de manual do BSD sim, mas a resposta de Stephen sobre o padrão posix é (eu acho) a mais correta.
ls
é especificado por POSIX , essa é a referência comum. Os formatos de saída são descritos na seção “STDOUT”.Sim, o fato de o campo de tamanho ser substituído por
major, minor
arquivos de dispositivo, como tem sido o caso desde pelo menos o Research Unix v5 em 1974 e documentado lá desde pelo menos o Research Unix v6 (não foi possível encontrar uma página de manual v5) não foi documentado em a documentação da implementação GNU dels
( agora corrigida após este relatório de bug , graças a você).A especificação POSIX do
ls
utilitário com a qual a maiorials
das implementações, incluindo GNUls
¹, tenta se conformar, menciona que o tamanho é substituído por algumas informações definidas pela implementação [...]<device-info>
associadas ao dispositivo em questão , embora no caso do GNU,ls
como em a implementação original do Unix, que é sempremajor, minor
. Porém, ao contrário da implementação original do Unix, o GNUls
garante que sempre haverá pelo menos um espaço além da vírgula entre o número maior e o menor do dispositivo².¹ pelo menos quando em um ambiente POSIX, como quando a
POSIXLY_CORRECT
variável de ambiente está definida e nenhum dosBLOCKSIZE
,BLOCK_SIZE
,LS_BLOCK_SIZE
uns está, embora nenhum deles seja relevante neste caso.² esse também é o caso de várias outras
ls
implementações, como as do busybox ou toybox, também comumente encontradas em sistemas baseados em Linux (e elas próprias não compatíveis com POSIX), mas não todas. O de ast-open, por exemplo, nunca inclui um espaço e preenche todos os números com 0 até um comprimento de 3 (como001,005
), enquanto alguns ainda os preenchem com espaço até um comprimento de 3, resultando em um número variável de campos delimitados por espaços em branco (1, 5
vs7,128
para instância). Uma das muitas razões pelas quais a saída dels -l
não pode ser analisada de forma confiável nem portável.