이 chattr
명령은 파일의 일부 속성을 설정하는 데 사용됩니다(예: 추가(a)만,변함없음(1), 등. ).
이러한 속성은 확장 속성으로 구현됩니까, 아니면 자체 속성 클래스입니까?
답변1
아니요, 이러한 플래그는 ( 파일 시스템 FS_IOC_SETFLAGS
ioctl()
이라고도 하며 다른 파일 시스템의 경우 해당 플래그)을 사용하여 설정됩니다.EXT2_IOC_SETFLAGS
ext*
이를 지원하는 대부분의 파일 시스템에서는 inode 구조의 비트맵으로 변환됩니다.
예를 들어, 다른 여러 파일 시스템에서는 inode 구조 멤버(32비트 정수) ext4
입니다 .i_flags
일부 외부(Linux가 아닌) 파일 시스템(예: Apple의 HFS+)에는 동등한 플래그가 있는 유사한 개념이 있으며 FS_IOC_SETFLAGS
ioctl이 거기로 변환됩니다.
파일 시스템에서 이 명령을 사용할 때 stat
(inode 구조 덤프) 출력되는 숫자는 다음과 같습니다.debugfs
ext*
Flags:
$ sudo debugfs /dev/vda
debugfs: stat /tmp/file
Inode: 1835209 Type: regular Mode: 0644 Flags: 0x80010
[...]
0x80000은 FS_EXTENT_FL
( 출력 e
에서 ), 0x10은 ( )입니다.lsattr
FS_IMMUTABLE_FL
i
새로운 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()
).