BioErrorLog Tech Blog

試行錯誤の記録

パーミッションを理解する | [ ls -l ] Linuxコマンド

パーミッションとは、ファイルやディレクトリへの操作権限のことです。
今回、Linuxでのパーミッションの調べ方を記録しました。


はじめに

おはよう。@bioerrorlogです。

前回の記事1では、書き込みが許されていないディレクトリ"/etc/profile.d"に遭遇し、パーミッションという概念を思い知らされました。
パーミッションのことを知っておかなければ、Linuxの中を自由に探索することができません。

そこで今回は、パーミッションとは何か、どうやって調べるのかを記録します。


パーミッションを理解する

パーミッションとは

パーミッションとは、Archwikiによると2

File systems use permissions and attributes to regulate the level of interaction that system processes can have with files and directories.

つまり、ファイルに対する操作権限を制御するもの、だそうです。

例えば、前回私はOS起動時の自動操作を設定するため、"/etc/profile.d"ディレクトリに新しくファイルを追加しようとしました。
しかし、その時表示されたエラーは、

E212: Can't open file for writing

つまり、あなたはファイルに書き込めませんよ、と言われてしまったわけです。
このように、読み込みや書き込みの権限は、ファイルごとに決まっています。
これがパーミッションです。


パーミッションの調べ方 | ls -l

次に、どうすればパーミッションを見ることができるのかを調べました。
すると、どうやらlsコマンドのオプション-lでパーミッションを見れるようです。

それでは"/etc/profile.d"ディレクトリのパーミッションを確認してみます。

/etc$ ls -l
~
drwxr-xr-x  2 root root    4096 Jan 15 22:33 profile.d
~

とても面白そうな文字列が表示されましたが、何を意味しているのかさっぱりわかりません。
lsコマンドのマニュアル3から、" -l "オプションで表示される情報を調べました。

If the -l option is specified, the following information shall be written for files other than character special and block special files:
"%s %u %s %s %u %s %s\n", [file mode], [number of links], [owner name], [group name], [size], [date and time], [pathname]

つまり、ls -lコマンドを実行すると、左から順に
[ファイルモード]、[リンク数]、[オーナー名]、[グループ名]、[サイズ]、[日時]、[パス名]
が表示されるということです。

ここで着目すべきは「ファイルモード」と「オーナー名」、「グループ名」です。
「ファイルのモード」は、最初の文字列 "drwxr-xr-x" のことで、まさしくファイルに対する操作権限を示しています。
"drwxr-xr-x"の文字列は、4つに分けて捉えます。

d / rwx / r-x / r-x

これらは左から順に、
ファイル種類 / オーナーの権限 / グループの権限 / その他ユーザーの権限
を示しています。
一番左の"ファイル種類"は今はあまり重要ではありません。"d"とあればディレクトリ、"-"とあれば普通のファイルだそうです。

大事なのは3つの"rwx"の文字列です。
"r"は読み込み、
"w"は書き込み、
"x"は実行、の権限を示しています。

例えば
"rwx"は読み込み、書き込み、実行のすべてが許可されていることを意味し、
"r-x"では書き込みが許可されていません。
この権限がオーナー、グループ、その他ユーザーに割り当てられています。

オーナーとグループの定義は
drwxr-xr-x 2 root root 4096 Jan 15 22:33 profile.d
この左から3、4つ目のかたまりがそれぞれ[オーナー名]、[グループ名]を定義しています。 この場合は、オーナーが"root"、グループが"root"グループということなので、許可されている権限は、

"root" : rwx
"root"グループ : r-x
その他ユーザー : r-x

ということになります。
つまり、書き込み"w"が許可されているのは"root"権限のみであるわけです。

もしもこのディレクトリに書き込みを行いたいのであれば、
$ sudo vim XXX.txt
のように、sudoコマンドでroot権限を取得する必要があります。


おわりに

今回は、ls -lコマンドによるパーミッションの調べ方を記録しました。

Linuxの中のファイルを探索して回るときには、私はよくls -lを使用するので、パーミッションに目を向けてみるのも面白そうです。

また、このパーミッションは変更させることもできます。
気が向いたときにもっと深くまで遊んでみたいと思います。