sviluppo-web-qa.it

Qual'è la differenza tra unlink e rm?

Unlink è più veloce di rm?

64
Marcin

Entrambi sono un wrapper per la stessa funzione fondamentale che è una chiamata di sistema unlink().

Per soppesare le differenze tra le utenze utente.

rm(1):

  • Più opzioni.
  • Più feedback.
  • Controllo della sanità mentale.
  • Un po 'più lento per le chiamate singole a causa di quanto sopra.
  • Può essere chiamato con più argomenti contemporaneamente.

unlink(1):

  • Meno controllo della sanità mentale.
  • Impossibile eliminare le directory.
  • Impossibile ricorrere.
  • Può accettare solo un argomento alla volta.
  • Marginalmente più snella per le chiamate singole grazie alla sua semplicità.
  • Più lento rispetto al dare rm(1) più argomenti.

Puoi dimostrare la differenza con:

$ 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

Se tuttavia stiamo parlando di una chiamata non modificata alla funzione di sistema unlink(2), che ora capisco, probabilmente non è ciò che stai spiegando.

È possibile eseguire un sistema unlink() sia su directory che su file. Ma se la directory è un genitore di altre directory e file, il collegamento a quel genitore verrebbe rimosso, ma i figli rimarrebbero penzolanti. Che è meno che ideale.

Edit:

Spiacenti, ho chiarito la differenza tra unlink(1) e unlink(2). La semantica continuerà a differire tra le piattaforme.

69
Dan Carley

A livello di specifica POSIX, ciò che rm fa è specificato molto più strettamente di quello che nlink fa.

La portabilità del risultato sembra probabilmente migliore usando rm, se lo script deve essere eseguito su tutti i sistemi operativi.

8
Mike G.

La parte lenta della rimozione è il codice del file system e roba del disco, non la preparazione dello spazio utente della chiamata di sistema unlink ().

Ad esempio: se la differenza di velocità è importante, non dovresti archiviare i dati nel file system.

unlink è solo una "luce" rm. rm ha più funzioni ma fanno la stessa cosa.

4
Thomas