Какая связь и разница между 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
attr
команда предназначена для файловых систем XFS, эквивалентная независимая от файловой системы командаsetfattr
Ответы:
Атрибуты обрабатываются в
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 для POSIXsetfattr
, но более того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
.Все было обработано.
inode
Когда вы меняете файл, вы действительно меняете его.inode
Для скриптов у вас есть хорошая команда:Вы можете использовать
%variable
и вернуть полезное изinode
Но твой ответ:
xattr
находится на MacOS иchattr
на коробке Linux.источник