web-dev-qa-db-ja.com

「インストール」コマンドの目的は何ですか?

私は多くのMakefileでinstallコマンドが使用されているのを見てきましたが、その存在と使用法はちょっと混乱しています。マンページからは、機能が少ないcpの模造品のように見えますが、cpよりもいくつかの利点がない限り、それは使用されないと思います。どうしたんだ?

51
azernik

installは、ファイルをコピーするだけでなく、その所有権と権限を変更し、オプションで実行可能ファイルからデバッグシンボルを削除します。 cpchownchmodおよびstripを組み合わせたものです。これは、基本的なタスクの一般的なシーケンスを実行するための便利な高レベルツールです。

実行可能ファイルをインストールする場合のinstallに対するcpの利点は、ターゲットがすでに存在する場合、ターゲットファイルを削除して新しいファイルを作成することです。これにより、アクセスコントロールリストや機能などの現在のプロパティが取り除かれます。これらは、良い面と悪い面の両方として見ることができます。実行可能ファイルを更新するとき、この実行可能ファイルの実行中のインスタンスがある場合、影響を受けずに実行し続けます。対照的に、cpは、ファイルが存在する場合、その場所でファイルを更新します。ほとんどのUnixバリアントでは、ターゲットが実行中の実行可能ファイルである場合、これはエラーEBUSY¹で失敗します。一部では、コードセクションを動的に読み込み、ファイルを変更すると無意味なコードが読み込まれるため、ターゲットがクラッシュする可能性があります。

install はBSDコマンドです( 4.2BSD で追加、つまり1980年代初頭に追加)。 POSIXでは採用されていません。

¹ 「テキストファイルがビジーです」。この文脈では、「テキストファイル」は、 不明瞭な履歴上の理由から 、「バイナリ実行可能ファイル」を意味します。

これは、単一のコマンドで、ファイルのコピーまたはディレクトリの作成中に、ファイルまたはディレクトリの所有権と権限を操作する標準化された方法を提供します。

installコマンドを使用すると、必要な権限でファイルをコピーできます

LDAPのセットアップ中に主に使用する例

install -o ldap -g ldap /etc/openldap/DB_CONFIG_EXAMPLE  /var/lib/ldap/DB_CONFIG

これにより、chown ldap. /var/lib/ldap/DB_CONFIGcpを使用してコピーした場合、このシナリオではchownも必要です

3
Rahul Patil

installのmanページを参照してください:

$ man install

抜粋

SYNOPSIS
       install [OPTION]... [-T] SOURCE DEST
       install [OPTION]... SOURCE... DIRECTORY
       install [OPTION]... -t DIRECTORY SOURCE...
       install [OPTION]... -d DIRECTORY...


DESCRIPTION
       This  install  program  copies  files  (often just compiled) into 
       destination locations you choose.  If you want to download and
       install a ready-to-use package on a GNU/Linux system, you should instead 
       be using a package manager like yum(1) or apt-get(1).

       In the first three forms, copy SOURCE to DEST or multiple SOURCE(s) to 
       the existing DIRECTORY, while  setting  permission  modes and 
       owner/group.  In the 4th form, create all components of the given 
       DIRECTORY(ies).

       Mandatory arguments to long options are mandatory for short options too.

特定の所有権、権限でのインストール、元のファイルのタイムスタンプの保持など、その他の便利な機能もinstallを使用して実現できます。

   -g, --group=GROUP
          set group ownership, instead of process' current group

   -m, --mode=MODE
          set permission mode (as in chmod), instead of rwxr-xr-x

   -o, --owner=OWNER
          set ownership (super-user only)

   -p, --preserve-timestamps
          apply access/modification times of SOURCE files to corresponding 
          destination files

参考文献

0
slm