12. ファイルの権限操作 chmod

 
 chmod は、いささか長くなってきたので別立てしました。
12.1 chmod ファイルの権限操作
12.2  Sticky ビットについて
12.3  再帰的に操作するときにディレクトリのみファイルのみに設定したい

12.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シンボリックリンク
rRead 権限
wWrite 権限
x実行権限
tSticky ビット
 を意味します。最も左の文字は、ファイルの持つ意味であり、普段変更することはまずありません。  左から2番目以降の文字を変更することは、多いのでよく覚えてください。  左から2番目以降の文字は、3つずつに区切って考えます。それぞれに rwx のモードがあてはめられ、- で表示されている個所は、その権限を持たないことを意味します。  3つずつの権限はそれぞれ、誰に対しての権限なのかを意味します。1番目はオーナで、2番目はグループで、3番目はワールドに対しての権限を意味します。  ですから -rwxrwxrwx であれば、どんなユーザから何をされてもよいということになりますし、---------- であれば、root ユーザ以外からは、見ることさえできないということになります。  ディレクトリに対して、r の権限がなければ cd することさえできません。  Sticky ビット に関しては「12.2 Sticky ビットについて」で説明します。  通常、あるディレクトリの配下にファイルを作成する場合は、デフォルトでそのディレクトリの権限が付与されます。  それぞれの、権限を8進数で設定する場合は、最上位の1つを1桁としてその下を3つずつの区切りとします。ビットで表現されているので8進数になるわけです。最上位の1桁は省略可能です。  例えば
-rwxr-xr-- → 754
-rwxr-xr-x → 755
 のように表現するわけです。具体的には、
> chmod 754 ファイル名
 というように記述します。  また、+シンボル とか -シンボル という表現も出来ます。  例えばすべてのユーザに対して、ファイルの実行権限を与えるならば、
> chmod +x ファイル名
 というように記述します。  よく使うオプションとして、以下のものがあります。
オプション文字列 意味
-R 指定したファイル自身だけでなく、その ファイルをルートとする階層のファイルのユーザIDや グループIDを変更する

12.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
 ということになります。

12.3 再帰的に操作するときにディレクトリのみファイルのみに設定したい

 表題のような事態になったのですよ。  バックアップとっていた、あるディレクトリをコピーして操作しようとしたら、ディレクトリの「x」権限がなくなっててアクセスするのに四苦八苦。
> chmod -R +x ./ディレクトリ名
 とやっちゃうと、配下のすべてのファイルに実行権限がついてしまうわけです。  参ったなぁと思っていたら、同じことを考えている人がいるんですね。  以下「ファイルまたはディレクトリのみへの chmod コマンド」の孫引きになります。  ファイルの場合は
> find ./ディレクトリ名 -type f -print | xargs chmod +x
 ディレクトリの場合は
> find ./ディレクトリ名 -type d -print | xargs chmod +x
 権限は、「x」の文字を変えたり、8進表記にすればいいわけです。