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.
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)
Suporte ao sistema de arquivos
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).
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 montagemdirsync, 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.
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.
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 montagemsync 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.
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.
Notas
↑ abapenas o superusuário ou um processo que possui o recurso CAP_LINUX_IMMUTABLE pode definir ou remover esses atributos.
↑ abcEsses atributos não são respeitados pelos sistemas de arquivos ext2 e ext3 conforme implementados na linha principal atual dos kernels Linux.
↑Esses atributos só fazem sentido para sistemas de arquivos Copy-on-Write, como o btrfs.
↑apenas o superusuário ou um processo que possui o recurso CAP_SYS_RESOURCE pode definir ou remover este atributo.
↑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)
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
A forma do comando chflags é:
chflags[-R[-H|-L|-P]]sinalizadoresarquivo...
-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
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
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
Não
todos
o arquivo é arquivado
opaco
opaque
opaque
Sim
todos
o diretório é opaco quando visto por meio de uma montagem de união
sem despejo
nodump
nodump
Sim
todos
o arquivo não pode ser despejado
apenas anexar pelo sistema
sappnd
sappnd, sappend
Não
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
Sim
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
Não
todos
o arquivo não pode ser alterado, renomeado, movido ou removido
imutável pelo usuário
uchg
uchg, uchange, uimmutable
Sim
todos
o arquivo não pode ser alterado, renomeado, movido ou removido
sem desvinculação pelo sistema
sunlnk
sunlnk, sunlink
Não
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
Sim
alguns
o arquivo não pode ser removido, renomeado ou montado. Não suportado pelo macOS
oculto
hidden
hidden
Não
FreeBSD
o arquivo é oculto por padrão na GUI (mas não em ls)
oculto do usuário
uhidden
uhidden
Sim
FreeBSD
o arquivo é oculto por padrão na GUI (mas não em ls)
oculto
hidden
hidden
Sim
macOS
o arquivo é oculto por padrão na GUI (mas não em ls)
monitorado / rastreado
tracked
tracked
Sim
macOS
modificações e exclusões de arquivos são monitoradas / rastreadas
restrito
restricted
restricted
Não
macOS
o arquivo é protegido pela proteção de integridade do sistema (SIP, rootless), acompanhado pelo atributo estendidocom.apple.rootless e o sinalizador precisa ser definido ou removido a partir do modo de recuperação
comprimido
compressed
Não
macOS
o arquivo é compactado em HFS (sinalizador somente leitura). Não disponível em volumes formatados em APFS
cofre de dados
Não
macOS
sinalizador de privacidade oculto definido pelo sistema central para proibir qualquer acesso sem direitos especiais desde o macOSMojave
Os sistemas BSD oferecem sinalizadores adicionais como o offline, o snapshot, o sparse[4] e o uarchive.
Ver também
attrib - comando análogo no MS-DOS, no OS/2 e no MicrosoftWindows
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
Notas
↑«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
↑«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