【Linux】installコマンドで権限を設定しながらファイルを配置する

目次

概要

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 を指定します。

注意点

  1. ディレクトリ自体のコピーは不可:
    • install コマンドには cp -r のようなディレクトリを再帰的にコピーする機能はありません。ディレクトリツリーごとコピーしたい場合は cprsync を使用してください。
  2. デフォルトパーミッション:
    • -m を指定しない場合、多くの環境で実行権限付きの 755 が適用されます。単なるテキストファイルを配置したい場合は、明示的に -m 644 を指定しないとセキュリティリスクになることがあります。
  3. 上書きの挙動:
    • 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行に置き換えることを強くお勧めします。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次