install -dDizin oluşturmak ve install -cbir dosyayı kopyalamak için kullanılan birçok yerde gördüm . Neden kullanmaz mkdirve cp? Kullanmanın bir avantajı var mı install?
install -dDizin oluşturmak ve install -cbir dosyayı kopyalamak için kullanılan birçok yerde gördüm . Neden kullanmaz mkdirve cp? Kullanmanın bir avantajı var mı install?
Yanıtlar:
Bu ne yaptığınıza bağlı.
installKomut normalde sisteminize bir ikili yüklemek için paketler ve kaynak kodu ile gelen yükleme komut kullanılır. Başka bir dosya veya dizini kurmak için de kullanılabilir. Kurulacak dosyanın yeni izinlerini belirlemek için sahip olduğunuz -dve -cseçeneklerine ek olarak , aynı sonucu elde etmek için -ma cpve a yapmanız gerekmez chmod. Örneğin:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
Ayrıca seçenekler var -gve -osırasıyla hedef grup ve sahibi, ayarlanması için. Bu, yapılan ayrı çağrıları önler chown. Genel olarak, installkomut dosyanızı kısaltır ve dosya oluşturma, kopyalama, mod ayarı ve ilgili öğeleri birçok komut yerine tek bir komutla yaparak daha özlü hale getirir.
Referans için bkz man install. Kullanım için, sadece bazı paket kaynak kodlarıyla birlikte gelen kurulum komut dosyalarına bir göz atın .
"install" genellikle aşağıdaki işlemleri birleştirir:
Bu nedenle, Unix yaklaşımını izleyerek bir takımın, bir inşaat aracı tarafından yapılan bir dosyayı çalışma yerine yerleştirme işleminin tek bir işlemle yapılması için yapılması gerekir.
Açıkladığım gibi tam konsept BSD sistemlerinde ("xinstall" sürümünde) uygulanmaktadır; Burada "güvenli kopya" modunu (atomik yeniden adlandırmalı yeni sürüm) bunun için hayati olarak kabul ediyorum. Linux sistemleri (coreutils'den) bu önemli kısmı kaçırır ve bir takip eden sürecin silinmesi ve yeniden açılması arasındaki yarışlara açıktır; ancak bu paket yöneticileri tarafından ele alınabilirdi.
Buradaki kullanımla ilgili önceki açıklamaların yanı sıra , en azından Linux arasında cpve arasında düşük düzeyde bir fark vardır install. Mevcut bir dosyanın cpüzerine kopyalanıyorsa , installher zaman aynı dosya adı için yeni bir inode oluştururken , dosyanın mevcut inode'unun üzerine yazar .
Bu, çalışan bir binary'in yeni bir versiyonunu yüklerken fark yaratır. Kullanmak cpbir EBUSY hatasına neden olurken installbaşarılı olur Çalışan ikili dosya eski sürümü kullanmaya devam eder, ancak program yeniden başlatıldığında yeni sürüm kullanılır.
Söz konusu dizin zaten mevcutsa:
mkdir -p sahiplik ve dosya modu bitlerini ayarlamaya çalışacakinstall -d sahiplik ve dosya modu bitlerini ayarlamaya çalışmazBu içindir mkdirve installgelen GNU coreutils . Her ikisi de aynı make_dir_parentsişlevi kullanır, ancak preserve_existingparametre sırasıyla falseveya ile ayarlanır true.
installveya$(INSTALL)içinde kullanımı, bu adımları, bazı normal kopyalama adımlarını değil, kurulum kopyalama adımları olarak da işaretler. Bu faydalı olabilir.