Einführung
In diesem Lab lernen Sie, wie Sie in Python prüfen können, ob eine Datei beschreibbar ist. Das Lab konzentriert sich auf das Verständnis von Dateischreibberechtigungen in einer Linux-Umgebung und zeigt zwei Methoden zur Überprüfung des Schreibzugriffs.
Zunächst werden Sie die Linux-Dateiberechtigungen untersuchen, einschließlich der Konzepte von Besitzer, Gruppe und anderen, sowie der Lese-, Schreib- und Ausführungsberechtigungen. Sie erstellen eine Datei, untersuchen ihre Standardberechtigungen mit ls -l und interpretieren die Ausgabe. Dann lernen Sie, wie Sie os.access() mit os.W_OK verwenden und versuchen, die Datei zum Schreiben zu öffnen, um ihre Schreibbarkeit in Python zu bestimmen.
Lernen Sie über Schreibberechtigungen
In diesem Schritt werden wir das Konzept der Schreibberechtigungen in der Linux-Umgebung untersuchen. Das Verständnis von Dateiberechtigungen ist entscheidend für die Kontrolle des Zugriffs auf Ihre Dateien und Verzeichnisse. Insbesondere die Schreibberechtigung bestimmt, ob Sie eine Datei oder ein Verzeichnis ändern können.
In Linux hat jede Datei und jedes Verzeichnis eine Reihe von Berechtigungen für drei Kategorien von Benutzern:
- Besitzer: Der Benutzer, der die Datei oder das Verzeichnis besitzt.
- Gruppe: Die Gruppe, zu der die Datei oder das Verzeichnis gehört.
- Andere: Alle anderen Benutzer auf dem System.
Für jede Kategorie gibt es drei Arten von Berechtigungen:
- Lesezugriff (r): Erlaubt es Ihnen, den Inhalt einer Datei anzuzeigen oder die Inhalte eines Verzeichnisses aufzulisten.
- Schreibzugriff (w): Erlaubt es Ihnen, eine Datei zu ändern oder Dateien innerhalb eines Verzeichnisses zu erstellen, zu löschen oder umzubenennen.
- Ausführungsrecht (x): Erlaubt es Ihnen, eine Datei auszuführen (wenn es sich um ein Programm handelt) oder in ein Verzeichnis zu wechseln.
Beginnen wir damit, eine Datei zu erstellen und ihre Standardberechtigungen zu untersuchen. Öffnen Sie den VS Code-Editor und erstellen Sie eine neue Datei namens my_file.txt im Verzeichnis ~/project. Sie können die Datei vorerst leer lassen.
Als nächstes öffnen Sie das Terminal und navigieren Sie zum Verzeichnis ~/project:
cd ~/project
Nun verwenden wir den Befehl ls -l, um die Berechtigungen der Datei anzuzeigen:
ls -l my_file.txt
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
-rw-rw-r-- 1 labex labex 0 Oct 26 14:35 my_file.txt
Lassen Sie uns diese Ausgabe analysieren:
- Das erste Zeichen (
-) gibt an, dass es sich um eine Datei handelt (im Gegensatz zu einem Verzeichnis, das mitdgekennzeichnet wäre). - Die nächsten neun Zeichen (
rw-rw-r--) repräsentieren die Berechtigungen.- Die ersten drei (
rw-) sind die Berechtigungen des Besitzers (Lese- und Schreibzugriff). - Die nächsten drei (
rw-) sind die Berechtigungen der Gruppe (Lese- und Schreibzugriff). - Die letzten drei (
r--) sind die Berechtigungen für andere (nur Lesezugriff).
- Die ersten drei (
1gibt die Anzahl der Hardlinks zur Datei an.labex labexsind der Name des Besitzers und der Gruppe.0ist die Dateigröße in Bytes.Oct 26 14:35ist der Zeitstempel der letzten Änderung.my_file.txtist der Dateiname.
Derzeit haben der Besitzer (Sie als labex) und die Gruppe Lese- und Schreibberechtigungen, während andere nur Lesezugriff haben. Das bedeutet, dass Sie die Datei ändern können, andere Benutzer auf dem System können sie jedoch nur anzeigen.
Nun versuchen wir, die Schreibberechtigung für den Besitzer mit dem Befehl chmod zu entfernen. chmod wird verwendet, um Dateiberechtigungen zu ändern.
chmod u-w my_file.txt
Hier bedeutet u-w "Entferne die Schreibberechtigung für den Besitzer".
Nun überprüfen wir die Berechtigungen erneut:
ls -l my_file.txt
Die Ausgabe sollte nun wie folgt aussehen:
-r--rw-r-- 1 labex labex 0 Oct 26 14:35 my_file.txt
Beachten Sie, dass die Berechtigungen des Besitzers jetzt r-- sind, was auf einen Nur-Lese-Zugriff hinweist.
In den nächsten Schritten werden wir sehen, wie man mit Python prüft, ob Schreibberechtigungen vorhanden sind und wie man Situationen behandelt, in denen diese nicht verfügbar sind.
Verwenden Sie os.access() mit os.W_OK
Im vorherigen Schritt haben wir uns mit Dateiberechtigungen vertraut gemacht und gelernt, wie man sie mit dem chmod-Befehl ändern kann. Jetzt wollen wir untersuchen, wie man mit Python programmgesteuert prüfen kann, ob eine Datei Schreibberechtigungen hat. Die Funktion os.access() in Kombination mit der Konstante os.W_OK ermöglicht uns genau das.
Die Funktion os.access() nimmt zwei Argumente:
path: Der Pfad zur Datei oder zum Verzeichnis, das Sie überprüfen möchten.mode: Eine Ganzzahl, die die zu überprüfende(n) Berechtigung(en) darstellt.
Die Konstante os.W_OK repräsentiert die Schreibberechtigung. Wenn sie mit os.access() verwendet wird, prüft sie, ob die angegebene Datei oder das Verzeichnis für den aktuellen Benutzer beschreibbar ist.
Lassen Sie uns ein Python-Skript erstellen, um dies zu demonstrieren. Öffnen Sie den VS Code-Editor und erstellen Sie eine neue Datei namens check_write_permission.py im Verzeichnis ~/project.
Fügen Sie der Datei folgenden Code hinzu:
import os
file_path = "my_file.txt"
if os.access(file_path, os.W_OK):
print(f"The file '{file_path}' is writable.")
else:
print(f"The file '{file_path}' is not writable.")
So funktioniert der Code:
- Es importiert das
os-Modul, das Funktionen für die Interaktion mit dem Betriebssystem bereitstellt. - Es definiert eine Variable
file_path, die den Namen der Datei speichert, die wir überprüfen möchten (hiermy_file.txt, die im vorherigen Schritt erstellt wurde). - Es verwendet
os.access(file_path, os.W_OK), um zu prüfen, ob die Datei beschreibbar ist. - Es gibt eine Nachricht aus, die angibt, ob die Datei beschreibbar ist oder nicht.
Jetzt lassen Sie uns das Skript ausführen. Öffnen Sie das Terminal und navigieren Sie zum Verzeichnis ~/project (falls Sie nicht bereits dort sind):
cd ~/project
Führen Sie dann das Python-Skript aus:
python check_write_permission.py
Da wir im vorherigen Schritt die Schreibberechtigungen für den Besitzer entfernt haben, sollte die Ausgabe wie folgt lauten:
The file 'my_file.txt' is not writable.
Jetzt geben wir dem Besitzer die Schreibberechtigungen für die Datei wieder zurück:
chmod u+w my_file.txt
Und führen wir das Python-Skript erneut aus:
python check_write_permission.py
Diesmal sollte die Ausgabe wie folgt lauten:
The file 'my_file.txt' is writable.
Dies zeigt, wie Sie os.access() und os.W_OK verwenden können, um programmgesteuert Schreibberechtigungen in Python zu prüfen. Dies ist nützlich für das Schreiben von Programmen, die Dateien ändern müssen, aber zunächst sicherstellen müssen, dass sie die erforderlichen Berechtigungen haben.
Versuch, die Datei zum Schreiben zu öffnen
In diesem Schritt werden wir sehen, was passiert, wenn wir versuchen, eine Datei zum Schreiben zu öffnen, ohne die erforderlichen Berechtigungen zu haben. Dies wird uns helfen, zu verstehen, wie Python Berechtigungsfehler behandelt.
Zunächst entfernen wir erneut die Schreibberechtigung von my_file.txt:
chmod u-w my_file.txt
Jetzt erstellen wir ein Python-Skript, das versucht, die Datei zum Schreiben zu öffnen. Öffnen Sie den VS Code-Editor und erstellen Sie eine neue Datei namens attempt_write.py im Verzeichnis ~/project.
Fügen Sie der Datei folgenden Code hinzu:
file_path = "my_file.txt"
try:
with open(file_path, "w") as f:
f.write("This is a test.")
print("File written successfully.")
except Exception as e:
print(f"Error writing to file: {e}")
So funktioniert der Code:
- Es definiert eine Variable
file_path, die den Namen der Datei speichert, in die wir schreiben möchten. - Es verwendet einen
try...except-Block, um potenzielle Fehler zu behandeln. - Innerhalb des
try-Blocks versucht es, die Datei im Schreibmodus ("w") zu öffnen. - Wenn die Datei erfolgreich geöffnet wird, schreibt es die Zeichenkette "This is a test." in die Datei.
- Wenn ein Fehler auftritt (z. B. aufgrund fehlender Schreibberechtigungen), fängt der
except-Block die Ausnahme ab und gibt eine Fehlermeldung aus.
Jetzt führen wir das Skript aus:
python attempt_write.py
Da wir die Schreibberechtigungen entfernt haben, sollten Sie eine Ausgabe ähnlich der folgenden sehen:
Error writing to file: [Errno 13] Permission denied: 'my_file.txt'
Dies bestätigt, dass Python einen PermissionError (genauer gesagt Errno 13) auslöst, wenn wir versuchen, eine Datei zum Schreiben zu öffnen, ohne die erforderlichen Berechtigungen.
Jetzt stellen wir die Schreibberechtigungen wieder her:
chmod u+w my_file.txt
Und führen wir das Skript erneut aus:
python attempt_write.py
Diesmal sollte die Ausgabe wie folgt lauten:
File written successfully.
Und wenn Sie den Inhalt von my_file.txt überprüfen, werden Sie sehen, dass es jetzt den Text "This is a test." enthält:
cat my_file.txt
This is a test.
Dies zeigt, wie Python Berechtigungsfehler behandelt, wenn versucht wird, eine Datei zum Schreiben zu öffnen. Es ist wichtig, try...except-Blöcke zu verwenden, um diese Fehler abzufangen und sie in Ihren Programmen gracefully zu behandeln.
Zusammenfassung
In diesem Lab haben wir zunächst das Konzept der Schreibberechtigungen in Linux untersucht und verstanden, dass diese Berechtigungen die Fähigkeit zur Modifikation von Dateien und Verzeichnissen steuern. Wir haben über die drei Benutzerkategorien (Besitzer, Gruppe, andere) und die drei Arten von Berechtigungen (Lesen, Schreiben, Ausführen) gelernt.
Anschließend haben wir eine Datei namens my_file.txt erstellt und den Befehl ls -l verwendet, um ihre Standardberechtigungen zu untersuchen. Wir haben die Ausgabe analysiert, um zu verstehen, wie die Berechtigungen für jede Benutzerkategorie dargestellt werden. Dies hat uns eine Grundlage gegeben, um zu verstehen, wie man programmgesteuert Schreibberechtigungen in Python prüfen kann.



