Linuxでファイルの権限や所有者を変更する
Linux環境でのファイルの権限や所有者を変更する方法をまとめます。Linuxにおいてファイルの所有者や権限を変更するには、chmod
, chown
, chgrp
のコマンドがあります。それぞれ見ていきます。
権限と所有者を確認する方法
まずはファイルやディレクトリがどのような権限で誰が所有者となっているのかを確認します。ls -l
コマンドでカレントディレクトリのファイルやディレクトリを一覧表示することが可能です。
$ ls -l
実行すると、以下のように表示されます。この例だと test.txt
, hello.sh
, work
が存在することがわかります。ほかにも更新日時やファイルサイズも何となく意味は分かるでしょう。
-rwxr--r-- 1 root root 32 Dec 13 02:38 hello.sh
-rw-r--r-- 1 root root 5 Dec 13 02:31 test.txt
drwxrwxr-x 2 tm tm 4096 Dec 13 02:19 work
左の方にある呪文のような -rwxr--r-- 1 root root
部分が権限や所有者を表す箇所です。この部分の見方を理解することで、ファイルの権限や所有者がどのようになっているかが把握できます。
ファイルの種類
-rwxr--r-- 1 root root
となっている箇所の先頭の1文字はファイルの種類を表します。種類と意味は以下の通りです。
文字 | 意味 |
---|---|
– | ファイル |
d | ディレクトリ |
l | シンボリックリンク |
上記例だと、-rwxr--r--
となっているのでファイルだということがわかります。
権限(パーミッション)
-rwxr--r-- 1 root root
となっている箇所の2文字目から10文字目部分はそのファイルやディレクトリの権限(パーミッション)を意味します。
hello.sh
のファイルに対してのパーミッションは次のようになっています。
rwxr--r--
これは3文字ずつの3パーツに分けて見ます。分けられた "rwx", "r–", "r–" の意味はそれぞれ、所有者の権限、グループの権限、その他権限を意味します。
"r", "w", "x", "-" があり、それぞれは以下のような意味を持ちます。
文字 | 意味 |
---|---|
r | 読み取り権限 |
w | 書き込み権限 |
x | 実行権限 |
– | 権限なし |
したがって -rwxr--r--
のパーミッションは次のようになります。
- 所有者(root)は読み書き実行すべて可能。
- グループ(root)は読み込みのみ可能。
- その他は読み込みのみ可能。
"root root" とある部分の左が所有者、右がグループです。
ここまでが権限(パーミッション)の確認のまとめでした。次はこの権限(パーミッション)を変更する方法を見ていきます。
chmodで権限を変更する
chmod
コマンドを使用すると上記で確認できる権限を変更することが可能です。chmod
は change mode の略です。
基本的な構文は以下の通りです。
chmod の構文
chmod [設定するパーミッション] [ファイル or ディレクトリ]
最初のパラメータで設定するパーミッション(-rwxr--r--
←この部分)を指定します。指定の方法がいくつかあります。
数字での指定
パーミッションは3桁の8進数で指定できます。左から所有者・グループ・その他のユーザーのパーミッションを意味します。
数値は権限許可する権限に対応した数値をすべて足し合わせた値にします。つまり、どの権限も持たせない場合は0、全権限を付与する場合は7(=4+2+1)となります。
文字 | 数値 | 意味 |
---|---|---|
r | 4 | 読み取り権限 |
w | 2 | 書き込み権限 |
x | 1 | 実行権限 |
例えば次のような設定を行う場合を考えます。
chmod 751 hoge.sh
この場合、対応表から権限は、所有者の場合は読み書き実行が可能で、グループの場合は読み取りと実行が可能、そのほかの場合は実行のみが可能となります。
全パターンの対応表は以下のとおりです。
数値 1 | 記号 | 意味 |
---|---|---|
0 | — | 権限なし |
1 | –x | 実行のみ |
2 | -w- | 書き込みのみ |
3 | -wx | 書き込みと実行 |
4 | r– | 読み込みのみ |
5 | r-x | 読み込みと実行 |
6 | rw- | 読み書き |
7 | rwx | 読み書き実行すべて |
記号での指定
数字での指定は直感的ではないため少しわかりにくいですが、記号を使ってもう少し直感的に指定することが可能です。
書き方は同じですが、数字で指定する箇所を以下の記号を使って指定します。指定の仕方は [ugoa][+-=][rwx]
← こんな感じです。
記号 | 意味 |
---|---|
u | 所有者の権限 |
g | グループの権限 |
o | その他のユーザーの権限 |
a | すべてのユーザー(u+g+o)の権限 |
+ | 後に記述した権限を付加する |
– | 後に記述した権限を削除する |
= | 後に記述した権限にする |
r | 読み込み権限 |
w | 書き込み権限 |
x | 実行権限 |
サンプル
hoge.shというファイルに対して権限を設定するサンプルを示します。それから ディレクトリ以下の全ファイルの権限をまるっと設定するには -R パラメータを指定します。
$ # すべてのユーザーに全権限を設定する
$ chmod a=rwx hoge.sh
$ # 所有者に実行権限を追加する
$ chmod u+x hoge.sh
$ # その他のユーザーから書き込みと読み込み権限を削除する
$ chmod o-rw hoge.sh
$ # .shの拡張子を持つファイルすべての権限を設定
$ chmod a=rwx *.sh
既存の権限に対して追加や削除ができるので、数字で指定するより柔軟に設定できるのが特徴です。ファイルやディレクトリの指定にはワイルドカード(*)も使えます。
ディレクトリごと権限を設定変更する
ディレクトリの権限を変えても中身のファイルやディレクトリの権限は変更されません。再帰的に中身をすべて同じように権限を設定変更するには -R
をつけて実行します。
$ # ディレクトリ(mydir)とそれ以下のファイルやディレクトリすべてに設定
$ chmod o-rw mydir -R
chownで所有者を変更する
chown
コマンドでファイルやディレクトリの所有者を変更することができます。change owner の略で文字通り所有者の変更を意味します。
文法は以下の通りです。
$ # chown [ユーザー名] [ファイル or ディレクトリ]
$ # hoge.sh ファイルの所有者を root にする
$ chown root hoge.sh
chgrpでグループを変更
chgrp
コマンドは change group の略でグループを変更します。chown
のグループ版です。
$ # chown [ユーザー名] [ファイル or ディレクトリ]
$ # hoge.sh ファイルの所有者を root にする
$ chown root hoge.sh
chgrp
も chown
も -R を付けるとディレクトリ以下まとめて所有者やグループを設定できます。
以上。
コメントを書く