セットアップスクリプトなどでmkdir,cp,chown,chgrp,chmodが頻発するときにシンプルに記述する方法
はじめに
アプリケーションのセットアップスクリプト や Dockerfile 、 Vagrantfile を記述しているときに、以下のようなコマンドが乱立することがあります。
mkdir
cp
chown
chgrp
chmod
mkdir
でコピー先のディレクトリを作成し、 cp
でファイルをコピー、 chown
/ chgrp
で所有者を変更し、 chmod
でパーミッションを変更、といった記述をしだすと、4コマンドは実行することになります。
これを1コマンドでやってしまおうというのが今回のエントリです。
検証環境
今回は非常に軽量なDcokerイメージである alpine
でも使えることを確認したいため、以下の環境を利用しました。
ちなみに「Alpine Linux」は docker
コマンドが利用できれば簡単に起動できます。
4つのコマンドを1コマンドで実現するためのコマンド install
答えとしては非常に簡単で、 install
コマンドを利用します。
利用できるディストリビューション
いくつかのディストリビューションを確認しましたが、いずれもインストールされているようでした。
Macの場合は brew install gnutls
あたりでインストールできると思います。(僕の環境はすでにインストールされていた。)
使い方
ヘルプを確認してみます。
cp
コマンドとよく似ていて、 install コピー元ファイル コピー先ファイル
のように使います。
オプションも見ていきましょう。
今回利用するオプションのみに絞って表示させてみました。
それぞれのオプションの役割を日本語で簡単に表現すると以下のようになります。
-D
:mkdir -p
と同じ。ディレクトリがない場合に作成する。-g
:chgrp
と同じ。グループを変更する。-m
:chmod
と同じ。パーミッションを変更する。-o
:chmod
と同じ。所有者を変更する。-p
:cp --preserve=timestamps
と同じ。タイムスタンプを保持する。
使用例
実際に利用してみます。
検証のために、コピー元ディレクトリ src/
と コピー先ディレクトリ dest/
を作成し、コピー元ディレクトリにコピーファイル hello.txt
を作成します。
以下のコマンドを見ていただければ、わかると思います。
ここで、 src/hello.txt
を dest/
ディレクトリにコピーしたいと思います。
ただし、以下の条件を用意したいと思います。
- 所有者は
root
- グループは
guest
- パーミッションは
700
(所有者だけがアクセス可能) - コピー後のファイルパスは
dest/sub/world.txt
install
コマンドを使わない場合は以下のようになります。
install
コマンドを使う場合はワンライナーで実現できます。
正しくコピーできたか確認してみます。
ひとこと
Dcokerfile
や Vagrantfile
が更にシンプルに書けるようになるはず。
次回作成時に使ってみたいと思います。
ディスカッション
コメント一覧
まだ、コメントがありません