Saya telah melihat di banyak tempat yang digunakan install -d
untuk membuat direktori dan install -c
menyalin file. Mengapa tidak menggunakan mkdir
dan cp
? Apakah ada keuntungan menggunakan install
?
Saya telah melihat di banyak tempat yang digunakan install -d
untuk membuat direktori dan install -c
menyalin file. Mengapa tidak menggunakan mkdir
dan cp
? Apakah ada keuntungan menggunakan install
?
Jawaban:
Itu tergantung pada apa yang Anda lakukan.
The install
Perintah biasanya digunakan dalam skrip instalasi yang datang dengan paket dan kode sumber untuk menginstal binary untuk sistem Anda. Itu juga dapat digunakan untuk menginstal file atau direktori lain. Selain opsi -d
dan yang -c
Anda miliki -m
untuk menentukan izin baru file yang akan diinstal, jadi Anda tidak perlu melakukan cp
dan chmod
untuk mendapatkan hasil yang sama. Misalnya:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
Anda juga memiliki opsi -g
dan -o
untuk mengatur grup target dan pemilik, masing-masing. Ini untuk menghindari panggilan terpisah chown
. Secara umum, menggunakan install
memperpendek skrip Anda dan membuatnya lebih ringkas dengan melakukan pembuatan file, menyalin, pengaturan mode, dan hal-hal terkait dalam satu perintah, bukan banyak.
Untuk referensi, lihat man install
. Untuk penggunaan, lihat saja skrip instalasi yang dikirimkan dengan beberapa kode sumber paket .
"instal" umumnya menggabungkan tindakan berikut:
Jadi, itu mengikuti pendekatan Unix bahwa alat harus dibuat untuk tindakan tunggal tetapi lengkap menginstal file yang dibuat oleh beberapa alat bangunan ke lokasi kerjanya.
Konsep lengkap seperti yang saya jelaskan diimplementasikan dalam sistem BSD (dalam versi yang disebut "xinstall"); Saya memperlakukan mode "salinan aman" di sini (versi baru dengan penggantian nama atom) sebagai hal yang vital untuk ini. Sistem Linux (dari coreutils) ketinggalan bagian penting ini dan rentan terhadap perlombaan antara menghapus dan membuka kembali oleh proses pengamat; tapi ini bisa dicakup oleh manajer paket.
Terlepas dari deskripsi sebelumnya di sini tentang penggunaan, ada perbedaan tingkat rendah antara cp
dan install
, setidaknya di Linux. Jika menyalin di atas file yang ada, cp
timpa inode file yang ada, sambil install
selalu membuat inode baru untuk nama file yang sama.
Ini membuat perbedaan ketika menginstal versi baru dari biner yang berjalan. Penggunaan cp
menyebabkan kesalahan EBUSY, sementara install
akan berhasil. Biner yang berjalan masih akan menggunakan versi lama, tetapi versi baru digunakan jika program di-restart.
Jika direktori yang dimaksud sudah ada:
mkdir -p
akan mencoba untuk mengatur bit mode kepemilikan dan fileinstall -d
tidak akan mencoba mengatur bit mode kepemilikan dan fileIni untuk mkdir
dan install
dari GNU coreutils . Keduanya menggunakan make_dir_parents
fungsi yang sama , tetapi dengan preserve_existing
parameter yang diatur ke false
atau true
, masing-masing.
install
atau$(INSTALL)
dalam file makefile juga menandai langkah-langkah tersebut sebagai langkah penyalinan instalasi dan bukan langkah penyalinan biasa. Itu bisa bermanfaat.