( ) 옵션이 있는 수많은 *nix 명령( mkdir
, mkfifo
, ) mknod
에 기술적 이점/필요성이 있습니까 ?-m
--mode
제가 이 질문을 하는 이유는 제가 아는 한 umask
(셸 명령과 시스템 호출)이 시스템 권한을 제어하는 데 필요한 모든 것을 제공하기 때문입니다.
예를 들어 다음과 같이 할 수 있습니다.
mkdir -m 700 "$my_dir"
..하지만 쉽게 할 수 있습니다:
old_umask=`umask` \
&& umask 0077 \
&& mkdir "$my_dir"
umask "$old_umask"
분명히 말하면 전자가 더 사용자 친화적이고 편리하다는 것을 알 수 있지만(특히 명령줄 사용의 경우) 실제로는 그렇지 않습니다.인위적인후자에 비해 전자의 장점.
또한 기본 syscall 수준에서 이러한 유연성의 이점을 이해하고 있습니다. 호출을 원 open
하거나 sem_open
최대 600개의 권한이 있는 경우 공개 syscall로 전달 하고 거기에 있는 S_IRUSR | S_IWUSR
syscall을 잊어버릴 수 있습니다. , 하나의 시스템 호출 왕복을 저장합니다(또는 호출이 현재 umask를 수정하기 umask
때문에 umask를 재설정하려는 경우 두 개 ). 내 코드는 더 간단하고 깔끔합니다. 이러한 명령에 대한 / 옵션은 다음과 같기 umask
때문에 명령줄 예제에서는 작동하지 않습니다.-m
--mode
가지다그럼에도 불구하고 호출은 umask
명령 프로세스의 umask를 지워서 새 파일 등에 설정해야 하는 모드/권한 비트를 보장합니다. (예를 들어, 내 쉘의 umask가 이면 쉘에서 상속받은 umask를 0으로 만들기 위해 내부적으로 먼저 호출하는 경우에만 예상대로 작동 022
합니다 .)mkdir -m 777 /tmp/foo
umask
그래서 제가 문제를 생각할 때 놓치지 않았는지 확인하고 싶었던 것은 umask
mk* 명령의 / 옵션에 의존하지 않고 명령만으로는 할 수 없는 일이 있습니까 -m
?--mode
답변1
혼자서는 할 수 없는 일들이 있습니다 umask
:
위 권한으로 일반 파일을 생성합니다
0666
.위 권한을 가진 디렉토리를 생성합니다
0777
.
그래서 당신도 필요 chmod
합니다 --mode
. 보안상의 이유로안 돼요의도한 것보다 더 높은 권한을 가진 개체를 생성하려면 chmod
아무 것도 umask
충분하지 않습니다. 극단적인 경우에는 둘 다 사용해야 할 수도 있으며 결과적으로 umask
// mkdir
/ 가 다소 보기 흉한 순서가 됩니다 chmod
. umask
(예: 그룹 임시 디렉토리( 01770
)를 생성합니다.)
so는 --mode
and로 대체될 수 있지만 그 중 하나만은 아닙니다.chmod
umask