touchコマンドでカレントディレクトを作成しようとしたら、エラー発生、
※ルートディレクトリ、カレントディレクトリ、大元ファイル
Permission denied
パーミッションとは、
linuxは、サーバーでよく使われるOSですが、そのために一つのマシンへ複数のユーザーが同時にログインして操作することを前提として作られています。この際に、秘密のファイルを他のユーザーに閲覧されたり、誤って他のユーザーのファイルを上書きしてしまうことを防ぐため、アクセス権限が必要でした。従って、一つ一つのファイルに、誰がどのような操作を許可するのか、という権限を規定する情報が設定されています。この情報のことをパーミッションと呼びます。
パーミッションを確認しよう
Linuxで扱われるファイルは、自分で作成したメモのテキストファイルから、システムが提供するライブラリや実行コマンドまで、全てに所有者(オーナー)が設定されています。ファイルのオーナーは、ファイルへのアクセス権限を自由に設定できます。
ls -l
drwxr-xr-x. 20 root root 2077 Jul 5 14:34 bin/cat
| 表示 | 意味 |
|---|---|
| d | ファイルタイプ |
| rwxr-xr-x. | TD |
| 20 | リンク数 |
| root | ファイルの所有者(オーナー) |
| root | ファイルが所属する所有グループ |
| 2077 | サイズ |
| Jul 5 4:34 | タイムスタンプ |
| bin/cat | ファイル名もしくはディレクト名 |
という意味、本題である、ファイルモード(permission状態)について触れていきます。
ファイルタイプ
●ファイルタイプには3種類あります。
| 記号 | ファイルタイプ |
|---|---|
| - | 通常ファイル |
| d | ディレクトリ |
| l | シンボリックリンク |
シンボリックリンクとは
●リンク先のパス名が書かれた小さな特殊ファイルです。
※catコマンド、ファイルの中身を表示
リンク数
●簡単に言えば、ファイルであれば1、ディレクトリであればその一つの下の階層のファイルまたはディレクトリ数(あくまで一つ下の階層までで、その下のファイルなどは含まれない)
オーナー
●Linuxで扱われるファイルは、自分で作成したテキストファイルから、システムが提供するライブラリや実行コマンドまで、すべてに所有者(オーナー)が設定されています。ファイルのオーナーは、ファイルのアクセス権限を自由に設定できます。
ファイルモード
$ ls -l
drwxr-xr-x. 20 root root 2077 Jul 5 14:34 bin/cat
ファイルタイプの後ろの9文字rwxr-xr-xの部分はファイルモードと呼ばれます。
この9文字はrwx、r-xm、r-xというように3文字ごとに一つのブロックになっていて、それぞれがオーナー、グループ、その他のユーザーに対するパーミッションを意味しています。
下の表にパーミンションの記号の意味を示しています。
| 記号 | ファイルタイプ |
|---|---|
| r | 読み取り(read) |
| w | 書き込み(write) |
| x | 実行(execute) |
先ほどの例では、【-】という表示が見られましたが、こちらは【未許可】ということを表します。
| ユーザ種別 | 読み取り | 書き込み | 実行 |
|---|---|---|---|
| r | 許可 | 許可 | 許可 |
| w | 許可 | 未許可 | 許可 |
| x | 許可 | 未許可 | 許可 |
このファイルはオーナーにしか書き込み権限がありませんから、そのほかのユーザーがファイルを上書きすることはできません。またどのユーザーにも実行権限がついているため、誰でも実行可能です。
注)ディレクトリのパーミッション表示も同じ記号をしようしますが、ファイルの場合とは違った意味を持ちます。
| 記号 | 意味 |
|---|---|
| r | 読み取り:ディレクトリに含まれるファイル一覧の取得 |
| w | 書き込み:ディレクトリの下にあるファイル・ディレクトリの作成・削除 |
| x | 実行(execute):ディレクトリをカレントディレクトリにする |
ファイルモードを変更する
ファイルモードの変更には、chmodコマンドを指定するわけですが、【シンボルモード】による指定と【数値モード】による指定の2種類の方法があり、どちらもよく使用します。
シンボルモード
次のような書式で実行します。
chmod [ugoa][+-=][rwx] <ファイル名>
シンボルモードによる指定では「誰に、どのような権限を追加したい(もしくは禁止)するのか」というのがわかりやすくなっています。
例)
$ chmod u+w file.txt
u(誰に)+(どうする)w(何を)
また[ugoa]と[+-=]の意味はそれぞれ次のようになっています。
記号 意味
u(user) オーナー
g(group) グループ
o(other) その他のユーザー
a(all) ugo全て
記号 意味
- 権限を追加する
- 権限を禁止する
= 指定した権限と等しくする
例えば、現在の権限が「r--r--r--」であるファイルfile.txtに対して、オーナーの書き込み権限を追加したい時、以下のコマンドを実行します
$ chmod u+w file.txt
現在「rwxrwxrwx」であるファイルfile.txtにたいして、「グループ」と「その他のユーザー」には「読み取り」だけの権限に抑えたい時、次のコマンドを実行すると良いでしょう。
$ chmod go=r file.txt
以上のように、シンボルモードは、相対的な指定方法です。つまり、指定したパーミッション以外は変化しません。これは、「オーナー権限のみ」などパーミッションの一部だけを変更したいときに便利です。
*数値モード
書式は以下のようになります。
chmod <8進数の数値> <ファイル名>
数値モードは元のパーミッションに関わらず新しいパーミッションの値へと変更する、絶対指定の方法です。
例を確認
$ ls -l file.txt
-rw-r--r-- 1 takuya staff 0 Jul 12 18:58 file.txt
$ chmod 755 file.txt
$ ls -l file.txt
-rwxr-xr-x 1 takuya staff 0 Jul 12 18:58 file.txt*
パーミッションが変更されているのが確認できますね。
では「755」という、よくわからない(今の段階では)ものについて説明します。
| 意味 | 数字 |
|---|---|
| 読み取り(r) | 4 |
| 書き込み(w) | 2 |
| 実行(x) | 1 |
つまり、「755」というのは「7(4+2+1)5(4+1)5(4+1)」であり、ユーザには全てに権限を、グループとそののユーザには「読み込み」と「実行」する権限を与えているわけです。
スーパーユーザ
ありとあらゆる操作が許可された強い権限を持つユーザがスーパーユーザです。ユーザ名がrootであることから「rootユーザ」とも呼ばれます。スーパーユーザはあらゆる操作が許可された強い権限をもつユーザであり、システムの設定ファイルを変更したり、新しいアプリケーションをインストールしたりすることができますが、強い権限をもつだけにリスクも伴いますので、通常は一般ユーザでログインして操作し、必要な時だけスーパーユーザとして作業するといったことが大切になります。
コマンドとしてsuコマンドとsudoコマンドがありますが、違いは、suコマンドを実行したのちには、exitコマンドでsuperuser状態から抜ける必要があります。ここでは少し題意から外れますので詳しいことは割愛させていただきます。