特定のディレクトリをバックアップしたいとき、cp -r target dest
すればもちろんコピーできるが、とっても大切なデータの場合慎重になる。
というのもcpコマンドではパーミッションまで保持してくれないからである。
-aオプションをつけると属性を引き継いだままコピーできるが、うまくいかないケースも稀にある。
そんなときはcpではなくtarを使うと吉
tar cfp - target_dir | tar xfp - -C /tmp/
オプションの意味だが、
- c createの意味 作成モード
f fileの意味 デフォルトだとテープとかいう謎なのでファイルモードに -p permissionの意味 今回のキモオプション パーミッションを保持する
x 解凍モード
- f 同じくファイルモード
- p 同じくパーミッションを保持
- C 指定したディレクトリへ解凍
例
例えば以下のようなworkディレクトリを/root/workへまるごとバックアップしたい時がある
# ll work/ total 4 -rw-rw-r-- 1 nginx nginx 0 Aug 30 14:36 aaa drwxrwxr-x 2 vagrant vagrant 4096 Aug 30 14:36 bbb # ll work/bbb/ total 0 -rw-rw-r-- 1 root root 0 Aug 30 14:36 cccc
tarで実行
tar cfp - work | tar xfp - -C /root
ちゃんとパーミッションが引き継がれている。
# ll /root/work/ total 4 -rw-rw-r-- 1 nginx nginx 0 Aug 30 14:36 aaa drwxrwxr-x 2 vagrant vagrant 4096 Aug 30 14:36 bbb # ll /root/work/bbb/ total 0 -rw-rw-r-- 1 root root 0 Aug 30 14:36 cccc