前の記事で、ls -l の -rw-r--r-- を読めるようになりました。今回はいよいよ、その権限(=誰が何をしてよいかの決まり)を直す番です。
私が最初に「Permission denied」で手が止まったのは、自分で書いたシェルスクリプト(=ターミナルに打つコマンドを、順番にファイルに書いておいたもの)を動かそうとしたときでした。ファイルはちゃんとあるのに、./hello.sh と打つと断られる。原因は、実行の権限(x)がついていなかっただけでした。わかってしまえば、1行で直せます。
この記事では、権限を変える chmod と、持ち主を変える chown の使い方を、練習用のディレクトリで試していきます。あわせて、ネットでよく見かける「とりあえず 777」が危ない理由もお話ししますね。
-
chmodで権限を変える2つの書き方(u+xと755) - スクリプトが「Permission denied」で動かないときの直し方
-
sudo chownで持ち主を変える方法 - 「chmod 777」や「-R」を気軽に使ってはいけない理由
-
ls -lの権限の文字(rwx)と、644・755の意味がわかる -
echoと>でファイルに文字を書ける
まだの方は、前の記事「Linuxのパーミッション入門|ls -l の rwx を読めるようにする【初心者向け】」から読むのがおすすめです。
- トークン:ログインした状態や、使ってよい範囲を表す文字列。APIキーと同じく、パスワードと同じように人に見せてはいけません
- .env ファイル:APIキーなどの秘密の設定を、
名前=値の形で書いておくファイル。人に渡したり、Git に入れたりしません - 鍵:SSH などでパスワードの代わりに使う、2つで1組のデータ。公開鍵は相手に渡す「錠前」、秘密鍵は自分だけが持つ「鍵」
- sudo:許可されたユーザーが、コマンドの前につけて、そのコマンドだけを管理者(root)の権限で実行するしくみ。パスワードを聞かれたら、root ではなく自分のパスワードを入れます
用語で迷ったら、連載のまとめ記事の「よく出てくる用語ミニ辞典」でも確かめられます。
結論:「誰に」「何を」「足す・外す」で考える
| やりたいこと | コマンドの例 | 意味 |
|---|---|---|
| 自分に実行権限を足す | chmod u+x hello.sh | 持ち主(u)に x を足す |
| グループとその他から書き込みを外す | chmod go-w memo.txt | グループ(g)とその他(o)から w を外す |
| 数字でまとめて決める | chmod 644 memo.txt | rw-r--r-- にする |
| 自分だけが読み書きできるようにする | chmod 600 secret.txt | rw------- にする |
| 持ち主を変える | sudo chown kaito:kaito file | 持ち主とグループを kaito にする |
準備:練習用のディレクトリを用意する
練習は ~/linux-practice/chmod-test の中で行います。
- 1
- 2
- 3
mkdir -p ~/linux-practice/chmod-test
cd ~/linux-practice/chmod-test
pwdここから先の出力例は、Debian 13での実行例です(ユーザー名 kaito・パソコン名 demo のダミー環境)。UbuntuやWSL(=Windows の中で Linux を動かせる、Microsoft のしくみ)では、表示が少し違うことがあります。
(例)
- 1
/home/kaito/linux-practice/chmod-testスクリプトが「Permission denied」で動かない
まずは、よくあるつまずきを再現してみましょう。画面に1行出すだけの、小さなシェルスクリプトを作ります。
- 1
- 2
- 3
echo 'echo "こんにちは、スクリプトです"' > hello.sh
cat hello.sh
ls -l hello.sh(例)
- 1
- 2
- 3
- 4
kaito@demo:~/linux-practice/chmod-test$ cat hello.sh
echo "こんにちは、スクリプトです"
kaito@demo:~/linux-practice/chmod-test$ ls -l hello.sh
-rw-rw-r-- 1 kaito kaito 47 Nov 1 05:25 hello.sh今回の環境では -rw-rw-r-- と表示されました(前の記事で見たとおり、umask の設定でグループにも w が付く環境です。-rw-r--r-- の環境もあります)。どちらにしても、x はどこにもついていません。
ここで、スクリプトを実行してみます。./ は「今いる場所の」という意味です。
- 1
./hello.sh(例)
- 1
-bash: ./hello.sh: Permission deniedls -l の結果を見ると、どこにも x がありません。だから「実行してはいけない」と断られたわけです。
chmod u+x で、自分に実行権限を足す
- 1
- 2
- 3
chmod u+x hello.sh
ls -l hello.sh
./hello.sh(例)
- 1
- 2
- 3
- 4
kaito@demo:~/linux-practice/chmod-test$ ls -l hello.sh
-rwxrw-r-- 1 kaito kaito 47 Nov 1 05:25 hello.sh
kaito@demo:~/linux-practice/chmod-test$ ./hello.sh
こんにちは、スクリプトです持ち主の3文字が rw- から rwx に変わり、スクリプトが動きました(今回の環境ではグループの3文字が rw- なので、全体は -rwxrw-r-- です)。
chmod の書き方は「誰に」「足すか外すか」「何を」の組み合わせです。
| 部品 | 書き方 | 意味 |
|---|---|---|
| 誰に | u | 持ち主(user) |
g | グループ(group) | |
o | その他の人(others) | |
a | 全員(all) | |
| どうする | + | 足す |
- | 外す | |
= | その形にそろえる | |
| 何を | r・w・x | 読む・書く・実行 |
手順書では chmod +x hello.sh のように、「誰に」を省いた書き方もよく見かけます。この場合は、多くの環境で全員に x がつきます。自分だけでよいなら u+x と書いておくと、意味がはっきりして安心です。
数字で決める:chmod 644 と chmod 600
前の記事で覚えた数字でも、権限を決められます。数字の場合は、足し引きではなく「この形にする」という意味になります。
- 1
- 2
- 3
- 4
- 5
- 6
echo "メモです" > memo.txt
chmod 644 memo.txt
ls -l memo.txt
echo "見られたくないメモ(練習用のダミー)" > private.txt
chmod 600 private.txt
ls -l private.txt(例)
- 1
- 2
- 3
- 4
kaito@demo:~/linux-practice/chmod-test$ ls -l memo.txt
-rw-r--r-- 1 kaito kaito 13 Nov 1 05:25 memo.txt
kaito@demo:~/linux-practice/chmod-test$ ls -l private.txt
-rw------- 1 kaito kaito 55 Nov 1 05:25 private.txt数字で指定すると、umask の設定に関係なく、その形にそろいます。今回の環境でも、memo.txt は -rw-r--r--、private.txt は -rw------- になりました。
| 数字 | 文字 | 使いどころ |
|---|---|---|
644 | rw-r--r-- | ふつうのファイル |
600 | rw------- | 自分だけが読み書きする設定ファイルや鍵 |
755 | rwxr-xr-x | ディレクトリ、みんなが実行してよいスクリプト |
700 | rwx------ | 自分だけが入れるディレクトリ、自分だけのスクリプト |
あとで自動化のスクリプトを動かすとき、APIキー(=API を使うときに必要な、合言葉のような文字列)などを書いた設定ファイル(.env など)を作ることがあります。そうしたファイルは chmod 600 にして、自分以外は読めないようにしておくのが基本です。
持ち主を変える:sudo chown
chown(チェンジ・オーナー)は、ファイルの持ち主を変えるコマンドです。持ち主を変えるのは管理者の仕事なので、ふつうは sudo(管理者の権限を借りるコマンド)と一緒に使います。sudo のくわしいしくみは、この Lv2 の別の記事で扱います。
sudo を使うと、自分のユーザーのパスワードを聞かれます(WSL なら、最初に Ubuntu・Debian を入れたときに決めたパスワードです)。入力しても画面には何も表示されませんが、そのまま打って Enter で大丈夫です。対象は、必ず練習用のファイルだけにしてください。
わざと持ち主を root にしてみる
- 1
- 2
- 3
- 4
cd ~/linux-practice/chmod-test
echo "持ち主の練習" > owner.txt
sudo chown root:root owner.txt
ls -l owner.txt(例)
- 1
- 2
- 3
- 4
kaito@demo:~/linux-practice/chmod-test$ sudo chown root:root owner.txt
[sudo] password for kaito:
kaito@demo:~/linux-practice/chmod-test$ ls -l owner.txt
-rw-rw-r-- 1 root root 19 Nov 1 05:25 owner.txt[sudo] password for kaito: と出たら、自分のパスワードを入力して Enter です(入力しても何も表示されません)。一度パスワードを入れると、しばらく(初期設定では15分)は続けて sudo を使っても聞かれません。今回も、聞かれたのはこの1回目だけでした。
chown 持ち主:グループ ファイル の順に書きます。持ち主が root になったので、kaito はこのファイルを書き換えられなくなりました。
前の記事の読み方で確かめてみましょう。-rw-rw-r-- 1 root root の kaito は、持ち主(root)でもグループ(root)でもないので、その他の人の3文字 r-- で判断されます。読むことはできても、書くことはできない、というわけです。権限の文字は変わっていないのに、持ち主が変わるだけで「自分がどの区分か」が変わる、というのがポイントです。
- 1
echo "追記してみる" >> owner.txt(例)
- 1
-bash: owner.txt: Permission denied持ち主を自分に戻す
- 1
- 2
- 3
- 4
sudo chown kaito:kaito owner.txt
ls -l owner.txt
echo "追記できました" >> owner.txt
cat owner.txt(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
kaito@demo:~/linux-practice/chmod-test$ sudo chown kaito:kaito owner.txt
kaito@demo:~/linux-practice/chmod-test$ ls -l owner.txt
-rw-rw-r-- 1 kaito kaito 19 Nov 1 05:25 owner.txt
kaito@demo:~/linux-practice/chmod-test$ echo "追記できました" >> owner.txt
kaito@demo:~/linux-practice/chmod-test$ cat owner.txt
持ち主の練習
追記できましたowner.txt は2行になりました。持ち主が root のときの「追記してみる」は断られたので、ファイルには入っていません。
メッセージが日本語で出る環境では
日本語の設定(ロケール)になっている環境では、同じエラーが日本語で表示されます。今回の Debian 13 で日本語の設定にして試すと、次のようになりました(記事で作った hello.sh を実行権限を付ける前に実行したときと、持ち主を root にした owner.txt に追記したときのエラーです)。
(例)
- 1
- 2
- 3
- 4
kaito@demo:~/linux-practice/chmod-test$ ./hello.sh
-bash: ./hello.sh: 許可がありません
kaito@demo:~/linux-practice/chmod-test$ echo "追記してみる" >> owner.txt
-bash: owner.txt: 許可がありませんkaito の部分は、ご自分のユーザー名に読みかえてください。自分のユーザー名は whoami、グループは id で確かめられます。
🤖 詰まったらAIに聞こう:Permission denied を直したい
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Linuxの初心者です。「Permission denied」が出て困っています。
できるだけ安全な直し方(権限を広げすぎない方法)を、理由つきで教えてください。
chmod 777 や、ディレクトリ全体への -R は使わない方法でお願いします。
【使っている環境】WSLのUbuntu など
【自分のユーザー名(whoami の結果)】ここに貼る
【実行したコマンド】ここに貼る
【表示されたメッセージ】ここに貼る
【対象の ls -l(ディレクトリなら ls -ld)の結果】ここに貼る
【やりたいこと】例:自分で書いたスクリプトを実行したいやってはいけない直し方
ネットで「Permission denied」を検索すると、いろいろな直し方が出てきます。中には、その場は動くけれど、あとで困るものもあります。ここで紹介するものは、この記事では実行しません。読むだけにしてください。
- 「chmod 777」:全員に、読む・書く・実行のすべてを許す設定です。自分以外のユーザーやプログラムからも書き換えられるようになり、サーバー(=ほかのパソコンやアプリにサービスを提供するコンピューター)では乗っ取りのきっかけにもなります。「とりあえず 777」は使わないでください。
- 「chmod -R」「chown -R」をシステムのディレクトリに使う:
-Rは「中身まで全部」という意味です。/や/etc、/usrなどに使うと、システムに必要なファイルの権限がまとめて書き換わり、sudoやログインができなくなることがあります。元に戻すのはとても大変です。 - 何でも「sudo」をつけて実行する:権限のエラーを sudo で押し切ると、root が持ち主のファイルが増えて、あとで自分のユーザーで書き換えられなくなります。
権限のエラーが出たら、「誰が」「何を」できないのかを ls -l で確かめて、必要な人に、必要な権限だけを足す。これがいちばん安全な直し方です。
sudo で聞かれるパスワードは、AI にも、チャットにも、絶対に貼らないでください。また、権限を直したいファイルが設定ファイルの場合、中身にAPIキーやトークンが書かれていることがあります。中身を貼るときは「***」に置き換えてからにしましょう。
Permission denied が出たときの3ステップ
ここまでの内容を、実際にエラーが出たときの順番に並べると、こうなります。
-
ls -l ファイル名(ディレクトリならls -ld)で状態を読む:持ち主・グループ・権限の文字を確かめる - 自分がどの区分か決める:
whoamiの結果が持ち主なら持ち主の3文字、グループに入っていればグループの3文字、どちらでもなければその他の人の3文字を見る - 足りない1文字だけを足す:実行できないなら
chmod u+x、持ち主が違うならsudo chownで自分に戻す。777にはしない
よくある質問
Q. chmod u+x をしなくても、スクリプトを動かす方法はありますか?
あります。bash hello.sh のように、bash にファイルを読ませて動かす方法です。この場合、ファイルに必要なのは「読む(r)」だけなので、x がなくても動きます。何度も使うスクリプトなら、chmod u+x をしておいて ./hello.sh で動かすほうが手軽です。
Q. WSL で、Windows 側のフォルダ(/mnt/c の中)で chmod しても、権限が変わりません。
Windows のファイルは Linux とは別のしくみで権限を管理しているため、WSL の設定によっては chmod が反映されません。練習やスクリプトは、Linux 側のホーム(~)の中に置くのがおすすめです。
Q. 新しく作ったファイルが、最初から -rw-rw-r-- になるのはなぜですか?
新しいファイルの権限は、umask という設定で決まります。今回の Debian 13 の環境では、グループにも w が付く設定でした。気になるときは、この記事のように chmod 644 などの数字で、ほしい形にそろえれば大丈夫です。
まとめ
-
chmodは「誰に(u・g・o・a)」「足す・外す(+・-・=)」「何を(r・w・x)」で書く - スクリプトが動かないときは
chmod u+x ファイル名 - 数字なら
644(ふつう)、600(自分だけ)、755(実行・ディレクトリ) - 持ち主を変えるのは
sudo chown 持ち主:グループ ファイル - 「chmod 777」と、システムへの「-R」は使わない。必要な人に必要な権限だけ
次の記事では、今回ちらっと出てきた ユーザー・グループ・sudo のしくみと、「root で作業しない」理由を見ていきます。
次に読む記事
関連する記事
- Pythonで毎日の作業を自動化する入門|ダウンロードフォルダを自動で整理しよう:実行権限をつけたスクリプトで、毎日の作業を自動化してみたい方に
- プロが使う.gitignoreパターン集|現場で効くテンプレ:
.envなどの秘密のファイルを、Git に入れないようにしたい方に - Cursorにエラーを直してもらう5ステップ|エラーの渡し方・頼み方・直った後の確認まで:エラーを AI に渡すとき、何を添えればよいか知りたい方に