특정 쉘의 umask에 의해 설정된 파일 생성 마스크는 일반적으로 전체 운영 체제에 고유합니까, 아니면 해당 쉘에만 고유합니까?

특정 쉘의 umask에 의해 설정된 파일 생성 마스크는 일반적으로 전체 운영 체제에 고유합니까, 아니면 해당 쉘에만 고유합니까?

파일 생성 마스크특정 쉘에 의해 설정된 값은 umask일반적으로 전체 운영 체제에 고유합니까, 아니면 해당 쉘에만 고유합니까?

예를 들어, Bash에서 파일 생성 마스크(umask의 마스크/비트마스크)를 변경하면 Bash에 대해서만 변경되거나 OS에 있을 수 있는 다른 셸(예: Dash, ksh, zsh 등)에 대해서도 다음과 같이 변경됩니까? 변화시키다? ("하나의 포탄이 다른 포탄에 영향을 미치는 경우가 있습니다").

답변1

umask를 이해하려면 먼저 Unix/Linux의 프로세스 구조를 이해해야 합니다. 즉, 나무와 같은 구조를 형성합니다. 모든 프로세스에는 이를 생성한 프로세스인 상위 프로세스가 있어야 합니다. (첫 번째 프로세스 제외 init). 각 프로세스는 하위 프로세스라고 하는 추가 프로세스를 생성할 수도 있고 생성하지 않을 수도 있습니다.

각 프로세스에는 마스크 속성이 있습니다. 이는 umask 명령을 사용하여 쿼리하거나 설정한 것입니다.

프로세스는 상위 프로세스의 마스크를 상속합니다. 그런 다음 마스크를 변경할 수 있습니다. 예를 들어, 쉘에서 호출 umask()하지 않고도 작성 중인 프로그램의 마스크를 변경하는 C 함수가 있습니다 .umask

하위 프로세스는 상위 프로세스의 마스크에 영향을 미칠 수 없습니다. 따라서 프로세스의 마스크를 변경해도 전체 시스템에는 영향을 미치지 않습니다. 향후 하위 프로세스에만 영향을 미칩니다.

쉘의 목적은 다른 프로세스를 생성하고 제어할 수 있는 것이므로 umask대부분의 쉘에는 명령이 내장되어 있습니다. 이는 쉘에는 필요하지 않으며 umask기능 없이 기본 쉘을 작성할 수 있습니다. 그러나 그러한 쉘은 시스템 로그인 및 관리에 유용한 범용 쉘로 간주되지 않습니다.

다른 Bash 쉘(또는 원하는 다른 쉘)을 생성할 수 있는 Bash와 같은 쉘을 사용하여 내가 말하는 내용을 직접 테스트할 수 있습니다.

  1. 터미널 열기
  2. 명령을 실행하여 umask현재 값을 쿼리합니다.
  3. (또는 다른 것을) 실행하여 bash서브쉘 생성
  4. umask자식의 마스크 값을 보려면 실행하세요 .
  5. 달리기 등 자녀의 마스크를 다른 것으로 설정하세요.umask 0000
  6. umask나는 아이의 마스크를 다시 확인하기 위해 달려갔다.
  7. 서브셸 종료(실행 exit또는 누르기 Ctrl-d)
  8. 이제 다시 상위 셸로 돌아왔습니다. umask마스크를 확인하러 달려가세요

유용한 참고자료:

관련 정보