例えばディレクトリの作成にinstallコマンドを使う
こんなことしたいとしますよね。
mkdir -p /path/to/dir chown 2gou /path/to/dir chgrp oretachino /path/to/dir chmod 700 /path/to/dir
chown 2gou.oretachino /path/to/dir
でもいいけど行数稼ぐために分けた。
同じことをするには、意外と知られてないけどinstall
使うと1コマンドでイナフ。
install -o 2gou -g oretachi -m 700 -d /path/to/dir
installのmanを見てみると
This install program copies files (often just compiled) into destination locations you choose. If you want to download and install a ready-to-use package on a GNU/Linux system, you should instead be using a package manager like yum(1) or apt-get(1).
とあります。このコマンドに気付いたのはrpmを作成しているときにspecファイルに書いてあったからで、specファイルを読むとinstallコマンドによるファイルコピー方法も分かります。
# Install systemd service files mkdir -p $RPM_BUILD_ROOT%{_unitdir} for s in httpd htcacheclean; do install -p -m 644 $RPM_SOURCE_DIR/${s}.service \ $RPM_BUILD_ROOT%{_unitdir}/${s}.service done
例えばCentOS7のhttpdパッケージ内%install
セクションですが、systemd用のファイルをコピーする時にはこんな感じで書いていたり。
コピーの部分に関しては以下の便利オプションがあるので
-p
: コピー元のタイムスタンプはそのまま-b
: ファイル内容に差異があればコピー先のバックアップを取得してからコピー
別ディレクトリに取ってあるバックアップ元のファイルを元の場所に戻したりするときにも便利かなあと思ったのだけれども
-m
を忘れるとデフォルトの755になってしまう- あらかじめコピー元のファイルのパーミッションを知ってないといけなくて面倒
- 再起コピーがないのでバックアップ元が複数階層あってもと同じ階層を再現出来ない
ので、日常だと最初に書いた空ディレクトリの作成が一番重宝するかなと思います。リストアは普通にcp -a
とかrsync
でやればよさそう。