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

Was ist der Grund für die Koexistenz von rmdir(1) und rm(1)?

Der Hauptgrund ist wahrscheinlich historischer Natur. Früher gab es rmdir(2) nicht und mkdir(2) Systemaufrufe (wir besprechen hier die 7. Ausgabe von UNIX™) und rmdir(1) war (notwendigerweise) ein SUID-Root-Programm, das den unlink(2) verwendete Systemaufruf zum Entfernen von Verzeichnissen.

Die 7. Ausgabe der UNIX-Handbücher sind online verfügbar unter http://cm.bell-labs.com/7thEdMan (zuletzt geprüft am 23.04.2017); Sie sind auch verfügbar unter http://plan9.bell-labs.com/7thEdMan (zuletzt geprüft am 23.04.2017). Es scheint auch mindestens eine alternative Quelle online zu geben – http://wolfram.schneider.org/bsd/7thEdManVol2/ – für die Artikel in Band 2, mit einem Link zur FreeBSD-Site für die Befehle und Systemaufrufe in Band 1 .

Die rm Befehl (ein normales Nicht-SUID-Programm) hat den rmdir(1) aufgerufen Befehl zum Entfernen leerer Verzeichnisse. Es könnte es selbst nicht tun; das erforderte Root-Rechte. Also die rmdir(1) Befehl (siehe hier für seinen Quellcode in Unix V7) existierte, um leere Verzeichnisse zu entfernen, und der rm Befehl hat leere Verzeichnisse nicht selbst entfernt.

Um rm zu verwenden Um Verzeichnisse zu entfernen, müssen Sie den -r eingeben Option.

Es gibt auch ein Symmetrie-Argument. Sie benötigen einen Befehl mkdir(1) Verzeichnisse erstellen; es erscheint vernünftig, einen Befehl rmdir(1) zu haben um was rückgängig zu machen mkdir(1) tat. Außerdem sind sie (heute) einfache Ausübende des rmdir(2) und mkdir(2) Systemaufrufe – ja, damals in der 7. Ausgabe von UNIX, mkdir(1) war auch ein SUID-Root-Programm, das den mknod(2) verwendete -Aufruf zum Erstellen eines Verzeichnisknotens und link(2) Aufruf zum Erstellen von . und .. Einträge im Verzeichnis.


"rm" funktioniert nicht bei Verzeichnissen. Sie müssen entweder rmdir verwenden oder den Schalter -r für ein rekursives Löschen angeben. Der Grund ist historisch:unlink und rmdir sind separate Systemaufrufe und stammen aus den Anfängen von Unix.


Auch rmdir entfernt nur leer Verzeichnisse. Wenn Sie sicherstellen möchten, dass Sie keine weiteren Dateien in einem Verzeichnis löschen, rmdir ist sicherer als rm -r (außer wenn Sie rm so aliasiert haben, dass Sie immer bestätigen müssen, was Sie löschen, z. B. alias rm='rm -i' in ~/.bashrc oder was auch immer Sie verwenden).


Linux
  1. Was ist der Unterschied zwischen strtok_r und strtok_s in C?

  2. Was ist der Unterschied zwischen fsck und e2fsck?

  3. Was ist der Unterschied zwischen adduser und useradd?

  4. Was ist der Unterschied zwischen ls und l?

  5. Was ist der Unterschied zwischen $(CC) und $CC?

Was ist der Unterschied zwischen Linux und Unix?

Der Sinn von Uniq -u und was macht es?

Was ist ein Hypervisor? Was ist der Unterschied zwischen Typ 1 und 2?

Was ist der Unterschied zwischen Curl und Wget?

Was ist der Unterschied zwischen unlink und rm?

Was ist der Unterschied zwischen der Verwendung von Upstream und Location für php-fpm?