Diferencia entre xattr y chattr

9

¿Cuál es la relación y la diferencia entre xattry chattr? Quiero saber cuando configuro un chattratributo en Linux qué está sucediendo dentro del kernel de Linux y los metadatos de inodo.

Cerberuzs
fuente
Ayer escribí una respuesta larga sobre una pregunta relacionada que podría ser útil: unix.stackexchange.com/questions/118840/… . Tenga en cuenta que el attrcomando está destinado a sistemas de archivos XFS, el comando independiente del sistema de archivos equivalente essetfattr
Graeme

Respuestas:

13

Los atributos manejados por lsattr/ chattren Linux y algunos de los cuales pueden ser almacenados por bastantes sistemas de archivos (ext2 / 3/4, reiserfs, JFS, OCFS2, btrfs, XFS, nilfs2, hfsplus ...) e incluso consultados sobre CIFS / SMB (cuando tiene extensiones POSIX) son banderas. Solo bits que se pueden activar o desactivar para deshabilitar o habilitar un atributo (como inmutable o archivo ...). La forma en que se almacenan es específica del sistema de archivos, pero generalmente como un registro de 16/32/64 bits en el inodo.

La lista completa de indicadores se encuentra en los sistemas de archivos nativos de Linux (ext2 / 3/4, btrfs ...) aunque no todos los indicadores se aplican a todos los FS, y para otros FS no nativos, Linux intenta asignarlos a equivalentes características en el sistema de archivos correspondiente. Por ejemplo, el indicador simmutable almacenado por OSX en sistemas de archivos HFS + se asigna al indicador inmutable correspondiente en Linux chattr. Qué indicador es compatible con qué sistema de archivos apenas está documentado. A menudo, leer el código fuente del núcleo es la única opción.

Los atributos extendidos, por otro lado, se configuran con setfattro attren Linux almacenan más que banderas. También se adjuntan a un archivo, y son pares clave / valor que pueden ser (tanto clave como valor) matrices arbitrarias de bytes (aunque con limitación de tamaño en algunos sistemas de archivos).

La clave puede ser, por ejemplo: system.posix_acl_accesso user.rsync.%stat. El systemespacio de nombres está reservado para el sistema (no cambiaría las ACL de POSIX con setfattr, pero más aún setfacl, las ACL de POSIX se almacenan como atributos extendidos al menos en algunos sistemas de archivos), mientras que las useraplicaciones pueden usar el espacio de nombres (aquí rsynclo usa para su --fake-superopción, para almacenar información sobre propiedad o permisos cuando no eres superusuario).

Nuevamente, cómo se almacenan es específico del sistema de archivos. Ver WikiPedia para más información .

Stéphane Chazelas
fuente
¿Hace lsattr/ chattrtrabaja para extsistemas que no son archivos? Si no, ¿cómo cambiaría las banderas en extsistemas que no son Linux? Además, la attrpágina del manual dice que está escrita para XFS (a pesar de que funciona para mí ext4). De hecho, pasé mucho tiempo investigando esto ayer, es difícil encontrar buena información. Consulte - unix.stackexchange.com/questions/118840/…
Graeme
@Graeme, las respuestas a esas preguntas están en mi respuesta. lsattr/chattrson para banderas de archivo. No todos los indicadores son compatibles con todos los sistemas de archivos, por ejemplo, algunos de ellos, como la compresión, no funcionarán en ext4 pero sí en btrfs.
Stéphane Chazelas
Si está interesado, escribí un script para probar estas banderas en algunos sistemas de archivos y poner los resultados en mi respuesta vinculada anteriormente. No tuve éxito al configurar / leer ninguno de ellos reiserfs.
Graeme
-1

Todo ha sido almacenado inode. Cuando cambia un archivo, de hecho cambia su. Para inodescripting tiene un buen comando:

stat --format=%a yourfile

Puede usar %variabley devolver un útil deinode

Pero tu respuesta:

xattrestá en MacOS y chattren linux box.

Golfo pérsico
fuente