GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è il motivo per cui rmdir(1) e rm(1) coesistono?

Il motivo principale è probabilmente storico. Ai vecchi, vecchi tempi, non c'erano rmdir(2) e mkdir(2) chiamate di sistema (qui stiamo discutendo di 7th Edition UNIX™) e rmdir(1) era (per necessità) un programma root SUID che utilizzava il unlink(2) chiamata di sistema per rimuovere le directory.

I manuali UNIX della settima edizione sono disponibili online all'indirizzo http://cm.bell-labs.com/7thEdMan (ultima verifica 2017-04-23); Sono disponibili anche su http://plan9.bell-labs.com/7thEdMan (ultima verifica 2017-04-23). Sembra esserci anche almeno una fonte alternativa online — http://wolfram.schneider.org/bsd/7thEdManVol2/ — per gli articoli nel Volume 2, con un collegamento al sito di FreeBSD per i comandi e le chiamate di sistema nel Volume 1 .

Il rm comando (un normale programma non SUID) invocava il rmdir(1) comando per rimuovere le directory vuote. Non poteva farlo da solo; che richiedeva i privilegi di root. Quindi, il rmdir(1) Il comando (vedi qui per il suo codice sorgente in Unix V7) esisteva per rimuovere le directory vuote e il rm il comando stesso non ha rimosso le directory vuote.

Per usare rm per rimuovere le directory, devi dare -r opzione.

C'è anche un argomento di simmetria. Hai bisogno di un comando mkdir(1) creare directory; sembra ragionevole avere un comando rmdir(1) per annullare ciò che mkdir(1) fatto. In più sono (di questi tempi) semplici esercitatori del rmdir(2) e mkdir(2) chiamate di sistema — sì, nella settima edizione di UNIX, mkdir(1) era anche un programma root SUID, usando il mknod(2) chiamata per creare un nodo di directory e il link(2) chiamata per creare il . e .. voci nella directory.


"rm" non funziona sulle directory. Devi usare rmdir o specificare l'opzione -r per una cancellazione ricorsiva. Il motivo è storico:unlink e rmdir sono chiamate di sistema separate e risalgono ai primi giorni di Unix.


Inoltre rmdir rimuove solo vuoto directory. Se vuoi assicurarti di non eliminare altri file in una directory, rmdir è più sicuro di rm -r (tranne se hai aliasato rm in modo tale da dover sempre confermare ciò che elimini, ad esempio alias rm='rm -i' in ~/.bashrc o qualunque cosa tu stia usando).


Linux
  1. Qual è la password di root predefinita per MySQL 5.7

  2. Qual è la differenza tra fsck ed e2fsck?

  3. Qual è la differenza tra ls e l?

  4. Qual è la differenza tra $(CC) e $CC?

  5. Qual è il nome utente e la password predefiniti per un Live CD di Ubuntu?

Qual è la differenza tra Linux e Unix?

Che cos'è un hypervisor? Qual è la differenza tra il tipo 1 e 2?

Qual è la differenza tra curl e Wget?

Qual è l'ID della partizione/tipo di filesystem per UDF?

Qual è la differenza tra `su -` e `su --login`?

Qual è la differenza tra unlink e rm?