본문 바로가기
카테고리 없음

[Python] umask 설정 os.umask()

by 쿡노트 2023. 12. 22.
반응형

리눅스에서 umask로 파일, 디렉터리 초기 접근권한을 설정할 수 있다.('초기 접근 권한 umask 설정' 글 참조)

https://engineer-1.tistory.com/entry/Linux-%EC%B4%88%EA%B8%B0-%EC%A0%91%EA%B7%BC-%EA%B6%8C%ED%95%9C-umask-%EC%84%A4%EC%A0%95
8진수 표기법으로 umask가 002일 경우 아래와 같이 파일 및 디렉터리 초기접근권한 적용된다.
파일 666-002 = 664 디렉터리 777-002 = 775
접근권한 - 파일 : -rw-rw-r-- (664) 디렉터리 : drwxrwxr-x (775)

 

다만 '002' umask 지정을 할 경우 Python에서는 '0o002' 로 설정을 해주어야 한다. 
8진수 표기법과 Python으로 umask 설정 테스트한 내역을 작성한다.

Python 8진수 표기법

8진수를 표기하기 위해서는 숫자 앞에 '0o' 를 접두어를 붙여야 한다. (2진수 : 0b 16진수 : 0x)

002 -> 0o002
077 -> 0o077

Python umask 설정 테스트

아래 Python 코드는 umask를 002 -> 077로 변환하고, 각 umask 설정 별로 파일 및 디렉터리를 생성하는 테스트이다.

**os.umask(mask) 명령 수행 시, 변경 전 umask를 출력하고, umask를 변경한다.

[test@test ~]$ cat umask_test.py 

import os

#file,directory 생성 function
def cr_file_dir(file_name,dir_name):
    #file 생성
    with open(file_name,'w',encoding='utf8') as f:    
        f.write('Hello, World \r\n')
    #directory 생성
    os.mkdir(dir_name)    

#umask 변경 전 file, directory 생성
cr_file_dir('test.txt','test_dir')

#8진수(octal) '0o077' 변수 할당
mask = 0o077

#umask 설정
#'umask' 변수에 변경 전 umask 할당(os.umask(mask) 명령어 수행 시 변경 전 umask 출력)
umask = os.umask(mask)

#umask 설정 후 file,directory 생성
cr_file_dir('umask_test.txt','umask_test_dir')

#8진수 출력
print("Current umask(octal):", oct(mask))
print("Previous umask(octal):", oct(umask))
#10진수 출력
print("Current umask:", mask)
print("Previous umask:", umask)

테스트 결과

[test@test ~]$ python3 umask_test.py
Current umask(octal): 0o77
Previous umask(octal): 0o2
Current umask: 63
Previous umask: 2

[test@test ~]$ ll
-rw-rw-r--. 1 test test   15 12월 20 16:34 test.txt
drwxrwxr-x. 2 test test 4096 12월 20 16:34 test_dir
-rw-------. 1 test test   15 12월 20 16:34 umask_test.txt
drwx------. 2 test test 4096 12월 20 16:34 umask_test_dir


참조로, Current umask(octal) 출력에서 '0o' 8진수 접두어 뒤에 0이 출력되지 않는(0o077 -> 0o77) 이유는 Python에서 숫자 앞에 0을 허용하지 않는다고 한다.
ex) 월표시 03 (x) 3 (O) 
'03'을 표현하고 싶으면 문자 형태로 변환 해주어야 한다.
추가적인 이유로 Python2 에서는 8진수 접두어가 0 이므로 숫자 앞에 0을 붙일 수 없다고 한다. 해당 내용은 아래 '파이썬 숫자 앞에 0을 쓸 수 없는 이유' 블로그를 참조하였습니다.

os.umask() 사용법 참조
https://www.geeksforgeeks.org/python-os-umask-method/

파이썬 숫자 앞에 0을 쓸수 없는 이유
https://blog.naver.com/5755084/221725208295

반응형