Unlink ve rm arasındaki fark nedir?


Yanıtlar:


68

Her ikisi de, unlink()sistem çağrısı olan aynı temel işleve bir sarıcıdır.

Kullanıcı yardımcı programları arasındaki farkları tartmak.

rm(1):

  • Daha fazla seçenek.
  • Daha fazla geri bildirim.
  • Akıl sağlığı kontrolü.
  • Yukarıdakilerin bir sonucu olarak tek aramalar için biraz daha yavaş.
  • Aynı anda birden fazla argüman ile çağrılabilir.

unlink(1):

  • Daha az akıl sağlığı kontrol ediyor.
  • Dizinler silinemiyor.
  • Tekrarlanamadı.
  • Bir seferde sadece bir argüman alabilir.
  • Basit olması nedeniyle tek aramalarda marjinal olarak daha zayıf.
  • rm(1)Birden fazla argüman vermek ile karşılaştırıldığında daha yavaş .

Farkı şununla gösterebilirsiniz:

$ 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

Bununla birlikte, sistem unlink(2)işlevine yapılan kısaca yapılan bir çağrıdan bahsediyorsak , şimdi anladığım kadarıyla büyük olasılıkla sizin neden sorumlu olduğunuzu değil.

unlink()Hem dizinler hem de dosyalar üzerinde bir sistem gerçekleştirebilirsiniz . Ancak, dizin diğer dizinlerin ve dosyaların bir ebeveyni ise, o ebeveynin bağlantısı kaldırılır, ancak çocuklar sarkmaya başlar. Hangisi idealden daha az.

Düzenle:

Üzgünüz, unlink(1)ve arasındaki farkı netleştirdik unlink(2). Anlambilim hala platform arasında farklılık gösterecek.


Bu, unix dosya sistemlerinde bir dizini ve yinelemeli olarak altındaki tüm dosyaları kaldırarak her zaman içerdiği dosya / dizin sayısıyla orantılı bir işlem olacağı anlamına mı geliyor? Ana dizini diğer dizinlere / dosyalara bağladığımda ne zaman olur? Asla silinmez ve bu alanı sonsuza dek kaybettim?
Marcin,

6
Tüm dosya sistemlerinde değilse, artık dizinleri / dosyaları artık teknik olarak bırakmak mümkündür. Bunu düzeltmek genellikle bir dosya sistemi onarım aracı çalıştırmak anlamına gelir. Unix / Linux'ta bu araçlar 'fsck' ve farklı dosya sistemleri için bazı özel varyasyonlar olarak bilinir. Bir şeyi kurtarırlarsa normalde 'lost + found' adındaki bir dizinde bırakırlar
ConcernedOfTunbridgeWells

1
Doğru. rm ağacın dibinden tekrarlanır. Nasıl Sen gösterebilir: mkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1. Ana dizinin bağlantısını kaldırırsanız, çocuklar tarafından tüketilen alan, fsck'in tutarsızlığı bulana kadar kaybedilir.
Dan Carley

1
Neden bahsediyorsun? $ mkdir -p 1/2/3 $ unlink 1 unlink: `1 'un bağlantısını kaldıramıyor: fsck gerektiren" bellek "sızıntısına neden olan bir dizin mi var? Olası olmayan!
Thomas,

1
Hem Linux hem de FreeBSD kılavuz sayfaları açıkça unlink () 'ı bir dizinde çalıştırmaya çalışırken başarısız olacağını belirtir.
Thomas,

8

POSIX spec düzeyinde, rm'nin yaptığı, unlink'in yaptığından daha sıkı bir şekilde belirtilir .

Scriptinizin işletim sistemlerinde çalışması gerekiyorsa, sonucun taşınabilirliği rm kullanarak daha iyi görünmektedir.


4

Kaldırmanın yavaş kısmı, unlink () sistem çağrısının kullanıcı hazırlığı değil, dosya sistemi kodu ve disk öğeleridir.

Yani, eğer hız farkı önemliyse, verileri dosya sistemine kaydetmemelisiniz.

unlink sadece bir rm "light" dır. rm daha fazla özelliğe sahip ama aynı şeyi yapıyorlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.