ファイル情報とパーミッション

f:id:monozukuri-bu:20190726174009j:plain

最近冷夏が続いているので、このまま夏が終わらないかなと思っているshadowです。
今回はLinuxパーミッションについて記事を書きたいと思います。

パーミッションとは

パーミッションとはLinuxを含むUnixで使われているファイルやディレクトリへのアクセス権の設定です。
ファイルやディレクトリは、所有者、グループ、その他のユーザの3種類のそれぞれに対して、読み込み、書き込み、実行のアクセス権を設定することができます。

確認方法

まずは適当にファイルを作成します。

$ touch sample.txt

ファイルの情報を確認するにはlsコマンドを使います。

$ ls -l sample.txt                                                            
-rw-r--r--    1 user     user             0 Jul 24 08:15 sample.txt

結果の見方

まずは見方を説明します。
この1行を詳しく分けるとこうなります。

①- ②rw-r--r-- ③1 ④user user ⑤0 ⑥Jul 24 11:15 ⑦sample.txt

①ファイルのタイプ
 ディレクトリ(d)か、リンクファイル(l)か、通常ファイル(-)か判別出来ます。

②アクセス権
 これは9個の文字で出来ています。
 最初の3つが所有者(rw-)、次の3つがグループ(r--)、最後の3つがその他のユーザ(r--)です。
 それぞれ左から順に読み込み(r)、書き込み(w)、実行(x)を表しています。
 権限のない操作は"-"で表現されます。

 つまり、以下のような権限設定になっています。

所有者 グループ その他のユーザ
読み込み
書き込み × ×
実行 × × ×

③ハードリンクの数(ファイルの場合)
 ディレクトリの場合は、ディレクトリ内のサブディレクトリの数になります。

④所有者
 左が所有しているユーザー、右が所有しているグループです。

⑤ファイルサイズ
 中身がないので今回は0です。

⑥最終更新日時
 ファイルを作成した日時になっています。

⑦ファイル名
 ファイル(ディレクトリ)の名称です。

パーミッションの指定

パーミッションの指定方法には数値で指定する方法と文字と記号で指定する方法があります。

数値で指定する方法

数字 結果
0 ---
1 --x
2 -w-
3 -wx
4 r--
5 r-x
6 rw-
7 rwx

実は上記の対応は、1(x)、2(w)、4(r)だけ覚えておけば、計算で出すことができます。
例えば6(rw-)は読み込みと書き込みの権限ですが、2(w)+4(r)で表現できます。
また、全ての権限を持った値は7ですが、これは1(x)+2(w)+4(r)の結果に一致します。

記号で指定する方法

記号 結果
u 所有者の権限
g グループの権限
o その他のユーザの権限
a 全ての権限
+ 権限の追加
- 権限の削除
= 権限の指定
r 読み込み
w 書き込み
x 実行

記号の場合は権限の追加・削除が直感的にできそうです。

設定してみよう

アクセス権を変えてみたいと思います。
アクセス権の変更にはchmodを使います。

まずは数値を使って変更します。
数値を使う場合は3桁の数字を指定し、左から順に所有者、グループ、その他ユーザーの権限に対応します。

$ chmod 766 sample.txt                                                        
$ ls -l sample.txt
-rwxrw-rw-    1 user     user             0 Jul 24 08:20 sample.txt

次に記号を使って、全員が書き込みできないようにします。

$ chmod a-w sample.txt                                                        
$ ls -l sample.txt
-r-xr--r--    1 user     user             0 Jul 24 08:20 sample.txt

最後に記号で所有者を指定し、権限を元に戻します。

$chmod u=rw- sample.txt
$ ls -l sample.txt
-rw-r--r--    1 user     user             0 Jul 24 08:20 sample.txt

オプション

chmodコマンドにはこのようなオプションがあります。

-v, --verbose
コマンド実行の診断結果を表示します。

-c, --changes
変更があった時だけ、結果を表示します。

-R, --recursive
複数ファイルに対して設定するときに使います。

まとめ

chmodはよく使うと思いますので、早くマスターしたいと思います。