Різниця між 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/64 бітовий запис у inode.

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

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

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

Знову ж таки, те, як вони зберігаються, залежить від файлової системи. Для отримання додаткової інформації див. WikiPedia .


Робити lsattr/ chattrпрацювати для нефайлових extсистем? Якщо ні, як би ви змінили прапори на несистемних extсистемах в Linux? Також на attrсторінці man пише, що вона написана для XFS (навіть якщо вона працює для мене ext4). Я фактично провів довгий час, розглядаючи це вчора, хорошої інформації важко прийти. Будь ласка, дивіться - unix.stackexchange.com/questions/118840/…
Graeme

@Graeme, відповіді на ці питання є моєю відповіддю. lsattr/chattrпризначені для прапорів файлів. Не всі прапори підтримуються всіма файловими системами, наприклад, деякі з них, як стиснення, не працюватимуть на ext4, але працюватимуть на btrfs.
Стефан Шазелас

Якщо вас цікавить, я написав сценарій для перевірки цих прапорів на декількох файлових системах і розмістив результати на моїй відповіді, пов'язаній вище. У мене не було налаштування успіху / читання жодної з них reiserfs.
Graeme

-1

Все було порушено. inodeКоли ви змінюєте файл, ви дійсно змінюєте його. Для створення inodeсценаріїв ви добре володієте командою:

stat --format=%a yourfile

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

Але ваша відповідь:

xattrє на MacOS та chattrна linux box.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.