GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum kann Rm schreibgeschützte Dateien entfernen?

Wenn ich eine Datei erstelle und dann ihre Berechtigungen auf 444 ändere (schreibgeschützt), wie kommt es zu rm kann es entfernen?

Wenn ich das mache:

echo test > test.txt
chmod 444 test.txt
rm test.txt

rm fragt, ob ich die schreibgeschützte Datei test.txt entfernen möchte . Ich hätte erwartet, dass rm kann eine solche Datei nicht entfernen und ich müsste eine chmod +w test.txt machen Erste. Wenn ich rm -f test.txt mache dann rm wird die Datei ohne Nachfrage entfernen, obwohl sie schreibgeschützt ist.

Kann jemand klären? Ich verwende Ubuntu 12.04/bash.

Akzeptierte Antwort:

Alle rm benötigt eine Schreib- und Ausführungsberechtigung für das übergeordnete Verzeichnis. Die Berechtigungen der Datei selbst sind irrelevant.

Hier ist eine Referenz, die das Berechtigungsmodell klarer erklärt, als ich es je könnte:

Jeder Versuch, auf die Daten einer Datei zuzugreifen, erfordert eine Leseberechtigung. Jeder
Versuch, die Daten einer Datei zu ändern, erfordert eine Schreibberechtigung. Jeder
Versuch, eine Datei (ein Programm oder ein Skript) auszuführen, erfordert die Ausführungsberechtigung

Da Verzeichnisse nicht wie normale Dateien verwendet werden, funktionieren die
Berechtigungen etwas (aber nur geringfügig) anders. Ein Versuch,
die Dateien in einem Verzeichnis aufzulisten, erfordert eine Leseberechtigung für das
Verzeichnis, aber nicht für die darin enthaltenen Dateien. Der Versuch, eine Datei zu einem
Verzeichnis hinzuzufügen, eine Datei aus einem Verzeichnis zu löschen oder eine Datei umzubenennen, alle
erfordern eine Schreibberechtigung für das Verzeichnis, aber (vielleicht überraschenderweise)
nicht dafür die Dateien darin. Die Ausführungsberechtigung gilt nicht für
Verzeichnisse (ein Verzeichnis kann nicht gleichzeitig ein Programm sein). Aber dieses
Berechtigungsbit wird für Verzeichnisse zu anderen Zwecken wiederverwendet.

Die Ausführungserlaubnis ist für ein Verzeichnis erforderlich, um in dieses Verzeichnis cd zu können
(das heißt, um ein Verzeichnis zu Ihrem aktuellen Arbeitsverzeichnis zu machen).

Execute wird in einem Verzeichnis benötigt, um auf die „Inode“-Informationen
der darin enthaltenen Dateien zuzugreifen. Sie benötigen dies, um ein Verzeichnis zu durchsuchen, um die
Inodes der darin enthaltenen Dateien zu lesen. Aus diesem Grund wird die Ausführungsberechtigung für
ein Verzeichnis oft stattdessen als Suchberechtigung bezeichnet.


Linux
  1. Wie kann ich Dateien rekursiv nach Dateierweiterung kopieren und dabei die Verzeichnisstruktur beibehalten?

  2. Wie kann ich eine Datei oder ein Verzeichnis namens \ entfernen?

  3. Kann ich Dateien in einem Verzeichnis mit Vim umbenennen?

  4. Warum ist mein Dateisystem schreibgeschützt gemountet?

  5. Warum wird das Root-Verzeichnis durch ein /-Zeichen gekennzeichnet?

So entfernen (löschen) Sie eine Datei oder ein Verzeichnis in Linux

Warum können Dateien nicht von Inode manipuliert werden?

Linux-Befehl zum Leeren aller Dateien eines Verzeichnisses

Ein Verzeichnis kann in Unix nicht entfernt werden

Wie kann ich doppelte Dateien in separaten Verzeichnisbäumen entfernen?

Warum kann ich unter Linux keine Dateien erstellen, die größer als 2 GB sind?