chattr
Autor original | Remy Card |
Sistema operacional | Linux |
Plataforma | Multiplataforma |
Tipo | Comando |
Sistema operacional | Sistemas do tipo BSD, incluindo o macOS |
Plataforma | Multiplataforma |
Tipo | Comando |
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)
[editar | editar código-fonte]Suporte ao sistema de arquivos
[editar | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]Alguns 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 | editar código-fonte]- ↑ 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)
[editar | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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:
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 | editar código-fonte]attrib
- comando análogo no MS-DOS, no OS/2 e no Microsoft Windowschown
- altera a propriedade do arquivo/diretório em um sistema Unixchmod
- altera atributos de controle de acesso a arquivos em um sistema Unix
Notas
[editar | editar código-fonte]- ↑
«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 | editar código-fonte]- 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)