Różnica między xattr i chattr

9

Jaka jest relacja i różnica między xattri chattr? Chcę wiedzieć, kiedy ustawię chattratrybut w systemie Linux, co dzieje się w jądrze systemu Linux i metadanych i-węzłów.

Cerberuzs
źródło
Napisałem długą odpowiedź na pytanie wczoraj pokrewnej, które mogą być pomocne - unix.stackexchange.com/questions/118840/... . Zauważ, że attrpolecenie jest przeznaczone dla systemów plików XFS, równoważne niezależne polecenie dla systemu plików tosetfattr
Graeme

Odpowiedzi:

13

Atrybuty obsługiwane przez lsattr/ chattrw systemie Linux, a niektóre z nich mogą być przechowywane przez kilka systemów plików (ext2 / 3/4, reiserfs, JFS, OCFS2, btrfs, XFS, nilfs2, hfsplus ...), a nawet kwerendy w CIFS / SMB (w przypadku rozszerzeń POSIX) są flagami. Tylko bity, które można włączyć lub wyłączyć, aby wyłączyć lub włączyć atrybut (taki jak niezmienny lub archiwizować ...). Sposób ich przechowywania jest zależny od systemu plików, ale ogólnie jako rekord 16/32/64-bitowy w i-węźle.

Pełna lista flag znajduje się w rodzimych systemach plików Linux (ext2 / 3/4, btrfs ...), chociaż nie wszystkie flagi dotyczą wszystkich FS, a dla innych nienatywnych FS, Linux próbuje zmapować je na równoważne funkcje w odpowiednim systemie plików. Na przykład flaga symulowalna przechowywana przez OSX w systemach plików HFS + jest odwzorowana na odpowiednią flagę niezmienną w systemie Linux chattr. Jaka flaga jest obsługiwana przez jaki system plików w ogóle nie jest udokumentowany. Często czytanie kodu źródłowego jądra jest jedyną opcją.

Z drugiej strony, rozszerzone atrybuty ustawione w systemie Linux setfattrlub attrw sklepie przechowują więcej niż flagi. Są one również dołączone do pliku i są parami klucz / wartość, które mogą być (zarówno kluczem, jak i wartością) dowolnymi tablicami bajtów (choć z ograniczeniem rozmiaru w niektórych systemach plików).

Kluczem może być na przykład: system.posix_acl_accesslub user.rsync.%stat. Przestrzeń systemnazw jest zarezerwowana dla systemu (nie zmieniłbyś list ACL POSIX za pomocą setfattr, ale więcej setfacl, POSL ACL są po prostu przechowywane jako rozszerzone atrybuty przynajmniej w niektórych systemach plików), podczas gdy userprzestrzeń nazw może być używana przez aplikacje (tutaj rsyncużywa tej --fake-superopcji do przechowywania informacji o własności lub uprawnieniach, gdy nie jesteś superużytkownikiem).

Ponownie, sposób ich przechowywania zależy od systemu plików. Aby uzyskać więcej informacji, zobacz WikiPedia .

Stéphane Chazelas
źródło
Czy lsattr/ chattrdziała dla extsystemów innych niż pliki? Jeśli nie, to jak zmieniłbyś flagi na extsystemach innych niż Linux? Również attrstrona podręcznika mówi, że jest napisany dla XFS (chociaż działa dla mnie ext4). Wczoraj spędziłem dużo czasu na analizowaniu tego, trudno jest uzyskać dobre informacje. Proszę zobaczyć - unix.stackexchange.com/questions/118840/…
Graeme
@Graeme, odpowiedzi na te pytania są w mojej odpowiedzi. lsattr/chattrsą dla flag plików. Nie wszystkie flagi są obsługiwane przez wszystkie systemy plików, na przykład niektóre z nich, takie jak kompresja, nie będą działać na ext4, ale będą działać na btrfs.
Stéphane Chazelas
Jeśli jesteś zainteresowany, napisałem skrypt, aby przetestować te flagi na kilku systemach plików i umieścić wyniki w mojej odpowiedzi pod linkiem powyżej. Nie udało mi się ustawić ani odczytać żadnego z nich reiserfs.
Graeme
-1

Wszystko zostało ukryte. inodeKiedy zmieniasz plik, faktycznie zmieniasz jego. Do inodeskryptu masz dobre polecenie:

stat --format=%a yourfile

Możesz użyć %variablei zwrócić przydatne zinode

Ale twoja odpowiedź:

xattrjest na MacOS i chattrna Linuxie.

Zatoka Perska
źródło