Diferença entre xattr e chattr

9

Qual é a relação e a diferença entre xattre chattr? Quero saber quando definir um chattratributo no Linux o que está acontecendo nos metadados do kernel e inode do Linux.

Cerberuzs
fonte
Escrevi ontem uma resposta longa sobre uma pergunta relacionada, que pode ser útil - unix.stackexchange.com/questions/118840/… . Observe que o attrcomando é destinado a sistemas de arquivos XFS, o comando independente do sistema de arquivos equivalente ésetfattr
Graeme

Respostas:

13

Os atributos manipulados pelo lsattr/ chattrno Linux e alguns dos quais podem ser armazenados por alguns sistemas de arquivos (ext2 / 3/4, reiserfs, JFS, OCFS2, btrfs, XFS, nilfs2, hfsplus ...) e até consultados pelo CIFS / SMB (quando com extensões POSIX) são sinalizadores. Apenas bits que podem ser ativados ou desativados para desativar ou ativar um atributo (como imutável ou arquivar ...). Como eles são armazenados é específico do sistema de arquivos, mas geralmente como um registro de 16/32/64 bits no inode.

A lista completa de sinalizadores é encontrada nos sistemas de arquivos nativos do Linux (ext2 / 3/4, btrfs ...), embora nem todos os sinalizadores se apliquem a todo o FS e, para outros FS não nativos, o Linux tenta mapeá-los para equivalentes recursos no sistema de arquivos correspondente. Por exemplo, o sinalizador simmutable armazenado pelo OSX nos sistemas de arquivos HFS + é mapeado para o sinalizador imutável correspondente no Linux chattr. Qual sinalizador é suportado por qual sistema de arquivos quase não está documentado. Freqüentemente, a leitura do código fonte do kernel é a única opção.

Atributos estendidos, por outro lado, conforme definido com setfattrou attrno Linux, armazenam mais que sinalizadores. Eles também estão anexados a um arquivo e são pares de chave / valor que podem ser (chave e valor) matrizes arbitrárias de bytes (embora com limitação de tamanho em alguns sistemas de arquivos).

A chave pode ser, por exemplo: system.posix_acl_accessou user.rsync.%stat. O systemespaço para nome é reservado para o sistema (você não alteraria as ACLs POSIX com setfattr, mas mais com setfacl, as ACLs POSIX são armazenadas como atributos estendidos pelo menos em alguns sistemas de arquivos), enquanto o userespaço para nome pode ser usado por aplicativos (aqui rsyncusa-o como --fake-superopção, para armazenar informações sobre propriedade ou permissões quando você não é superusuário).

Novamente, como eles são armazenados é específico do sistema de arquivos. Veja WikiPedia para mais informações .

Stéphane Chazelas
fonte
Fazer lsattr/ chattrtrabalho para não extsistemas de arquivos? Se não, como você mudaria os sinalizadores em extsistemas não no Linux? Além disso, a attrpágina de manual diz que foi escrita para o XFS (mesmo que funcione para mim ext4). Na verdade, passei muito tempo analisando isso ontem, é difícil obter boas informações. Veja - unix.stackexchange.com/questions/118840/…
Graeme
@ Graeme, as respostas para essas perguntas estão na minha resposta. lsattr/chattrsão para sinalizadores de arquivo. Nem todos os sinalizadores são suportados por todos os sistemas de arquivos, por exemplo, alguns deles, como a compactação, não funcionam no ext4, mas no btrfs.
Stéphane Chazelas 17/03/14
Se você estiver interessado, escrevi um script para testar esses sinalizadores em alguns sistemas de arquivos e colocar os resultados na minha resposta vinculada acima. Não tive sucesso definindo / lendo nenhum deles reiserfs.
Graeme
-1

Tudo foi incluído inode. Quando você altera um arquivo, na verdade, você altera seu inodescript. Para obter um bom comando:

stat --format=%a yourfile

Você pode usar %variablee retornar um útil deinode

Mas sua resposta:

xattrestá no MacOS e chattrna caixa Linux.

PersianGulf
fonte