権限

INPUT · スライド

権限を記号で変える(`chmod u+x`)

01 / 07

足りない1文字を足す

前のレッスンで、run.sh が動かない理由まで分かったね。

-rw-r--r--  run.sh   ↑ ここが - になっている

持ち主の3文字目、つまり実行の印が無い。だから足せばいいんだ。

chmod u+x run.sh

これで動くようになるよ。読み方はそのまま「u(持ち主)に + (足す)x(実行)」だよ。

英語の文のように読めるのが、記号で書くやり方のいいところだよ。

02 / 07

chmod に渡す3つの部品

chmod の指示は3つの部品をくっつけて作るよ。

chmod  u   +   x   run.sh       ↑   ↑   ↑      誰に どうする 何を

順番はいつも「誰に・どうする・何を」だよ。バラバラに覚えるより、3つの表を1回だけ見るのが早いよ。

誰に意味
u持ち主(user)
gグループ(group)
oその他みんな(other)
a全員(all)。ugo と同じ

chmod は change mode(権限を変える)の略だよ。mode という言葉は「権限のかたまり」を指す呼び名で、これから何度も出てくるよ。

03 / 07

+-=

「どうする」は3つあるよ。

記号意味
+足す(いま有るものは残す)
-引く(いま有るものから消す)
=これだけにする(残りは消す)

+- は分かりやすいね。気をつけるのは = だよ。

chmod u=r memo.txt

これは「持ち主は読むだけ」という意味で、書ける権限があっても消えるんだ。+- が「いまの状態から動かす」のに対して、= は「いまの状態を無視して決め打ちする」んだよ。

迷ったら +- を使うといいよ。いまの状態を壊さないので安全だからね。

04 / 07

いくつも一度に指定する

カンマで区切ると、いくつもまとめて指示できるよ。

chmod u=rw,go= himitsu.txt

読んでみよう。「持ち主は読み書きだけ、グループとその他は何も無し」。go= のうしろに何も書かないのが「全部消す」という意味なんだ。

結果は -rw------- になるよ。前のレッスンで見た /etc/shadow と同じ、秘密のファイルの形だね。

カンマの前後に空白を入れてはいけないよ。空白があると、シェルがそこで区切って別のファイル名だと思ってしまうからね。章10の「展開」でその仕組みをやるよ。

~ $ chmod u=rw,go= himitsu.txt~ $ stat -c %A himitsu.txt-rw-------

05 / 07

相手はいくつでもいい

ファイルはいくつ並べてもいいよ。

chmod a-w memo.txt himitsu.txt

2つとも「誰も書けない」状態になるよ。

ワイルドカードも使えるよ。

chmod u+x *.sh

.sh で終わるファイル全部に実行の印を立てる、という意味だね。スクリプトをまとめて作ったあとによく使う形だよ。

ここでも「並べたものを全部処理する」という Unix のやり方が出てきているね。rmcpgrep も同じだったのを思い出してね。

06 / 07

引くと、何が起きるか

権限を引くと、できなくなることが目に見えて増えるよ。ここはわざと失敗してみるのが一番わかりやすいんだ。

やったこと結果打つと
chmod u-w memo.txt-r--r--r-->> で足せない
chmod a-r himitsu.txt--w-------cat で読めない
chmod a-x run.sh-rw-r--r--./run.sh が動かない

エラーの言葉も見ておこう。誰が言っているかで文が違うんだ。

cat: can not open himitsu.txt: Permission denied-sh: can not create memo.txt: Permission denied

1つめは cat が言っている。2つめの -sh はシェルだよ。>> はシェルの仕事だったから、断られるのもシェルなんだ。章4でやった「> はコマンドではなくシェルがやっている」がここで効いてくるね。

07 / 07

さあ、打ってみよう

ホームには3つのファイルと1つの入れ物があるよ。

  • run.sh … 動かしたい(echo うごいた と書いてある)
  • memo.txt … ふつうのメモ
  • himitsu.txt … 秘密にしたい
  • shorui/ … 入れ物(このレッスンでは触らない)

どの問題も変えたら ls -lstat -c %A で確かめるのを忘れないでね。権限は目に見えないところで効くので、確かめる癖が身を守るよ。

1つだけ約束。chmod 777 は打たない。この章の最後まで来たら、なぜそれが強すぎるのか自分で説明できるようになっているはずだよ。