xattr 和 chattr 的區別
和 之間的關係和區別是
xattr
什麼chattr
?我想知道當我chattr
在 Linux 中設置屬性時,Linux 核心和 inode 元數據中發生了什麼。
lsattr
Linux 上由/處理的屬性chattr
,其中一些可以由相當多的文件系統(ext2/3/4、reiserfs、JFS、OCFS2、btrfs、XFS、nilfs2、hfsplus…)儲存,甚至可以通過 CIFS 查詢/SMB(使用 POSIX 擴展時)是標誌。只有位才能打開或關閉以禁用或啟用屬性(如不可變或存檔……)。它們的儲存方式是特定於文件系統的,但通常作為 inode 中的 16/32/64 位記錄。完整的標誌列表可以在 Linux 本機文件系統(ext2/3/4,btrfs…)上找到,儘管並非所有標誌都適用於所有 FS,對於其他非本機 FS,Linux 嘗試將它們映射到等效相應文件系統中的功能。例如,OSX 在 HFS+ 文件系統上儲存的simmutable標誌映射到 Linux 中相應的不可變標誌
chattr
。什麼文件系統支持什麼標誌幾乎沒有記錄。通常,閱讀核心原始碼是唯一的選擇。另一方面,使用
setfattr
或attr
在 Linux 上設置的擴展屬性不僅僅儲存標誌。它們也附加到文件中,並且是鍵/值對,可以是(鍵和值)任意字節數組(儘管在某些文件系統上存在大小限制)。例如,密鑰可以是:
system.posix_acl_access
或user.rsync.%stat
。命名空間是為系統保留的system
(您不會使用 更改 POSIX ACLsetfattr
,但更多的是setfacl
,POSIX ACL 恰好至少在某些文件系統上儲存為擴展屬性),而user
命名空間可由應用程序使用(此處rsync
使用它作為--fake-super
選項,當您不是超級使用者時儲存有關所有權或權限的資訊)。同樣,它們的儲存方式是特定於文件系統的。有關詳細資訊,請參閱維基百科。