コマンドリファレンス - ファイルの権限操作 chmod
1. chmod ファイルの権限操作
2. Sticky ビットについて
3. 再帰的に操作するときにディレクトリのみファイルのみに設定したい
1. chmod ファイルの権限操作
指定したファイルの、アクセス権限を変更します。
chown [オプション] モード ファイル名
まず、UNIX にはファイルへのアクセスモードがあることを知っておいてください。
アクセスモードは、通常4桁の8進数かまたは、シンボルで表示します。
例えば、
> ls -l
-rw-r--r-- 1 user user 449471 5/26 2001 a
-rw-r--r-- 1 user user 19974413 12/17 19:33 b
-rw-r--r-- 1 user user 19554515 11/30 13:34 c
-rwxr-xr-x 1 user user 135303 11/30 13:12 d*
drwxr-xr-x 2 user user 512 10/30 1991 e/
lrwxr-xr-x 1 user user 29 3/ 2 2001 f@ -> /home
としたときに、左に表示されている drwx という文字がそれぞれのアクセスモードを示しています。それぞれの文字は、
シンボル 意味
d ディレクトリ
l シンボリックリンク
r Read 権限
w Write 権限
x 実行権限
t Sticky ビット
を意味します。最も左の文字は、ファイルの持つ意味であり、普段変更することはまずありません。
左から2番目以降の文字を変更することは、多いのでよく覚えておきましょう。
左から2番目以降の文字は、3つずつに区切って考えます。
それぞれに rwx のモードがあてはめられ、- で表示されている個所は、その権限を持たないことを意味します。
3つずつの権限はそれぞれ、誰に対しての権限なのかを意味します。
1番目はオーナで、2番目はグループで、3番目はワールドに対しての権限を意味します。
ですから -rwxrwxrwx であれば、どんなユーザから何をされてもよいということになりますし、---------- であれば、root ユーザ以外からは、見ることさえできないということになります。
ディレクトリに対して、r の権限がなければ cd することさえできません。
Sticky ビット に関しては「2. Sticky ビットについて 」で説明します。
通常、あるディレクトリの配下にファイルを作成する場合は、デフォルトでそのディレクトリの権限が付与されます。
それぞれの、権限を8進数で設定する場合は、最上位の1つを1桁としてその下を3つずつの区切りとします。ビットで表現されているので8進数になるわけです。最上位の1桁は省略可能です。
例えば
-rwxr-xr-- → 754
-rwxr-xr-x → 755
のように表現するわけです。具体的には、
chmod 754 ファイル名
というように記述します。
また、+シンボル とか -シンボル という表現も出来ます。
例えばすべてのユーザに対して、ファイルの実行権限を与えるならば、
chmod +x ファイル名
というように記述します。
よく使うオプションとして、以下のものがあります。
オプション 意味
-R 指定したファイル自身だけでなく、そのファイルをルートとする階層のファイルのユーザIDやグループIDを変更する
2. Sticky ビットについて
これは、/var/tmp/vi.recover に設定するビットでしかわたしは使ったことがありません。
/var/tmp/vi.recover は、正に vi を使用しているときになんらかのトラブルで vi が停止したり、リモートからの操作中に接続が切断されたときに、それまで修正していたファイルを復元(recover)するためのディレクトリです。
vi は誰でも使いたいので、基本的には /var/tmp/vi.recover は rwxrwxrwx なのですが、このままでは逆に誰でもこれを削除することができます。
なので、誰でもフルアクセスできるが、削除だけは owner にしかできないようにしたい!
というときに使うビットなのです。
ビットは 777 の上に存在し
1000 が 全ユーザ
2000 が group
4000 が owner
となっています。
なので /var/tmp/vi.recover に正しい権限を設定するには
chmod 1777 /var/tmp/vi.recover
ということになります。
3. 再帰的に操作するときにディレクトリのみファイルのみに設定したい
表題のような事態になったのですよ。
バックアップとっていた、あるディレクトリをコピーして操作しようとしたら、ディレクトリの「x」権限がなくなっててアクセスするのに四苦八苦。
chmod -R +x ./ディレクトリ名
とやっちゃうと、配下のすべてのファイルに実行権限がついてしまうわけです。
参ったなぁと思っていたら、同じことを考えている人がいるんですね。
以下「ファイルまたはディレクトリのみへの chmod コマンド 」の孫引きになります。
ファイルの場合は
find ./ディレクトリ名 -type f -print | xargs chmod +x
ディレクトリの場合は
find ./ディレクトリ名 -type d -print | xargs chmod +x
権限は、「x」の文字を変えたり、8進表記にすればいいわけです。