GNU/Linux >> Znalost Linux >  >> Linux

Proč je to Rm -rf a ne Rmdir -rf?

Vždy mě zajímalo, proč je příkaz pro smazání všeho v adresáři rm -rf .

Proč nejsou k dispozici příznaky pro totéž s rmdir ?

Nebylo by intuitivnější použít rmdir pro operace s adresáři?

Přijatá odpověď:

V raném systému souborů Unix (alespoň ve dnech V7, kolem roku 1970) byly adresáře implementovány jako speciální soubory a pouze root mohl používat mknod(2) systémové volání, které je vytvořilo a pouze root mohl unlink(2) speciální adresář.

Tyto ochrany byly zavedeny, aby byla struktura souborového systému konzistentní. Například, pokud bylo uživateli povoleno zapisovat do adresáře speciálního souboru, mohl vytvořit jeho nadřazený adresář .. bod na sebe (konkrétně na svůj vlastní i-uzel). To by vytvořilo kruhový odkaz v souborovém systému, což by byla špatná věc. Samozřejmě existují další nesrovnalosti, které by se daly dopustit, toto je jen jasný příklad.

Konzistenci udržovaly programy v uživatelském prostoru jako mkdir(1) a rmdir(1) které byly kořenem Set-UID, aby mohly provádět privilegovaná systémová volání jménem neprivilegovaného uživatele. Když byla do rm(1) přidána rekurze , příkaz remove by se spustil jako aktuální UID a poté by zavolal rmdir(1) pouze pro odstranění prázdných adresářů. Toto je stále docela standardní metoda zvýšení oprávnění:nepoužívejte více oprávnění, než potřebujete.

Někdy později mkdir(2) a rmdir(2) byly přidány jako jejich vlastní systémová volání, ale vztah mezi rm(1) a rmdir(1) zůstává.

Osobně mi přijde o něco uspokojivější rmdir junk a vím, že nejhorší, co jsem udělal, bylo odstranění prázdného adresáře.


Linux
  1. Hašování hesel a proč to potřebujeme

  2. Proč není CD program?

  3. Linux – proč používáme Su – a nejen Su?

  1. Proč „ukončit &“ nefunguje?

  2. Jak spustit příkaz „najít“ pouze v aktuálním adresáři a ne v podadresářích

  3. Najděte a přejmenujte adresář

  1. Proč můj symbolický odkaz vytváří soubor a ne složku?

  2. Proč je příšerné 'rm -rf /' vůbec povoleno?

  3. Použití chown ke změně skupinového vlastníka adresáře není povoleno....Proč?