Unix'te mv ve {cp + rm eski dosya} arasında bir fark var mı?


14
  • mv a b

  • cp a b;rm a

Bunlar iki ifade dizisidir. Yaptıkları arasında bir fark var mı?


1
bölünmezlik? Gerçi mv komutunun atomik olup olmadığını gerçekten bilmiyorum.
Adriano Varoli Piazza

Evet. Neden soruyorsun?

1
Şimdi, + 'ya mvbenzer , ancak birincisi çapraz dosya sistemi hamleleri için çalışacaktır (daha sonra + olur ), ikincisi başarısız olacaktır (çapraz dosya sistemi sabit bağlantılarını desteklemez). lnrmcprmln
Chris Jester-Young

Her gün bir okul günü - bu varsayılan davranışı nasıl geçersiz kılacağını merak eden herkes için --remove-destinationanahtara ihtiyacınız var - stackoverflow.com/a/9371263/409638
robert

Yanıtlar:


20

İlgili dosyaların aynı dosya sisteminde olduğu varsayılarak, mv sadece dosya sistemindeki işaretçileri değiştirirken cp dosyanın tüm içeriğini kopyalar ve rm bir kez daha işaretçileri değiştirir. Yani mv çok daha verimlidir.


1
ama aynı şeyi yapıyorlar, değil mi?
Lazer

8
Hayır.

3
@ESKay: Hayır. İki senaryo: 1. Hedef mevcut değil. mvsadece dosyayı yeniden adlandırır (orijinal dosya ile aynı inode). cpyeni dosya için yeni bir inode yapar. 2. Hedef var. mvhedef dosyanın bağlantısını kaldırır (kaldırır) ve bir adımda yeniden adlandırır. cphedef dosyanın inode üzerine yazar.
Chris Jester-Young

7
Ayrıca mvasla izin veya sahiplik değiştirmez. Bir dosyayı arkadaşınızın homedirinden kendi homedirinize taşımak istediğinizi düşünün. Eğer mvbunu yaparsanız, homedirinizde arkadaşınıza ait bir dosya ile karşılaşırsınız. Yapamazsınız chownveya chmodve izinlere bağlı olarak değil hatta değiştirip oku. Eğer bunu cptakip ederseniz rmdosya size ait olacak ve her şey yolunda.
Ludwig Weinzierl

9

Evet, mv'nin aynı diskte atomik olma şansı varken cp ve rm'nin kombinasyonu asla yoktur.

Bu, mv'nin rename()garantisi olan çağrı kullanılarak uygulandığını varsayar . Örneğin POSIX'ten alıntı yapan bu haber grubu postasına bakın :

Bu rename () işlevi, normal dosyalar için ISO C standardı tarafından tanımlanan işleve eşdeğerdir. Buraya eklenmesi, bu tanımı dizinlerdeki eylemleri içerecek şekilde genişletir ve yeni parametre zaten var olan bir dosyayı adlandırdığında davranışı belirtir. Bu belirtim, işlevin eyleminin atomik olmasını gerektirir.


8

Aynı dosya sisteminde mv aynı referansa (dosya verileri ve meta veriler) işaret ederek dizin referansını değiştirir:

  • atomik bir işlemdir (başka bir işlem dosyası işlemi tarafından kesilemez)
  • yalnızca önemsiz miktarda ek disk alanı alır (dizindeki ek ad)
  • dosya izinlerini ve sahipliğini korur
  • veri miktarına bağlı olarak çok daha hızlı olabilir

Kopyala ve kaldır

  • atomik değildir (başka bir işlem cp ve rm komutlarını etkileyebilir)
  • dosya verilerinin kısa bir süre için diskte iki kez depolanmasını gerektirir (cp ve rm komutları arasında)
  • dosya izinlerini ve sahipliğini varsayılanlara değiştirir
  • veri miktarına bağlı olarak çok daha yavaş veya hatta başarısız olabilir

4

Kaynak ve hedef aynı fiziksel birimdeyse, ilk yaklaşım basitçe bir yeniden adlandırmadır ve çok hızlıdır (dosya (lar) çok büyük olsa bile).

cp& rmgerekli olmasa bile her zaman tüm verileri yüklemesi / depolaması gerekir.


3

mv özünde bir "yeniden adlandır" işlemidir. Bu, dosyanın kendisinin diskte aynı noktada kaldığı anlamına gelir. Gerçek dosya işlemi gerçekleştirilmez.


3

Aradaki fark, mv'nin dosya özniteliklerini korurken cp varsayılan olarak oluşturma tarihini geçerli tarihe ayarlamak değildir.

Bu varsayılanı geçersiz kılmak için son veri değişikliğini, son erişim zamanını, kullanıcı kimliğini ve grup kimliğini (yalnızca bunu yapma izinleri varsa), dosya izin bitlerini ve SUID ve SGID'yi korumak için "cp -p" kullanın bit.


2

Evet.

mv, dosyadaki ad ve konumla ilgili dosya sistemi meta verilerini basitçe değiştirirken, cp dosyanın ayrı bir kopyasını oluşturur, bu da ilk dosyayı tamamen okuması ve daha sonra içeriğini başka bir dosyaya yazması gerektiğinden daha uzun sürer.


2

cp ve rm, disk kullanımında çok daha ağırdır ve disk alanı nedeniyle başarısız olabilir.

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.