install -d
ディレクトリの作成やinstall -c
ファイルのコピーに使用される多くの場所を見てきました。なぜmkdir
andを使用しないのcp
ですか?使用する利点はありinstall
ますか?
install -d
ディレクトリの作成やinstall -c
ファイルのコピーに使用される多くの場所を見てきました。なぜmkdir
andを使用しないのcp
ですか?使用する利点はありinstall
ますか?
回答:
それはあなたが何をしているかに依存します。
このinstall
コマンドは通常、システムにバイナリをインストールするためのパッケージとソースコードが付属するインストールスクリプトで使用されます。他のファイルまたはディレクトリをインストールするためにも使用できます。インストールするファイルの新しい権限を指定するためのオプション-d
と-c
オプションに加えて、同じ結果を得るために-m
a cp
とa chmod
を実行する必要はありません。例えば:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
また、オプションを持っている-g
と-o
、それぞれ、ターゲットグループと所有者を設定します。これにより、への個別の呼び出しが回避されますchown
。一般に、使用install
すると、スクリプトが短くなり、ファイルの作成、コピー、モード設定、および関連する処理が多くのコマンドではなく1つのコマンドで実行されるため、スクリプトが簡潔になります。
参照については、を参照してくださいman install
。使用方法については、パッケージのソースコードに同梱されているインストールスクリプトをご覧ください。
「インストール」は、通常、次のアクションを組み合わせます。
したがって、Unixのアプローチに従って、何らかのビルドツールによって作成されたファイルをその作業場所にインストールするという、単一ではあるが完全なアクションのためにツールを作成する必要があります。
私が説明した完全な概念は、BSDシステム(いわゆる「xinstall」バージョン)に実装されています。ここでは、「セーフコピー」モード(アトミックな名前変更を伴う新しいバージョン)をこれに不可欠なものとして扱います。Linuxシステム(coreutilsから)は、この重要な部分を見逃しており、傍観者プロセスによる削除と再オープンの間で競合する傾向があります。ただし、これはパッケージマネージャーでカバーできます。
ここでの使用法に関する前述の説明とは別に、少なくともLinuxでは、との間にはわずかなレベルの違いがcp
ありinstall
ます。既存のファイルをコピーする場合cp
は、ファイルの既存のiノードを上書きしますが、install
常に同じファイル名の新しいiノードを作成します。
これにより、実行中のバイナリの新しいバージョンをインストールするときに違いが生じます。を使用cp
するとEBUSYエラーが発生しますが、install
成功します。実行中のバイナリは引き続き古いバージョンを使用しますが、プログラムを再起動すると新しいバージョンが使用されます。
問題のディレクトリが既に存在する場合:
mkdir -p
所有権とファイルモードビットを設定しようとしますinstall -d
所有権とファイルモードビットを設定しようとしませんこれがためであるmkdir
とinstall
からのGNU coreutilsの。どちらも同じmake_dir_parents
関数を使用しpreserve_existing
ますが、パラメーターがそれぞれfalse
またはに設定されていtrue
ます。
install
、$(INSTALL)
これらのステップに、通常のコピーステップではなく、インストールコピーステップとしてフラグを立てます。それは役に立つかもしれません。