Разница между xattr и chattr

9

Какая связь и разница между xattrи chattr? Я хочу знать, когда я устанавливаю chattrатрибут в Linux, что происходит внутри ядра Linux и метаданных inode.

Cerberuzs
источник
Вчера я написал длинный ответ по связанному вопросу, который может быть полезным - unix.stackexchange.com/questions/118840/… . Обратите внимание, что attrкоманда предназначена для файловых систем XFS, эквивалентная независимая от файловой системы командаsetfattr
Graeme

Ответы:

13

Атрибуты обрабатываются в lsattr/ chattrв Linux и некоторые из них могут храниться в нескольких файловых системах (ext2 / 3/4, reiserfs, JFS, OCFS2, btrfs, XFS, nilfs2, hfsplus ...) и даже запрашиваться через CIFS / SMB (когда используется расширение POSIX) - это флаги. Только биты, которые можно включить или отключить, чтобы отключить или включить атрибут (например, неизменяемый или архивный ...). Как они хранятся, зависит от файловой системы, но обычно в виде 16-битной / 32-битной записи в inode.

Полный список флагов можно найти в собственных файловых системах Linux (ext2 / 3/4, btrfs ...), хотя не все флаги применимы ко всем FS, а для других не собственных FS Linux пытается сопоставить их с эквивалентными функции в соответствующей файловой системе. Например, флаг simmutable, который хранится в OSX в файловых системах HFS +, сопоставляется с соответствующим неизменяемым флагом в Linux chattr. Какой флаг поддерживается какой файловой системой, практически не документирован. Часто чтение исходного кода ядра является единственным вариантом.

С другой стороны, расширенные атрибуты, установленные с помощью setfattrили attrв Linux, хранят больше, чем флаги. Они также прикреплены к файлу и представляют собой пары ключ / значение, которые могут быть (как ключом, так и значением) произвольными массивами байтов (хотя с ограничением размера в некоторых файловых системах).

Ключ может быть, например: system.posix_acl_accessили user.rsync.%stat. Пространство systemимен зарезервировано для системы (вы не изменили бы списки ACL для POSIX setfattr, но более того setfacl, ACL для POSIX просто хранятся как расширенные атрибуты, по крайней мере, в некоторых файловых системах), тогда как userпространство имен может использоваться приложениями (здесь rsyncиспользует его для своей --fake-superопции, чтобы хранить информацию о владельце или разрешениях, когда вы не являетесь суперпользователем).

Опять же, как они хранятся, зависит от конкретной файловой системы. Смотрите WikiPedia для получения дополнительной информации .

Стефан Шазелас
источник
Работают ли lsattr/ не chattrдля extфайловых систем? Если нет, то как бы вы изменили флаги на не- extсистемах в Linux? Также на attrстранице руководства написано, что она написана для XFS (хотя она у меня работает ext4). Я на самом деле потратил много времени на изучение вчерашнего дня, трудно найти хорошую информацию. Пожалуйста, смотрите - unix.stackexchange.com/questions/118840/…
Грэм
@ Грэм, ответы на эти вопросы есть в моем ответе. lsattr/chattrдля файловых флагов. Не все флаги поддерживаются всеми файловыми системами, например, некоторые из них, такие как сжатие, не будут работать на ext4, но будут работать на btrfs.
Стефан Шазелас
Если вам интересно, я написал скрипт для проверки этих флагов на нескольких файловых системах и поместил результаты в мой ответ, связанный выше. У меня не было успеха в установке / чтении любого из них reiserfs.
Грэм
-1

Все было обработано. inodeКогда вы меняете файл, вы действительно меняете его. inodeДля скриптов у вас есть хорошая команда:

stat --format=%a yourfile

Вы можете использовать %variableи вернуть полезное изinode

Но твой ответ:

xattrнаходится на MacOS и chattrна коробке Linux.

Персидский залив
источник