ファイルのパーミッションを変更する

MacLinuxで、ファイルの実行権限などのパーミッションを確認・変更する方法。

パーミッションの確認方法

パーミッションを確認するには、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なので省略)にwxをつける。

$ 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の権限からwxを無くす。

$ 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とか、よく使うものを覚えてしまえばいい。