install
は単純なコピーとどのように異なりますか cp
または dd
?ちょっとしたユーティリティをコンパイルし、それを/usr/sbin
に追加して、PATH
変数から利用できるようにします。なぜどちらを使用するのですか?
ソースからコンパイルされたバイナリを「インストールするには」、ディレクトリの下に配置するのが最善の方法です。
/usr/local/bin
一部のシステムでは、そのパスはすでにPATH変数に含まれていますが、そうでない場合は、プロファイル構成ファイル~/.bashrc ~/.profile
のPATH変数を調整して追加できます。
PATH=${PATH}:/usr/local/bin
dd
は、ファイルやデバイスなどのソースの正確なサイズのブロックをコピーするために主に使用される低レベルのコピーツールです。
cp
は、オプション-r
を使用してファイルとディレクトリを再帰的にコピーし、オプション-p
を使用して権限を保持する一般的なコマンドです。
install
はcp
とほとんど同じですが、chmod
を個別に使用する必要なく、宛先ファイルのプロパティを直接設定するオプションが追加されています。
cp
ファイルを/usr/local/bin
に変換し、必要に応じてPATH
変数を調整します。それが私がすることです。
インストールは、デフォルトモード755でファイルをコピーします。
インストールは、ファイルの所有者またはグループやファイルのモードを設定するように構成できます。
インストールは、元のファイルを置き換える前にバックアップするように構成できます。
install
とcp
の主な違いは、宛先ファイルがすでに存在する場合、install
は最初にリンクを解除することです。
この違いは、マニュアルページでは指摘されていません。他の回答にリストされていることも重要です-両方のプログラムには異なるオプションがあり、またGNU install
にはBSDとは異なるオプションinstall
があるため、移植可能なMakefileは共通のサブセットに限定されます。
リンク解除(rm
の前にcp
を実行することもできます)が重要なのはなぜですか? 2つのハードリンクを含むファイルがあり、ハードリンクの1つを使用してそれを変更する場合、ファイルシステムの別の場所でも変更されます。ただし、最初にハードリンクの1つを削除し、それを変更されたファイルに置き換えると、他の場所は元のバージョンを保持します。
より可能性の高いシナリオは、プログラムまたはライブラリを使用中に更新することです。バイナリのリンクが先に解除されていても、実行中のプログラムには影響しません。詳細はこちらの素敵な投稿です: http://en.chys.info/2009/05/install-vs-cp-and-mmap/