Sự khác biệt giữa xattr và chattr


9

Mối quan hệ và sự khác biệt giữa xattrvà là chattrgì? Tôi muốn biết khi tôi thiết lập một chattrthuộc tính trong Linux, điều gì đang xảy ra bên trong nhân Linux và siêu dữ liệu inode.


Tôi đã viết một câu trả lời dài cho một câu hỏi liên quan ngày hôm qua có thể hữu ích - unix.stackexchange.com/questions/118840/ . Lưu ý rằng attrlệnh được dành cho các hệ thống tệp XFS, lệnh độc lập với hệ thống tệp tương đương làsetfattr
Graeme

Câu trả lời:


13

Các thuộc tính được xử lý bởi lsattr/ chattrtrên Linux và một số thuộc tính có thể được lưu trữ bởi khá nhiều hệ thống tệp (ext2 / 3/4, reiserfs, JFS, OCFS2, btrfs, XFS, nilfs2, hfsplus ...) và thậm chí được truy vấn qua CIFS / SMB (khi có phần mở rộng POSIX) là cờ. Chỉ cần bật hoặc tắt các bit để vô hiệu hóa hoặc kích hoạt một thuộc tính (như bất biến hoặc lưu trữ ...). Làm thế nào chúng được lưu trữ là hệ thống tập tin cụ thể, nhưng nói chung là một bản ghi 16/32/64 bit trong inode.

Danh sách đầy đủ các cờ được tìm thấy trên các hệ thống tệp gốc của Linux (ext2 / 3/4, btrfs ...) mặc dù không phải tất cả các cờ đều áp dụng cho tất cả các FS và đối với các FS không phải bản địa khác, Linux cố gắng ánh xạ chúng tương đương các tính năng trong hệ thống tập tin tương ứng. Ví dụ, cờ simmutable được lưu trữ bởi OSX trên các hệ thống tệp HFS + được ánh xạ tới cờ bất biến tương ứng trong Linux chattr. Cờ nào được hỗ trợ bởi hệ thống tệp nào hầu như không được ghi lại. Thông thường, đọc mã nguồn kernel là lựa chọn duy nhất.

Mặt khác, các thuộc tính mở rộng, như được thiết lập với setfattrhoặc attrtrên Linux lưu trữ nhiều hơn các cờ. Chúng cũng được gắn vào một tệp và là các cặp khóa / giá trị có thể là (cả khóa và giá trị) các mảng byte tùy ý (mặc dù có giới hạn về kích thước trên một số hệ thống tệp).

Khóa có thể là ví dụ: system.posix_acl_accesshoặc user.rsync.%stat. Không systemgian tên được dành riêng cho hệ thống (bạn sẽ không thay đổi POSIX ACL bằng setfattr, nhưng hơn nữa setfacl, POSIX ACL chỉ được lưu trữ dưới dạng các thuộc tính mở rộng ít nhất trên một số hệ thống tệp), trong khi các userứng dụng có thể sử dụng không gian tên rsyncsử dụng --fake-supertùy chọn này để lưu trữ thông tin về quyền sở hữu hoặc quyền khi bạn không phải là siêu người dùng).

Một lần nữa, làm thế nào chúng được lưu trữ là hệ thống tập tin cụ thể. Xem WikiPedia để biết thêm thông tin .


Làm lsattr/ chattrlàm việc cho các exthệ thống không tập tin? Nếu không, làm thế nào bạn thay đổi cờ trên các exthệ thống không phải trên Linux? Ngoài ra attrtrang man nói rằng nó được viết cho XFS (mặc dù nó hoạt động với tôi trên ext4). Tôi thực sự đã dành một thời gian dài để xem xét điều này ngày hôm qua, thông tin tốt là khó có thể đi qua. Vui lòng xem - unix.stackexchange.com/questions/118840/ từ
Graeme

@Graeme, câu trả lời cho những câu hỏi nằm trong câu trả lời của tôi. lsattr/chattrdành cho cờ tập tin. Chẳng hạn, tất cả các cờ đều được hỗ trợ bởi tất cả các hệ thống tệp, một số trong số chúng như nén sẽ không hoạt động trên ext4 nhưng sẽ hoạt động trên btrfs.
Stéphane Chazelas 17/03/2016

Nếu bạn quan tâm, tôi đã viết một kịch bản để kiểm tra các cờ này trên một vài hệ thống tập tin và đưa kết quả vào câu trả lời của tôi được liên kết ở trên. Tôi đã không thiết lập thành công / đọc bất kỳ trong số họ trên reiserfs.
Graeme

-1

Tất cả mọi thứ đã được vuốt ve inode. Khi bạn thay đổi một tập tin, thực sự bạn thay đổi. Để inodekịch bản, bạn có một lệnh tốt:

stat --format=%a yourfile

Bạn có thể sử dụng %variablevà trả lại một hữu ích từinode

Nhưng câu trả lời của bạn:

xattrlà trên MacOS và chattrtrên hộp linux.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.