はじめに

install(1)という、cpmkdirchmodを同時に行うような便利コマンドがあることを知りました。 (忘れちゃいましたが、何かのMakefileを見ているときに存在に気付きました)
これを使うと、プロビジョニングなどのスクリプトが簡潔に書けるようになりそうです。

……というわけで使い方のメモがてらまとめてみます。

manの内容まとめ

installはBSD版とGNU版があるようですが、ここではGNU版について書きます。 BSD版ではいくつかのオプションが使用できません。(-D はなかったと思う)

ちなみにmacの場合は標準でBSD版のinstallが入っており、Coreutilsを入れるとGNU版のinstallが使えるようになります。

4種類の使い方

  • install [OPTION]... [-T] SOURCE DEST
    • SOURCEDESTにコピーする。-Tを付けると、DESTをファイルとして扱う
  • install [OPTION]... SOURCE... DIRECTORY
    • 複数のSOURCEファイルをDIRECTORYディレクトリへコピーする
  • install [OPTION]... -t DIRECTORY SOURCE...
    • 複数のSOURCEファイルをDIRECTORYディレクトリへコピーする
  • install [OPTION]... -d DIRECTORY...
    • ディレクトリを作成する(複数可)

その他のオプション(良さげなのを抜粋)

  • -D
    • コピー先のディレクトリが存在しない場合、ディレクトリを作成する
    • mkdir -pみたいな感じ
  • -o 所有者
    • コピー先の所有者を変更する
    • chownみたいな感じ
  • -g グループ
    • コピー先の所有グループを変更する
    • chownみたいな感じ
  • -m パーミッション
    • コピー先のパーミッションを変更する
    • chmodみたいな感じ
  • -S SUFFIX
    • コピー先が上書きになる場合、ファイル名の最後にSUFFIXを付けてバックアップする
  • -Z
    • コピー先のSELinuxセキュリティコンテキストを設定する
    • (※マニアックかよ)

使用例

authorized_keysのセットアップ

今までこう書いていたものが…

1
2
3
4
5
6
mkdir /home/hoge/.ssh
chmod 700 /home/hoge/.ssh
cp authorized_keys /home/hoge/.ssh/authorized_keys
chmod 600 /home/hoge/.ssh/authorized_keys
chown -R hoge:hoge /home/hoge/.ssh

こう書けます。

1
2
3
install -o hoge -g hoge -m 700 -d /home/hoge/.ssh
install -o hoge -g hoge -m 600 authorized_keys /home/hoge/.ssh/authorized_keys

すっきりしましたね!

まとめ

なぜ今までこんな便利なものに今まで気付かなかったのか……