GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è la differenza tra unlink e rm?

Soluzione 1:

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

Soppesare le differenze tra le utilità di userland.

rm(1) :

  • Altre opzioni.
  • Altri feedback.
  • Controllo di integrità.
  • Un po' più lento per le singole chiamate come risultato di quanto sopra.
  • Può essere chiamato con più argomenti contemporaneamente.

unlink(1) :

  • Meno controlli di integrità.
  • Impossibile eliminare le directory.
  • Impossibile ricorrere.
  • Può prendere solo un argomento alla volta.
  • Leggermente più snello per chiamate singole grazie alla sua semplicità.
  • Più lento rispetto a dare rm(1) più argomenti.

Potresti 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 invece stiamo parlando di una chiamata genuina al sistema unlink(2) function, che ora mi rendo conto che probabilmente non è quello che stai tenendo in considerazione.

Puoi eseguire un unlink() di sistema su directory e file allo stesso modo. Ma se la directory è un genitore di altre directory e file, il collegamento a quel genitore verrebbe rimosso, ma i figli rimarrebbero penzolanti. Il che è tutt'altro che ideale.

Modifica:

Spiacenti, chiarita la differenza tra unlink(1) e unlink(2) . La semantica sarà ancora diversa a seconda della piattaforma.

Soluzione 2:

A livello di specifica POSIX, ciò che fa rm è specificato in modo molto più preciso rispetto a ciò che fa unlink.

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

Soluzione 3:

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

Vale a dire:se la differenza di velocità è importante, non dovresti archiviare i dati nel file system.

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


Linux
  1. La differenza tra [[ $a ==Z* ]] e [ $a ==Z* ]?

  2. Qual è la differenza tra Redhat e centOS?

  3. Qual è la differenza tra insmod e modprobe

  4. Qual è la differenza tra mutex e sezione critica?

  5. Qual è la differenza tra fsck ed e2fsck?

Qual è la differenza tra Linux e Unix?

Qual è la differenza tra Login e Non-Login Shell

Qual è la differenza tra il comando apt e apt-get?

Che cos'è un hypervisor? Qual è la differenza tra il tipo 1 e 2?

Qual è la differenza tra curl e Wget?

Qual è la differenza tra $(CC) e $CC?