Ist unlink schneller als rm?
Antwort1
Beide sind Wrapper für dieselbe grundlegende Funktion, nämlich einen unlink()
Systemaufruf.
Um die Unterschiede zwischen den Userland-Dienstprogrammen abzuwägen.
rm(1)
:
- Mehr Optionen.
- Weiteres Feedback.
- Plausibilitätsprüfung.
- Aufgrund des oben genannten bei Einzelanrufen etwas langsamer.
- Kann mit mehreren Argumenten gleichzeitig aufgerufen werden.
unlink(1)
:
- Weniger Plausibilitätsprüfungen.
- Verzeichnisse können nicht gelöscht werden.
- Rekursion nicht möglich.
- Es kann immer nur ein Argument gleichzeitig angenommen werden.
- Aufgrund seiner Einfachheit für einzelne Anrufe geringfügig schlanker.
- Langsamer im Vergleich zur Angabe
rm(1)
mehrerer Argumente.
Sie können den Unterschied folgendermaßen demonstrieren:
$ 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
Wenn es sich jedoch um einen unverfälschten Aufruf der Systemfunktion handelt unlink(2)
, ist dies, wie mir jetzt klar wird, wahrscheinlich nicht das, was Sie meinen.
Sie können ein System sowohl für Verzeichnisse als auch für Dateien ausführen unlink()
. Wenn das Verzeichnis jedoch ein übergeordnetes Verzeichnis für andere Verzeichnisse und Dateien ist, wird die Verknüpfung zu diesem übergeordneten Verzeichnis entfernt, die untergeordneten Verzeichnisse bleiben jedoch bestehen. Das ist alles andere als ideal.
Bearbeiten:
Entschuldigung, ich habe den Unterschied zwischen unlink(1)
und klargestellt unlink(2)
. Die Semantik wird sich weiterhin zwischen den Plattformen unterscheiden.
Antwort2
Auf der POSIX-Spezifikationsebene, wasrmtut, ist viel enger spezifiziert als das, wasVerknüpfung aufhebentut.
Die Portabilität des Ergebnisses ist wahrscheinlich besser, wenn Sie rm verwenden, wenn Ihr Skript auf mehreren Betriebssystemen ausgeführt werden muss.
Antwort3
Der langsame Teil des Entfernens betrifft den Dateisystemcode und die Festplattendaten, nicht die Benutzerbereichsvorbereitung des Systemaufrufs unlink().
D. h.: Wenn der Geschwindigkeitsunterschied eine Rolle spielt, sollten Sie die Daten nicht im Dateisystem speichern.
unlink ist nur ein rm „light“. rm hat mehr Funktionen, aber sie machen dasselbe.