2013年1月30日水曜日

シンボリックリンク自体の chown

$ ls -l
total 0
-rw-rw-r-- 1 user user 0 2013-01-30 12:20 File
lrwxrwxrwx 1 user user 4 2013-01-30 12:20 SymLink -> File
という状態の時に Symlink に対して chown すると
$ sudo chown root:root SymLink
$ ls -l
total 0
-rw-rw-r-- 1 root root 0 2013-01-30 12:20 File
lrwxrwxrwx 1 user user 4 2013-01-30 12:20 SymLink -> File
シンボリックリンクの参照先の File が chown されます。
man chown で見ると
$ man chown
... snip ...
       -h, --no-dereference
              affect  each  symbolic link instead of any referenced file (useful only on systems that can change the ownership
              of a symlink)
... snip ...
とあるので --no-dereference を付けるとシンボリックリンク自体が chown されるようです。
$ ls -l
total 0
-rw-rw-r-- 1 user user 0 2013-01-30 12:20 File
lrwxrwxrwx 1 user user 4 2013-01-30 12:20 SymLink -> File

$ sudo chown --no-dereference root:root SymLink

$ ls -l
total 0
-rw-rw-r-- 1 user user 0 2013-01-30 12:20 File
lrwxrwxrwx 1 root root 4 2013-01-30 12:20 SymLink -> File
シンボリックリンク自体が chown されました。

Python だと
os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)
で follow_symlinks を False にすれば良さそうなのですが
Python 3.2 以前では follow_symlinks 使えないようです。
subprocess で chown コマンドを呼ぶしかないか。。。

0 件のコメント:

コメントを投稿