IT pass HikiWiki - [Exp2018]ファイルのモード#ファイルモードとリンク Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
{{toc}}
#((<"スケジュール表・各回資料 (08/06)"|[Exp2018]スケジュール表・各回資料#08-2F06>))
= ファイルモードとリンク
== 本テキストの目的
* ファイルモードを理解する (ls -l の出力結果が理解できるようになる).
* ファイルのパーミッションを変更できるようになる.
== ファイルモード
Unix/Linux は、複数のユーザーで同一のマシンを使用することを前提に設計されています (マルチユーザの概念). そこで, Unix/Linux においてファイルへのアクセス権制御, 即ち他人に見せてもよいファイル・見せたくないファイルの制御が重要となります.
Unix/Linux は, 自分のホームディレクトリへ他人が勝手にファイルを書いたり, 自分のメールを他人に読まれたりされないようにすることが可能です. また特定のグループに所属するメンバーのみ読み書きが可能なファイルを作ることもできます. ここでは, このようなファイルのアクセス権の制御について見ていきます.
=== ファイルモード
自分のホームディレクトリで ls コマンドを幾つかのオプションを指定して実行すると, およそ以下のような出力が得られます. (以下はあくまで出力例です)
$ ls -laF
total 140
drwxr-xr-x 20 chikuwa2 chikuwa2 4096 Apr 24 17:05 ./
drwxr-xr-x 9 root root 4096 Apr 20 03:34 ../
drwxr-xr-x 3 root root 4096 Mar 21 10:52 .emacs.d/
drwx------ 4 chikuwa2 chikuwa2 4096 Apr 8 09:51 .gconf/
drwxr-xr-x 2 chikuwa2 chikuwa2 4096 Mar 31 13:12 Desktop/
-rw-r--r-- 1 chikuwa2 chikuwa2 5 Apr 25 21:21 hoge.txt < このファイルに注目
drwxr-xr-x 2 root root 4096 Mar 27 22:39 public_html/
........... (以下ファイル・ディレクトリが続く)
この出力の "hoge.txt" というファイルを例に取って, この読み方を解説します. 左から順に,
# RT
-rw-r--r--, ファイルモード
1, ファイルへの "リンク数"
chikuwa2, ファイルの所有者
chikuwa2, ファイルの属するグループ
5, ファイルの大きさ(バイト単位)
Apr 25 21:21, ファイルの最終更新時刻
hoge.txt, ファイルの名前
を表しています. これらをファイルの「属性」と呼びます. なお,
$ man ls
としてみるとより詳しいことが分かります.
一番左側の表示の文字列はファイルの「モード」, すなわちファイルの型 (type) と利用権限 (permission) を表しています. 例えば, hoge.txt のすぐ上の Desktop/ のモードを見ると,
drwxr-xr-x
と書かれてあります. 左端の 1 文字はファイルの型を示します. 取りうる文字と型は後述します.
2 〜 10 文字目は, 利用権限を示しています. 利用権限の許可対象には,
* ファイルの持ち主
* ファイルの所有グループ
* その他のユーザー
があり, それぞれに対する許可情報を,
* ユーザーパーミッション (user permission)
* グループパーミッション (group permission)
* アザーズパーミッション (others permission)
と読んでいます.
また利用権限には,
* 読み出し許可 (read permission)
* 書き込み許可 (write permission)
* 実行許可 (execute permission)
の 3 種類があります. ファイルモードの読み方は,
d rwx r-x r-x
^ ^^^ ^^^ ^^^
| | | |
| | | アザーズパーミッション
| | |
| | グループパーミッション
| |
| ユーザーパーミッション
|
ファイルの型(type)
となります. 各箇所で取りうる文字は,
- --- --- ---
d rwx rwx rwx
l s s t
s S S
b
c
P
です.
左端の文字とファイルの型は, 次のように対応づけられています.
# RT
-, 通常のファイル,
d, ディレクトリ, ディレクトリファイル
l, シンボリックリンク, Windows の "ショートカット" に近い機能
s, ソケットファイル, ソケットという通信方法で使用される特殊ファイル
b, ブロックデバイス, データを一定の文字数で転送する際に使用される特殊ファイル
c, キャラクタデバイス, データを 1 文字ずつ転送する際に使用される特殊ファイル
P, 名前つきパイプ, 複数のプロセス間で通信を行う際に使用される特殊ファイル
また, 利用権限は以下の通りです.
# RT
-, その権限が出ていない
r, 読み込み許可
w, 書き込み許可
x, 実行許可
s, s ビットが立っていて実行許可
S, s ビットが立っていて実行不可
t, スティッキー (sticky)
リンクや s ビットについての説明はここでは省略します.
=== 利用権限の設定 (ファイルモードの設定)
ファイルの利用権限を設定するには chmod コマンドを用います. 基本的な使い方は次の通りです. (詳しくは $ man chmod を参照してください).
$ chmod <mode> file
<mode> の部分には 0 から 7 までの数字を 3 桁並べたもの, または記号が入ります.
* <mode> に数字を入れる場合
3 桁の数字には, 左の桁から順にファイルの所有者, ファイルの所属グループ, その他のユーザーに対する利用権限を示します. 各々の読みだし, 書き込み, 実行権限は 4, 2, 1 の数字で表され, <mode> にはこの数字の和が代入されます.
# RT
許可, 記号, 数字
読込, r, 4
書込, w, 2
実行, x, 1
例えば, モードを -rw-rw-r-- と変えたい場合,
-rw-rw-r--
42 42 4
| | |
6 6 4 < これが <mode> になる
となるので,
$ chmod 664 file
とすれば変更できます.
* <mode> に記号を入れる場合
<mode> には,
# RT
対象, 操作, 許可
[ugoa], [+-=], [rwxst]
という形式を "," で区切って並べます.
対象と操作の文字は以下の意味を表します.
※許可の所はファイルモードと同じです.
# RT
対象, 操作
u, 所有者
g, グループ
o, その他のユーザ
a, 全員 (ugo と同じ)
+, 許可を与える
-, 許可を取り消す
=, 許可を設定する
この場合, 先の例と同じ設定 (-rw-rw-r--) にするには次のようにします.
$ chmod u=rw,g=rw,o=r file
== パーミッションを体験してみる
では, 実際にファイルを作成してパーミッションの変更をしてみましょう.
=== 準備: ファイルとディレクトリの作成
以下の作業をしてディレクトリとファイルを作成してください.
$ cd < ホームディレクトリに移動
$ mkdir testdir < testdir ディレクトリを作成
$ echo 'test-word' > ./testdir/word.txt < testdir ディレクトリの中に
'test-word' が書き込まれた
word.txt というファイルを作成
=== ファイルを読めないようにしてみましょう
次に, word.txt を自分も含めて誰も読むことができないように,
パーミッションを変更してください.
$ chmod ??? testdir/word.txt < chmod を使って testdir/word.txt
ファイルのパーミッションを変える.
誰も読めないように
??? の部分を考える
さて, 上記の ??? には, いったい何の数字を入力すればよいでしょう?
=== ファイルの中身を見てみましょう
$ cat testdir/word.txt
もし,
Permission denied
と注意されファイルの中身が見えなければ成功です.
もし見えてしまった場合は, 先の chmod コマンドを先程とは違うモードで
再度実行し, 見えない様にしてください.
見えないようにする方法が分かったら, 今度はいろいろなモードに変更して
その違いを確かめてください.
=== ファイルに書き込めないようにしてみましょう
次に, word.txt を, 読むことはできるが,
書き込むことができないように, パーミッションを変更してください.
$ chmod ??? testdir/word.txt < chmod を使って testdir/word.txt
ファイルのパーミッションを変える.
読めるが, 誰も書けないように
??? の部分を考える
さて, 上記の ??? には, いったい何の数字を入力すればよいでしょう?
=== ファイルの中身を書き換えてみましょう
emacs で立ち上げて, 中の文字を書き換えてみましょう.
$ emacs testdir/word.txt &
emacs で書き換えようとしたときに, emacs ウィンドウの下部に
Buffer is read-only: #<buffer word.txt>
といったメッセージが表示されれば成功です.
もし書き換えることができてしまった場合は, 先の chmod コマンドを
先程とは違うモードで再度実行し, 見えない様にしてください.
=== ディレクトリのモード
ディレクトリのモードを変えると, そのディレクトリに移動できなくなったり
するはずです. cd コマンドなどを試してみてください. ディレクトリの
パーミッションによってできる主な操作は以下のとおりです.
# RT
モード, 利用権限
r , そのディレクトリの中に何があるか見れる (ls できる)
w , そのディレクトリの中でファイルを作成・消去できる
x , そのディレクトリの中のファイルにアクセスできる (cd できる)
ためしに, ディレクトリ「testdir」に, "自分は中に入れない" ような
パーミッションを設定し, 入れないか確認してください.
$ chmod ??? testdir < chmod をつかって testdir ディレクトリのパーミッションを変える
ディレクトリに入れないように ??? の部分を考えよう
$ cd testdir
実際に移動すると, お互いに,
Permission denied
と怒られましたか?
最後に自分の作った word.txt を消去してください.
このとき, どのようなモードだとファイル消去できないかも是非試してください.
#((<"スケジュール表・各回資料 (08/06)"|[Exp2018]スケジュール表・各回資料#08-2F06>))
= ファイルモードとリンク
== 本テキストの目的
* ファイルモードを理解する (ls -l の出力結果が理解できるようになる).
* ファイルのパーミッションを変更できるようになる.
== ファイルモード
Unix/Linux は、複数のユーザーで同一のマシンを使用することを前提に設計されています (マルチユーザの概念). そこで, Unix/Linux においてファイルへのアクセス権制御, 即ち他人に見せてもよいファイル・見せたくないファイルの制御が重要となります.
Unix/Linux は, 自分のホームディレクトリへ他人が勝手にファイルを書いたり, 自分のメールを他人に読まれたりされないようにすることが可能です. また特定のグループに所属するメンバーのみ読み書きが可能なファイルを作ることもできます. ここでは, このようなファイルのアクセス権の制御について見ていきます.
=== ファイルモード
自分のホームディレクトリで ls コマンドを幾つかのオプションを指定して実行すると, およそ以下のような出力が得られます. (以下はあくまで出力例です)
$ ls -laF
total 140
drwxr-xr-x 20 chikuwa2 chikuwa2 4096 Apr 24 17:05 ./
drwxr-xr-x 9 root root 4096 Apr 20 03:34 ../
drwxr-xr-x 3 root root 4096 Mar 21 10:52 .emacs.d/
drwx------ 4 chikuwa2 chikuwa2 4096 Apr 8 09:51 .gconf/
drwxr-xr-x 2 chikuwa2 chikuwa2 4096 Mar 31 13:12 Desktop/
-rw-r--r-- 1 chikuwa2 chikuwa2 5 Apr 25 21:21 hoge.txt < このファイルに注目
drwxr-xr-x 2 root root 4096 Mar 27 22:39 public_html/
........... (以下ファイル・ディレクトリが続く)
この出力の "hoge.txt" というファイルを例に取って, この読み方を解説します. 左から順に,
# RT
-rw-r--r--, ファイルモード
1, ファイルへの "リンク数"
chikuwa2, ファイルの所有者
chikuwa2, ファイルの属するグループ
5, ファイルの大きさ(バイト単位)
Apr 25 21:21, ファイルの最終更新時刻
hoge.txt, ファイルの名前
を表しています. これらをファイルの「属性」と呼びます. なお,
$ man ls
としてみるとより詳しいことが分かります.
一番左側の表示の文字列はファイルの「モード」, すなわちファイルの型 (type) と利用権限 (permission) を表しています. 例えば, hoge.txt のすぐ上の Desktop/ のモードを見ると,
drwxr-xr-x
と書かれてあります. 左端の 1 文字はファイルの型を示します. 取りうる文字と型は後述します.
2 〜 10 文字目は, 利用権限を示しています. 利用権限の許可対象には,
* ファイルの持ち主
* ファイルの所有グループ
* その他のユーザー
があり, それぞれに対する許可情報を,
* ユーザーパーミッション (user permission)
* グループパーミッション (group permission)
* アザーズパーミッション (others permission)
と読んでいます.
また利用権限には,
* 読み出し許可 (read permission)
* 書き込み許可 (write permission)
* 実行許可 (execute permission)
の 3 種類があります. ファイルモードの読み方は,
d rwx r-x r-x
^ ^^^ ^^^ ^^^
| | | |
| | | アザーズパーミッション
| | |
| | グループパーミッション
| |
| ユーザーパーミッション
|
ファイルの型(type)
となります. 各箇所で取りうる文字は,
- --- --- ---
d rwx rwx rwx
l s s t
s S S
b
c
P
です.
左端の文字とファイルの型は, 次のように対応づけられています.
# RT
-, 通常のファイル,
d, ディレクトリ, ディレクトリファイル
l, シンボリックリンク, Windows の "ショートカット" に近い機能
s, ソケットファイル, ソケットという通信方法で使用される特殊ファイル
b, ブロックデバイス, データを一定の文字数で転送する際に使用される特殊ファイル
c, キャラクタデバイス, データを 1 文字ずつ転送する際に使用される特殊ファイル
P, 名前つきパイプ, 複数のプロセス間で通信を行う際に使用される特殊ファイル
また, 利用権限は以下の通りです.
# RT
-, その権限が出ていない
r, 読み込み許可
w, 書き込み許可
x, 実行許可
s, s ビットが立っていて実行許可
S, s ビットが立っていて実行不可
t, スティッキー (sticky)
リンクや s ビットについての説明はここでは省略します.
=== 利用権限の設定 (ファイルモードの設定)
ファイルの利用権限を設定するには chmod コマンドを用います. 基本的な使い方は次の通りです. (詳しくは $ man chmod を参照してください).
$ chmod <mode> file
<mode> の部分には 0 から 7 までの数字を 3 桁並べたもの, または記号が入ります.
* <mode> に数字を入れる場合
3 桁の数字には, 左の桁から順にファイルの所有者, ファイルの所属グループ, その他のユーザーに対する利用権限を示します. 各々の読みだし, 書き込み, 実行権限は 4, 2, 1 の数字で表され, <mode> にはこの数字の和が代入されます.
# RT
許可, 記号, 数字
読込, r, 4
書込, w, 2
実行, x, 1
例えば, モードを -rw-rw-r-- と変えたい場合,
-rw-rw-r--
42 42 4
| | |
6 6 4 < これが <mode> になる
となるので,
$ chmod 664 file
とすれば変更できます.
* <mode> に記号を入れる場合
<mode> には,
# RT
対象, 操作, 許可
[ugoa], [+-=], [rwxst]
という形式を "," で区切って並べます.
対象と操作の文字は以下の意味を表します.
※許可の所はファイルモードと同じです.
# RT
対象, 操作
u, 所有者
g, グループ
o, その他のユーザ
a, 全員 (ugo と同じ)
+, 許可を与える
-, 許可を取り消す
=, 許可を設定する
この場合, 先の例と同じ設定 (-rw-rw-r--) にするには次のようにします.
$ chmod u=rw,g=rw,o=r file
== パーミッションを体験してみる
では, 実際にファイルを作成してパーミッションの変更をしてみましょう.
=== 準備: ファイルとディレクトリの作成
以下の作業をしてディレクトリとファイルを作成してください.
$ cd < ホームディレクトリに移動
$ mkdir testdir < testdir ディレクトリを作成
$ echo 'test-word' > ./testdir/word.txt < testdir ディレクトリの中に
'test-word' が書き込まれた
word.txt というファイルを作成
=== ファイルを読めないようにしてみましょう
次に, word.txt を自分も含めて誰も読むことができないように,
パーミッションを変更してください.
$ chmod ??? testdir/word.txt < chmod を使って testdir/word.txt
ファイルのパーミッションを変える.
誰も読めないように
??? の部分を考える
さて, 上記の ??? には, いったい何の数字を入力すればよいでしょう?
=== ファイルの中身を見てみましょう
$ cat testdir/word.txt
もし,
Permission denied
と注意されファイルの中身が見えなければ成功です.
もし見えてしまった場合は, 先の chmod コマンドを先程とは違うモードで
再度実行し, 見えない様にしてください.
見えないようにする方法が分かったら, 今度はいろいろなモードに変更して
その違いを確かめてください.
=== ファイルに書き込めないようにしてみましょう
次に, word.txt を, 読むことはできるが,
書き込むことができないように, パーミッションを変更してください.
$ chmod ??? testdir/word.txt < chmod を使って testdir/word.txt
ファイルのパーミッションを変える.
読めるが, 誰も書けないように
??? の部分を考える
さて, 上記の ??? には, いったい何の数字を入力すればよいでしょう?
=== ファイルの中身を書き換えてみましょう
emacs で立ち上げて, 中の文字を書き換えてみましょう.
$ emacs testdir/word.txt &
emacs で書き換えようとしたときに, emacs ウィンドウの下部に
Buffer is read-only: #<buffer word.txt>
といったメッセージが表示されれば成功です.
もし書き換えることができてしまった場合は, 先の chmod コマンドを
先程とは違うモードで再度実行し, 見えない様にしてください.
=== ディレクトリのモード
ディレクトリのモードを変えると, そのディレクトリに移動できなくなったり
するはずです. cd コマンドなどを試してみてください. ディレクトリの
パーミッションによってできる主な操作は以下のとおりです.
# RT
モード, 利用権限
r , そのディレクトリの中に何があるか見れる (ls できる)
w , そのディレクトリの中でファイルを作成・消去できる
x , そのディレクトリの中のファイルにアクセスできる (cd できる)
ためしに, ディレクトリ「testdir」に, "自分は中に入れない" ような
パーミッションを設定し, 入れないか確認してください.
$ chmod ??? testdir < chmod をつかって testdir ディレクトリのパーミッションを変える
ディレクトリに入れないように ??? の部分を考えよう
$ cd testdir
実際に移動すると, お互いに,
Permission denied
と怒られましたか?
最後に自分の作った word.txt を消去してください.
このとき, どのようなモードだとファイル消去できないかも是非試してください.