El Linux stat
O comando mostra muito mais detalhes do que ls
faz. Dê uma olhada por trás da cortina com este utilitário informativo e configurável. Vamos mostrar a você como usá-lo.
stat leva você aos bastidores
a ls
O comando é excelente no que faz, e há muito tempo, mas com linux, parece que sempre há uma maneira de cavar fundo e ver o que está abaixo da superfície. E, frequentemente, não se trata apenas de levantar a ponta do tapete. Você pode quebrar as tábuas do piso e depois cavar um buraco. Você pode descascar o Linux como uma cebola.
ls
mostrará muitas informações sobre um arquivo, como quais permissões são definidas nele, quão grande é e se é um arquivo ou um link simbólico. Para exibir esta informação ls
leia de um estrutura do sistema de arquivos chamada inode.
Cada arquivo e diretório tem um inode. Inode segura metadados sobre o arquivo, como quais blocos de sistema de arquivos ele ocupa e os carimbos de data associados ao arquivo. O inode é como um cartão de biblioteca para o arquivo. Mas ls
só vai mostrar parte das informações. Para ver tudo, precisamos usar o stat
comando.
Igual que ls
, a stat
O comando tem muitas opções. Isso o torna um ótimo candidato para aliasing.. Depois de descobrir um determinado conjunto de alternativas que tornam stat
te dar o resultado que você quer, envolva-o em um alias ou função shell. Isso o torna muito mais conveniente de usar e você não precisa se lembrar de um conjunto misterioso de alternativas de linha de comando.
RELACIONADO: Como usar o comando ls para listar arquivos e diretórios no Linux
Uma comparação rápida
Vamos usar ls
para nos dar uma longa lista -l
opção) com tamanhos de arquivo legíveis por humanos ( -h
opção):
ls -lh ana.h
De esquerda a direita, a informação fornecida por ls é:
- O primeiro caractere é um travessão "-" e isso nos diz que o arquivo é um arquivo normal e não um soquete, link simbólico ou outro tipo de objeto.
- O proprietário, o grupo e outras permissões são listados em formato octal.
- O número de links físicos apontando para este arquivo. Para este caso, e na maioria dos casos, será um.
- O proprietário do arquivo é Dave.
- O dono do grupo é Dave.
- O tamanho do arquivo é 802 bytes.
- O arquivo foi modificado pela última vez na sexta-feira 13 de dezembro a 2015.
- O nome do arquivo é
ana.c
.
Vamos dar uma olhada com stat
:
stat ana.h
As informações que obtemos de stat
isto é:
- Processos: o nome do arquivo. Em geral, é o mesmo que o nome que damos.
stat
na linha de comando, mas pode ser diferente se olharmos para um link simbólico. - Tamanho: O tamanho do arquivo em bytes.
- Blocos: O número de blocos do sistema de arquivos que o arquivo precisa para ser armazenado no disco rígido.
- Bloque IO: O tamanho de um bloco do sistema de arquivos.
- Tipo de arquivo: O tipo de objeto que os metadados descrevem. Os tipos mais comuns são arquivos e diretórios, mas também podem ser links, tomadas ou tubos nomeados.
- Dispositivo: O número do dispositivo em hexadecimal e decimal. Este é o ID do disco rígido onde o arquivo está armazenado.
- Inodo: Número de inode. Em outras palavras, o número de identificação deste inode. Juntos, o número do inode e o número do dispositivo identificam exclusivamente um arquivo.
- Links: Este número indica quantos links físicos apontam para este arquivo. Cada link físico tem seu próprio inode. Então, outra maneira de pensar sobre esta figura é quantos inodes apontam para este arquivo. Cada vez que um link físico é criado ou excluído, este número será ajustado para cima ou para baixo. Quando chega a zero, o próprio arquivo foi removido e o inode foi removido. Se você usar
stat
em um diretório, este número representa o número de arquivos no diretório, incluindo o “.” a entrada para o diretório atual ea entrada “..” para o diretório doméstico. - Acesso: As permissões de arquivo são mostradas em seu formato octal e tradicional.
rwx
(leitura, escrever, formatos de execução). - Uid: ID de usuário e nome da conta do proprietário.
- Guia: ID do grupo e nome da conta do proprietário.
- Acesso: O carimbo de data / hora de acesso. Não é tão fácil quanto pode parecer. As distribuições Linux modernas usam um esquema chamado
relatime
, o que você está tentando otimizar as gravações necessárias no disco rígido para atualizar o tempo de acesso. Resumidamente, a hora de acesso é atualizada se for anterior à hora modificada. - Modificar: O carimbo de data / hora da modificação. Este é o momento em que o arquivo contente foram modificados pela última vez. (Por sorte, o conteúdo deste arquivo foi modificado pela última vez há quatro anos).
- Mudar: O carimbo de data / hora da mudança. Este é o momento em que o arquivo atributos o contente foram modificados pela última vez. Se você modificar um arquivo definindo novas permissões de arquivo, o carimbo de data / hora da mudança será atualizado (porque o arquivo atributos eles mudaram), mas o carimbo de data / hora modificado não será atualizado (porque o arquivo contente eles não mudaram).
- Nascimento: Reservado para mostrar a data de criação original do arquivo, mas isso não é implementado no Linux.
Compreendendo carimbos de data / hora
Os carimbos de data / hora são sensíveis ao fuso horário. a -0500
no final de cada linha mostra que este arquivo foi criado em um computador em um Tempo Universal Coordenado (UTC) fuso horário cinco horas antes do fuso horário do computador atual. Então, este computador está cinco horas atrasado em relação ao computador que criou este arquivo. Na realidade, O arquivo foi criado em um computador de fuso horário do Reino Unido e estamos visualizando-o aqui em um computador no fuso horário padrão do leste dos EUA. UU.
Modificar e alterar carimbos de data / hora pode causar confusão porque, para os não iniciados, Seus nomes parecem ter o mesmo significado.
Vamos usar chmod
para modificar as permissões de arquivo em um arquivo chamado ana.c
. Vamos fazer todo mundo escrever isso. Isso não afetará o conteúdo do arquivo, mas afetará os atributos do arquivo.
chmod + w ana.c
E depois vamos usar stat
para ver os carimbos de data / hora:
stat ana.c
O carimbo de data / hora da mudança foi atualizado, mas o modificado não.
a modificado O carimbo de data / hora só será atualizado se o conteúdo do arquivo for alterado. a mudança O carimbo de data / hora é atualizado para alterações de conteúdo e alterações de atributo.
Usando estatísticas com muitos arquivos
Para ter um relatório estatístico sobre vários arquivos ao mesmo tempo, passe os nomes dos arquivos para stat
na linha de comando:
stat ana.h ana.o
Usar stat
em um conjunto de arquivos, usar correspondência de padrões. O ponto de interrogação “?” representa qualquer caráter individual e o asterisco “*” representa qualquer sequência de caracteres. Podemos dizer stat
para relatar quaisquer arquivos chamados “Anna” com uma extensão de uma única letra, com este comando:
stat ana.?
Usando estatísticas para relatar em sistemas de arquivos
stat
pode relatar sobre o status dos sistemas de arquivos, bem como o status dos arquivos. a -f
(Sistema de arquivo) opção diz stat
para relatar o sistema de arquivos onde o arquivo reside. Por favor, note que também podemos passar por um diretório como “/” uma stat
em vez de um nome de arquivo.
stat -f ana.c
A informação stat
nos dá é:
- Processos: o nome do arquivo.
- EU IRIA: O ID do sistema de arquivos em notação hexadecimal.
- Namelen: O comprimento máximo permitido para nomes de arquivo.
- Escreve: O tipo de sistema de arquivos.
- Tamanho do bloco: A quantidade de dados para solicitar solicitações de leitura para velocidades ideais de transferência de dados.
- Tamanho de bloco fundamental: O tamanho de cada bloco no sistema de arquivos.
Blocos:
- Total: A contagem total de todos os blocos no sistema de arquivos.
- De graça: O número de blocos livres no sistema de arquivos.
- Disponível: O número de blocos gratuitos disponíveis para usuários regulares (sem raiz).
Inodos:
- Total: A contagem total de inodes no sistema de arquivos.
- De graça: O número de inodes livres no sistema de arquivos.
Desreferenciar links simbólicos
Se você usar stat
em um arquivo que é na verdade um link simbólico, informará sobre o link. Sim você quer stat
para informar sobre o arquivo para o qual o link aponta, Use o -L
(desreferencia) opção. O arquivo code.c
é um link simbólico para ana.c
. Vamos ver sem ele -L
opção:
código estatístico.c
O nome do arquivo mostra code.c
visando ( ->
) ana.c
. O tamanho do arquivo é apenas 11 bytes. Não há blocos dedicados ao armazenamento deste link. O tipo de arquivo é exibido como um link simbólico.
Claramente, não estamos vendo o arquivo real aqui. Vamos fazer isso de novo e adicionar o -L
opção:
stat -L code.c
Isso agora mostra os detalhes do arquivo para o arquivo apontado pelo link simbólico. Mas observe que o nome do arquivo ainda é fornecido como code.c
. Este é o nome do link, não o arquivo de destino. Isso acontece porque este é o nome que passamos stat
na linha de comando.
O relatório conciso
a -t
(conciso) opção causa stat
para fornecer um resumo condensado:
stat -t ana.c
Nenhuma pista é dada. Para dar sentido a, até que você tenha memorizado a sequência de campo, você deve cruzar esta saída para um stat
Produção.
Formatos de saída personalizados
A melhor maneira de obter um conjunto diferente de dados de stat
é usar um formato personalizado. Existe uma longa lista de tokens chamados sequências de formato. Cada um deles representa um item de dados. Selecione aqueles que deseja incluir na saída e crie uma string de formato. Quando ligamos stat
e passe a string de formato, a saída incluirá apenas os itens de dados que solicitamos.
Existem diferentes conjuntos de sequências de formato para arquivos e sistemas de arquivos. A lista de arquivos é:
- %uma: Direitos de acesso em octal.
- %UMA: Direitos de acesso em formato legível (
rwx
). - %B: O número de blocos alocados.
- %B: O tamanho em bytes de cada bloco.
- %D: O número do dispositivo em decimal.
- %D: O número do dispositivo em hexadecimal.
- %F: Modo bruto em hexadecimal.
- %F O tipo de arquivo.
- %grama: O ID do grupo do proprietário.
- %GRAMA: O nome do grupo do proprietário.
- % h: O número de links físicos.
- %eu: Número de inode.
- %metro: ponto de montagem.
- %Norte: o nome do arquivo.
- %NORTE: O nome do arquivo entre aspas, com o nome do arquivo sem referência se for um link simbólico.
- % o: A sugestão de tamanho de transferência de E / S ótimo.
- %s: Tamanho único, e bytes.
- % t: O tipo de dispositivo primário em hexadecimal, para arquivos especiais de dispositivos de caracteres / blocos.
- % T: O tipo de dispositivo menor em hexadecimal, para arquivos especiais de dispositivos de caracteres / blocos.
- % você: ID do usuário proprietário.
- % você: O nome de usuário do proprietário.
- % C: A hora de nascimento do arquivo, legível por humanos ou um traço “-” se desconhecido.
- % C: A hora de nascimento do arquivo, segundos a partir do tempo; 0 se desconhecido.
- %X: A hora do último acesso, legível por humanos.
- %X: A hora do último acesso, segundos a partir do tempo.
- % e: A hora da última modificação de dados, legível por humanos.
- % E: A hora da última modificação de dados, segundos a partir do tempo.
- % Com: A hora da última mudança de estado, legível por humanos.
- % COM: A hora da última mudança de estado, segundos a partir do tempo.
o “época” é o Época Unix, que aconteceu em 1 de janeiro de 1970 no 00:00:00 + 0000 (UTC).
Para sistemas de arquivos, as sequências de formato são:
- %uma: O número de blocos gratuitos disponíveis para usuários regulares (sem raiz).
- %B: O total de blocos de dados no sistema de arquivos.
- %C: O total de inodes no sistema de arquivos.
- %D: O número de inodes livres no sistema de arquivos.
- %F: O número de blocos livres no sistema de arquivos.
- %eu: O ID do sistema de arquivos em hexadecimal.
- % eu: O comprimento máximo dos nomes de arquivo.
- %Norte: o nome do arquivo.
- %s: Tamanho do bloco (o tamanho de escrita ideal).
- %S: O tamanho dos blocos do sistema de arquivos (para contagens de blocos).
- % t: O tipo de sistema de arquivos em hexadecimal.
- % T: tipo de sistema de arquivo em formato legível por humanos.
Existem duas opções que aceitam strings de sequências de formato. Estes são --format
e --printf
. A diferença entre eles é --printf
interpretar Sequências de escape estilo C como nova linha n
e guia t
e não adiciona automaticamente um caractere de nova linha à sua saída.
Vamos criar uma string de formato e passá-la para stat
. As sequências de formato a serem usadas são %n
para o nome do arquivo, %s
para o tamanho do arquivo e %F
para tipo de arquivo. Vamos adicionar o n
sequência de escape no final da string para garantir que cada arquivo seja tratado em uma nova linha. Nossa string de formato se parece com isto:
"O arquivo% n tem% s bytes, e é um% Fn"
Vamos passar isso para stat
usando o --printf
opção. Vamos perguntar stat
para relatar sobre um arquivo chamado code.c
e um conjunto de arquivos correspondentes ana.?
. Este é o comando completo. Observe o sinal igual “=
” Entre --printf
e a string de formato:
stat --printf ="O arquivo% n tem% s bytes, e é um% Fn" code.c ana / ana.?
O relatório de cada arquivo aparece em uma nova linha, o que pedimos. o nome do arquivo, tamanho e tipo de arquivo são fornecidos para nós.
Os formatos personalizados fornecem acesso a ainda mais itens de dados do que os incluídos no padrão stat
Produção.
Controle de grãos para cima
Como você pode ver, há um grande escopo para extrair os itens de dados específicos que são de seu interesse. Você provavelmente também pode ver porque sugerimos usar apelidos para os encantamentos mais longos e complexos..