O chattr, no Linux, é o comando que permite a um usuário definir certos atributos de um arquivo e o lsattr é o comando que exibe os atributos de um arquivo.

chattr
Autor original Remy Card
Sistema operacional Linux
Plataforma Multiplataforma
Tipo Comando
chflags
Sistema operacional Sistemas do tipo BSD, incluindo o macOS
Plataforma Multiplataforma
Tipo Comando

A maioria dos sistemas do tipo BSD, incluindo o macOS, sempre tiveram um comando chflags análogo para definir os atributos mas nenhum comando especificamente criado para exibi-los (opções específicas para o comando ls são usadas). O comando chflags apareceu pela primeira vez no 4.4BSD.

O Solaris não possui comandos especificamente criados para definir (ou manipular) os atributos dos arquivos. Os comandos chmod[1] e ls[2] são usados para tal finalidade.

Outros Unixes, em geral, não possuem comandos análogos. Os comandos chatr (do HP-UX) e lsattr (do AIX), que soam semelhantes, existem mas têm funções não relacionadas.

Entre outras coisas, o comando chattr é útil para tornar os arquivos imutáveis, de forma que arquivos de senha e certos arquivos de sistema não possam ser apagados durante atualizações de software.[3]

Em sistemas Linux (chattr e lsattr)

editar

Suporte ao sistema de arquivos

editar

As ferramentas de linha de comando chattr (para manipular atributos) e lsattr (para listar atributos) foram originalmente específicos para a segunda família do sistema de arquivos estendido (ext2, ext3, ext4) e estão disponíveis como parte do pacote e2fsprogs.

No entanto, a funcionalidade já foi ampliada (total ou parcialmente) para muitos outros sistemas, incluindo o XFS, o ReiserFS, o JFS e o OCFS2. O sistema de arquivos btrfs inclui a funcionalidade de atributo (incluindo o sinalizador C que desliga o recurso embutido copy-on-write (CoW) devido ao desempenho mais lento associado ao mesmo).

Descrição do chattr

editar

A forma do comando chattr é:

 chattr [-RVf] [-+=AacDdijsSTtSu] [-v versão] arquivos...


  • -R altera, recursivamente, os atributos de diretórios e seus conteúdos.
  • -V é para ser detalhado e imprimir a versão do programa.
  • -f suprime a maioria das mensagens de erros.

Descrição do lsattr

editar

A forma do comando lsattr (GNU 1.41.3):

 lsattr [ -RVadv ] [ arquivos... ]


  • -R recursivamente lista os atributos de diretórios e seus conteúdos.
  • -V exibe a versão do programa.
  • -a lista todos os arquivos em diretórios, incluindo os dotfiles.
  • -d lista diretórios como outros arquivos, em vez de listar seu conteúdo.

Atributos

editar

Alguns atributos incluem:

atributos de arquivo em um sistema de arquivos Linux de acordo com a página de manual do Linux chattr(1)
atributo sinalizador lsattr opção chattr semântica e lógica
não atualizar o atime A +A para definir e
-A para remover
  • quando um arquivo com o atributo A definido é acessado, seu registro atime não é modificado.
  • isso evita uma certa quantidade de operações de E/S de disco.
apenas anexar a +a para definir e
-a para remover[nota 1]
  • um arquivo com o atributo a definido só pode ser aberto para gravação no modo de anexação.
comprimido c +c para definir e
-c para remover[nota 2]
  • um arquivo com o atributo c definido é compactado automaticamente no disco pelo kernel.
  • uma leitura desse arquivo retorna dados não compactados.
  • uma gravação neste arquivo compacta os dados antes de armazená-los no disco.
sem Copy-on-Write (CoW) C +C para definir e
-C para remover[nota 3]
  • um arquivo com o atributo c definido é compactado automaticamente no disco pelo kernel.
  • as atualizações desses arquivos podem não estar sujeitas a instantâneos atômicos e podem não ter algumas informações de confiabilidade em alguns sistemas de arquivos e kernels.
atualizações síncronas de diretório D +D para definir e
-D para remover
  • quando um diretório com o atributo D definido é modificado, as mudanças são gravadas de forma síncrona no disco.
  • isso é equivalente à opção de montagem dirsync, aplicada a um subconjunto dos arquivos.
sem despejo d +d para definir e

-d para remover

  • um arquivo com o atributo d definido não é candidato para backup quando o programa de despejo é executado.
erro de compressão E (indisponível)
  • o atributo E é usado pelos patches de compactação experimentais para indicar que um arquivo compactado tem um erro de compactação.
formato de extensão e (indisponível)
  • o atributo e indica que o arquivo está usando extensões para mapear os blocos no disco.
arquivo enorme h (indisponível)
  • o atributo h indica que o arquivo está armazenando seus blocos em unidades do tamanho do bloco do sistema de arquivos em vez de em unidades de setores.
  • isso significa que o arquivo é, ou era, maior do que 2 terabytes (TBs).
diretório indexado I (indisponível)
  • o atributo I é usado pelo código do programa htree para indicar que um diretório está sendo indexado usando árvores hash.
imutável i +i para definir e
-i para remover[nota 1]
  • um arquivo com o atributo i não pode ser modificado.
  • ele não pode ser excluído ou renomeado, nenhum link pode ser criado para este arquivo e nenhum dado pode ser gravado no arquivo.
  • quando definido, impede, até mesmo o superusuário, de apagar ou alterar o conteúdo do arquivo.
registro de dados j +j para definir e
-j para remover[nota 4]
  • um arquivo com o atributo j tem todos os seus dados gravados no registro ext3 antes de serem gravados no próprio arquivo, se o sistema de arquivos for montado com as opções " data=ordered " ou " data=writeback ".
  • Quando o sistema de arquivos é montado com a opção " data= journal ", todos os dados do arquivo já estão registrados, portanto, este atributo não tem efeito.
exclusão segura s +s para definir e
-s para remover[nota 2][nota 5]
  • quando um arquivo com o atributo s definido é excluído, seus blocos são zerados e gravados de volta no disco.
atualizações síncronas S +S para definir e
-S para remover
  • quando um arquivo com o atributo S definido é modificado, as alterações são gravadas de forma síncrona no disco.
  • isso é equivalente à opção de montagem sync aplicada a um subconjunto de arquivos.
topo da hierarquia de diretório T +T para definir e
-T para remover
  • um diretório com o atributo T será considerado o topo das hierarquias de diretório para os propósitos do alocador de blocos Orlov.
  • esta é uma dica para o alocador de bloco usado pelo ext3 e pelo ext4 de que os subdiretórios neste diretório não estão relacionados e, portanto, devem ser separados para fins de alocação.
  • por exemplo: é uma boa ideia definir o atributo T no diretório /home, de forma que /home/john e /home/mary sejam colocados em grupos de blocos separados.
  • para diretórios onde este atributo não é definido, o alocador de bloco Orlov tentará agrupar os subdiretórios mais próximos, sempre que possível.
sem fusão de cauda t +t para definir e
-t para remover
  • para aqueles sistemas de arquivos que suportam mesclagem final, um arquivo com o atributo t não terá um fragmento de bloco parcial no final do arquivo mesclado com outros arquivos.
  • isso é necessário para aplicativos como o LILO, que lê o sistema de arquivos diretamente e não entende arquivos mesclados no final.
não eliminável u +u para definir e
-u para remover[nota 2]
  • quando um arquivo com o atributo

u definido é excluído, seu conteúdo é salvo.

  • isso permite que o usuário solicite sua retração.
acesso à compressão bruta X (indisponível)
  • o atributo X é usado pelos patches de compactação experimentais para indicar que o conteúdo bruto de um arquivo compactado pode ser acessado diretamente.
arquivo sujo compactado Z (indisponível)
  • o atributo Z é usado pelos patches de compactação experimentais para indicar que um arquivo compactado está "sujo".
número da versão / geração -v -v versão
  • número da versão / geração do arquivo.
  1. a b apenas o superusuário ou um processo que possui o recurso CAP_LINUX_IMMUTABLE pode definir ou remover esses atributos.
  2. a b c Esses atributos não são respeitados pelos sistemas de arquivos ext2 e ext3 conforme implementados na linha principal atual dos kernels Linux.
  3. Esses atributos só fazem sentido para sistemas de arquivos Copy-on-Write, como o btrfs.
  4. apenas o superusuário ou um processo que possui o recurso CAP_SYS_RESOURCE pode definir ou remover este atributo.
  5. Este atributo não é respeitado pelo sistema de arquivos ext4 implementado nos kernels Linux da linha principal atual, conforme relatado no bug #17872 (em inglês).

Em sistemas do tipo BSD (chflags)

editar

O comando chflags não é específico para sistemas de arquivos particulares. O UFS (em sistemas BSD) o APFS, o HFS+, o SMB, o AFP e o FAT (em macOS) suportam pelo menos alguns sinalizadores.

Descrição do chflags

editar

A forma do comando chflags é:

 chflags [-R [-H | -L | -P]] sinalizadores arquivo ...


  • -H se a opção -R for especificada, links simbólicos na linha de comando serão seguidos. Links simbólicos encontrados na travessia da árvore não são seguidos.
  • -L se a opção -R for especificada, todos os links simbólicos serão seguidos.
  • -P se a opção -R for especificada, nenhum link simbólico será seguido. Este é o padrão.
  • -R muda os sinalizadores de arquivo para as hierarquias de arquivo enraizadas nos arquivos em vez de apenas os próprios arquivos.

Exibição

editar

Os sistemas do tipo BSD, em geral, não possuem um comando padrão em nível de usuário voltado especificamente para exibir os sinalizadores de um arquivo. O comando ls funcionará com os sinalizadores -lo ou -lO, dependendo do sistema, com os sinalizadores passados.

Atributos

editar

Todos os atributos tradicionais podem ser definidos ou removidos pelo superusuário. Alguns também podem ser definidos ou removidos pelo proprietário do arquivo. Alguns atributos incluem:

atributos de arquivo
atributo sinalizador ls sinalizador chflags definível pelo proprietário sistema operacional que suporta semântica e lógica
arquivado arch arch, archived   todos o arquivo é arquivado
opaco opaque opaque   todos o diretório é opaco quando visto por meio de uma montagem de união
sem despejo nodump nodump   todos o arquivo não pode ser despejado
apenas anexar pelo sistema sappnd sappnd, sappend   todos os dados existentes no arquivo não podem ser substituídos e o arquivo não pode ser truncado
apenas anexar pelo usuário uappnd uappnd, uappend   todos os dados existentes no arquivo não podem ser substituídos e o arquivo não pode ser truncado
imutável pelo sistema schg schg, schange, simmutable   todos o arquivo não pode ser alterado, renomeado, movido ou removido
imutável pelo usuário uchg uchg, uchange, uimmutable   todos o arquivo não pode ser alterado, renomeado, movido ou removido
sem desvinculação pelo sistema sunlnk sunlnk, sunlink   todos o arquivo não pode ser removido, renomeado ou montado. No macOS, este sinalizador precisa ser definido ou removido a partir do modo de usuário único
sem desvinculação pelo usuário uunlnk uunlnk, uunlink   alguns o arquivo não pode ser removido, renomeado ou montado. Não suportado pelo macOS
oculto hidden hidden   FreeBSD o arquivo é oculto por padrão na GUI (mas não em ls)
oculto do usuário uhidden uhidden   FreeBSD o arquivo é oculto por padrão na GUI (mas não em ls)
oculto hidden hidden   macOS o arquivo é oculto por padrão na GUI (mas não em ls)
monitorado / rastreado tracked tracked   macOS modificações e exclusões de arquivos são monitoradas / rastreadas
restrito restricted restricted   macOS o arquivo é protegido pela proteção de integridade do sistema (SIP, rootless), acompanhado pelo atributo estendido com.apple.rootless e o sinalizador precisa ser definido ou removido a partir do modo de recuperação
comprimido compressed   macOS o arquivo é compactado em HFS (sinalizador somente leitura). Não disponível em volumes formatados em APFS
cofre de dados   macOS sinalizador de privacidade oculto definido pelo sistema central para proibir qualquer acesso sem direitos especiais desde o macOS Mojave

Os sistemas BSD oferecem sinalizadores adicionais como o offline, o snapshot, o sparse[4] e o uarchive.

Ver também

editar
  • attrib - comando análogo no MS-DOS, no OS/2 e no Microsoft Windows
  • chown - altera a propriedade do arquivo/diretório em um sistema Unix
  • chmod - altera atributos de controle de acesso a arquivos em um sistema Unix
  1. «chmod(1)» (em inglês). Consultado em 16 de julho de 2021. Manual de referência de comandos de usuário illumus e OpenSolaris do último OpenSolaris baseado em Sun 
  2. «ls(1)» (em inglês). Consultado em 16 de julho de 2021. Manual de referência de comandos de usuário illumus e OpenSolaris do último OpenSolaris baseado em Sun 
  3. «chflags(1)» (em inglês). Consultado em 16 de julho de 2021. Manual de comandos gerais do OpenBSD 
  4. Diferente dos arquivos esparsos APFS no macOS (em inglês), que não possuem sinalizadores especiais.

Referências

editar