回答:
大きな違いの1つは、cpが宛先ファイルを切り捨て、ソースから宛先ファイルへのデータのコピーを開始することです。
一方、インストールでは、最初に宛先ファイルが削除されます。
これは重要です。なぜなら、宛先ファイルがすでに使用されている場合、cp
その上に新しいファイルがあると、そのファイルを使用している人に悪いことが起こる可能性があるからです。たとえば、実行中の実行可能ファイルを上書きすると失敗する場合があります。既存のプロセスが読み取り/書き込みでビジーであるデータファイルを切り捨てると、かなり奇妙な動作を引き起こす可能性があります。インストールのように最初に宛先ファイルを削除するだけの場合、通常のように処理が続行されます。削除されたファイルは、すべてのプロセスがそのファイルを閉じるまで実際には削除されません。
技術的には、違いinstall -c
とはcp
つまりinstall
セットターゲットファイルのパーミッションへrwxr-xr-x
。 cp
ソースファイルの許可からumaskを引いたものを保持します。これらのデフォルトの動作は、さまざまな状況で役立ちます。もちろん、両方のことをすべてのオプションとcp
してinstall
提供頃は、機能は収束しました。
最近でinstall
は、cp
他のすべての場所でmakefileで一般的に使用されています。一部のオペレーティングシステムまたはインストールシステムでinstall
は、インストールされたパッケージを登録するためにプログラムにフックできるため、この区別は時々役立ちます。最新のパッケージ管理システムは、この種の陳腐化をもたらしますが、一部の人々はまだそれを使用しています。また、ターゲットファイルのアクセス許可を同じ操作で設定できる可能性は非常に便利です。
install
ユーティリティは、そのベースに、空想ですcp
。しかし、ツールは具体的にインストールを行うため、そうでcp
はない機能がいくつか含まれています。私/usr/bin/install
はGNU coreutilsのからだけではなくコピーでなく、引数フラグ(保存などパーマ/所有権変更することができchgrp
、chown
、chmod
呼び出し)ストリップデバッグ情報(省にオプションstrip
呼び出しを)しても、SELinuxのコンテキストのためのいくつかのモジョを。
ソフトウェアのインストールに役立つ便利なアクションを提供するだけです。人生を変えるものはなく、すべてが有用であり、スクリプトをきれいにします。
cp --remove-destination
、GNU coreutils も参照してください。