web-dev-qa-db-ja.com

インストールとcpの違いは何ですか?

install は単純なコピーとどのように異なりますか cp または dd ?ちょっとしたユーティリティをコンパイルし、それを/usr/sbinに追加して、PATH変数から利用できるようにします。なぜどちらを使用するのですか?

18
tarabyte

ソースからコンパイルされたバイナリを「インストールするには」、ディレクトリの下に配置するのが最善の方法です。

/usr/local/bin

一部のシステムでは、そのパスはすでにPATH変数に含まれていますが、そうでない場合は、プロファイル構成ファイル~/.bashrc ~/.profileのPATH変数を調整して追加できます。

PATH=${PATH}:/usr/local/bin

ddは、ファイルやデバイスなどのソースの正確なサイズのブロックをコピーするために主に使用される低レベルのコピーツールです。

cpは、オプション-rを使用してファイルとディレクトリを再帰的にコピーし、オプション-pを使用して権限を保持する一般的なコマンドです。

installcpとほとんど同じですが、chmodを個別に使用する必要なく、宛先ファイルのプロパティを直接設定するオプションが追加されています。

cpファイルを/usr/local/binに変換し、必要に応じてPATH変数を調整します。それが私がすることです。

18
cakuzo

インストールは、デフォルトモード755でファイルをコピーします。

インストールは、ファイルの所有者またはグループやファイルのモードを設定するように構成できます。

インストールは、元のファイルを置き換える前にバックアップするように構成できます。

7
fd0

installcpの主な違いは、宛先ファイルがすでに存在する場合、installは最初にリンクを解除することです。

この違いは、マニュアルページでは指摘されていません。他の回答にリストされていることも重要です-両方のプログラムには異なるオプションがあり、またGNU installにはBSDとは異なるオプションinstallがあるため、移植可能なMakefileは共通のサブセットに限定されます。

リンク解除(rmの前にcpを実行することもできます)が重要なのはなぜですか? 2つのハードリンクを含むファイルがあり、ハードリンクの1つを使用してそれを変更する場合、ファイルシステムの別の場所でも変更されます。ただし、最初にハードリンクの1つを削除し、それを変更されたファイルに置き換えると、他の場所は元のバージョンを保持します。

より可能性の高いシナリオは、プログラムまたはライブラリを使用中に更新することです。バイナリのリンクが先に解除されていても、実行中のプログラムには影響しません。詳細はこちらの素敵な投稿です: http://en.chys.info/2009/05/install-vs-cp-and-mmap/

5
marcin