chmodとchownの--referenceオプション
ウェブの環境調整中です。プロダクトを置き換えるのにパッケージではなく、tarballを展開してちょこちょことなにやら実施。ところが、tarballに含まれているファイルやディレクトリのpermissionやowner,groupが現環境とちがっていていろんなところで不具合がでます。
そこで、tarballで上書きしたディレクトリ以下で、バックアップをとっていたディレクトリ以下と比較して違ったらそのパーミションを出力するスクリプトを書きました。出力はこんな。
$ check_perm.sh /home/hoge/foo.txt new=drwxrw-rw-,org=drwxrwxrwx
チェックしたのはいいけど、こんなの視認してchmodするのなんか馬鹿げてる。とってもたくさんあるんですもの。
じゃあ、chmodが食えるような引数に変換するか、lsの出力を777とか数字でだせないのかなと調べる。
うーん、できなかないけど難しそうだな。
こういうときはmanを読むのだ。chmodのmanを読むと --referenceというオプションがある。
--reference=RFILE use RFILE's mode instead of MODE values
RFILEのモードをMODE値の代わりに使う。とのこと。RFILEってなんじゃい。
ちょっと実験。
$ chmod --reference=hoge fuga
とやると、hogeのpermissionでfugaを設定してくれるみたい。chownも同じ。それは便利だ。ということでこんな感じのスクリプトを作成。
#!/bin/bash for i in `cat filelist` do if [ -e /home/foo/baa_bak/$i ] ; then chmod --reference=/home/foo/baa_bak/$i /home/foo/baa/$i chown --reference=/home/foo/baa_bak/$i /home/foo/baa/$i fi done