umask 및 -m, --mode 명령 옵션

umask 및 -m, --mode 명령 옵션

( ) 옵션이 있는 수많은 *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_IWUSRsyscall을 잊어버릴 수 있습니다. , 하나의 시스템 호출 왕복을 저장합니다(또는 호출이 현재 umask를 수정하기 umask때문에 umask를 재설정하려는 경우 두 개 ). 내 코드는 더 간단하고 깔끔합니다. 이러한 명령에 대한 / 옵션은 다음과 같기 umask때문에 명령줄 예제에서는 작동하지 않습니다.-m--mode가지다그럼에도 불구하고 호출은 umask명령 프로세스의 umask를 지워서 새 파일 등에 설정해야 하는 모드/권한 비트를 보장합니다. (예를 들어, 내 쉘의 umask가 이면 쉘에서 상속받은 umask를 0으로 만들기 위해 내부적으로 먼저 호출하는 경우에만 예상대로 작동 022합니다 .)mkdir -m 777 /tmp/fooumask

그래서 제가 문제를 생각할 때 놓치지 않았는지 확인하고 싶었던 것은 umaskmk* 명령의 / 옵션에 의존하지 않고 명령만으로는 할 수 없는 일이 있습니까 -m?--mode

답변1

혼자서는 할 수 없는 일들이 있습니다 umask:

  • 위 권한으로 일반 파일을 생성합니다 0666.

  • 위 권한을 가진 디렉토리를 생성합니다 0777.

그래서 당신도 필요 chmod합니다 --mode. 보안상의 이유로안 돼요의도한 것보다 더 높은 권한을 가진 개체를 생성하려면 chmod아무 것도 umask충분하지 않습니다. 극단적인 경우에는 둘 다 사용해야 할 수도 있으며 결과적으로 umask// mkdir/ 가 다소 보기 흉한 순서가 됩니다 chmod. umask(예: 그룹 임시 디렉토리( 01770)를 생성합니다.)

so는 --modeand로 대체될 수 있지만 그 중 하나만은 아닙니다.chmodumask

관련 정보