mkdir とか touch とか chown とか chmod とか個別に実行しなくても install コマンドだけでまとめて出来るという話です。

問題例

Dockerfile の RUN などが典型的な例ですが、他でも例えば mkdir -p /home/foo/.ssh; chown foo /home/foo/.ssh; chmod 0700 /home/foo/.ssh のようなことをすることがあると思います。

特に Dockerfile の場合は RUN ごとにイメージがたまっていくこともあって、 ;&& でつなげて単独の RUN にまとめて書くことも多いと思います。

install でディレクトリを作る

たとえば

 mkdir -p /home/foo/.ssh
 chown foo /home/foo/.ssh
 chgrp users /home/foo/.ssh
 chmod 0700 /home/foo/.ssh

なら install -o foo -g users -m 0700 -d /home/foo/.ssh にまとめられます。

install -o foo -g users -m 0700 -d /home/foo/.ssh /home/foo/tmp のように複数ディレクトリを同時に作成することも出来ます。

2014-02-16 追記: Qiita の方のコメントsudo -u user mkdir -p -m 700 /home/user/.ssh というやり方もあるという話がありました。

install でファイルをコピーする

たとえば

 cp /path/from/*.txt /path/to/
 chown foo /path/to/*.txt
 chgrp users /path/to/*.txt
 chmod 0644 /path/to/*.txt

なら install -o foo -g users -m 0644 /path/from/*.txt /path/to/ にまとめられます。

install -o foo -g users -m 0644 -t /path/to /path/from/*.txt のようにディレクトリを先に書くことも出来ます。

1ファイルだけなら install -o foo -g users -m 0644 /path/from/foo.txt /path/to/bar.txt のようにコピー先のファイル名を指定することも出来ます。

まとめ

たくさん chownchmod を実行していることがあれば、 install コマンドでまとめられないか検討してみてください。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published