UNIXの特徴の一つは、マルチユーザ・システムであることです。 つまり、UNIXは、一人だけが使うのではなく、複数の人が利用する仕組みを持ったシステムなのです。
UNIXでは、利用者を ユーザ と呼びます。 それぞれのユーザには、識別のための名前が付きます。 これを、 ユーザ名 または ログイン名 と呼びます。 東京女子大学のシステムでは、ユーザ名は学生番号です。
UNIXは皆で使うシステムなので、ファイルやディレクトリを好き勝手に格納すると混乱してしまいます。 そのため、一人のユーザに一つのディレクトリを用意し、ユーザはその中だけ自由に使えるようにします。 これが、ホーム・ディレクトリです。 東京女子大学のシステムでは、ホーム・ディレクトリは /Users/ username です。
また、ファイルやディレクトリには、 所有者 が決まっています。 つまり、自分のファイルと他人のファイルの区別がつけられるのです。 一般的には、ファイルやディレクトリを作成したユーザが、その所有者になります。
UNIXには、 グループ という概念もあります。 これは、ユーザの集まりを表しています。 例えば、サークル活動のためのグループを作成して、そこに会員を登録することができます。 一人のユーザが、複数のグループに登録されることもあります。
ファイルやディレクトリには、所有者だけではなく、 所有グループ も決まっています。 このファイルは何々グループの物、このディレクトリは何々グループの物、という具合です。
マルチユーザ・システム、すなわち皆で使うシステムでは、自分のファイルが他人から勝手に読み書きされることが、心配になります。 たとえ、ファイルをホーム・ディレクトリに格納しても、ファイルの所有者を決定しても、安心はできません。 解決方法は、「このファイルは、所有者は読み書きできるが、その他の人は読むことしかできない」というような設定することです。 このような、読み書きに関する権利のことを、 アクセス権 あるいは パーミッション と呼びます。
ファイルのアクセス権には、次のような種類があります。
ここで、ファイルを実行することは、プログラム・ファイルを意図しています。
この3種類の権利が、所有者に対して、所有グループに対して、そしてその他のユーザに対して設定できます。 つまり、3×3=9通りの権利が設定できるのです。
ディレクトリについても、次のようなアクセス権があります。
ここで、ディレクトリを読み込むとは、登録されているファイルをリスト・アップすることです。 ディレクトリに書き込むとは、新たにファイルを登録したり、登録されているファイルを削除したりすることです。
ファイルの場合と同様に、これらの権利が、所有者、所有グループ、そしてその他のユーザに対して設定できます。
それでは、実際にアクセス権を確認します。 アクセス権を表示するには、ディレクトリの登録内容を表示するコマンド ls で、オプション -l を使います。 つまり、
ls -l directory
と入力します。
b04a001@AsiaA1:~% cd comp2d b04a001@AsiaA1:~/comp2d% ls -l total 17 drwxr-xr-x 2 b04a001 cis 512 11 1 13:45 France/ drwxr-xr-x 2 b04a001 cis 512 11 1 13:45 Germany/ -rw-r--r-- 1 b04a001 cis 42 10 18 14:00 english01.txt -rw-r--r-- 1 b04a001 cis 13 10 25 14:15 japanese01.txt -rw-r--r-- 1 b04a001 cis 86 10 4 13:45 month01.txt -rw-r--r-- 1 b04a001 cis 55 10 4 14:00 score01.txt -rw-r--r-- 1 b04a001 cis 170 10 11 14:00 weather01.txt b04a001@AsiaA1:~/comp2d%
3列目は所有者、4列目は所有グループを表します。 この場合は、すべてがユーザ b04a001 のもので、グループ cis のものです。 なお、グループ cis は、情報処理センターを意味します。
1列目の記号10個が、アクセス権を表します。 記号の意味は、以下の通りです。 ただし、一番左は、ディレクトリなら"d"で、普通のファイルなら"-"です。
記号 | 数値 | アクセス権 |
---|---|---|
-r-------- | 400 | 所有者の読み込み |
--w------- | 200 | 所有者の書き込み |
---x------ | 100 | 所有者の実行 |
----r----- | 040 | 所有グループの読み込み |
-----w---- | 020 | 所有グループの書き込み |
------x--- | 010 | 所有グループの実行 |
-------r-- | 004 | その他の読み込み |
--------w- | 002 | その他の書き込み |
---------x | 001 | その他の実行 |
例えば、ファイル month01.txt のアクセス権は -rw-r--r-- なので、だれでも読み込めますが、書き込めるのは所有者のみです。 また、ディレクトリ France のアクセス権は drwxr-xr-x なので、だれでも読み込め、だれでも移動もできますが、書き込めるのは所有者のみです。
特定のファイルのアクセス権を表示するには、そのファイルを引数に書きます。
b04a001@AsiaA1:~/comp2d% ls -l month01.txt -rw-r--r-- 1 b04a001 cis 86 10 4 13:45 month01.txt b04a001@AsiaA1:~/comp2d%
ディレクトリについて同様にしますと、そのディレクトリの内容が表示されてしまいます。
b04a001@AsiaA1:~/comp2d% ls -l France total 2 -rw-r--r-- 1 b04a001 cis 26 11 1 14:00 Lyon.txt -rw-r--r-- 1 b04a001 cis 31 11 1 14:00 Marseille.txt b04a001@AsiaA1:~/comp2d%
ディレクトリの内容ではなく、ディレクトリ自体を表示するには、
ls -d directory
とします。
b04a001@AsiaA1:~/comp2d% ls -ld France drwxr-xr-x 2 b04a001 cis 512 11 1 13:45 France/ b04a001@AsiaA1:~/comp2d%
ファイルやディレクトリのアクセス権は、適切な値に自動的に設定されます。 必要があれば、自分のファイルやディレクトリのアクセス権を変更できます。 例えば、他人に読まれたくないファイルならば、他人の読み込みを禁止できます。 また、うっかり書き換えたくないファイルならば、全員の書き込みを禁止できます。
chmodコマンド (CHange MODe)は、ファイルやディレクトリのアクセス権を変更します。 形式は、
chmod mode file
です。 ここで、 mode は3桁の数です。 これは、上記の表にしたがって、設定したい権利を合計した値です。
例として、以下の内容のファイル secret01.txt を作成します。 名前の部分は、自分の名前にしてください。
This is Azuma's secret text.
このファイルは秘密と言っていますが、皆でお互いに公開してみます。 アクセス権は、自分は読み書きでき(400+200)、他人は読める(40+4)ようにしますので、644 となります。
b04a001@AsiaA1:~/comp2d% chmod 644 secret01.txt b04a001@AsiaA1:~/comp2d% ls -l secret01.txt -rw-r--r-- 1 b04a001 cis 29 11 8 13:45 secret01.txt b04a001@AsiaA1:~/comp2d%
実際、自分のファイルは読めますし、他人(友達かkonishi)のファイルも読めます。
b04a001@AsiaA1:~/comp2d% cat secret01.txt This is Azuma's secret text. b04a001@AsiaA1:~/comp2d% cat /Users/konishi/comp2d/secret01.txt This is Konishi's secret text. b04a001@AsiaA1:~/comp2d%
では、このファイルを皆でお互いに秘密にします。 アクセス権は、自分は読み書きできる(400+200)ようにしますので、600 となります。
b04a001@AsiaA1:~/comp2d% chmod 600 secret01.txt b04a001@AsiaA1:~/comp2d% ls -l secret01.txt -rw------- 1 b04a001 cis 29 11 8 13:45 secret01.txt b04a001@AsiaA1:~/comp2d%
すると、自分のファイルは読めますが、他人のファイルは読めなくなります。
b04a001@AsiaA1:~/comp2d% cat secret01.txt This is Azuma's secret text. b04a001@AsiaA1:~/comp2d% cat /Users/konishi/comp2d/secret01.txt cat: /Users/konishi/comp2d/secret01.txt: Permission denied b04a001@AsiaA1:~/comp2d%
なお、ファイルのアクセス権の表示・変更は、Finderでもできます。 ファイルのアイコンをクリックして、メニューバーの「ファイル」をクリックして、「情報を見る」を選択してください。 「所有権とアクセス権」の項目を開けば、アクセス権の操作ができます。
注意: ホーム・ディレクトリや最初からあるディレクトリには、適切なアクセス権が設定されています。 これらをむやみに変更しますと、パソコンが動かなくなる可能性があります。 アクセス権を変更するのは、自分で作成したファイルやディレクトリだけにしてください。
UNIXでは、システム管理者のために、特別なユーザが用意されています。 それが、 スーパーユーザ です。 スーパーユーザのユーザ名は"root"なので、スーパーユーザのことを ルート と呼ぶこともあります。
スーパーユーザは、アクセス権を超越した存在です。 ファイルのアクセス権がどう設定されていても、スーパーユーザはそのファイルを読み書きできます。 システムを管理するには、このような権利が必要なのです。
スーパーユーザは、以下のような作業を行っています。 このような内容は、スーパーユーザにお願いすればよいのです。
ファイルのアクセス権を表示するとき、コマンド ls -l を実行しました。 このとき、アクセス権だけではなく、他の情報も表示されました。 この情報の意味について説明します。
b04a001@AsiaA1:~/comp2d% ls -l total 17 drwxr-xr-x 2 b04a001 cis 512 11 1 13:45 France/ drwxr-xr-x 2 b04a001 cis 512 11 1 13:45 Germany/ -rw-r--r-- 1 b04a001 cis 42 10 18 14:00 english01.txt -rw-r--r-- 1 b04a001 cis 13 10 25 14:15 japanese01.txt -rw-r--r-- 1 b04a001 cis 86 10 4 13:45 month01.txt -rw-r--r-- 1 b04a001 cis 55 10 4 14:00 score01.txt -rw-r--r-- 1 b04a001 cis 170 10 11 14:00 weather01.txt b04a001@AsiaA1:~/comp2d%
5列目は、ファイル・サイズです。 単位はバイトです。 6列目から8列目は、最終更新日時です。 一度も更新されていない場合は、作成日時となります。 9列目は、ファイル名やディレクトリ名です。
なお、Finderを使っても、同じような情報が得られます。 表示形式をリストに切り替えてください。
特に指定しなければ、lsコマンドは、ファイルをアルファベット順に並べます。 他の順番で並べるには、オプションを使います。
まず、逆順にするには、
ls -r directory
と入力します。
b04a001@AsiaA1:~/comp2d% ls -lr total 17 -rw-r--r-- 1 b04a001 cis 170 10 11 14:00 weather01.txt -rw-r--r-- 1 b04a001 cis 55 10 4 14:00 score01.txt -rw-r--r-- 1 b04a001 cis 86 10 4 13:45 month01.txt -rw-r--r-- 1 b04a001 cis 13 10 25 14:15 japanese01.txt -rw-r--r-- 1 b04a001 cis 42 10 18 14:00 english01.txt drwxr-xr-x 2 b04a001 cis 512 11 1 13:45 Germany/ drwxr-xr-x 2 b04a001 cis 512 11 1 13:45 France/ b04a001@AsiaA1:~/comp2d%
新しい順にするには、コマンド
ls -t directory
を実行します。
b04a001@AsiaA1:~/comp2d% ls -lt total 17 drwxr-xr-x 2 b04a001 cis 512 11 1 13:45 France/ drwxr-xr-x 2 b04a001 cis 512 11 1 13:45 Germany/ -rw-r--r-- 1 b04a001 cis 13 10 25 14:15 japanese01.txt -rw-r--r-- 1 b04a001 cis 42 10 18 14:00 english01.txt -rw-r--r-- 1 b04a001 cis 170 10 11 14:00 weather01.txt -rw-r--r-- 1 b04a001 cis 55 10 4 14:00 score01.txt -rw-r--r-- 1 b04a001 cis 86 10 4 13:45 month01.txt b04a001@AsiaA1:~/comp2d%
この2つを組み合わせますと、古い順になります。
b04a001@AsiaA1:~/comp2d% ls -ltr total 17 -rw-r--r-- 1 b04a001 cis 86 10 4 13:45 month01.txt -rw-r--r-- 1 b04a001 cis 55 10 4 14:00 score01.txt -rw-r--r-- 1 b04a001 cis 170 10 11 14:00 weather01.txt -rw-r--r-- 1 b04a001 cis 42 10 18 14:00 english01.txt -rw-r--r-- 1 b04a001 cis 13 10 25 14:15 japanese01.txt drwxr-xr-x 2 b04a001 cis 512 11 1 13:45 Germany/ drwxr-xr-x 2 b04a001 cis 512 11 1 13:45 France/ b04a001@AsiaA1:~/comp2d%
Finderを使ってファイルを整列するには、表示形式をリストに切り替えてから、整列したい項目の見出しをクリックします。 さらにクリックしますと、昇順と降順が切り替わります。
本当は存在するのに、普通は一覧に表示されないファイルは、 隠しファイル と呼ばれます。 消されるとシステムが動かなくなるシステム・ファイルや、ユーザが開いても意味がない設定ファイルなどが、隠しファイルになります。 UNIXでは、"."から始まるファイル名が隠されます。
ファイルの一覧表示で、隠しファイルも表示するには、
ls -a directory
とします。
b04a001@AsiaA1:~/comp2d% ls -a ./ ._japanese01.txt France/ month01.txt ../ ._month01.txt Germany/ score01.txt .DS_Store ._score01.txt english01.txt weather01.txt ._english01.txt ._weather01.txt japanese01.txt b04a001@AsiaA1:~/comp2d%
ここで、"."はそのディレクトリ、".."は一つ上のディレクトリを表します。 この2つのディレクトリは消せません。
ファイル.DS_Storeと、"._"から始まるファイル名は、Macに固有の設定ファイルです。 Mac以外では無意味です。
なお、Finderで隠しファイルを表示することは、できないようです。
以下の内容のファイル private01.txt を作成してください。 このファイルは、変更したくない個人ファイルのつもりです。
This is a private text.
以下の内容のファイル protected01.txt を作成してください。 このファイルは、変更したくない公開ファイルのつもりです。
This is a protected text.
そして、以下のようになるように、ファイルのアクセス権を変更してください。
b04a001@AsiaA1:~/comp2d% ls -l private01.txt -r-------- 1 b04a001 cis 24 11 8 14:15 private01.txt b04a001@AsiaA1:~/comp2d% ls -l protected01.txt -r--r--r-- 1 b04a001 cis 26 11 8 14:15 protected01.txt b04a001@AsiaA1:~/comp2d%
余力のある人は、以下の内容のファイル common01.txt を作成してください。 このファイルは、グループ内で共同編集するファイルのつもりです。
This is a common text.
そして、以下のようになるように、ファイルのアクセス権を変更してください。
b04a001@AsiaA1:~/comp2d% ls -l common01.txt -rw-rw---- 1 b04a001 cis 23 11 8 14:15 common01.txt b04a001@AsiaA1:~/comp2d%
今日の演習7の答案(「ターミナル」画面のコピー)をメールでkonishi@twcu.ac.jp宛に提出してください。 メールを送るときは、大学のパソコンを使うか、大学のメール・サーバに接続するかして、差出人が大学のメール・アドレスになるようにしてください。 メールの本文には、学生番号、氏名、科目名、授業日(11月8日)を明記してください。