概要
installコマンドは、ファイルをコピーすると同時に、そのファイルの「アクセス権限(パーミッション)」「所有者」「所属グループ」を設定するためのコマンドです。
名前から「ソフトウェアのインストール専用」と思われがちですが、実際には「高機能なコピーコマンド」として利用されます。cpコマンドでコピーした後にchmodやchownを実行する手間を省けるため、シェルスクリプトやMakefile、サーバー構築の自動化処理(プロビジョニング)において標準的に利用されています。
仕様(引数・オプション)
構文
ファイルを配置する(基本)
install [オプション] [コピー元] [コピー先]
ディレクトリを作成する
install -d [オプション] [ディレクトリ名...]
主なオプション
権限設定やディレクトリ作成に関するオプションが重要です。
| オプション | 説明 |
| -m [モード] | ファイルのパーミッションを数値(例: 755, 644)で指定します。デフォルトは 755 (rwxr-xr-x) であることが多いです。 |
| -o [所有者] | ファイルの所有ユーザーを指定します(root権限が必要な場合があります)。 |
| -g [グループ] | ファイルの所有グループを指定します。 |
| -d | 指定したディレクトリを作成します(mkdir -p 相当)。 |
| -D | コピー先のディレクトリが存在しない場合、親ディレクトリを含めて自動作成してからコピーします。 |
| -t [ディレクトリ] | コピー先のディレクトリを指定します。複数ファイルをまとめて配置する際に使用します。 |
| -b | コピー先に同名ファイルがある場合、バックアップを作成します(~が付く)。 |
| -p | コピー元のタイムスタンプを保持します。 |
| -v | 実行内容を詳細に表示します(verbose)。 |
基本の使い方
スクリプトを実行可能な状態でパスの通った場所へ配置する
作成したスクリプトファイルを /usr/local/bin などに配置し、同時に実行権限(755)を付与する最も一般的な使い方です。
# myscript.sh を /usr/local/bin/myscript として配置し、権限を 755 に設定
sudo install -m 755 myscript.sh /usr/local/bin/myscript
実行結果イメージ:
(出力はありませんが、lsコマンドで確認すると以下のようになります)
ls -l /usr/local/bin/myscript
-rwxr-xr-x 1 root root 1500 Jan 16 10:00 /usr/local/bin/myscript
※ cp と違い、元のファイルが rw-r--r-- であっても、配置後は指定した -m 755 になります。
実践コマンド
1. 秘密鍵を安全な権限で配置する
SSHの秘密鍵など、他人に見られてはいけないファイルは -m 600(所有者のみ読み書き可能)で配置する必要があります。install コマンドなら一発で安全な状態を作れます。
# 秘密鍵を .ssh ディレクトリに配置し、権限を 600 に強制する
install -m 600 id_ed25519 ~/.ssh/id_ed25519
実行結果イメージ:
ls -l ~/.ssh/id_ed25519
-rw------- 1 user user 411 Jan 16 10:05 /home/user/.ssh/id_ed25519
2. 親ディレクトリが存在しない場所に配置する (-D)
cp コマンドでは、コピー先のディレクトリが存在しないとエラーになりますが、install -D を使うと親ディレクトリも同時に作成してくれます。
# /opt/app/conf ディレクトリがなくても自動作成して config.yml を配置
sudo install -D -m 644 config.yml /opt/app/conf/config.yml
3. バックアップを取りつつ設定ファイルを更新する
既存の設定ファイルを上書きする際、念のため古いファイルをバックアップとして残します。
# 既存の nginx.conf を nginx.conf~ として残して上書き
sudo install -b -m 644 nginx.conf /etc/nginx/nginx.conf
実行結果イメージ:
ls -l /etc/nginx/nginx.conf*
-rw-r--r-- 1 root root 2048 Jan 16 10:10 /etc/nginx/nginx.conf
-rw-r--r-- 1 root root 1900 Jan 01 00:00 /etc/nginx/nginx.conf~
4. 複数ファイルをまとめてディレクトリへ配置する
複数の実行ファイルやライブラリを一括でインストールする場合、-t オプションが便利です。
# 現在のディレクトリにある全ての .sh ファイルを /opt/scripts/ に配置
sudo install -m 755 -t /opt/scripts/ *.sh
カスタムポイント
- パーミッション設定 (
-m):- 実行ファイル・スクリプト:
755(rwxr-xr-x) - 一般的な設定ファイル:
644(rw-r--r--) - 機密情報(鍵・パスワード):
600(rw-------)
- 実行ファイル・スクリプト:
- 所有者の変更 (
-o,-g):- Webサーバーの設定ファイルなどで
www-dataユーザーにする必要がある場合は-o www-data -g www-dataを指定します。
- Webサーバーの設定ファイルなどで
注意点
- ディレクトリ自体のコピーは不可:
installコマンドにはcp -rのようなディレクトリを再帰的にコピーする機能はありません。ディレクトリツリーごとコピーしたい場合はcpやrsyncを使用してください。
- デフォルトパーミッション:
-mを指定しない場合、多くの環境で実行権限付きの755が適用されます。単なるテキストファイルを配置したい場合は、明示的に-m 644を指定しないとセキュリティリスクになることがあります。
- 上書きの挙動:
installは基本的に強制上書きを行います(cp -f相当)。確認メッセージは出ないため、不安な場合は-b(バックアップ)を併用してください。
応用
ディレクトリの作成のみを行う
mkdir -p と同様に、深い階層のディレクトリを作成しつつ、そのパーミッションを厳密に定義できます。
# 所有者のみがアクセス可能な一時ディレクトリを作成
install -d -m 700 /tmp/my_secure_workspace
まとめ
installコマンドは、サーバー構築や環境設定の手順を簡潔かつ安全にするプロ向けのツールです。
- 向く場面: 実行ファイルの配置、設定ファイルのデプロイ、Makefileやセットアップスクリプト内。
- 変更ポイント: ファイルの種類に合わせて
-m(644, 755, 600)を使い分ける。 - 注意点: ディレクトリごとのコピーはできない。
「cp してから chmod」という2段階の手順を行っているなら、install コマンド1行に置き換えることを強くお勧めします。
