Odpowiedzi:
Oba są opakowaniem dla tej samej podstawowej funkcji, jaką jest unlink()
wywołanie systemowe.
Aby zrównoważyć różnice między użytkami przestrzeni użytkownika.
rm(1)
:
unlink(1)
:
rm(1)
wielu argumentów.Możesz wykazać różnicę za pomocą:
$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand `2'
$ touch $(seq 1 100)
$ time rm $(seq 1 100)
real 0m0.048s
user 0m0.004s
sys 0m0.008s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done
real 0m0.207s
user 0m0.044s
sys 0m0.112s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done
real 0m0.167s
user 0m0.048s
sys 0m0.120s
Jeśli jednak mówimy o nieskażonym wywołaniu unlink(2)
funkcji systemowej , co teraz zdaję sobie sprawę, prawdopodobnie nie jest to, co rozliczasz.
Możesz wykonać system zarówno unlink()
dla katalogów, jak i plików. Ale jeśli katalog jest rodzicem dla innych katalogów i plików, wówczas link do tego rodzica zostałby usunięty, ale dzieci pozostałyby wiszące. Co jest mniej niż idealne.
Edytować:
Przepraszamy, wyjaśniłem różnicę między unlink(1)
i unlink(2)
. Semantyka nadal będzie się różnić między platformami.
mkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1
. Jeśli odłączyłeś katalog nadrzędny, przestrzeń zajętą przez dzieci powinna zostać utracona do czasu, aż fsck znajdzie rozbieżność.
Powolną częścią usuwania jest kod systemu plików i zawartość dysku, a nie przygotowanie przestrzeni użytkownika w wywołaniu systemowym unlink ().
Tzn .: jeśli różnica prędkości ma znaczenie, nie powinieneś przechowywać danych w systemie plików.
unlink to tylko „światło” rm. rm ma więcej funkcji, ale robią to samo.