Pequenos Comandos, Grandes Ações: chattr / lsattr

Aprenda a trabalhar com os Atributos Especiais do kernel Linux!

| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.

PCGA: Pequenos comandos, grandes ações!

Estreando aqui no site essa série que foi um sucesso na página homônima no Facebook, trago comandos simples, a maioria deles curtos com parâmetros diretos, que podem agilizar seu trabalho como sysadmin de qualquer sistema baseado em UNIX. Comandos como ls, mkdir, chmod, etc são descritos em toda sua glória e praticidade, para enriquecer seu leque de possibilidades de uso para com o Terminal, seja ele qual for, de qual distro Linux você utilizar.

Também gostaria de agradecer a vocês leitores e fãs da UNIX Universe. Sem vocês nos apoiando não teria motivação para continuar. Com a página no Facebook já com +1 ano de vida e nosso site recém criado com alguns meses de vida, com esta publicação o site acaba de atingir o centésimo post com todo o conteúdo e qualidade que vocês apreciam e esperam!

Atributos

Como bem sabemos os sistemas baseados em UNIX possuem um padrão de permissões bem simples e eficiente:
Permissão de Leitura, Escrita e Execução, que podem ser atribuídos a um Usuário (dono), Grupo ou Outros.
Tais permissões são definidas pelo comando “chmod” sob a seguinte ótica:

  • Atributo: x
    Função: Execução (eXecute)
  • Atributo: w
    Função: Escrita (Write)
  • Atributo: r
    Função: Leitura (Read)

Porém, alguns sistemas suportam atributos e permissões bem especiais!
A família EXT – ext2, ext3 e ext4 -, tão popular nos sistemas Linux, é um exemplo disso. Descritas apenas como Especiais e controladas pelo comando “chattr” e visualizadas pelo comando “lsattr”, vamos ver a seguir o que estas permissões permitem fazer; logo mais abaixo estão as instruções de uso destes comandos.

Observação: O comando Chattr descrito nessa postagem para gerenciamento de atributos só funciona em sistemas que fazem uso do kernel Linux, pois são atributos a nível do Kernel e não do sistema operacional.
Em sistemas como o BSD são usadas flags, falarei delas em postagens futuras.

Atributos e Funções

  • Atributo: A
    Função: Desliga a gravação do atime (access time).
    Explicação: De maneira resumida, o tempo de acesso de um arquivo (atime) identifica quando o arquivo foi aberto para leitura pela última vez. Um programa executado pode manter um arquivo “aberto” por algum tempo, dessa forma, o tempo no qual o arquivo foi aberto pode diferir do tempo em que seu conteúdo foi lido pela última vez.
    Geralmente o tempo de acesso é atualizado mesmo se apenas uma pequena porção de um grande arquivo, por exemplo, for lida.
    E essa gravação constante diminui um pouco mais a vida útil de mídias como pendrives e SSDS. Esse atributo, quando aplicado ao sistema todo, também diminui a quantidade de operações de I/O, dando um pouco mais de otimização/velocidade em computadores mais lentos.
  • Atributo: a
    Função: Permite que um arquivo se torne um somente-leitura “especial” e receba gravação de novo conteúdo, apenas se ele for adicionado ao final.
    Explicação: Esse atributo faz com que um arquivo de textos, por exemplo, jamais sofra modificações em seu conteúdo; porém permita que mais
    conteúdo possa ser gravado ao seu final. Um exemplo comum desse acréscimo, de maneira mais “natural”, é quando você faz um desvio de saída de um
    comando para um arquivo, usando >>.
    Exemplo:
    Temos o arquivo de texto chamado “text” com o conteúdo:
    Este é um arquivo de texto!
    Com este atributo, a linha “Este é um arquivo de texto!” será protegida contra gravação e qualquer conteúdo novo será acrescentado ao final dele.
    O atributo é acumulativo, então qualquer linha nova que for adicionada também ficará protegido. O arquivo só aumenta, nunca diminui ou é sobrescrito.
  • Atributo: c
    Função: Compactar o conteúdo do arquivo antes que ele seja sincronizado/gravado no disco. Útil para poupar espaço de armazenamento sacrificando a velocidade com que é lido.
  • Atributo: D
    Função: Faz com que as mudanças feitas em um DIRETÓRIO sejam sempre imediatamente (real time) gravadas no disco.
  • Atributo: d
    Função: Exclui o arquivo ou diretório de backup do sistema quando o sistema de arquivos é desmontado (despejo de dump quando este está presente).
  • Atributo: i
    Função: Impede qualquer modificação no arquivo ou diretório, impedindo que seja movido, excluído ou renomeado. Também fica impedido a criação de Hard Links, pois estes alteram a estrutura do mesmo. É um atributo ainda mais poderoso que a permissão de escrita tradicional pois nem mesmo o usuário root vai ter permissões para excluir este arquivo! Somente o Root poderá inserir ou remover este atributo. Para excluir este arquivo você deverá remover o atributo, como root, primeiro. Funciona como um grande cadeado.
  • Atributo: j
    Função: Aciona o Journaling
    Explicação: Para sistemas EXT4 (e outros) com modo ordered ou writeback ativos; uma vez que o EXT4 por exemplo, possui Journaling por padrão.
  • Atributo: s
    Função: Faz Wipe de um arquivo.
    Explicação: Se for excluído, a área de dados em que estava gravado anteriormente será sobrescrito, diminuindo as chances de ser recuperado.
  • Atributo: u
    Função: Impede o Wipe de um arquivo
    Explicação: Se for excluído, a área de dados em que estava gravado anteriormente será preservado, aumentando as chances de ser recuperado (permitindo que você faça o comando undelete, por exemplo).
  • Atributo: S
    Função: Faz com que as mudanças feitas em um ARQUIVO sejam sempre imediatamente (real time) gravadas no disco.
  • Atributo: t
    Função: Impede que arquivos sofram “tail packing”, como ocorre no ReiserFS
  • Atributo: C
    Função: Desliga o copy-on-write de sistemas que utilizam o formato BTRFS.
    Explicação: Poupa espaço em armazenamentos em que o usuário lida com arquivos grandes, como discos de máquinas virtuais (VirtualBox)

Mão na massa!

Para adicionar um atributo, faça os comandos sob o seguinte contexto:

$ chattr +ATRIBUTO /dir # para diretórios e pastas
$ chattr +ATRIBUTO file # para arquivos

Para remover um atributo, faça:

$ chattr -ATRIBUTO /dir # para diretórios e pastas
$ chattr -ATRIBUTO file # para arquivos

Exemplo:

$ mkdir /home/$USER/teste
$ chattr +i /home/$USER/teste # adiciona o atributo i á pasta teste
$ chattr -i /home/$USER/teste # remove o atributo i á pasta teste

Para ver os atributos especiais de um arquivo ou pasta, faça:

$ lsattr /dir # para diretórios e pastas
$ lsattr file # para arquivos

Exemplo:

$ lsattr /home/$USER/teste

Por padrão ao executar este comando, a listagem de atributos será exibida mais ou menos assim:

-------------e--

No exemplo, este é o atributo de um arquivo padrão em /home.
A cada atributo adicionado, ocupará o espaço de 1 carácter nesta linha.

Os atributos não citados na lista, como o “e”, significa que aquele arquivo ou pasta está num sistema de arquivos de formatação estendida, no caso, o disco está em formato EXT4.
Então TODOS terão “e”, a menos que estejam num pendrive como FAT32 por exemplo.

Assim como o um pouco mais raro atributo I (i maiúsculo), indica que o diretório ou arquivo foi indexado pelo sistema operacional; Ambos atributos, assim como quaisquer outros que estejam fora da listagem deste post, não podem ser modificado via chattr, por serem padrões de controle do sistema e do kernel e exigem permissões ainda mais especiais para serem manipulados.

#UrbanCompassPony

Adaptado de:
Leonardo Teodoro – Pela dica sobre o atributo C.
Livro: Descobrindo o Linux – 3ª Edição – Autor: João Eriberto Mota Filho – Editora: Novatec

4 comentários em “Pequenos Comandos, Grandes Ações: chattr / lsattr”

  1. Por algum defeito o Linux Mint modificou um diretório e o transformou para um arquivo, sem extensão. No caso o diretório Carros foi transformado para o arquivo Carros. Existe alguma maneira de reparar esse erro utilizando o chmod ou o chattr? Se houver, você poderia me orientar em como fazer? Grato.

    Responder

Deixe um comentário