Como usar o comando stat no Linux

Um terminal Linux em um desktop estilo Ubuntu.
Fatmawati Achmad Zaenuri / Shutterstock

O statcomando Linux  mostra muito mais detalhes do que lsfaz. Dê uma olhada por trás da cortina com este utilitário informativo e configurável. Mostraremos como usá-lo.

stat leva você para os bastidores

O lscomando é ótimo no que faz – e faz muito – mas com o Linux, parece que sempre há uma maneira de ir mais fundo e ver o que está abaixo da superfície. E, muitas vezes, não se trata apenas de levantar a ponta do tapete. Você pode rasgar as tábuas do piso e cavar um buraco. Você pode descascar o Linux como uma cebola.

lsirá mostrar-lhe uma boa quantidade de informações sobre um arquivo, como quais permissões são definidas nele, seu tamanho e se é um arquivo ou um link simbólico . Para exibir essas informações,  lslê-as de uma estrutura de sistema de arquivos chamada inode .

Cada arquivo e diretório possui um inode. O inode contém 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 lssó mostrarei algumas das informações. Para ver tudo, precisamos usar o statcomando.

Por exemplo ls, o statcomando tem muitas opções. Isso o torna um ótimo candidato para o uso de aliases. Depois de descobrir um conjunto específico de opções que stat fornecem a saída que você deseja, 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 opções de linha de comando.

Uma Comparação Rápida

Vamos usar lspara nos dar uma longa lista ( -lopção) com tamanhos de arquivo legíveis ( -hopção):

ls -lh ana.h

ls -lh ana.h em uma janela de terminal

Da esquerda para a direita, as informações que ls fornece são:

  • O primeiro caractere é um hífen “-” e isso nos diz que o arquivo é um arquivo normal e não um socket, link simbólico ou outro tipo de objeto.
  • O proprietário, grupo e outras permissões são listados no formato octal .
  • O número de links físicos apontando para este arquivo. Nesse caso, e na maioria dos casos, será um.
  • O proprietário do arquivo é dave.
  • O proprietário do grupo é dave.
  • O tamanho do arquivo é 802 bytes.
  • O arquivo foi modificado pela última vez na sexta-feira, 13 de dezembro de 2015.
  • O nome do arquivo é ana.c.

Vamos dar uma olhada com stat:

stat ana.h

stat ana.h em uma janela de terminal

As informações que obtemos statsão:

  • Arquivo : o nome do arquivo. Normalmente, é o mesmo nome que passamos statna linha de comando, mas pode ser diferente se estivermos olhando 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 requer para ser armazenado no disco rígido.
  • Bloco 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, soquetes ou canais nomeados.
  • Dispositivo : o número do dispositivo em hexadecimal e decimal. Este é o ID do disco rígido em que o arquivo está armazenado.
  • Inode : o número do inode. Ou seja, 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. Portanto, outra maneira de pensar sobre essa figura é quantos inodes apontam para esse 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 excluído e o inode foi removido. Se você usar statem um diretório, este número representa o número de arquivos no diretório, incluindo o “.” para o diretório atual e a entrada “..” para o diretório pai.
  • Acesso : As permissões do arquivo são mostradas em seus rwxformatos octal e tradicional (ler, escrever, executar formatos).
  • Uid : ID do usuário e nome da conta do proprietário.
  • Gid : ID do grupo e nome da conta do proprietário.
  • Acesso : o carimbo de data / hora de acesso. Não é tão simples quanto pode parecer. As distribuições modernas do Linux usam um esquema chamado relatime, que tenta otimizar as gravações no disco rígido necessárias para atualizar o tempo de acesso . Simplificando, o tempo de acesso é atualizado se for mais antigo do que o tempo modificado.
  • Modificar : o carimbo de data / hora da modificação. Este é o momento em que o conteúdo do arquivo foi modificado pela última vez. (Por sorte, o conteúdo deste arquivo foi alterado pela última vez há quatro anos.)
  • Mudança : o carimbo de data / hora da mudança. Esta é a hora em que os atributos ou  conteúdos do arquivo foram alterados 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 os atributos do arquivo foram alterados), mas o carimbo de data / hora modificado não será atualizado (porque o conteúdo do arquivo não foi alterado).
  • Nascimento : reservado para mostrar a data de criação original do arquivo, mas não é implementado no Linux.
Recomendado:  Como fazer backup do seu Mac para o Synology NAS

Compreendendo os carimbos de data / hora

Os carimbos de data / hora são sensíveis ao fuso horário. O -0500no final de cada linha mostra que esse arquivo foi criado em um computador em um fuso horário UTC ( Tempo Universal Coordenado ) cinco horas adiantado em relação ao fuso horário do computador atual. Portanto, este computador está cinco horas atrasado em relação ao computador que criou este arquivo. Na verdade, o arquivo foi criado em um computador de fuso horário do Reino Unido e estamos examinando-o aqui em um computador no fuso horário do Leste dos EUA.

Os carimbos de data / hora de modificação e alteração podem causar confusão porque, para os não iniciados, seus nomes soam como se tivessem o mesmo significado.

Vamos usar chmodpara modificar as permissões de arquivo em um arquivo chamado ana.c. Vamos torná-lo gravável por todos. Isso não afetará o conteúdo do arquivo, mas afetará os atributos do arquivo.

chmod + w ana.c

E então usaremos statpara olhar os carimbos de data / hora:

stat ana.c

chnod + w ana.c em uma janela de terminal

O carimbo de data / hora da mudança foi atualizado, mas o modificado não.

O timestamp modificado só será atualizado se o conteúdo do arquivo for alterado. O registro de data e hora da mudança é atualizado para mudanças de conteúdo e mudanças de atributo.

Usando Stat com vários arquivos

Para ter um relatório estatístico sobre vários arquivos de uma vez, passe os nomes dos arquivos para statna linha de comando:

stat ana.h ana.o

stat ana.h ana.o em uma janela de terminal

Para usar statem um conjunto de arquivos, use a correspondência de padrões. O ponto de interrogação “?” representa qualquer caractere único e o asterisco “*” representa qualquer sequência de caracteres. Podemos informar  statpara relatar qualquer arquivo chamado “ana” com uma extensão de uma única letra, com este comando:

stat ana.?

stat ana.?  em uma janela de terminal

Usando estatísticas para relatar em sistemas de arquivos

statpode relatar o status dos sistemas de arquivos, bem como o status dos arquivos. A -fopção (sistema de arquivos) informa statpara relatar sobre o sistema de arquivos em que o arquivo reside. Observe que também podemos passar um diretório como “/” para em statvez de um nome de arquivo.

stat -f ana.c

stat -f ana.c em uma janela de terminal

A informação que statnos dá é:

  • Arquivo : o nome do arquivo.
  • ID : O ID do sistema de arquivos em notação hexadecimal.
  • Namelen : O comprimento máximo permitido para nomes de arquivo.
  • Tipo : o tipo de sistema de arquivos.
  • Tamanho do bloco : a quantidade de dados para solicitar solicitações de leitura para taxas ideais de transferência de dados.
  • Tamanho do bloco fundamental : O tamanho de cada bloco do sistema de arquivos.
Recomendado:  Como criar uma lista suspensa dependente no Planilhas Google

Blocos:

  • Total : a contagem total de todos os blocos no sistema de arquivos.
  • Livre : O número de blocos livres no sistema de arquivos.
  • Disponível : O número de blocos livres disponíveis para usuários regulares (não root).

Inodes:

  • Total : a contagem total de inodes no sistema de arquivos.
  • Livre : O número de inodes livres no sistema de arquivos.

Desreferenciando Links Simbólicos

Se você usar statem um arquivo que é na verdade um link simbólico, ele reportará no link. Se você quiser statrelatar sobre o arquivo para o qual o link aponta, use a -Lopção (desreferenciar). O arquivo code.cé um link simbólico para ana.c. Vejamos sem a -Lopção:

código estatístico.c

stat code.c em uma janela de terminal

O nome do arquivo mostra code.capontando para ( ->) ana.c. O tamanho do arquivo é de apenas 11 bytes. Não existem blocos dedicados ao armazenamento deste link. O tipo de arquivo é listado como um link simbólico.

Claramente, não estamos olhando para o arquivo real aqui. Vamos fazer isso novamente e adicionar a -Lopção:

stat -L code.c

stat -L code.c em uma janela de terminal

Isso agora está mostrando 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 do arquivo de destino. Isso acontece porque esse é o nome que passamos statna linha de comando.

O relatório conciso

A -topção (concisa) statfornece um resumo condensado:

stat -t ana.c

stat -t ana.c em uma janela de terminal

Não há pistas fornecidas. Para entender – até que você memorize a sequência do campo – você precisa fazer uma referência cruzada dessa saída para uma statsaída completa .

Formatos de saída personalizados

A melhor maneira de obter um conjunto diferente de dados staté usar um formato personalizado. Existe uma longa lista de tokens denominados sequências de formato. Cada um deles representa um elemento de dados. Selecione aqueles que deseja incluir na saída e crie uma string de formato. Quando chamamos state passamos a string de formato para ele, a saída incluirá apenas os elementos de dados solicitados.

Existem diferentes conjuntos de sequências de formato para arquivos e sistemas de arquivos. A lista de arquivos é:

  • % a : Os direitos de acesso em octal.
  • % A : Os 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 : o modo bruto em hexadecimal.
  • % F   O tipo de arquivo.
  • % g : o ID de grupo do proprietário.
  • % G : o nome do grupo do proprietário.
  • % h : o número de links físicos.
  • % i : o número do inode.
  • % m : o ponto de montagem.
  • % n : o nome do arquivo.
  • % N : o nome do arquivo entre aspas, com o nome do arquivo não referenciado se for um link simbólico.
  • % o : A dica de tamanho de transferência de E / S ideal.
  • % s : o tamanho total, em bytes.
  • % t : o principal tipo de dispositivo em hexadecimal, para arquivos especiais de dispositivo de caractere / bloco.
  • % T : o tipo de dispositivo secundário em hexadecimal, para arquivos especiais de dispositivo de caractere / bloco.
  • % u : o ID de usuário do proprietário.
  • % U : o nome de usuário do proprietário.
  • % w : a hora de nascimento do arquivo, legível por humanos ou um hífen “-” se desconhecido.
  • % W : a hora de nascimento do arquivo, segundos desde a época; 0 se desconhecido.
  • % x : a hora do último acesso, legível por humanos.
  • % X : a hora do último acesso, segundos desde a época.
  • % y : a hora da última modificação de dados, legível por humanos.
  • % Y : a hora da última modificação de dados, segundos desde a época.
  • % z : a hora da última mudança de status, legível por humanos.
  • % Z : a hora da última mudança de status, segundos desde a época.
Recomendado:  Os telefones são melhores sem baterias removíveis

A “época” é a época do Unix , que ocorreu em 01/01/1970 00:00:00 +0000 (UTC).

Para sistemas de arquivos, as sequências de formato são:

  • % a : O número de blocos livres disponíveis para usuários regulares (não root).
  • % 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.
  • % i : a ID do sistema de arquivos em hexadecimal.
  • % l : o comprimento máximo dos nomes de arquivo.
  • % n : o nome do arquivo.
  • % s : o tamanho do bloco (o tamanho ideal para escrita).
  • % 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.

Existem duas opções que aceitam strings de sequências de formato. Estes são --formate --printf. A diferença entre eles é que  --printfinterpreta as sequências de escape do estilo C , como nova linha \ne tab \t, e não adiciona automaticamente um caractere de nova linha à saída.

Vamos criar uma string de formato e passá-la para stat. As sequências de formato a serem usadas são %npara nome de arquivo, %spara o tamanho do arquivo e %Fpara o tipo de arquivo. Vamos adicionar a \nsequência de escape ao 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 é% F \ n"

Vamos passar isso para statusar a --printfopção. Vamos pedir statpara relatar um arquivo chamado code.ce um conjunto de arquivos correspondentes  ana.?. Este é o comando completo. Observe o sinal de igual “ =” entre --printfe a string de formato:

stat --printf = "O arquivo% n tem% s bytes e é um código% F \ n" ..c ana / ana.?

stat --printf = "O arquivo% n tem% s bytes e é um código% F \ n" ..c ana / ana.?  em uma janela de terminal

O relatório de cada arquivo é listado em uma nova linha, que é o que solicitamos. O nome do arquivo, o tamanho do arquivo e o tipo de arquivo são fornecidos para nós.

Os formatos personalizados fornecem acesso a ainda mais elementos de dados do que os incluídos na statsaída padrão .

Controle de grãos finos

Como você pode ver, há um enorme escopo para extrair os elementos de dados específicos que são de seu interesse. Você provavelmente também pode ver por que recomendamos usar apelidos para os encantamentos mais longos e complexos.