mv -Z
기본 selinux 컨텍스트를 적용합니다. 의 다른 모든 호출과 다르며 mv
이동된 디렉터리의 모든 파일을 개별적으로 처리합니까?
답변1
예.
$ mkdir a
$ touch a/b
$ ls -Z -d a a/b
unconfined_u:object_r:user_home_t:s0 a
unconfined_u:object_r:user_home_t:s0 a/b
$ strace -f mv -Z a ~/.local/share/Trash/files
...
open("/home/alan/.local/share/Trash/files/a/b", O_RDONLY|O_NOFOLLOW) = 3
...
fgetxattr(3, "security.selinux", "unconfined_u:object_r:user_home_t:s0", 255) = 37
fsetxattr(3, "security.selinux", "unconfined_u:object_r:data_home_t:s0", 37, 0) = 0
...
$ cd ~/.local/share/Trash/files
$ ls -Zd a a/b
unconfined_u:object_r:data_home_t:s0 a
unconfined_u:object_r:data_home_t:s0 a/b
또한 단일 파일 시스템 내에서 디렉터리 이동이 중간에 실패할 가능성도 있습니다. 즉, 라벨을 변경할 때 디스크 공간이 부족하기 때문입니다. 라벨 재지정은 두 번째 단계이므로 이 효과는 완화됩니다. 초기 이동 작업은 여전히 단일 원자에 의해 수행됩니다 rename
. 이는 레이블은 일관성이 없지만 파일은 다른 모든 면에서 일관성이 있음을 의미합니다. 공간을 확보한 후에는 라벨을 고정하는 것이 간단해야 합니다.