Ponieważ tak nie jest. Spóźniasz się 40 lat na zadawanie tego pytania i zadajesz niewłaściwym ludziom.
user207421,
Odpowiedzi:
25
We wczesnym Unixowym systemie plików (przynajmniej w czasach V7 około 1970 roku) katalogi były implementowane jako pliki specjalne i tylko root mógł korzystać z mknod(2)wywołania systemowego, które je utworzyło, a tylko root mógł unlink(2)mieć specjalny plik katalogu.
Te zabezpieczenia zostały wprowadzone, aby zachować spójność struktury systemu plików. Na przykład, jeśli użytkownik mógł zapisać w specjalnym pliku katalogu, mógłby sprawić, aby jego katalog nadrzędny ..wskazywał na siebie (w szczególności na własny i-węzeł). Spowodowałoby to utworzenie cyklicznego odwołania w systemie plików, co byłoby błędem. Oczywiście mogą istnieć inne niespójności, to tylko jasny przykład.
Konsystencja była utrzymywana przez programy przestrzeni użytkownika, jak mkdir(1)i rmdir(1)które były Set-UID korzeń, tak aby mogły one uprzywilejowanych wywołań systemowych w imieniu nieuprzywilejowany użytkownika. Po dodaniu rekurencji rm(1)polecenie remove działałoby jako bieżący identyfikator UID, a następnie wywoływało rmdir(1)wyłącznie w celu usunięcia pustych katalogów. Jest to nadal dość standardowa metoda podnoszenia uprawnień: nie używaj więcej uprawnień niż potrzebujesz.
Jakiś czas później mkdir(2)i rmdir(2)dodano jako własnych wywołań systemowych, ale z relacji rm(1)i rmdir(1)pozostaje.
Osobiście uważam to za odrobinę bardziej satysfakcjonujące rmdir junki wiem, że najgorsze, co zrobiłem, to usunięcie pustego katalogu.
Re ostatnie zdanie: Przypuszczalnie, gdyby operacja usuwania rekurencyjnego była włączona rmdir, nadal potrzebowałaby -rflagi. ( rmdir -r junkzamiast rm -r junki rmdir junknadal działa tylko wtedy, gdy katalog jest pusty)
user253751
7
To jest historyczne. rmzostał stworzony, aby usunąć odniesienia do plików, rmdirzostał stworzony, aby usunąć katalogi równolegle do mkdir. Wiele lat temu Unix rmmógł usuwać katalogi tylko poprzez inwokację rmdir. Nie było też rmdir(2)wywołania systemowego, rmdirbył to program, który wywołał unlink(2).
Jest to wyłącznie kwestia opinii, ale rmusuwa pliki, a rmdirkatalogi. Katalog jest plikiem, ale specjalnym typem pliku, dlatego warto rmje usuwać, ale traktować je specjalnie (tj. Wymagać dodatkowej opcji, aby włączyć tę funkcję). Z drugiej strony nie wszystkie pliki są katalogami, i IMHO nie ma sensu, rmdiraby usuwać coś, co nie jest katalogiem.
rmdir
usuwa katalogi,rm
usuwa. Dlaczegormdir
usuwanie intuicyjnych katalogów byłoby intuicyjne ?Odpowiedzi:
We wczesnym Unixowym systemie plików (przynajmniej w czasach V7 około 1970 roku) katalogi były implementowane jako pliki specjalne i tylko root mógł korzystać z
mknod(2)
wywołania systemowego, które je utworzyło, a tylko root mógłunlink(2)
mieć specjalny plik katalogu.Te zabezpieczenia zostały wprowadzone, aby zachować spójność struktury systemu plików. Na przykład, jeśli użytkownik mógł zapisać w specjalnym pliku katalogu, mógłby sprawić, aby jego katalog nadrzędny
..
wskazywał na siebie (w szczególności na własny i-węzeł). Spowodowałoby to utworzenie cyklicznego odwołania w systemie plików, co byłoby błędem. Oczywiście mogą istnieć inne niespójności, to tylko jasny przykład.Konsystencja była utrzymywana przez programy przestrzeni użytkownika, jak
mkdir(1)
irmdir(1)
które były Set-UID korzeń, tak aby mogły one uprzywilejowanych wywołań systemowych w imieniu nieuprzywilejowany użytkownika. Po dodaniu rekurencjirm(1)
polecenie remove działałoby jako bieżący identyfikator UID, a następnie wywoływałormdir(1)
wyłącznie w celu usunięcia pustych katalogów. Jest to nadal dość standardowa metoda podnoszenia uprawnień: nie używaj więcej uprawnień niż potrzebujesz.Jakiś czas później
mkdir(2)
irmdir(2)
dodano jako własnych wywołań systemowych, ale z relacjirm(1)
irmdir(1)
pozostaje.Osobiście uważam to za odrobinę bardziej satysfakcjonujące
rmdir junk
i wiem, że najgorsze, co zrobiłem, to usunięcie pustego katalogu.źródło
rmdir
, nadal potrzebowałaby-r
flagi. (rmdir -r junk
zamiastrm -r junk
irmdir junk
nadal działa tylko wtedy, gdy katalog jest pusty)To jest historyczne.
rm
został stworzony, aby usunąć odniesienia do plików,rmdir
został stworzony, aby usunąć katalogi równolegle domkdir
. Wiele lat temu Unixrm
mógł usuwać katalogi tylko poprzez inwokacjęrmdir
. Nie było teżrmdir(2)
wywołania systemowego,rmdir
był to program, który wywołałunlink(2)
.Bibliografia:
źródło
Jest to wyłącznie kwestia opinii, ale
rm
usuwa pliki, armdir
katalogi. Katalog jest plikiem, ale specjalnym typem pliku, dlatego wartorm
je usuwać, ale traktować je specjalnie (tj. Wymagać dodatkowej opcji, aby włączyć tę funkcję). Z drugiej strony nie wszystkie pliki są katalogami, i IMHO nie ma sensu,rmdir
aby usuwać coś, co nie jest katalogiem.źródło
rm
usunąć pustego katalogu (z wyjątkiem trybu rekurencyjnego)?-r
flagi, aby włączyć funkcję specjalnego pliku katalogu.