Comandos Linux chattr e lsattr
Nos sistemas operacionais Linux , o comando chattr modifica os atributos dos arquivos e lsattr os lista (os exibe).
No Linux, atributos de arquivo são sinalizadores que afetam como o arquivo é armazenado e acessado pelo sistema de arquivos . Eles são metadados armazenados no inode associado do arquivo.
Descrição
chattr e lsattr fazem parte do pacote de software e2fsprogs , disponível com esse nome na maioria dos gerenciadores de pacotes. A página inicial do e2fsprogs está localizada em http://e2fsprogs.sourceforge.net .
NotaOs atributos não são iguais às permissões de arquivo. Para obter informações sobre como definir permissões, consulte chmod .
Sintaxe: chattr
chattr [ -R ] [ -V ] [ -f ] [ -v versão ] [ -p projeto ] modo ... arquivo ...
Opções
O chattr utiliza as seguintes opções:
-R | Altere recursivamente os atributos dos diretórios e seu conteúdo. |
-V | Forneça saída detalhada e exiba a versão do programa. |
-f | Suprima a maioria das mensagens de erro. |
-v version | Defina o número da versão / geração do arquivo. Este é um número arbitrário de nove dígitos atribuído a um arquivo quando ele é criado. Não é único. Pode ser alterado para qualquer outro número arbitrário. |
projeto -p | Defina o número do projeto do arquivo. |
mode … | Uma ou mais seqüências de modo. Para mais informações, consulte Strings de modo , abaixo. |
arquivo … | O arquivo ou arquivos a serem alterados. |
Cordas de modo
Uma string de modo consiste em um operador e um ou mais atributos . Assume a forma:
{ + | - | = } [ aAcCdDeijsStTu ]
Um dos seguintes operadores deve aparecer no início de uma string de modo :
character | Operação |
---|---|
+ | Os atributos listados serão adicionados ao arquivo. |
– | Os atributos listados serão removidos do arquivo. |
= | Os atributos listados serão adicionados; quaisquer atributos omitidos serão removidos. |
O restante da string de modo é uma série de caracteres, cada um representando um atributo. Eles diferenciam maiúsculas de minúsculas, não podem ser separados por espaços em branco e podem aparecer em qualquer ordem. Para uma lista de caracteres de atributo, consulte Atributos , abaixo.
As seqüências de modo de exemplo são ” + caS “, ” -Asd ” e ” = eAsS “.
É possível especificar várias seqüências de modo para combinar operadores + e – em um único comando, por exemplo, ” + asD -c ” e ” -a + s + D -c ” são válidos.
Sintaxe: lsattr
lsattr [ -R ] [ -V ] [ -a ] [ -d ] [ -v ] arquivo ...
Opções
-R | Liste recursivamente os atributos dos diretórios e seu conteúdo. |
-V | Exibe a versão do programa. |
-a | Liste todos os arquivos em um diretório, incluindo aqueles cujo nome começa com um ponto (‘ . ‘). |
-d | Listar diretórios como arquivos regulares , em vez de listar seu conteúdo. |
-v | Liste o número da versão / geração do arquivo, além de seus atributos. |
Lista de Atributos
Os seguintes caracteres representam atributos que podem ser modificados pelo chattr ou listados com lsattr .
personagem | atributo | descrição |
---|---|---|
a | acrescentar apenas | O arquivo pode ser aberto apenas para gravação no modo de acréscimo : seus dados existentes podem não ser substituídos . Não pode ser excluído ou renomeado ; links físicos não podem ser criados para este arquivo; a maioria dos seus metadados não pode ser alterada. Modificar este atributo requer privilégios de root. |
A | sem atualizações atime | Quando o arquivo é acessado, seu registro atime não é modificado, o que em algumas situações pode reduzir a E / S do disco. |
c | comprimido | Arquivos com este atributo são compactados automaticamente pelo kernel quando gravados no disco. Seu conteúdo é descompactado quando lido. Nota: Este atributo não tem efeito nos sistemas de arquivos ext2, ext3 e ext4. |
C | nenhuma cópia na gravação | Os arquivos com este atributo não estão sujeitos a atualizações de cópia na gravação. Se esse atributo estiver definido em um diretório, novos arquivos criados nesse diretório terão esse atributo definido. Nota: Este atributo é eficaz apenas em sistemas de arquivos que executam cópia na gravação. No btrfs, esse atributo deve ser definido em arquivos novos ou vazios. Se esse atributo for definido após um arquivo btrfs já conter dados, o tempo em que seus dados estarão estáveis será indefinido. |
d | sem lixeira | Os arquivos com esse atributo são ignorados em qualquer backup iniciado pelo dump , uma ferramenta herdada para sistemas de arquivos ext2. |
D | atualizações de diretório síncronas | As alterações em um diretório com esse atributo são gravadas de forma síncrona no disco. Ou seja, o sistema aguarda a conclusão da gravação antes de fazer outra coisa. Equivalente à opção dirsync do comando mount , aplicada a um subconjunto de arquivos em um sistema de arquivos. |
e | extensões de bloco | Indica que um arquivo deve ser armazenado usando extensões de bloco . Os dados são armazenados contiguamente entre dois blocos, e somente esses dois blocos devem ser conhecidos para localizar os dados do arquivo. O mapeamento da extensão do bloco pode economizar potencialmente espaço em disco, pois reduz o número de blocos que devem ser listados no inode do arquivo. |
i | imutável | Arquivos com este atributo não podem ser excluídos ou renomeados; links físicos não podem ser criados para este arquivo; a maioria de seus metadados não pode ser alterada; os dados não podem ser gravados no arquivo. A modificação desse atributo requer raiz ou um processo com o recurso CAP_LINUX_IMMUTABLE, conforme definido com setcap . |
j | diário de dados | Um arquivo com esse atributo tem todos os seus dados gravados em seu diário antes de serem gravados no próprio arquivo. Somente é eficaz nos sistemas de arquivos ext3 e ext4 que têm o diário ativado e as opções “data = ordenado” ou “data = writeback” definidas. Se o registro no diário estiver ativado nesses sistemas, mas a opção “data = journal” estiver configurada, esse atributo não terá efeito. Somente a raiz ou um processo com o recurso CAP_SYS_RESOURCE, conforme configurado com setcap, pode alterar esse atributo. |
P | hierarquia do projeto | Um diretório com esse atributo aplicará uma estrutura hierárquica para os IDs do projeto. Os arquivos e diretórios criados no diretório herdarão a ID do projeto. As operações de renomeação são restritas; portanto, quando esses arquivos ou diretórios forem movidos para outro diretório, os IDs do projeto corresponderão. Os links físicos para esses arquivos só podem ser criados se o ID do projeto do destino e destino corresponderem. |
s | exclusão segura | Se um arquivo com este atributo for excluído, seus dados serão substituídos por zeros, semelhante a um fragmento simples. Este atributo é ignorado pelos sistemas de arquivos ext2, ext3 e ext4. |
S | atualizações síncronas | Quando arquivos com este atributo são modificados, as alterações são gravadas de forma síncrona no disco. Equivalente à opção de sincronização do comando mount , para arquivos individuais. |
t | sem cauda se fundindo | Um arquivo com esse atributo não terá nenhum fragmento de bloco parcial no final do arquivo compartilhado com os dados de outro arquivo. Esse atributo é necessário para softwares como o LILO , que lê o sistema de arquivos diretamente e não tem conhecimento da mesclagem final. Alguns sistemas de arquivos não suportam mesclagem de cauda, caso em que este atributo não tem efeito. |
T | topo da hierarquia de diretórios | Um diretório com esse atributo é considerado o topo das hierarquias de diretório pelo alocador de blocos Orlov, usado pelo ext2 e ext3. O atributo fornece uma dica para o alocador de que os subdiretórios não estão relacionados na maneira como são usados e seus dados devem ser separados quando os blocos são alocados. Por exemplo, o diretório / home pode ter esse atributo, indicando que / home / mary e / home / john devem ser colocados em grupos de blocos separados. |
u | undeletable | Quando um arquivo com esse atributo é excluído, seu conteúdo é salvo, possibilitando sua remoção posterior. As ferramentas de exclusão que podem tirar vantagem desse atributo incluem extundelete . |
Atributos somente leitura
Os seguintes atributos são somente leitura. Eles não podem ser definidos ou desabilitados pelo chattr , mas podem ser listados por lsattr .
personagem | significado | descrição |
---|---|---|
E | erro de compressão | O sistema de arquivos não pode compactar automaticamente esse arquivo. |
h | arquivo enorme | O arquivo está armazenando seus blocos em unidades do tamanho do bloco do sistema de arquivos em vez de em setores . O arquivo é, ou era anteriormente, maior que 2 TB . |
I | diretório indexado | O diretório está sendo indexado com uma árvore de hash (htree). |
N | dados em linha | O arquivo possui dados armazenados em linha, dentro do próprio inode. |
X | acesso bruto de compactação | Um atributo experimental indicando que o conteúdo bruto de um arquivo compactado pode ser acessado diretamente. |
Z | arquivo sujo compactado | Um atributo experimental que indica que um arquivo compactado está sujo (gravado incompletamente). |
Exemplos
Exibir atributos de arquivos
Neste exemplo, criaremos três arquivos vazios com o toque :
touch file file2 .file
Podemos visualizar suas permissões com ls , usando a opção -l :
ls -l
total 8 -rw-rw-r-- 1 hope hope 0 Jun 28 09:51 file -rw-rw-r-- 1 hope hope 0 Jun 28 09:51 file2
Os nomes de arquivos que começam com um ponto (ponto) não são listados por ls , a menos que a opção -a seja usada:
ls -a
total 28 -rw-rw-r-- 1 hope hope 0 Jun 28 09:51 file -rw-rw-r-- 1 hope hope 0 Jun 28 09:51 .file -rw-rw-r-- 1 hope hope 0 Jun 28 09:51 file2
Agora vamos ver os atributos executando lsattr :
lsattr
------------- e-- ./file ------------- e-- ./file2
Assim como em ls , devemos usar a opção -a para visualizar arquivos cujo nome começa com um ponto:
lsattr -a
------------- e-- ./file ------------- e-- ./file2 ------------- e-- ./.file ------------- e-- ./. ------------- e-- ./ ..
Para visualizar os atributos de um ou mais arquivos específicos, especifique seus nomes:
arquivo lsattr
------------- e-- arquivo
lsattr - um arquivo file2 .file
------------- e-- arquivo ------------- e-- arquivo2 ------------- e-- .file
Exibir atributos de diretórios
Agora vamos criar um diretório e subdiretório com mkdir -p :
mkdir -p dir / subdir
E crie alguns arquivos vazios nesses diretórios:
toque dir / arquivo3 dir / arquivo4 dir / subdir / arquivo5
Por padrão, lsattr não percorre diretórios:
lsattr
------------- e-- ./file ------------- e-- ./file2 ------------- e-- ./dir
Para percorrer recursivamente e mostrar o conteúdo dos diretórios, use -R :
lsattr -R
------------- e-- ./file ------------- e-- ./file2 ------------- e-- ./dir ./dir: ------------- e-- ./dir/file3 ------------- e-- ./dir/file4 ------------- e-- ./dir/subdir ./dir/subdir: ------------- e-- ./dir/subdir/file5
Alterar atributos
Por padrão, os arquivos e diretórios que criamos nos exemplos acima (no Ubuntu 16.04) têm o atributo “block extents” ( e ) definido.
lsattr
------------- e-- ./file ------------- e-- ./file2 ------------- e-- ./dir
Vamos dar a eles o atributo d (um atributo herdado, sem sentido em nosso sistema), usando + d .
chattr + d *
lsattr
------ d ------ e-- ./arquivo ------ d ------ e-- ./file2 ------ d ------ e-- ./dir
Alguns atributos, como um (somente anexar), podem ser modificados apenas pelo usuário root :
sudo chattr + um arquivo
lsattr
----- ad ------ e-- ./file ------ d ------ e-- ./file2 ------ d ------ e-- ./dir
Atributos que se aplicam apenas a diretórios, como D , não serão configurados em arquivos regulares com êxito – nenhum erro será retornado. Por exemplo, se você tentar executar o chattr + D em um arquivo normal, o chattr não fará nada com esses arquivos e retornará um status de saída bem-sucedido.
Observe no próximo comando que tentamos definir o atributo D em um arquivo regular e um diretório. O atributo está definido no diretório, não está no arquivo regular e o chattr retorna com sucesso.
dir do arquivo chattr + D && lsattr
----- ad ------ e-- ./file ------ d ------ e-- ./file2 --- D - d ------ e-- ./dir
(O operador && control executará o próximo comando apenas se o comando anterior retornar um status de saída bem-sucedido. Para obter mais informações, consulte Gramática do shell no bash. )
Para desarmar um atributo, use o operador – antes da sua lista de atributos.
chattr -D dir && lsattr
----- ad ------ e-- ./file ------------- e-- ./file2 ------------- e-- ./dir
Apenas um operador pode ser especificado por sequência de modos , mas você pode especificar vários atributos, um após o outro (sem espaço em branco ), em qualquer ordem. Você pode especificar várias seqüências de modo , cada uma com seu próprio operador.
chattr + sSc -d * && lsattr
sS - a - c ----- e ---- ./arquivo sS ----- c ----- e ---- ./file2 sS ----- c ----- e ---- ./dir
Se um atributo exigir privilégios de root, mas você não estiver executando o comando como root, o chattr não alterará nenhum atributo para esse arquivo. Ele continuará tentando operar em outros arquivos e, quando concluído, retornará um status de saída com falha (um erro).
Para ilustrar isso, no próximo comando, tentaremos definir o atributo a em todos os arquivos no diretório atual sem usar o sudo . Isso deve falhar (a menos que estejamos logados como root), porque definir a requer privilégios de superusuário.
Observe também que no próximo comando usamos echo para exibir o valor do parâmetro especial bash ? (uma interrogação). O ? O parâmetro contém o status de saída do comando anterior e, portanto, informa se o chattr foi bem-sucedido ( 0 ) ou falhou ( 1 ). Como todos os parâmetros bash, nos referimos a seu valor prefixando seu nome com $ .
chattr -sS + a *; eco $?
chattr: operação não permitida ao definir sinalizadores no diretório chattr: operação não permitida ao definir sinalizadores no arquivo2 1
O status de saída 1 indica que ocorreu um erro.
Vejamos como os atributos mudaram:
lsattr
----- a - c ----- e ---- ./arquivo sS ----- c ----- e ---- ./file2 sS ----- c ----- e ---- ./dir
Observe que o arquivo não causou um erro. Ele já tinha o sinalizador a de um comando anterior, portanto não causa erro; e assim o restante das alterações ( -sS ) passou muito bem. O outro arquivo e diretório causaram um erro e não foram alterados.
Para definir cada arquivo para corresponder a um conjunto explícito de atributos, use o operador = . Quaisquer atributos listados serão definidos e os não listados serão desabilitados.
sudo chattr -R = es * && lsattr -R
s ---------- e ---- ./arquivo s ---------- e ---- ./arquivo2 s ---------- e ---- ./dir ./dir: s ---------- e ---- ./dir/file3 s ---------- e ---- ./dir/file4 s ---------- e ---- ./dir/subdir ./dir/subdir: s ---------- e ---- ./dir/subdir/file5
Tornar arquivos imutáveis
Se você definir o atributo i , um arquivo será marcado como “imutável”, ou seja, seus dados (e alguns metadados vitais) não poderão ser alterados, nem mesmo pela raiz, até que o atributo seja desabilitado.
imutável ao toque && lsattr imutável
-------------- e ---- imutável
sudo chattr + i imutável && lsattr imutável
---- i --------- e ---- imutável
mv imutável newname
mv: não é possível mover 'imutável' para 'newname': operação não permitida
rm imutável
rm: não é possível remover 'imutável': operação não permitida
sudo rm -f imutável
rm: não é possível remover 'imutável': operação não permitida
Você não pode criar um link físico para um arquivo imutável:
No hardlink imutável
ln: falha ao criar o link físico 'hardlink' => 'imutável': operação não permitida
Links simbólicos estão OK, no entanto:
link simbólico imutável do ln && link simbólico do ls -l
lrwxrwxrwx 1 esperança esperança 6 jun 29 07:49 symlink -> immutable
Este é um bom momento para observar que os links simbólicos não têm atributos próprios:
lsattr symlink
lsattr: operação não suportada ao ler sinalizadores no link simbólico
Para tornar os arquivos mutáveis novamente, use -i :
sudo chattr -i imutável && mv imutável novo nome && lsattr novo nome
-------------- e ---- newname
Tornar arquivos somente anexados
O atributo somente anexar ( a ) torna um arquivo imutável, exceto que os dados podem ser adicionados a ele.
toque appendonly && lsattr appendonly
-------------- e ---- appendonly
sudo chattr + a appendonly && lsattr appendonly
----- a -------- e ---- apendonly
Você não pode substituir o arquivo com redirecionamento ( > ):
eco "Substituir não é permitido." > apendonly
bash: appendonly: operação não permitida
Mas o redirecionamento somente de acréscimo ( >> ) está OK:
eco "Anexar é permitido." >> appendonly && cat appendonly
Anexar é permitido.
eco "Anexar é permitido." >> appendonly && cat appendonly
Anexar é permitido. Anexar é permitido.
Arquivos somente anexados não podem ser movidos, removidos, renomeados ou vinculados.
sudo rm -f appendonly
rm: não é possível remover 'appendonly': operação não permitida
sudo em anexo hardlink
ln: falha ao criar o link físico 'hardlink' => 'appendonly': operação não permitida
Para obter mais informações sobre redirecionamento, consulte Redirecionamento no bash .
Comandos relacionados
chown – Altere a propriedade dos arquivos ou diretórios.
chmod – Altere as permissões de arquivos e diretórios.
ls – lista o conteúdo de um diretório ou diretórios.