는파일 생성 마스크특정 쉘에 의해 설정된 값은 umask
일반적으로 전체 운영 체제에 고유합니까, 아니면 해당 쉘에만 고유합니까?
예를 들어, Bash에서 파일 생성 마스크(umask의 마스크/비트마스크)를 변경하면 Bash에 대해서만 변경되거나 OS에 있을 수 있는 다른 셸(예: Dash, ksh, zsh 등)에 대해서도 다음과 같이 변경됩니까? 변화시키다? ("하나의 포탄이 다른 포탄에 영향을 미치는 경우가 있습니다").
답변1
umask를 이해하려면 먼저 Unix/Linux의 프로세스 구조를 이해해야 합니다. 즉, 나무와 같은 구조를 형성합니다. 모든 프로세스에는 이를 생성한 프로세스인 상위 프로세스가 있어야 합니다. (첫 번째 프로세스 제외 init
). 각 프로세스는 하위 프로세스라고 하는 추가 프로세스를 생성할 수도 있고 생성하지 않을 수도 있습니다.
각 프로세스에는 마스크 속성이 있습니다. 이는 umask 명령을 사용하여 쿼리하거나 설정한 것입니다.
프로세스는 상위 프로세스의 마스크를 상속합니다. 그런 다음 마스크를 변경할 수 있습니다. 예를 들어, 쉘에서 호출 umask()
하지 않고도 작성 중인 프로그램의 마스크를 변경하는 C 함수가 있습니다 .umask
하위 프로세스는 상위 프로세스의 마스크에 영향을 미칠 수 없습니다. 따라서 프로세스의 마스크를 변경해도 전체 시스템에는 영향을 미치지 않습니다. 향후 하위 프로세스에만 영향을 미칩니다.
쉘의 목적은 다른 프로세스를 생성하고 제어할 수 있는 것이므로 umask
대부분의 쉘에는 명령이 내장되어 있습니다. 이는 쉘에는 필요하지 않으며 umask
기능 없이 기본 쉘을 작성할 수 있습니다. 그러나 그러한 쉘은 시스템 로그인 및 관리에 유용한 범용 쉘로 간주되지 않습니다.
다른 Bash 쉘(또는 원하는 다른 쉘)을 생성할 수 있는 Bash와 같은 쉘을 사용하여 내가 말하는 내용을 직접 테스트할 수 있습니다.
- 터미널 열기
- 명령을 실행하여
umask
현재 값을 쿼리합니다. - (또는 다른 것을) 실행하여
bash
서브쉘 생성 umask
자식의 마스크 값을 보려면 실행하세요 .- 달리기 등 자녀의 마스크를 다른 것으로 설정하세요.
umask 0000
umask
나는 아이의 마스크를 다시 확인하기 위해 달려갔다.- 서브셸 종료(실행
exit
또는 누르기Ctrl-d
) - 이제 다시 상위 셸로 돌아왔습니다.
umask
마스크를 확인하러 달려가세요
유용한 참고자료:
man 1 umask
man 2 umask
(이것은 C 함수에 대한 참조를 제공합니다umask()
)man bash
(그리고 검색umask
)- https://en.wikipedia.org/wiki/Umask