MacやLinuxで、ファイルの実行権限などのパーミッションを確認・変更する方法。
パーミッションの確認方法
パーミッションを確認するには、ls
コマンドの-l
オプションを使う。
$ ls -l -rw-r--r-- 1 name staff 31 5 29 11:24 hello.sh drwxr-xr-x 12 name staff 384 5 5 22:03 ruby-book -rw-r--r-- 1 name staff 235 5 6 09:22 perm.rb
-rw-r--r--
は、頭の1桁がファイルタイプ、それ以降3桁区切りでパーミッションを表している。
- rw- r-- r--
と4つに分けると、左から
- ファイルタイプ(1桁)
d
ディレクトリ、-
通常ファイル - 所有ユーザーの権限(3桁)
- 所有グループの権限(3桁)
- その他の人の権限(3桁)
となっている。
記号の意味
r
読み取り権限w
書き込み権限x
実行権限
ディレクトリの場合は、実行権限x
がないとアクセスできない。
- rw- r-- r--
なら、ファイルの所有ユーザには読み取り権限と書き込み権限があり、所有グループやその他のユーザは読み取り権限だけがある。
所有ユーザ(自分)の権限がrw-
だということは、実行権限x
がないためスクリプトファイルを実行することができない。新しく作ったファイルはデフォルトでは実行権限がないため、自分でパーミッションを変更する必要がある。
パーミッションの変更
パーミッション変更にはchmod
コマンドを使う。由来はchange mode。
引数をアルファベット&記号で書く方法と、数字で書く方法がある。
変更できるのは、所有者かrootユーザのみ。
アルファベット&記号で指定する
chmod [ugoa][+-=][rwx] filename
hello.shというファイルの所有者に実行権限をつける例。
$ chmod u+x hello.sh
u+x
の部分で、変更権限を指定する。
(1文字目:変更対象)複数可。省略するとa
を指定したことになる
u
所有ユーザ (user)g
所有グループ (group)o
その他 (other)a
全てのユーザ (all)
(2文字目)
+
権限を与える-
権限を無くす=
指定した権限にする
(3文字目:変更する権限)複数可
r
読み取り権限 (read)w
書き込み権限 (write)x
実行権限 (execute)
(例)
test.sh
というファイルを新規作成して、パーミッションを確認。
$ touch test.sh $ ls -l test.sh -rw-r--r-- 1 name staff 0 5 29 12:11 test.sh
全てのユーザ(a
なので省略)にw
とx
をつける。
$ chmod +wx test.sh $ ls -l test.sh -rwxr-xr-x 1 name staff 0 5 29 12:11 test.sh
その他のユーザo
の権限をr
だけにする(=
は変更前の状態にかかわらず変更する)。
$ chmod o=r test.sh $ ls -l test.sh -rwxr-xr-- 1 name staff 0 5 29 12:11 test.sh
所有グループg
とその他のユーザo
の権限をrwx
にする。
$ chmod go=rwx test.sh $ ls -l test.sh -rwxrwxrwx 1 name staff 0 5 29 12:11 test.sh
所有グループg
とその他のユーザo
の権限からw
とx
を無くす。
$ chmod go-wx test.sh $ ls -l test.sh -rwxr--r-- 1 name staff 0 5 29 12:11 test.sh
慣れると算数みたいで簡単。
数値で指定する
u+x
を使わずに数字で指定する方法。変更前の状態にかかわらず変更される。
[所有ユーザの権限][所有グループの権限][その他の権限]
を各1桁の数値(0〜7)で表す。
$ chmod 744 test.sh
意味 | 数値 |
---|---|
読み取り(r) | 4 |
書き込み(w) | 2 |
実行(x) | 1 |
rwx
の合計点で指定する。
権限 | 数値 | 合計 |
---|---|---|
rwx | 4 + 2 + 1 | 7 |
rw- | 4 + 2 + 0 | 6 |
r-x | 4 + 0 + 1 | 5 |
r-- | 4 + 0 + 0 | 4 |
-wx | 0 + 2 + 1 | 3 |
-w- | 0 + 2 + 0 | 2 |
--x | 0 + 0 + 1 | 1 |
--- | 0 + 0 + 0 | 0 |
たとえば、さっきのtest.shを最初に作ったときの状態。
$ ls -l test.sh -rw-r--r-- 1 name staff 0 5 29 12:11 test.sh
rw- r-- r--
は数値で表すと644
。
所有ユーザに実行権限x
をつけるとするとrwx r-- r--
。数値で表すと744
なので、以下のようになる。
$ chmod 744 test.sh $ ls -l test.sh -rwxr--r-- 1 name staff 0 5 29 12:11 test.sh
数値モードの便利なところは、変更前のパーミッションがどうなっているかにかかわらず絶対的に指定できるところ。
スクリプトを作ったときは744
とか、よく使うものを覚えてしまえばいい。