def chmod(path: str | bytes | os.PathLike, mode: int, *, dir_fd=None, follow_symlinks=True) -> None
0o
.
La gestion des droits Unix/Linux étant basée sur une représentation en base octale, je vous recommande conserver cette façon de faire pour spécifier les nouveaux droits d'accès de votre fichier (ou de votre dossier).
1 |
os.chmod("filename", 0o755) # -rwxr-xr-x |
Pour autant, il est aussi possible de spécifier les droits d'accès via un masque binaire et un jeu de constantes proposé par le module « stat ». Voici un exemple d'utilisation de cette possibilité.
1 2 |
rights = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | IROTH | IXOTH os.chmod("filename", rights) # -rwxr-xr-x |
Le tableau suivant présente les constantes relatives aux droits d'accès sur un fichier (ou un dossier) disponibles sur un système d'exploitation compatible Unix/Linux.
Nom de la constante | Valeur numérique | Description |
---|---|---|
Constantes applicables au propriétaire du fichier | ||
stat.S_IRUSR | 0o0400 | Accès en lecture pour le propriétaire du fichier. |
stat.S_IWUSR | 0o0200 | Accès en écriture pour le propriétaire du fichier. |
stat.S_IXUSR | 0o0100 | Accès en exécution pour le propriétaire du fichier (ou droit de traverser pour un dossier). |
stat.S_IRWXU | 0o0700 |
Accès en lecture, écriture et exécution pour le propriétaire du fichier. Equivaut à stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR .
|
Constantes applicables au groupe primaire du fichier | ||
stat.S_IRGRP | 0o0040 | Accès en lecture pour le groupe primaire du fichier. |
stat.S_IWGRP | 0o0020 | Accès en écriture pour le groupe primaire du fichier. |
stat.S_IXGRP | 0o0010 | Accès en exécution pour le groupe primaire du fichier (ou droit de traverser pour un dossier). |
stat.S_IRWXG | 0o0070 |
Accès en lecture, écriture et exécution pour le groupe primaire du fichier. Equivaut à stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP .
|
Constantes applicables aux autres utilisateurs du fichier | ||
stat.S_IROTH | 0o0004 | Accès en lecture pour les autres utilisateurs du fichier. |
stat.S_IWOTH | 0o0002 | Accès en écriture pour les autres utilisateurs du fichier. |
stat.S_IXOTH | 0o0001 | Accès en exécution pour les autres utilisateurs du fichier (ou droit de traverser pour un dossier). |
stat.S_IRWXO | 0o0007 |
Accès en lecture, écriture et exécution pour les autres utilisateurs du fichier. Equivaut à stat.S_IROTH | stat.S_IWOTH | stat.S_IXOTH .
|
Autres constantes | ||
stat.S_ISUID | 0o4000 | Défini l'identifiant utilisateur (UID) effectif d'un processus lors de son exécution. |
stat.S_ISGID | 0o2000 | Défini l'identifiant de groupe (GID) effectif d'un processus lors de son exécution. |
stat.S_ENFMT | 0o2000 | Verrouillage strict (partagé avec S_ISGID) - System V uniquement. |
stat.S_ISVTX | 0o1000 | Défini le « Sticky Bit » (attribut de suppression restreinte). S'il est apposé sur un répertoire et si la modification est permise (w), alors seul le propriétaire du dossier peut y supprimer des fichiers. Les autres utilisateurs autorisés ne peuvent que modifier le contenu du répertoire (mais sans possibilité de suppression de fichiers). |
Sur Windows, voici les constantes autorisées : toutes les autres constantes, vues ci-dessus, seront sans effet.
Nom de la constante | Valeur numérique | Description |
---|---|---|
stat.S_IREAD | 0o0400 | Accès en lecture pour le propriétaire du fichier (synonyme de stat.S_IRUSR). |
stat.S_IWRITE | 0o0200 | Accès en écriture pour le propriétaire du fichier (synonyme de stat.S_IWUSR). |
stat.S_IEXEC | 0o0100 |
Accès en exécution pour le propriétaire du fichier, ou droit de traverser pour un dossier (synonyme de stat.S_IXUSR).
Attention : ce droit ne peut être que consulté (en fait il est déduit du type de fichier, selon son extension et sa nature).
Mais la fonction chmod ne permettra pas, sous Windows, de changer cette autorisation.
|
Deux possibilités vous sont proposées pour indiquer le fichier pour lequel changer les droits d'accès :
chmod("./file", 0o755)
dir_fd
(depuis la version 3.3 de Python).
fd = os.open("./parentFolder", os.O_RDONLY) chmod("file", 0x755, dir_fd=fd)
*
situé dans la déclaration des paramètres de la fonction chmod
permet d'indiquer la fin des paramètres positionnels
et le début des paramètres nommés.
dir_fd
, est pleinement pris en charge depuis la version 3.3 de Python.
De plus, la notion de descripteur, emblème d'un système d'exploitation Unix/Linux, n'est pas forcément supportée sur tous les autres systèmes.
Le set
os.supports_dir_fd
permet donc de savoir, en fonction du système d'exploitation considéré,
quelles sont les fonctions du module os
supportant la gestion des descripteurs de dossiers. Il est donc possible de conditionner
leurs utilisations.
if os.chmod in os.supports_dir_fd: fd = os.open("./parentFolder", os.O_RDONLY) chmod("file", 0x755, dir_fd=fd)
Change the access permissions of a file. path Path to be modified. May always be specified as a str, bytes, or a path-like object. On some platforms, path may also be specified as an open file descriptor. If this functionality is unavailable, using it raises an exception. mode Operating-system mode bitfield. dir_fd If not None, it should be a file descriptor open to a directory, and path should be relative; path will then be relative to that directory. follow_symlinks If False, and the last element of the path is a symbolic link, chmod will modify the symbolic link itself instead of the file the link points to. It is an error to use dir_fd or follow_symlinks when specifying path as an open file descriptor. dir_fd and follow_symlinks may not be implemented on your platform. If they are unavailable, using them will raise a NotImplementedError.
Paramètre | Description |
---|---|
path : str | bytes | os.PathLike |
Le nouveau répertoire de travail. |
mode : int |
Les nouveaux droits d'accès du fichier. |
dir_df : int = None |
Le descripteur du dossier parent contenant le fichier pour lequel changer les droits d'accès. |
follow_symlinks : bool = True |
Permet de suivre les liens symboliques contenus dans le chemin. |
Cette méthode ne renvoie aucune valeur.
FileNotFoundError :Une exception de ce type sera déclenchée si le chemin spécifié n'existe pas.
NotADirectoryError :Une exception de ce type sera déclenchée si un des éléments parents du chemin n'est pas un un dossier (ou un lien symbolique, si
follow_symlinks
est fixé à True
).
NotImplementedError :Une exception de ce type sera déclenchée si vous utiliser une variante non implémentée de la fonction
chmod
sur votre système d'exploitation
(par exemple, si vous utiliser le paramètre dir_df
sur un système Windows).
PermissionError :Une exception de ce type sera déclenchée si vous n'avez pas les droits d'accès au fichier.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import os import sys path = "demo.txt" # On créer un fichier de démonstration. try: with open(path, "w") as the_file: print("Ok", file=the_file) except IOError: print("Impossible de créer le fichier de démonstration", file=sys.stderr) exit(-1) # On change à plusieurs reprises les droits d'accès et on les affiche. try: os.chmod(path, 0o600) os.system(f"ls -l {path}") os.chmod(path, 0o640) os.system(f"ls -l {path}") os.chmod(path, 0o644) os.system(f"ls -l {path}") os.chmod(path, 0o755) os.system(f"ls -l {path}") except PermissionError: print("Tu n'as pas les autorisations nécessaires", file=sys.stderr) except OSError: print("Ca ne marche pas et je ne t'en dirais pas plus ;-)", file=sys.stderr) |
Et voici les résultats produits par cet exemple.
$> python sample.py -rw-------. 1 dominique dominique 3 5 janv. 10:13 demo.txt -rw-r-----. 1 dominique dominique 3 5 janv. 10:13 demo.txt -rw-r--r--. 1 dominique dominique 3 5 janv. 10:13 demo.txt -rwxr-xr-x. 1 dominique dominique 3 5 janv. 10:13 demo.txt $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :