Odpowiedzi:
Głównym powodem jest prawdopodobnie historyczny. Powrót do dawnych, dawnych czasach, tam nie byli rmdir(2)i mkdir(2)wywołania systemowe (mówimy o 7th Edition UNIX ™ tutaj), i rmdir(1)był (z konieczności) program korzeń SUID że użył unlink(2)wywołania systemowego usunięcia katalogów.
Instrukcje UNIX 7. edycji są dostępne online pod adresem http://cm.bell-labs.com/7thEdMan (ostatnio sprawdzone 23.04.2017); Są one również dostępne na stronie http://plan9.bell-labs.com/7thEdMan (ostatnio sprawdzono 23.04.2017). Wydaje się również, że istnieje co najmniej jedno alternatywne źródło online - http://wolfram.schneider.org/bsd/7thEdManVol2/ - dla artykułów w Tomie 2, z linkiem do strony FreeBSD dla poleceń i wywołań systemowych w Tomie 1 .
rmPoleceń (regularnym programem non-SUID) powołuje się na rmdir(1)komendę w celu usunięcia pustych katalogów. Nie mógł tego zrobić sam; wymagało to uprawnień roota. Tak więc rmdir(1)polecenie (patrz tutaj jego kod źródłowy w Uniksie V7) istniało w celu usunięcia pustych katalogów, a samo rmpolecenie nie usunęło pustych katalogów.
Aby użyć rmdo usunięcia katalogów, musisz podać -ropcję.
Istnieje również argument symetrii. Potrzebujesz polecenia, mkdir(1)aby utworzyć katalogi; wydaje się rozsądne mieć polecenie rmdir(1)cofnięcia tego, co mkdir(1)zrobiono. Dodatkowo są one (obecnie) prostymi ćwiczeniami wywołań systemowych rmdir(2)i mkdir(2)- tak, w 7. edycji UNIX, mkdir(1)był także programem głównym SUID, wykorzystującym mknod(2)wywołanie do utworzenia węzła katalogu i link(2)wywołanie do utworzenia pozycji .i ..wpisów w katalogu .
fsck(1)to ten, który przeżył.
„rm” nie działa na katalogach. Musisz użyć rmdir lub określić przełącznik -r w celu usunięcia rekurencyjnego. Powodem jest historyczny: unlinka rmdirto oddzielne wywołania systemowe i zostały od pierwszych dni Unix.
rmdir(2)nie mkdir(2)istniało jako wywołanie systemowe; użytkownik rootmoże użyć mknod(2)wywołania, aby utworzyć węzeł katalogu i link(2)wywołania, aby utworzyć wpisy .i ..w katalogu; i rootmoże użyć unlink(2)połączenia, aby usunąć wpisy z książki telefonicznej.
Również rmdir usuwa tylko puste katalogi. Jeśli chcesz mieć pewność, że nie usuniesz żadnych dodatkowych plików w katalogu, rmdirjest to bezpieczniejsze niż rm -r(z wyjątkiem przypadku aliasu rm tak, że zawsze musisz potwierdzić to, co usuwasz, np. alias rm='rm -i'W ~ / .bashrc lub cokolwiek, którego używasz ).
Również rmdirułatwia usuwanie pustych katalogów z globbing (wieloznacznych) wyrażenia. Na przykład, aby usunąć wszystkie puste katalogi /tmpbez dotykania plików lub katalogów z zawartością:
cd /tmp ; rmdir *
rmdir /tmp/*. Jeśli /tmpkatalog jest naprawdę duży, może zabraknąć miejsca na argumenty nieco ze względu na dodatkowe pięć znaków na nazwę, ale nie wymaga cdprzenoszenia się w hierarchii katalogów. Warto również rozważyć rmdir /tmp/* 2>/dev/nullunikanie komunikatów o błędach (zwykle będzie ich dużo i prawie wszystkie z nich nie będą miały znaczenia dla tego zadania).