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


9

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


Вчера я написал длинный ответ по связанному вопросу, который может быть полезным - 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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.