GNU/Linux >> Linux Esercitazione >  >> Linux

Perché è Rm -rf e non Rmdir -rf?

Sono sempre stato curioso di sapere perché il comando per eliminare tutto in una directory è rm -rf .

Perché non ci sono flag per fare la stessa cosa con rmdir ?

Non sarebbe più intuitivo usare rmdir per le operazioni di directory?

Risposta accettata:

Nei primi file system Unix (almeno ai tempi della V7 intorno al 1970) le directory erano implementate come file speciali e solo root poteva usare mknod(2) la chiamata di sistema che li ha creati e solo root potrebbe unlink(2) un file speciale di directory.

Queste protezioni erano in atto per mantenere coerente la struttura del filesystem. Ad esempio, se a un utente è stato consentito di scrivere in un file speciale di directory, potrebbe rendere la directory padre .. punta a se stesso (in particolare al proprio i-node). Ciò creerebbe un riferimento circolare nel filesystem che sarebbe una brutta cosa. Naturalmente ci sono altre incongruenze che si potrebbero fare, questo è solo un chiaro esempio.

La coerenza è stata mantenuta da programmi in spazio utente come mkdir(1) e rmdir(1) che erano Set-UID root in modo che potessero effettuare le chiamate di sistema privilegiate per conto di un utente senza privilegi. Quando la ricorsione è stata aggiunta a rm(1) , il comando di rimozione verrebbe eseguito come UID corrente e quindi richiamerebbe rmdir(1) esclusivamente per rimuovere le directory vuote. Questo è ancora un metodo piuttosto standard per elevare i permessi:non usare più permessi del necessario.

Qualche tempo dopo mkdir(2) e rmdir(2) sono state aggiunte come proprie chiamate di sistema ma la relazione tra rm(1) e rmdir(1) rimane.

Personalmente, trovo un po' più soddisfacente rmdir junk e sappi che il peggio che ho fatto è stato rimuovere una directory vuota.


Linux
  1. Hashing delle password e perché ne abbiamo bisogno

  2. Perché `esce &` non funziona?

  3. Trova e rinomina una directory

  4. Perché il mio collegamento simbolico crea un file e non una cartella?

  5. L'utilizzo di chown per modificare il proprietario del gruppo di una directory non è consentito... Perché?

Perché Deis e che cos'è?

Come eseguire il comando "trova" solo sulla directory corrente e non sulle sottodirectory

Perché una cartella deve essere eseguibile?

Perché il terribile 'rm -rf /' è persino permesso?

perché sftp rmdir non funziona?

Perché il mio crontab non funziona e come posso risolverlo?