chattr – Wikipédia, a enciclopédia livre
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)