MacOSXでは、ファイルやディレクトリごとにリード、ライト、実行の権限が設定されるようになっています。これは、誰かが作ったファイルを別のユーザーが勝手に削除したり、変更したりできないようにするためです。このような権限の設定をファイルのパーミッションといいます。
次のrwxがパーミッションです。rはリード、wはライト、xは実行の権限で、-(マイナス)はその権限が無いことを表しています。パーミッションは、「ファイルのオーナー(作成者)」、「グループ(オーナーと同じグループに所属するユーザー)」、「その他のユーザー」のそれぞれに対して設定できます。最初のrwxが「オーナー」、次のrwxが「グループ」、最後のrwxが「その他のユーザー」に対するパーミッションです。たとえば、ファイルのパーミッションがrwxr-xr-xの場合は「オーナー」に対してリード、ライト、実行の権限が与えられていて、「グループ」と「その他のユーザー」にはリードと実行の権限だけが与えられます。
パーミッション表示の後に+記号が表示されている場合は、ファイルにACL(アクセスコントロールリスト)が関連付けられています。ACLは個々のユーザーに対して(パーミッションよりきめ細かく)アクセス権を設定するためのしくみです。パーミッション表示の後に@マークが表示されている場合は、ファイルに拡張属性が設定されていることを示しています。
その後の数字はディレクトリ内のファイルの数(隠しファイルを含む)です。通常のファイルの場合、この数字は1です。
たとえば、次のコマンドでtest.shファイルに権限751を指定した場合、オーナーがリード、ライト、実行の権限を持ち、グループがリードと実行の権限を持ち、その他のユーザーは実行権限だけを持ちます。
パーミッションの表示
ファイルのパーミッションを調べるには、lsコマンドに-l(ハイフン、エル)をつけて実行します。mini:~ takegata$ ls -l
total 16
drwx------+ 10 takegata takegata 340 3 25 09:05 Desktop
drwx------+ 6 takegata takegata 204 3 21 02:21 Documents
drwx------+ 3 takegata takegata 102 3 19 20:54 Downloads
drwx------+ 26 takegata takegata 884 3 26 13:41 Library
drwx------+ 3 takegata takegata 102 3 19 20:03 Movies
drwx------+ 4 takegata takegata 136 3 23 00:05 Music
drwxr-xr-x 2 takegata takegata 68 3 21 01:23 NewDir
drwx------+ 4 takegata takegata 136 3 22 12:51 Pictures
drwxr-xr-x+ 4 takegata takegata 136 3 19 20:03 Public
drwxr-xr-x+ 5 takegata takegata 170 3 19 20:03 Sites
-rw-r--r-- 1 takegata takegata 5 3 20 23:02 test.txt
lrwxr-xr-x 1 root takegata 58 3 19 20:04 ユーサ゛登録 -> /Users/takegata/Library/Assistants/Send Registration.setup
mini:~ takegata$
各行の先頭の文字はファイル・ディレクトリの種類をあらわしています。dはディレクトリ、l(エル)はシンボリックリンク、-(ハイフン)は通常のファイルです。total 16
drwx------+ 10 takegata takegata 340 3 25 09:05 Desktop
drwx------+ 6 takegata takegata 204 3 21 02:21 Documents
drwx------+ 3 takegata takegata 102 3 19 20:54 Downloads
drwx------+ 26 takegata takegata 884 3 26 13:41 Library
drwx------+ 3 takegata takegata 102 3 19 20:03 Movies
drwx------+ 4 takegata takegata 136 3 23 00:05 Music
drwxr-xr-x 2 takegata takegata 68 3 21 01:23 NewDir
drwx------+ 4 takegata takegata 136 3 22 12:51 Pictures
drwxr-xr-x+ 4 takegata takegata 136 3 19 20:03 Public
drwxr-xr-x+ 5 takegata takegata 170 3 19 20:03 Sites
-rw-r--r-- 1 takegata takegata 5 3 20 23:02 test.txt
lrwxr-xr-x 1 root takegata 58 3 19 20:04 ユーサ゛登録 -> /Users/takegata/Library/Assistants/Send Registration.setup
mini:~ takegata$
次のrwxがパーミッションです。rはリード、wはライト、xは実行の権限で、-(マイナス)はその権限が無いことを表しています。パーミッションは、「ファイルのオーナー(作成者)」、「グループ(オーナーと同じグループに所属するユーザー)」、「その他のユーザー」のそれぞれに対して設定できます。最初のrwxが「オーナー」、次のrwxが「グループ」、最後のrwxが「その他のユーザー」に対するパーミッションです。たとえば、ファイルのパーミッションがrwxr-xr-xの場合は「オーナー」に対してリード、ライト、実行の権限が与えられていて、「グループ」と「その他のユーザー」にはリードと実行の権限だけが与えられます。
パーミッション表示の後に+記号が表示されている場合は、ファイルにACL(アクセスコントロールリスト)が関連付けられています。ACLは個々のユーザーに対して(パーミッションよりきめ細かく)アクセス権を設定するためのしくみです。パーミッション表示の後に@マークが表示されている場合は、ファイルに拡張属性が設定されていることを示しています。
その後の数字はディレクトリ内のファイルの数(隠しファイルを含む)です。通常のファイルの場合、この数字は1です。
オーナーとグループ
ディレクトリ内のファイル数の後に、オーナーとグループが表示されます。上の例では、「ユーザー登録」というシンボリックだけオーナーがrootでグループがtakegata、それ以外はオーナーとグループがともにtakegataになっています。オーナーの変更
ファイルのオーナーを変更するにはchownコマンドを使います。たとえば、test.txtのオーナーをtakegataからrootに変更するには、次のコマンドを使います。mini:~ takegata$ chown root test.txt
chown: test.txt: Operation not permitted
mini:~ takegata$
おっとだめでしたね。ファイルのオーナーをrootにするには管理者権限が必要でした。まず、suで管理者権限を取得します。chown: test.txt: Operation not permitted
mini:~ takegata$
mini:~ takegata$ su
Password:
sh-3.2#
それからchownを実行します。Password:
sh-3.2#
sh-3.2# chown root test.txt
sh-3.2#
ls -l でファイルのオーナーを確認します。sh-3.2#
sh-3.2# ls -l test.txt
-rw-r--r-- 1 root takegata 5 3 20 23:02 test.txt
sh-3.2#
-rw-r--r-- 1 root takegata 5 3 20 23:02 test.txt
sh-3.2#
パーミッションの変更
ファイルのパーミッションを変更するにはchmodコマンドを使用します。アクセス権の指定は3桁の数字で、それぞれの桁がオーナー、グループ、その他のユーザーの権限を表します。権限は0〜7の数字でリード、ライト、実行の各権限を次のような2進数に見立てた値になります。権限 | 値 |
--- | 0 |
--x | 1 |
-w- | 2 |
-wx | 3 |
r-- | 4 |
r-x | 5 |
rw- | 6 |
rwx | 7 |
たとえば、次のコマンドでtest.shファイルに権限751を指定した場合、オーナーがリード、ライト、実行の権限を持ち、グループがリードと実行の権限を持ち、その他のユーザーは実行権限だけを持ちます。
mini:~ takegata$ chmod 751 test.sh
権限の指定は数字ではなく+または-の記号とrwxの文字で行うこともできます。たとえば、+wを指定すると、オーナー、グループ、その他のユーザーに対して同時にライト権限が付与されます。-wを指定すると、ライト権限が取り消されます。実行権の付与
UNIXと同様に、MacOSXでは実行権の付与されていないファイルはコマンドとして実行できません。たとえば、"ls -l" という内容のファイルをtest.shというファイル名で作ってみます。mini:~ takegata$ echo "ls -l" > test.sh
このように、シェルで実行可能なコマンドをテキストファイルに記述したものをシェルスクリプトと呼びます。現在のディレクトリにあるシェルスクリプトを実行するには、ファイル名の頭に./(ドットスラッシュ)を付けてコマンドラインに入力します。ドットは「現在のディレクトリ」を表し、スラッシュは「その下にあるファイル(またはディレクトリ)」を表します。このファイルには、まだ実行権限を付与していないので権限エラーになります。mini:~ takegata$ ./test.sh
-bash: ./test.sh: Permission denied
chmodコマンドで +x を指定することによってファイルに実行権限を付与することができます。-bash: ./test.sh: Permission denied
mini:~ takegata$ chmod +x test.sh
このコマンドで、test.shファイルのパーミッションは次のようになります。mini:~ takegata$ ls -l test.sh
-rwxr-xr-x 1 takegata takegata 6 3 27 04:41 test.sh
これで、このシェルスクリプトがコマンドとして実行できるようになります。-rwxr-xr-x 1 takegata takegata 6 3 27 04:41 test.sh
mini:~ takegata$ ./test.sh
total 24
drwx------+ 10 takegata takegata 340 3 25 09:05 Desktop
drwx------+ 6 takegata takegata 204 3 21 02:21 Documents
drwx------+ 3 takegata takegata 102 3 19 20:54 Downloads
drwx------+ 26 takegata takegata 884 3 26 13:41 Library
drwx------+ 3 takegata takegata 102 3 19 20:03 Movies
drwx------+ 4 takegata takegata 136 3 23 00:05 Music
drwxr-xr-x 2 takegata takegata 68 3 21 01:23 NewDir
drwx------+ 4 takegata takegata 136 3 22 12:51 Pictures
drwxr-xr-x+ 4 takegata takegata 136 3 19 20:03 Public
drwxr-xr-x+ 5 takegata takegata 170 3 19 20:03 Sites
-rwxr-xr-x 1 takegata takegata 6 3 27 04:41 test.sh
-rw-r--r-- 1 root takegata 5 3 20 23:02 test.txt
lrwxr-xr-x 1 root takegata 58 3 19 20:04 ユーサ゛登録 -> /Users/takegata/Library/Assistants/Send Registration.setup
mini:~ takegata$
total 24
drwx------+ 10 takegata takegata 340 3 25 09:05 Desktop
drwx------+ 6 takegata takegata 204 3 21 02:21 Documents
drwx------+ 3 takegata takegata 102 3 19 20:54 Downloads
drwx------+ 26 takegata takegata 884 3 26 13:41 Library
drwx------+ 3 takegata takegata 102 3 19 20:03 Movies
drwx------+ 4 takegata takegata 136 3 23 00:05 Music
drwxr-xr-x 2 takegata takegata 68 3 21 01:23 NewDir
drwx------+ 4 takegata takegata 136 3 22 12:51 Pictures
drwxr-xr-x+ 4 takegata takegata 136 3 19 20:03 Public
drwxr-xr-x+ 5 takegata takegata 170 3 19 20:03 Sites
-rwxr-xr-x 1 takegata takegata 6 3 27 04:41 test.sh
-rw-r--r-- 1 root takegata 5 3 20 23:02 test.txt
lrwxr-xr-x 1 root takegata 58 3 19 20:04 ユーサ゛登録 -> /Users/takegata/Library/Assistants/Send Registration.setup
mini:~ takegata$
投稿:竹形 誠司[takegata]/2009年 03月 27日 05時 07分
/更新:2009年 03月 27日 05時 10分