os.chmod(), fchmod(), lchmod(), chflags(), lchflags() în Python

Utilizatori și permisiuni (os) Python 3.0+ (chflags/lchflags: BSD și macOS)

Schimbă permisiunile unui fișier și, pe BSD/macOS, flag-urile speciale.

Sintaxă
os.chmod(cale, mod)
os.fchmod(fd, mod)
os.lchmod(cale, mod)
os.chflags(cale, flaguri) / os.lchflags(cale, flaguri)

Ce face os.chmod(), fchmod(), lchmod(), chflags(), lchflags()

chmod(cale, 0o640) setează permisiunile în notație octală: primele cifre sunt pentru proprietar, grup și restul (4 = citire, 2 = scriere, 1 = execuție). Se pot folosi și constantele din stat (stat.S_IRUSR | stat.S_IWUSR). fchmod() lucrează pe un fișier deschis, iar lchmod() pe legătura simbolică însăși (nu există pe Linux).

chflags() și lchflags() (BSD, macOS) setează flag-uri speciale, de exemplu stat.UF_IMMUTABLE (fișierul nu mai poate fi modificat sau șters) sau stat.UF_HIDDEN.

Parametri

Parametru Descriere
cale / fd Fișierul.
mod Permisiunile, de exemplu 0o755.
flaguri Combinație de constante stat.UF_* / stat.SF_*.

Ce returnează

None.

Exemple

Exemplul 1: Permisiuni pentru un script și o cheie

import os, stat
open("script.sh", "w").close()
open("cheie.pem", "w").close()
os.chmod("script.sh", 0o755)
with open("cheie.pem") as f:
    os.fchmod(f.fileno(), stat.S_IRUSR | stat.S_IWUSR)
for nume in ["script.sh", "cheie.pem"]:
    print(nume, stat.filemode(os.stat(nume).st_mode))

Rezultat

script.sh -rwxr-xr-x
cheie.pem -rw-------

Exemplul 2: Flag-uri pe macOS

import os, stat
open("important.txt", "w").close()
os.chflags("important.txt", stat.UF_IMMUTABLE)
try:
    os.remove("important.txt")
except PermissionError as e:
    print("Nu se poate șterge:", e.strerror)
os.chflags("important.txt", 0)
os.symlink("important.txt", "scurt")
os.lchflags("scurt", stat.UF_HIDDEN)
os.lchmod("scurt", 0o600)
print(oct(os.lstat("scurt").st_mode & 0o777))

Rezultat (pe macOS)

Nu se poate șterge: Operation not permitted
0o600

Greșeli frecvente

  • Scrii os.chmod(f, 755) fără prefixul 0o: 755 zecimal înseamnă alte permisiuni.

Comenzi înrudite