Hlavní důvod je pravděpodobně historický. Za starých časů žádné rmdir(2)
neexistovaly a mkdir(2)
systémová volání (zde diskutujeme o 7. vydání UNIX™) a rmdir(1)
byl (nezbytně) kořenový program SUID, který používal unlink(2)
systémové volání k odstranění adresářů.
Příručky 7th Edition UNIX jsou dostupné online na http://cm.bell-labs.com/7thEdMan (naposledy zkontrolováno 2017-04-23); Jsou také k dispozici na http://plan9.bell-labs.com/7thEdMan (naposledy zkontrolováno 2017-04-23). Zdá se také, že existuje alespoň jeden alternativní zdroj online — http://wolfram.schneider.org/bsd/7thEdManVol2/ — pro články ve svazku 2, s odkazem na stránku FreeBSD pro příkazy a systémová volání ve svazku 1 .
rm
příkaz (běžný program bez SUID) vyvolal rmdir(1)
příkaz k odstranění prázdných adresářů. Sama to udělat nemohla; které vyžadovaly práva roota. Takže rmdir(1)
příkaz (viz zde pro jeho zdrojový kód v Unixu V7) existoval k odstranění prázdných adresářů a rm
příkaz sám o sobě prázdné adresáře neodstranil.
Chcete-li použít rm
pro odstranění adresářů musíte zadat -r
možnost.
Existuje také argument symetrie. Potřebujete příkaz mkdir(1)
vytvářet adresáře; zdá se rozumné mít příkaz rmdir(1)
vrátit zpět co mkdir(1)
dělal. Navíc jsou (dnes) jednoduchými cvičeními rmdir(2)
a mkdir(2)
systémová volání – ano, v 7. vydání UNIX, mkdir(1)
byl také kořenový program SUID používající mknod(2)
volání k vytvoření adresářového uzlu a link(2)
volání pro vytvoření .
a ..
záznamy v adresáři.
"rm" nefunguje v adresářích. Pro rekurzivní smazání musíte buď použít rmdir, nebo zadat přepínač -r. Důvod je historický:unlink
a rmdir
jsou samostatná systémová volání a jsou od počátků Unixu.
Také rmdir odstraní pouze prázdné adresáře. Pokud se chcete ujistit, že nesmažete žádné další soubory v adresáři, rmdir
je bezpečnější než rm -r
(kromě případů, kdy jste vytvořili alias rm tak, že musíte vždy potvrdit, co smažete, tj. alias rm='rm -i'
v ~/.bashrc nebo v čemkoli, co používáte).