先日、tarでアーカイブを作成し、あるディレクトリに展開したところ、展開したディレクトリのパーミッションが変わってしまった。このせいで、展開先ディレクトリにある他のファイルを参照していた他のプログラムがエラーを起こしてしまい、ひどい目に遭った。なぜ展開先ディレクトリが影響を受けてしまうのかとイライラしたが、結局tarでアーカイブを作成するときのやり方がまずかった。今後ミスしないようにメモしておく。
アーカイブ元
hoge/ abc.tgz --- 作成されたアーカイブ src/ a.txt b.txt :
srcディレクトリ内のファイルたちをアーカイブするつもりで、以下コマンドを実行。
cd src tar czvf ../abc.tgz ./
展開先
- destの展開前のパーミッションは777。
dest/ abc.tgz --- アーカイブファイル abc/ a.txt :
destというディレクトリにabc.tgzをコピーし、tarで展開したら、destのパーミッションが755に変わってしまった。
cd dest tar xzvf abc.tgz .
原因
自分としては、srcディレクトリ中身すべてをアーカイブ対象としたつもりが、srcディレクトリが対象になってしまっていたこと。そのせいで、展開先ディレクトリdestにsrcが展開されてしまうために起こる。
正しい方法
src内のファイルたちをちゃんと指定する。つまり、./ではなく、./*。
cd src tar czvf ../abc.tgz ./*
展開時には、
cd dest tar xzvf abc.tgz -C ./
とする。