2012-07-02 4 views
11

대부분의 경우, 사용 권한은 0777의 형식으로 된 8 진수로 정의됩니다. 그러나 UNIX의 umask 명령 (따라서 os.umask())은 0o7770o022의 허가 비트를 생성하려면 0o000이 필요합니다. 내 이해에는 0o755과 같습니다.왜 os.umask()의 ​​인수가 거꾸로되어 있습니까? (umask 0o000은 chmod 0o777을 만듭니다)

나는 유닉스의 umask이 어떤 이유로 거꾸로 된 것을 들었다. 나는 그 이유를 이해하지 못한다. 누군가가이 불일치를 설명해 주시겠습니까?

+2

"마스크"-이 문맥에서 단어가 의미하는 것입니다. (그림, 칩 제작 등에 사용되는 마스크를 생각해보십시오). 이 방법으로 작동하지 않으면 다른 것으로 불릴 것입니다. –

답변

11

umaskchmod 사이의 관계는 완전히 방정식으로 기록 될 수 있기 때문에 실제 불일치는 없습니다. 외관상으로는, umaskchmod의 반대를 놓는다, 옛날에 이것 같이 후에 창조되었다.

예 : 022 (기본값 : umask)은 755을 생성합니다. 그것은 다음과 같이 작동

  • 7 - 0 = 7
  • 7 - 2 = 5이 예를 사용하여 두 번째 및 세 번째 바이트

에게된다 첫번째 바이트를하게되고, umask 777umask 112chmod 664 동일 할 것이다 chmod 000 가진 파일을 생성한다. 내가 알고있는 한, 이것은 umask 명령이 원래 만든 후 어떤 허가 비트를 나타 내기 위해 만들어 졌기 때문에 발생했습니다 (그러므로 invertion). NOT이 생성되었습니다.

짜증나는 일이지만 실제로 익숙해지는 것은 어렵지 않습니다. 그냥 chmod 파일을 어떻게 생각하고 7에서 원하는 바이트 수를 뺀다면 umask 값을 얻게 될 것입니다. 또는 IDE에서 코드를 작성하는 경우 umask을 사용하지 말고 파일 (기본값은 umask)을 만든 다음 Python에서 os.chmod()을 대신 사용하십시오.

+0

"필자가 아는 한, umask 명령은 원래 파일이 생성 된 후에 어떤 권한 비트를 갖지 못했는지 나타 내기 위해 만들어 졌기 때문에 발생했습니다 (따라서 invertion)." 멋진 대답! 이제 나는 평화롭게 살 수있다! :) – ddinchev

+0

"마스크"는 "마스크 오프"또는 "제거"입니다. 이것이 우리가 bitwise AND ("&"를 C로 사용하여 "사물을 마스크"하는 이유입니다. – Fixee