GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der Unterschied zwischen unlink und rm?

Lösung 1:

Beide sind ein Wrapper für dieselbe grundlegende Funktion, die ein unlink() ist Systemaufruf.

Um die Unterschiede zwischen den Userland Utilities abzuwägen.

rm(1) :

  • Weitere Optionen.
  • Mehr Feedback.
  • Sicherheitsprüfung.
  • Ein bisschen langsamer für Einzelrufe als Folge des oben Gesagten.
  • Kann mit mehreren Argumenten gleichzeitig aufgerufen werden.

unlink(1) :

  • Weniger Plausibilitätsprüfung.
  • Verzeichnisse konnten nicht gelöscht werden.
  • Rekursion nicht möglich.
  • Kann nur jeweils ein Argument annehmen.
  • Etwas schlanker für Einzelgespräche aufgrund seiner Einfachheit.
  • Langsamer im Vergleich zur Eingabe von rm(1) mehrere Argumente.

Sie könnten den Unterschied demonstrieren mit:

$ 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 des Systems handelt unlink(2) Funktion, von der ich jetzt weiß, dass sie wahrscheinlich nicht das ist, was Sie berücksichtigen.

Sie können ein System unlink() ausführen auf Verzeichnisse und Dateien gleichermaßen. Wenn das Verzeichnis jedoch ein übergeordnetes Verzeichnis anderer Verzeichnisse und Dateien ist, wird der Link zu diesem übergeordneten Verzeichnis entfernt, aber die untergeordneten Verzeichnisse bleiben unbearbeitet. Was alles andere als ideal ist.

Bearbeiten:

Entschuldigung, der Unterschied zwischen unlink(1) wurde verdeutlicht und unlink(2) . Die Semantik wird sich immer noch zwischen den Plattformen unterscheiden.

Lösung 2:

Auf POSIX-Spezifikationsebene ist das, was rm tut, viel strenger spezifiziert als das, was unlink tut.

Die Übertragbarkeit des Ergebnisses scheint mit rm besser zu sein, wenn Ihr Skript auf verschiedenen Betriebssystemen ausgeführt werden muss.

Lösung 3:

Der langsame Teil des Entfernens ist der Dateisystemcode und der Festplattenkram, nicht die Userspace-Vorbereitung des unlink()-Systemaufrufs.

Das heißt:Wenn der Geschwindigkeitsunterschied wichtig ist, sollten Sie die Daten nicht im Dateisystem speichern.

unlink ist nur ein rm "light". rm hat mehr Funktionen, aber sie tun dasselbe.


Linux
  1. Was ist der Unterschied zwischen Redhat und CentOS?

  2. Was ist der Unterschied zwischen Mutex und kritischem Abschnitt?

  3. Was ist der Unterschied zwischen NPTL- und POSIX-Threads?

  4. Was ist der Unterschied zwischen strtok_r und strtok_s in C?

  5. Was ist der Unterschied zwischen adduser und useradd?

Was ist der Unterschied zwischen Linux und Unix?

Was ist der Unterschied zwischen Login- und Non-Login-Shell

Was ist der Unterschied zwischen apt und dem Befehl apt-get?

Was ist der Unterschied zwischen Git Switch und Checkout?

Was ist ein Hypervisor? Was ist der Unterschied zwischen Typ 1 und 2?

Was ist der Unterschied zwischen Curl und Wget?