GNU/Linux >> Znalost Linux >  >> Linux

Jaký je rozdíl mezi unlink a rm?

Řešení 1:

Oba jsou obalem stejné základní funkce, kterou je unlink() systémové volání.

Abychom zvážili rozdíly mezi utilitami v uživatelské zemi.

rm(1) :

  • Další možnosti.
  • Více zpětné vazby.
  • Kontrola zdravého rozumu.
  • O něco pomalejší pro jednotlivá volání v důsledku výše uvedeného.
  • Lze volat s více argumenty současně.

unlink(1) :

  • Méně kontroly zdravého rozumu.
  • Nelze smazat adresáře.
  • Nelze opakovat.
  • Můžete vzít pouze jeden argument najednou.
  • Okrajově štíhlejší pro jednotlivé hovory díky své jednoduchosti.
  • Pomalejší ve srovnání s uvedením rm(1) více argumentů.

Rozdíl můžete demonstrovat 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

Pokud však mluvíme o nefalšovaném volání systému unlink(2) funkce, o které si nyní uvědomuji, že pravděpodobně není tím, o čem účtujete.

Můžete provést systémový unlink() na adresáře a soubory. Ale pokud je adresář nadřazený jiným adresářům a souborům, pak by odkaz na tohoto rodiče byl odstraněn, ale děti by zůstaly viset. Což je méně než ideální.

Upravit:

Omlouváme se, objasnil jsem rozdíl mezi unlink(1) a unlink(2) . Sémantika se bude mezi platformami stále lišit.

Řešení 2:

Na úrovni specifikací POSIX je to, co dělá rm, specifikováno mnohem přesněji než to, co dělá unlink.

Zdá se, že přenositelnost výsledku bude pravděpodobně lepší pomocí rm, pokud musí váš skript běžet napříč OS.

Řešení 3:

Pomalá část odstraňování je kód souborového systému a věci na disku, nikoli příprava uživatelského prostoru systémového volání unlink().

T.j.:pokud na rozdílu rychlosti záleží, neměli byste data ukládat do systému souborů.

unlink je jen rm "světlo". rm má více funkcí, ale dělají to samé.


Linux
  1. Jaký je rozdíl mezi InnoDB a MyISAM?

  2. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  3. Jaký je rozdíl mezi Redhat a centOS?

  1. Jaký je rozdíl mezi mutexem a kritickou sekcí?

  2. Jaký je rozdíl mezi vlákny NPTL a POSIX?

  3. Jaký je rozdíl mezi strtok_r a strtok_s v C?

  1. Jaký je rozdíl mezi adduser a useradd?

  2. Jaký je rozdíl mezi ls a l?

  3. Jaký je rozdíl mezi `su -` a `su --login`?