tarを展開するときパーミッション、所有者を一定にする
tarボールはファイルのパーミッションとuid、gidを保持しているため、root権限で展開する時には、それらの情報を保ったまま展開される。しかし、一定のgid、uid、パーミッションを持つように展開したい場面がある。例えばGTKのテーマを/usr/share/themes/に展開する場面では、所有者「root:root」、ファイルのパーミッション「rw-r--r--」、ディレクトリのパーミッション「rwxr-xr-x」が望ましい。
これまでtarボールの展開後にchownやchmodでいちいち変更していたが、tarコマンドのオプションで何とか出来ないか調べてみた。
所有者については「-o」もしくは「--no-same-owner」オプションをつけることで、root:rootにすることが出来る。
使用例:
しかし、tarコマンドではumaskに基づいてパーミッションを狭めることは出来るが、一定の値にすることは出来ない。仕方がないのでbashスクリプトで自動化する事にした。
$ []tar -ztf myGtkTheme.tar.gz[]
[]myGtk/[]
[]myGtk/index.theme[]
[]...省略...[]
$ []sudo tar -ozxf myGtkTheme.tar.gz -C /usr/share/themes[] []-ozxfの内、fが必ず最後でないと動作しない[]
$ []ls -ld /usr/share/themes/myGtk[]
[]drwx------ 4 root root 4096 2008-05-06 14:00 [][]/usr/share/themes/myGtk/[]
#!/bin/bash #setPerm.sh #Set permission recursively for files to 644, directories 755. if [ $# -eq 0 ] ; then echo "usage: setPerm.sh target1 [target2 ...]" echo "targetN must be a file or directory." fi while [ $# -gt 0 ] ; do find $1 -type d -print0 | xargs -0 chmod 755 find $1 -type f -print0 | xargs -0 chmod 644 shift done