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