Header Ads

Como usar o comando stat no Linux

Fatmawati Achmad Zaenuri / Shutterstock

O comando stat do Linux mostra muito mais detalhes do que o ls. Dê uma olhada atrás da cortina com este utilitário informativo e configurável. Mostraremos como usá-lo.

stat leva você para trás dos bastidores

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

ls lhe mostrará uma grande quantidade de informações sobre um arquivo, como quais permissões estão definidas nele, qual o tamanho, e se é um arquivo ou um link simbólico. Para exibir essas informações, o ls as lê de uma estrutura do sistema de arquivos chamada inode.

Todo arquivo e diretório tem 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 ls mostrará apenas algumas informações. Para ver tudo, precisamos usar o comando stat.

Assim como ls, o comando stat 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 fazem o stat fornecer a saída desejada, envolva-o em um alias ou função de shell. Isso torna muito mais conveniente o uso, e você não precisa se lembrar de um conjunto misterioso de opções de linha de comando.

RELATED: Como usar o comando ls para listar arquivos e diretórios no Linux

Uma comparação rápida

Vamos usar ls para nos fornecer uma lista longa (opção -l) com tamanhos de arquivo legíveis por humanos (opção -h):

 ls -lh ana.h 

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 é regular e não um soquete, link simbólico ou outro tipo de objeto.
  • O proprietário, o grupo e outras permissões estão listados no formato octal.
  • O número de links físicos que apontam 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 tem 802 bytes.
  • O arquivo foi modificado pela última vez na sexta-feira, 13 de dezembro de 2015.
  • O nome do arquivo é ana.c.

&’ s dê uma olhada com stat:

 stat ana.h 

As informações que obtemos do stat são:

  • Arquivo: o nome do arquivo. Geralmente, é igual ao nome que passamos para stat na 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 serem armazenados no disco rígido.
  • Bloco IO: O tamanho de um bloco do sistema de arquivos.
  • Tipo de arquivo: o tipo de objeto descrito pelos metadados. Os tipos mais comuns são arquivos e diretórios, mas também podem ser links, soquetes ou pipes nomeados.
  • Dispositivo: o número do dispositivo em hexadecimal e decimal. Esse é o ID do disco rígido no qual o arquivo está armazenado.
  • Inode: o número do inode. Ou seja, o número de identificação desse inode. Juntos, o número do inode e o número do dispositivo identificam exclusivamente um arquivo.
  • Links: esse número indica quantos links físicos apontam para esse arquivo. Cada link físico possui 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, esse número é ajustado para cima ou para baixo. Quando chega a zero, o próprio arquivo foi excluído e o inode é removido. Se você usar stat em um diretório, esse número representa o número de arquivos no diretório, incluindo o “. ” entrada para o diretório atual e o “ .. ” entrada para o diretório pai.
  • Acesso: as permissões de arquivo são mostradas em rwx octal e tradicional (formatos de leitura, gravação, execução).
  • Uid: ID do usuário e nome da conta de o proprietário.
  • Gid: ID do grupo e nome da conta do proprietário.
  • Acesso: o registro de data e hora do 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 do disco rígido necessárias para atualizar o tempo de acesso. Simplificando, o tempo de acesso é atualizado se for mais antigo que o tempo modificado.
  • Modificar: o registro de data e hora da modificação. É a hora 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 para o dia.)
  • Alteração: o carimbo de data / hora da alteração. É a hora em que os atributos ou o conteúdo do arquivo foram alterados pela última vez. Se você modificar um arquivo definindo novas permissões de arquivo, o carimbo de data / hora da alteração 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 isso não foi implementado no Linux.

Compreendendo os carimbos de data / hora

Os carimbos de hora são sensíveis ao fuso horário. O -0500 no final de cada linha mostra que esse arquivo foi criado em um computador em um fuso horário do Tempo Universal Coordenado (UTC) cinco horas antes do fuso horário do computador atual. Portanto, este computador está cinco horas atrás do computador que criou esse arquivo. De fato, o arquivo foi criado em um computador de fuso horário no Reino Unido e estamos vendo aqui em um computador no fuso horário do Leste dos EUA.

Os carimbos de data e hora de modificação e alteração podem causar confusão porque, para os não iniciados, seus nomes soam como se eles significassem a mesma coisa.

Vamos usar o chmod para modificar as permissões de arquivo em um arquivo chamado ana.c. Nós 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 o stat para examinar os registros de data e hora:

 stat ana.c 

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

O carimbo de data / hora modificado será atualizado apenas se o conteúdo do arquivo for alterado. O registro de data e hora da alteração é atualizado para as alterações de conteúdo e de atributo.

Usando Stat com vários arquivos

Para que o stat relate vários arquivos de uma vez, passe os nomes dos arquivos para stat na linha de comando:

 stat ana.h ana.o 

Para usar o stat em 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 dizer ao stat para informar sobre qualquer arquivo chamado “ ana ” com uma extensão de letra única, com este comando:

 stat ana.?[/PREunette

Usando stat para reportar em sistemas de arquivos

stat pode relatar o status dos sistemas de arquivos, bem como o status dos arquivos. A opção -f (sistema de arquivos) informa ao stat para relatar o sistema de arquivos em que o arquivo reside. Note que também podemos passar por um diretório como “ / ” para stat em vez de um nome de arquivo.

 stat -f ana.c 

O status da informação nos fornece é:

  • 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 arquivos.
  • 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 fundamental do bloco: o tamanho de cada bloco do sistema de arquivos.

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ível para usuários regulares (não raiz).

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 stat em um arquivo que é realmente um link simbólico, ele será reportado no link. Se você deseja que o stat relate o arquivo para o qual o link aponta, use a opção -L (desreferência). O arquivo code.c é um link simbólico para ana.c. Vamos dar uma olhada sem a opção -L:

Código de estatísticas

 .c 

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

Claramente, não estamos vendo o arquivo real aqui. Vamos fazer isso de novo e adicionar a opção -L:

 stat -L code.c 

Agora está mostrando os detalhes do arquivo apontado pelo link simbólico. Mas observe que o nome do arquivo ainda é dado como code.c. Este é o nome do link, não o arquivo de destino. Isso acontece porque esse é o nome que passamos para stat na linha de comando.

O relatório conciso

A opção -t (concisa) faz com que o stat forneça um resumo condensado:

 stat -t ana.c 

Não há pistas dadas. Para entender o significado até que você memorize a sequência de campos, é necessário fazer referência cruzada dessa saída a uma saída de status completa.

Formatos de saída personalizados

Uma maneira melhor de obter um conjunto diferente de dados do stat é usar um formato personalizado. Há uma longa lista de tokens chamados sequências de formato. Cada um deles representa um elemento de dados. Selecione os que você deseja incluir na saída e crie uma string de formato. Quando chamamos stat e passamos a string de formato para ele, a saída inclui apenas os elementos de dados que solicitamos.

Existem diferentes conjuntos de seqüê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 por humanos (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 do 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 nome de arquivo sem referência se for um link simbólico.
  • % o: a dica ideal para o tamanho da transferência de E / S.
  • % s: o tamanho total, em bytes.
  • % t: o principal tipo de dispositivo em hex, para arquivos especiais de caracteres / dispositivos de bloco.
  • % T: O tipo de dispositivo secundário em hexadecimal, para arquivos especiais de caracteres / dispositivos de blocos.
  • % u: o ID do usuário do proprietário.
  • % U: O nome de usuário do proprietário.
  • % w: o horário do nascimento do arquivo, readab humano le, ou um hífen “ - ” se desconhecido.
  • % W: a hora do nascimento do arquivo, segundos desde a época; 0 se desconhecido.
  • % x: O horário do último acesso, legível por humanos.
  • % X: O horário do último acesso, segundos desde a época.
  • < li>% y: A hora da última modificação dos dados, legível por humanos.
  • % Y: A hora da última modificação dos dados, segundos desde a época.
  • % z: A hora da última alteração de status, legível por humanos.
  • % Z: A hora da última alteração de status, segundos desde a época.

A época “ ; é a época do Unix, que ocorreu em 01-01-2009 00:00:00 +0000 (UTC).

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

  • % a: o número de blocos gratuitos disponíveis para usuários regulares (não 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.
  • % i: o ID do sistema de arquivos em hexadecimal.
  • % l: o tamanho máximo dos nomes de arquivos.
  • % n: o nome do arquivo.
  • % s: o tamanho do bloco (o tamanho ideal de gravação).
  • % S: O tamanho dos blocos do sistema de arquivos (para a contagem de blocos).
  • % t: o tipo de sistema de arquivos em hexadecimal .
  • % T: tipo de sistema de arquivos em formato legível por humanos.

Existem duas opções que aceitam seqüências de caracteres de seqüências de formato. Estes são --format e --printf. A diferença entre eles é --printf interpreta seqüências de escape no estilo C, como newline \ 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 seqüências de formato que serão usadas são% n para o nome do arquivo,% s para o tamanho do arquivo e% F para o tipo de arquivo. Nós vamos adicionar a seqüência de escape \ n ao final da string para garantir que cada arquivo seja tratado em uma nova linha. Nossa string de formato é assim:

 "O arquivo% n é% s bytes, e é um% F \ n" 

Nós vamos passar isso para stat usando a opção --printf. Vamos solicitar ao stat que relate um arquivo chamado code.c e um conjunto de arquivos que correspondem a ana.?. Este é o comando completo. Observe o sinal de igual “ = ” entre --printf e a string de formato:

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

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

Os formatos personalizados permitem acessar ainda mais elementos de dados do que os incluídos na saída de estatística padrão.

Controle de grão fino

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

Via: How to Geek

Nenhum comentário