Perbedaan antara xattr dan chattr

9

Apa hubungan dan perbedaan antara xattrdan chattr? Saya ingin tahu kapan saya menetapkan chattratribut di Linux apa yang terjadi di dalam kernel dan metadata inode Linux.

Cerberuzs
sumber
Saya menulis jawaban panjang pada pertanyaan terkait kemarin yang mungkin bisa membantu - unix.stackexchange.com/questions/118840/… . Perhatikan bahwa attrperintah ini ditujukan untuk sistem file XFS, perintah independen sistem file yang setara adalahsetfattr
Graeme

Jawaban:

13

Atribut yang ditangani oleh lsattr/ chattrdi Linux dan beberapa di antaranya dapat disimpan oleh beberapa sistem file (ext2 / 3/4, reiserfs, JFS, OCFS2, btrfs, XFS, nilfs2, hfsplus ...) dan bahkan dipertanyakan melalui CIFS / SMB (ketika dengan ekstensi POSIX) adalah flag. Hanya bit yang dapat dinyalakan atau dimatikan untuk menonaktifkan atau mengaktifkan atribut (seperti yang tidak dapat diubah atau arsip ...). Bagaimana mereka disimpan adalah sistem file khusus, tetapi umumnya sebagai catatan 16/32/64 bit dalam inode.

Daftar lengkap flag terdapat pada sistem file asli Linux (ext2 / 3/4, btrfs ...) meskipun tidak semua flag berlaku untuk semua FS, dan untuk FS non-pribumi lainnya, Linux mencoba memetakannya ke yang setara fitur dalam sistem file yang sesuai. Misalnya flag simmutable yang disimpan oleh OSX pada sistem file HFS + dipetakan ke flag immutable yang sesuai di Linux chattr. Bendera apa yang didukung oleh sistem file apa yang sulit didokumentasikan sama sekali. Seringkali, membaca kode sumber kernel adalah satu-satunya pilihan.

Atribut yang diperluas di sisi lain, sebagaimana diatur dengan setfattratau attrdi Linux menyimpan lebih dari flag. Mereka juga dilampirkan ke file, dan merupakan pasangan kunci / nilai yang dapat (baik kunci dan nilai) array byte yang sewenang-wenang (meskipun dengan batasan ukuran pada beberapa sistem file).

Kuncinya dapat misalnya: system.posix_acl_accessatau user.rsync.%stat. The systemnamespace dicadangkan untuk sistem (Anda tidak akan mengubah POSIX ACL dengan setfattr, tetapi lebih banyak dengan setfacl, POSIX ACL hanya terjadi untuk disimpan sebagai atribut diperpanjang setidaknya pada beberapa sistem file), sedangkan usernamespace dapat digunakan oleh aplikasi (di sini rsyncmenggunakannya untuk --fake-superopsinya, untuk menyimpan informasi tentang kepemilikan atau izin ketika Anda bukan pengguna super).

Sekali lagi, bagaimana mereka disimpan adalah sistem file yang spesifik. Lihat WikiPedia untuk informasi lebih lanjut .

Stéphane Chazelas
sumber
Apakah lsattr/ chattrbekerja untuk extsistem file non ? Jika tidak, bagaimana Anda akan mengubah tanda di non extsistem di Linux? Juga attrhalaman manual mengatakan bahwa ini ditulis untuk XFS (meskipun berfungsi untuk saya ext4). Saya benar-benar menghabiskan waktu lama melihat ini kemarin, informasi yang baik sulit didapat. Silakan lihat - unix.stackexchange.com/questions/118840/...
Graeme
@ Greme, jawaban atas pertanyaan-pertanyaan itu ada dalam jawaban saya. lsattr/chattradalah untuk flag file. Tidak semua flag didukung oleh semua sistem file, misalnya, beberapa dari mereka seperti kompresi tidak akan berfungsi pada ext4 tetapi akan bekerja pada btrfs.
Stéphane Chazelas
Jika Anda tertarik, saya menulis sebuah skrip untuk menguji flag-flag ini pada beberapa filesystem dan memberikan hasilnya pada jawaban saya yang ditautkan di atas. Saya tidak berhasil mengatur / membacanya reiserfs.
Graeme
-1

Semuanya telah di-stroed inode. Ketika Anda mengubah file, memang Anda mengubah. Untuk inodeskrip Anda memiliki perintah yang baik:

stat --format=%a yourfile

Anda dapat menggunakan %variabledan mengembalikan yang bermanfaat dariinode

Tapi jawaban Anda:

xattrada di MacOS dan chattrdi kotak linux.

Teluk Persia
sumber