Python에서 파일 권한 변경

Olorunfemi Akinlua 2023년6월21일
  1. Python의 OS 파일 권한
  2. chmod()를 사용하여 Python에서 파일 권한 변경
Python에서 파일 권한 변경

Python 내에서 또는 Python 애플리케이션 주변에서 파일로 작업할 때 의도한 작업을 달성하는 데 도움이 되는 적절한 파일 권한을 갖는 것이 필수적일 수 있습니다. 작업 스크립트 파일에서 데이터 내보내기에 이르기까지 Python 애플리케이션에서 생성, 업데이트 또는 관리하는 파일을 Python 코드로 작업할 수도 있습니다.

일반적으로 대부분의 개발자가 파일 권한으로 작업하는 일반적인 방법은 명령줄 명령 또는 스크립트를 사용하는 것입니다. 그러나 특정 내장 라이브러리와 해당 메서드를 사용하여 Python 내에서 파일 권한을 변경할 수 있습니다.

이 기사에서는 Python에서 파일 권한을 변경하는 방법에 대해 설명합니다.

Python의 OS 파일 권한

운영 체제 내에서 Windows에서 Linux에 이르기까지 다양한 권한이 고유합니다. 읽기, 쓰기 및 실행 권한은 목적에 따라 파일에 설정됩니다.

파일 탐색기는 일반 사용자가 파일에 부여된 파일 권한을 변경할 수 있도록 UI를 제공하는 경우가 많습니다. 그러나 대부분의 개발자에게는 명령줄 인터페이스가 발생합니다.

Linux(일반적으로 Unix 시스템) 및 심지어 Windows의 경우 파일이 보유한 다른 정보 중에서 파일 권한을 확인할 수 있습니다.

Windows에서:

ls

출력:

Directory: C:\Users\USER

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         7/13/2022   8:09 PM                .android
d-----         9/23/2022   8:11 PM                .vscode
d-r---          5/9/2022   1:34 PM                3D Objects
d-----         5/12/2022  11:49 PM                Apple
d-----         8/30/2022   1:20 PM                Autodesk
d-r---         3/18/2022   6:34 AM                Contacts
d-r---         9/23/2022   8:19 PM                Desktop
d-r---         9/23/2022   8:52 PM                Documents
d-r---         9/28/2022  12:48 PM                Downloads
d-r---         3/18/2022   6:34 AM                Favorites
d-r---         4/28/2022  11:03 AM                Links
d-r---         7/16/2022  10:41 PM                Music
d-r---         4/11/2022  11:39 PM                OneDrive
d-r---         9/22/2022  11:13 AM                Pictures
d-r---         3/18/2022   6:34 AM                Saved Games
d-r---         3/18/2022   6:35 AM                Searches
d-r---         9/26/2022   2:49 PM                Videos
-a----         9/23/2022   8:25 PM              5 .node_repl_history
-a----         9/27/2022   2:34 AM           1100 pslog.txt

모드 탭에는 파일 유형을 보여주는 첫 번째 열인 파일 권한 정보가 있습니다.

마찬가지로 Linux와 같은 Unix 시스템의 경우 모든 파일 정보를 나열할 수 있습니다.

ls -la

출력:

drwxr-xr-x   6 eva        users         1024 Jun  8 16:46 sabon
-rw-------   1 eva        users         1564 Apr 28 14:35 splus
-rw-------   1 eva        users         1119 Apr 28 16:00 splus2
-rw-r--r--   1 eva        users         9753 Sep 27 11:14 ssh_known_hosts
-rw-r--r--   1 eva        users         4131 Sep 21 15:23 swlist.out
-rw-r--r--   1 eva        users        94031 Sep  1 16:07 tarnti.zip

또한 첫 번째 열에는 모드(drwxr-xr-x)가 있습니다. 첫 번째 열에는 네 가지 분류가 있습니다.

첫 번째 분류는 실제 파일 형식을 나타내는 첫 번째 문자입니다. 두 번째 분류(다음 세 문자)는 사용자의 액세스 권한(또는 사용 권한)을 보여줍니다.

세 번째 분석(다음 세 문자)은 파일을 소유한 그룹의 권한을 보여줍니다. 그리고 마지막 분류(마지막 3자)는 다른 사용자의 권한을 보여줍니다.

이제 이 drwxr-xr-x 모드를 사용하여 설명하겠습니다. 계속 진행하기 전에 세 글자가 무엇을 나타내는지 알아야 합니다.

  1. r은 읽기를 의미합니다.
  2. w는 쓰기를 의미합니다.
  3. x는 실행을 의미합니다.

각 파일 또는 디렉토리에는 파일 소유자, 관련 사용자 그룹의 구성원 및 기타 사용자에 대한 액세스 권한이 할당됩니다. 권한은 다음과 같이 설정할 수 있습니다.

  1. 파일을 읽습니다.
  2. 파일을 작성합니다.
  3. 파일을 실행합니다.

첫 번째 문자 d는 디렉토리임을 나타냅니다. 단, 문자가 -이면 일반 파일입니다.

다음 세 문자 집합 rwx는 사용자가 디렉토리를 읽고 쓰고 실행할 수 있음을 의미합니다. 다음 세 개 r-x는 그룹이 읽고 실행할 수 있지만 디렉토리를 쓸 수 없음을 의미합니다.

마지막 세 개 r-x는 다른 사용자가 디렉토리를 읽고 실행할 수 있지만 쓸 수 없음을 의미합니다.

따라서 Linux에서 파일의 권한을 변경하려면 간단한 chmod 명령이 유용한 경우가 많습니다.

chmod u+x someFile

u+xsomeFile에 부여된 권한입니다.

u+x 권한은 someFile의 사용자(기억, 사용자, 그룹 및 기타 사용자)에게 실행 권한(+)을 추가합니다. 실행은 x로 표시됩니다.

그러나 우리는 이것을 Python 내에서 매우 쉽게 달성할 수 있습니다. 이 지식을 사용하면 이제 아무 문제 없이 Python 내에서 파일의 권한을 변경할 수 있습니다.

chmod()를 사용하여 Python에서 파일 권한 변경

chmod() 메서드는 파일 또는 디렉토리의 모드를 변경하는 작업을 수행하는 Linux의 chmod 명령에서 파생됩니다. chmod() 메서드는 os 모듈을 통해 사용할 수 있으며, 이는 Python 설치 또는 환경의 기본값입니다.

os 모듈은 모든 운영 체제와 상호 작용할 수 있는 인터페이스와 메서드를 제공합니다. 시스템에 따라 NT 또는 Posix용 OS 루틴을 제공합니다.

많은 기능 중에서 디렉토리를 관리하고 내용을 검색하며 그러한 디렉토리 내에서 동작과 모드를 변경할 수 있습니다.

chmod() 메서드 외에도 os.stat()os.lstat()의 결과를 해석하기 위해 상수/함수를 제공하는 stat라는 또 다른 모듈이 필요합니다. 이 통계는 사용자, 그룹 또는 다른 사용자 전체에서 파일 권한을 변경하는 데 필요한 권한 플래그를 제공합니다.

권한 플래그에는 읽기, 쓰기 및 실행 작업이 포함됩니다.

chmod()stat를 사용하려면 해당 모듈을 가져와야 합니다.

import os
import stat

또한 권한을 변경하려는 파일에 액세스해야 합니다. os 모듈도 유용합니다.

chmod()는 다음 구문으로 작동합니다.

os.chmod(filePath, permissionFlag)

파일의 현재 권한 모드(예: 새로 생성된 index.txt)를 확인하려면 stat() 메서드를 사용할 수 있습니다.

perm = os.stat("index.txt")
print(perm.st_mode)

출력:

33206

os.stat()는 지정된 경로의 상태를 가져오고 st_mode 속성은 처음 두 개의 8진수 숫자가 파일 유형을 지정하고 나머지 4개는 파일 권한을 나타내는 파일의 권한 비트를 제공합니다.

파일은 Python 파일과 동일한 디렉터리 내에 있거나 전체 파일 경로를 배치해야 합니다.

Linux 사용자를 위해 8진수 표기법(권한을 지정하는 두 가지 방법 중 하나)을 사용하면 권한 설정을 일련의 비트로 생각할 수 있으며 아래 코드 스니펫에서 설명할 수 있습니다.

rwx rwx rwx = 111 111 111
rw- rw- rw- = 110 110 110
rwx --- --- = 111 000 000

# rwx = 111 in binary = 7
# rw- = 110 in binary = 6
# r-x = 101 in binary = 5
# r-- = 100 in binary = 4

권한 모드를 변경하려면 stat 권한 플래그를 사용할 수 있습니다.

import os
import stat

perm = os.stat("index.txt")
print(perm.st_mode)
os.chmod("index.txt", stat.S_IWGRP)

perm = os.stat("index.txt")
print(perm.st_mode)

출력:

33206
33060

첫 번째 8진수는 변경 전의 권한 상태를 나타내고 두 번째 8진수는 그룹별 읽기 권한을 추가한 후의 숫자입니다.

|를 사용하여 다른 권한 플래그를 결합할 수 있습니다. 운영자. 이 예에서는 사용자가 읽고 쓰고 실행할 수 있는 권한을 추가합니다.

import os
import stat

perm = os.stat("index.txt")
print(perm.st_mode)
os.chmod("index.txt", stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC | stat.S_IRUSR)

perm = os.stat("index.txt")
print(perm.st_mode)

출력:

33060
33206

아래에서 볼 수 있는 다른 권한 플래그가 있습니다.

  1. stat.S_IREAD, stat.S_IWRITEstat.S_IEXEC 플래그는 파일에 대한 사용자의 읽기, 쓰기 및 실행 권한을 각각 추가합니다.
  2. 그룹에 대한 읽기, 쓰기 및 실행 권한을 파일에 각각 추가하기 위한 stat.S_IRGRP, stat.S_IWGRPstat.S_IXGRP 플래그.
  3. stat.S_IROTH, stat.S_IWOTHstat.S_IXOTH 플래그는 파일에 대한 다른 사용자의 읽기, 쓰기 및 실행 권한을 각각 추가합니다.
  4. stat.S_IRWXU, stat.S_IRWXGstat.S_IRWXO 플래그는 각각 사용자, 그룹 및 기타 사용자에 대한 읽기, 쓰기 및 실행 권한을 동시에 추가합니다.

권한 플래그를 사용하는 것 외에도 chmod() 메소드 내에서 8진수 표기법을 사용할 수 있습니다. 사용자는 읽기, 쓰기 및 실행이 가능하고 그룹 및 기타 사용자는 읽기 및 실행만 가능함을 지정하는 8진수 755를 사용하겠습니다.

os.chmod("index.txt", 0o755)

출력:

33206

8진수 표기법임을 나타내기 위해 0o 접두사를 추가해야 합니다.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

관련 문장 - Python File