chattr
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.
Autor original | Remy Card |
Sistema operacional | Linux |
Plataforma | Multiplataforma |
Tipo | Comando |
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)
editarSuporte ao sistema de arquivos
editarAs 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
editarA 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
editarA 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
editarAlguns atributos incluem:
atributo | sinalizador lsattr | opção chattr | semântica e lógica |
---|---|---|---|
não atualizar o atime
|
A
|
+A para definir e-A para remover
|
|
apenas anexar | a
|
+a para definir e-a para remover[nota 1]
|
|
comprimido | c
|
+c para definir e-c para remover[nota 2]
|
|
sem Copy-on-Write (CoW) | C
|
+C para definir e-C para remover[nota 3]
|
|
atualizações síncronas de diretório | D
|
+D para definir e-D para remover
|
|
sem despejo | d
|
+d para definir e
|
|
erro de compressão | E
|
(indisponível) |
|
formato de extensão | e
|
(indisponível) |
|
arquivo enorme | h
|
(indisponível) |
|
diretório indexado | I
|
(indisponível) |
|
imutável | i
|
+i para definir e-i para remover[nota 1]
|
|
registro de dados | j
|
+j para definir e-j para remover[nota 4]
|
|
exclusão segura | s
|
+s para definir e-s para remover[nota 2][nota 5]
|
|
atualizações síncronas | S
|
+S para definir e-S para remover
|
|
topo da hierarquia de diretório | T
|
+T para definir e-T para remover
|
|
sem fusão de cauda | t
|
+t para definir e-t para remover
|
|
não eliminável | u
|
+u para definir e-u para remover[nota 2]
|
|
acesso à compressão bruta | X
|
(indisponível) |
|
arquivo sujo compactado | Z
|
(indisponível) |
|
número da versão / geração | -v
|
-v versão
|
|
Notas
editar- ↑ a b apenas o superusuário ou um processo que possui o recurso
CAP_LINUX_IMMUTABLE
pode definir ou remover esses atributos. - ↑ 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.
- ↑ 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)
editarO 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
editarA 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
editarOs 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
editarTodos 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:
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
editarNotas
editar- ↑
«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
- ↑
«chflags(1)» (em inglês). Consultado em 16 de julho de 2021.
Manual de comandos gerais do OpenBSD
- ↑ Diferente dos arquivos esparsos APFS no macOS (em inglês), que não possuem sinalizadores especiais.
Referências
editar- chattr(1) - Manual de comandos do usuário Linux (em inglês)
- lsattr(1) - Manual de comandos do usuário Linux (em inglês)
- chflags(1) - Manual de comandos do usuário OpenBSD (em inglês)
- chflags(1) - Manual de comandos do usuário FreeBSD (em inglês)
- chflags(1) - Manual de comandos do usuário NetBSD (em inglês)
- chflags(1) - Manual de comandos gerais do Darwin e do macOS (desatualizado, consulte a versão mais recente) (em inglês)
- stat.h - Seção sobre sinalizadores no código-fonte do sistema BSD do kernel do macOS XNU (em inglês)