"chattr" 명령으로 설정된 속성이 확장 속성으로 구현됩니까?

"chattr" 명령으로 설정된 속성이 확장 속성으로 구현됩니까?

chattr명령은 파일의 일부 속성을 설정하는 데 사용됩니다(예: 추가(a)만,변함없음(1), 등. ).

이러한 속성은 확장 속성으로 구현됩니까, 아니면 자체 속성 클래스입니까?

답변1

아니요, 이러한 플래그는 ( 파일 시스템 FS_IOC_SETFLAGS ioctl()이라고도 하며 다른 파일 시스템의 경우 해당 플래그)을 사용하여 설정됩니다.EXT2_IOC_SETFLAGSext*

이를 지원하는 대부분의 파일 시스템에서는 inode 구조의 비트맵으로 변환됩니다.

예를 들어, 다른 여러 파일 시스템에서는 inode 구조 멤버(32비트 정수) ext4입니다 .i_flags

일부 외부(Linux가 아닌) 파일 시스템(예: Apple의 HFS+)에는 동등한 플래그가 있는 유사한 개념이 있으며 FS_IOC_SETFLAGSioctl이 거기로 변환됩니다.

파일 시스템에서 이 명령을 사용할 때 stat(inode 구조 덤프) 출력되는 숫자는 다음과 같습니다.debugfsext*Flags:

 $ sudo debugfs /dev/vda
 debugfs: stat /tmp/file
 Inode: 1835209   Type: regular    Mode:  0644   Flags: 0x80010
 [...]

0x80000은 FS_EXTENT_FL( 출력 e에서 ), 0x10은 ( )입니다.lsattrFS_IMMUTABLE_FLi

새로운 statx()시스템 호출은 이 정보(일부)를 반환할 수도 있습니다(현재(2019년 초) 모든 시스템에 쉽게 호출할 수 있을 만큼 충분한 새로운 GNU libc 버전(2.28 이상)이 있는 것은 아니지만).

xfs_io최신 시스템에서는 이 statx명령을 시스템 호출에 대한 인터페이스로 사용할 수 있습니다 statx().

$ xfs_io -rc 'statx -r' /tmp/a
[...]
stat.attributes = 0x10
[...]

(여기서 0x10은 STATX_ATTR_IMMUTABLE, FS_EXTENT_FL해당 플래그 비트가 없습니다 statx()).

관련 정보