プロセス、アクセス制御、電子メールの転送

					2007年05月08日
情報科学類 コンピュータリテラシ

                                       筑波大学 システム情報工学研究科 
                                       コンピュータサイエンス専攻, 電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2007/2007-05-08
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/

■連絡事項

■プロセス

説明するのは、けっこう難しい。完全な理解には、次のような勉強が必要にな る。

◆プロセスとは

プログラムがメモリに読み込まれ、CPU (processor) により実行できる状態に なったもの。 ←→プログラムは、ディスクにあってもプログラム。

「端末」を複数開くと、「シェル」のプロセスが2つ。 プログラムとしては、同じ tcsh だが、プロセスとしては別物になる。

その昔は、1度に1個のプログラムだけしかメモリに入れられなかった。 (プログラムとプロセスの違いが希薄。)

メモリにプロセスが3つ、UNIXカーネル、ハードディスク、CPU

プログラムとプロセス

◆プロセスの役割

保護の単位
(故意か過失かを問わず) 特に許可を出さない限りプロセスは他のプロセスの 影響(データ見る、データを破壊する、強制終了させる) を受けないようになっている。 あるプロセスの動作がおかしくなっても、 コンピュータ全体としては動作しつづける。
資源割当ての単位
メモリ、ディスク、プリンタ、ディスプレイ、キーボードなどコンピュータが 処理を進める上で利用価値のあるものを総称して 資源(resource) という。 複数のプロセスを動作させる時、資源が不足してきたら、ある基準で分配する。
ユーザの代理
ユーザ(人間)の代わりに、コンピュータの中に入り込み、資源を利用する。

プロセスの操作

「殺す」と「止める」は違う。 殺したプロセスは、再開できない。 止めたプロセスは、場合によっては、再開できる。

■プロセスを作る==プログラムを実行する

プログラムを実行すると、プロセスが作られる。 例:
% ls [←]

■プロセスの観察

プロセスには、ID (identifier)と属性がある。 psコマンドは、プロセスの一覧と属性を表示するコマンドである。
% ps [←]
  PID  TT  STAT      TIME COMMAND
 4641  p2  S      0:00.54 -tcsh
 4676  p2  S      0:01.25 emacs
 4790  p2  S      0:00.02 lv index.html-m4
 4650  p3  S      0:00.10 -tcsh
 4671  p3  S+     0:00.57 vin
 4782  p4  S      0:00.06 -tcsh
 4788  p4  S+     0:01.10 emacs -nw
% []
1行が1プロセスに対応。左から次のような意味を持つ。
PID プロセス識別子
プロセスを区別する番号。 これは16ビットの整数で0-65535(または0〜32767)。
TT 端末名
そのプロセスが結びつけられている端末の省略形。 たとえば、端末 /dev/ttyp3p3になる。
STAT 状態
プロセスの 状態 (STATe)。 次のようなものがある。

R (runnable)
実行可能。CPU が空いていれば実行される。
U (uninterruptible), D (Disk),
ディスク入出力などの完了を待っている。割り込み不可。
S (Sleep)、I (Idle)
キーボードや他のプロセスからの入力を待っている。
Z (Zombie)
既に終了していて、終了処理の完了を待ってる。
T (Traced)
一時的に停止しているか、デバッグの対象になっている。
TIME
CPU時間。 CPUがそのプロセスを実行するために費やした時間。
COMMAND
そのプロセスを起動した時のコマンド。 プログラムが含まれているファイルの名前の一部。

◆プロセスと端末

プロセスは、端末に関連して次のように分類される ps コマンドに x オプションを指定すると、端末と結びついていないプロセス も表示する。
% ps x [←]

◆プロセスとユーザ

プロセスには、どのユーザの資格で実行しているかという情報( UID, User Identifier )が設定されている。この資格は、通常はそのプロセスを起動した ユーザになる。psコマンドを引数なしに実行すると、自分の資格で実行してい る(端末がある)プロセスだけを表示する。他人のプロセスも表示したい時は、 psコマンドを実行するときに「a」オプションをつける。

◆プロセスと資源

psコマンドにuオプションを付けると、 プロセスに割り当てられたメモリ資源やCPU資源が表示する。
% ps u [←]
USER   PID %CPU %MEM      VSZ    RSS  TT  STAT STARTED      TIME COMMAND
yas   4641   0.0 -0.1    31832   1152  p2  S     6:22PM   0:00.54 -tcsh
yas   4650   0.0 -0.0    31832    956  p3  S     6:22PM   0:00.10 -tcsh
yas   4671   0.0 -0.2    31492   4532  p3  S+    6:23PM   0:00.59 vin
yas   4676   0.0 -0.6    52184  11624  p2  S     6:24PM   0:01.25 emacs
yas   4782   0.0 -0.0    31832    952  p4  S     6:26PM   0:00.06 -tcsh
yas   4788   0.0 -0.6    52184  11676  p4  S+    6:26PM   0:01.10 emacs -nw
yas   4790   0.0 -0.0    27916    532  p2  S     6:27PM   0:00.02 lv index.html-
% []
%CPU
過去1分間に利用した CPU 時間の割合。
%MEM
実際に消費してるメイン・メモリの大きさの割合。
VSZ (Virtual Size)
仮想記憶上のプロセスの大きさ。KB 単位。
RSS (resident set size)
実際に消費してるメイン・メモリの大きさ。
STARTED
プロセスが生成された時刻。

◆プロセスの親子関係

プロセスがある命令(システム・コール)を実行すると新しくプロセスが 生成される。 プロセスにはそのプロセスの生みの親が1個ある。 もとのプロセスを「親プロセス」とう。

親子関係により、プロセスは全体として木構造を作る。

親プロセスのプロセス識別子は、psコマンドに「l」オプションをつけると PPIDのところに表示される。

% ps l [←]
  UID   PID  PPID CPU PRI NI      VSZ    RSS WCHAN  STAT  TT       TIME COMMAND
 1013  4641  4640   0  31  0    31832   1156 -      S     p2    0:00.56 -tcsh
 1013  4676  4641   0  31  0    52220  12284 -      S+    p2    0:02.51 emacs
 1013  4801  4641   0  31  0    28468    660 -      S     p2    0:00.01 lv inde
 1013  4650  4649   0  31  0    31832    956 -      S     p3    0:00.10 -tcsh
 1013  4671  4650   0  31  0    31492   4536 -      S+    p3    0:00.86 vin
 1013  4782  4781   0  31  0    31832    948 -      S     p4    0:00.06 -tcsh
 1013  4788  4782   0  31  0    52184  11684 -      S+    p4    0:01.10 emacs -
 1013  4805  4676   0  31  0    31832   1060 -      Ss    p5    0:00.36 -bin/tc
% []

■プロセスを殺す(kill)

プロセスが自主的に終了しない時に、強制的に終了させること。

Unix では、プロセスを殺す方法は、主に次の2つ。

どちらの方法でも、裏では シグナル (ソフトウェア割込み) という仕掛けが働く。

◆キーによるプロセスの強制終了

端末で動作しているプロセスが、キーボードからキーを読み込んでいる状態の 時には、^C (Control + C) を押すと、終了できる。以下は、 cat コマンドのプロセスを^Cで強制終了している。
% cat [←]
Line 1[←]
Line 1
Line 2[←]
Line 2
^C
% []
^C と同様に ^\ (「^\」または「^¥」) もプロセスを強制終了させるキーで ある。^\ は、^Cが利かないときでも利くことがある。

^\ の場合、デバッグ用にcore という名前のファイル ができる。普段は、core ファイルは不要なので、^C を使うべ きである。

coins の環境では、core ファイルが作られないように設定されている。 core ファイルの利用方法は、デバッガ gdb のマニュアル、 man core (core ファイルの man ページ(man コマンドで表示されるページ))、 Unix Super Text 下巻 「第60章 デバッグの方法」を参照。

stty コマンドを使うと、^C^\ を変更でき る。

% stty -a [←]
speed 9600 baud; 40 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
        -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
        -extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel -ignbrk
        brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
        -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ;
        eol2 = ; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;
% []
「intr」のところに表示されるものが「^C」, 「quit」のところに表示されるものが「^\」に相当するキー。 「kill」は、1行削除の意味。

◆kill コマンドによるプロセスの強制終了

^C^\ で死なないプロセス (emacs など) を殺すには、kill コマンドを使う。
% kill pid [←]
これは、プロセス識別子pidのプロセスを殺す。 他人のプロセスは、権限がないので殺せない。

注意:pid には、プロセス識別子となる番号を入れる。pid と打つのではない。pid と打たれても、kill コマンドは、どのプロセスを殺せ ばよいのかわからない。

◆kill -KILL

単純な kill コマンドでは死なないプロセスの場合、 -KILLをつけてkillコマンドを実行する。
% kill -KILL pid [←]

◆ロック

複数のプロセスが同じファイルを同時に読み書きすると、ファイルの内容のつ じつまが合わなくなることがある。

複数のプロセスが同時に同じファイルをアクセスしていることを事前に防ぐた めに、ファイルのロックという考え方がある。 Thunderbird, Firefox は、同時に2個つ以上のプロセスが実行することを防ぐ ために、.parentlock というファイルを作成する。Emacs は、複数の Emacs の プロセスで編集することを防ぐために、Interlock と呼ばれている仕組みを持っ ている。

■アクセス制御

アクセス制御(access control) とは、「主体」が、「オブジェクト」を「操作」する時、どんな操作なら正し いということを定義して、それがきちんと守られていることをということを保 証することである。

図? アクセス制御における主体、オブジェクト、および、操作

図? アクセス制御における主体、オブジェクト、および、操作

Unixでは、アクセス制御の主体は、プロセスである。 アクセス制御のオブジェクトは、ファイル、または、プロセスである。 操作には、次のようなものがある。

◆ユーザとグループ

Unix (MacOSX, Linux含む), Windows NT/2000/XP では、ユーザ(個人)とグルー プを識別したアクセス制御を行うことができる。 オペレーティング・システムごとに、ユーザやそのグループの考え方は、基本 的には似ているが、細かい所で異なる。

図? 実世界のユーザとUNIX中のプロセス・ファイル

図? 実世界のユーザとUNIX中のプロセス・ファイル

◆ユーザ

ユーザ(user, 利用者)とは、Unixの外では、個人(人間)。 Unixの内部では、次のどれかで表現する。
ユーザ名(user name)
文字列
UID(user ID, user identifier)
16ビット-32ビットの整数

Unixでは、全てのファイルやプロセスは、あるユーザの所有物である。 ファイルとプロセスには、UID が付加されている。

◆グループ

グループ(group)とは、Unixの外の世界では、計算機を使う人間の集合。 Unixの内部では、次のどれかで表現する。
グループ名(group name)
文字列
UID(user ID, user identifier)
16ビット-32ビットの整数

1人のユーザが複数のグループに属することができる。

◆ファイルの属性

ファイルは、属性(ls -l で表示)として、UID と GID を1つずつ持つ。 ファイルの所有者となる個人は、1人。 ファイルが属するグループも1つ。

◆プロセスの属性

プロセスは、UID (1個) と GID を複数個持つ。

◆プロセスのユーザ名とグループ名を調べる

プロセスの所有者のユーザ名を表示するには whoamiコマンドを用いる。
% whoami [←]
yas
% []
この例では、この人(のプロセス)のユーザ名は、yas

プロセスが属しているグループのグループ名を調べるには、 groupsコマンドを用いる。

% groups [←]
lab wheel staff
% []
この例では、この人(のプロセス)は、 lab, wheel, staff という3つ のグループに属している。

idコマンドも使える。

% id [←]
uid=1231(yas) gid=40(lab) groups=40(lab), 0(wheel), 10(staff)
%

◆ファイルの UID・GID 属性を調べる

ファイルの UID 属性(所有者属性)と GID 属性を調べるには、ls -l を用いる。

◆ファイルに対するアクセス制御

Unixでは、ファイルの「内容」のアクセス制御を次の3段階で行う。
ユーザ
ファイルのUID(所有者)が、プロセスのUIDと同じ
グループ
ファイルのGIDが、プロセスのGIDのリストのどれかと同じ
その他
上の2つに当てはまらない時
これをつかって、モード属性の下位9ビットのうち、どの3ビットを使うかを 決める。そして、そのビットが1になっていれば、その操作が許される。

ファイルの「内容」のアクセス3段階であるが、ファイルの「属性」次の2段 階である。

ユーザ
ファイルのUID(所有者)が、プロセスのUIDと同じ
それ以外
ファイルのUID(所有者)が、プロセスのUIDと異なる
ユーザの権限では、ファイルの属性(モード、グループ、時刻)を変更する ことができる。それ以外の権 限では、属性を読み出すことはできるが、変更は一切できない。 つまり、ファイルの内容がアクセスできなくても、ls -l, stat(2) で 属性を調べることはできる。

◆ディレクトリのx

ディレクトリのモードで x は、そのディレクトリの内容を検索できることを意 味する。ディレクトリの x を落すことで、それ以下の部分木全体のアクセスを 禁止することができる。

◆プロセスに対するアクセス制御

プロセスのアクセス制御は、次の2段階で行なう。
同一ユーザ
操作対象のプロセスが、操作するプロセスのUIDと一致している。
それ以外
操作対象のプロセスが、操作するプロセスのUIDと一致していない。
プロセスの操作としては、シグナルを送ることができるかどうか (kill() システムコール) と、デバッガで デバッグすることができるとか(ptrace() システムコール)、トレースを調べることができるかなどが ある。それらの操作は、同一ユーザの場合 許され、そうではない場合は、許されない。

◆スーパー・ユーザ

どのようなアクセスも可能な無敵のユーザ。

スーパー・ユーザ(super user) は、UID が 0 。 特権ユーザ(privileged user)ルート(root)su (su コマンド、あるいは super user の略)ともよばれる。 スーパーユーザのユーザ名は、慣例として root という文字列が使われる。

ファイルのバックアップなど、システム管理の作業には スーパー・ユーザの仕組みが必要になる。

ファイルの UID・GID 属性を変更する

ファイルの UID 属性(所有者属性)を変更するには、chown コマ ンドを用いる。ただし、スーパーユーザの権限が必要である。

ファイルをコピーして、元ファイルを消すことはできる。

ファイルの GID 属性を変更するには、chgrp コマンドを使う。 一般ユーザは、自分が属しているグループにのみ変更できる。 任意のグループに変更するには、スーパー・ユーザの権限が必要である。

◆ユーザ名とUID、グループ名とGIDの対応、属性の伝播

■ファイルのモードの変更

◆chmod コマンド

chmodコマンドは、ファイルのモード属性を変更するためのコマンド。
% ls -l file1 [←]
-rw-r--r--   1 yas  prof  6 May 16 03:26 file1
% chmod go-r file1 [←]
% ls -l file1 [←]
-rw-------   1 yas  prof  6 May 16 03:26 file1
% []
file1に対して、グループ(g)とそれ以外の人(o)に対して「読込み可」の許可を 取り除いている。

chmodは一般的には次の形式で実行する。

% chmod set file1 file2 ... [←]
set の形式
[ugoa][=+-][rwx]
ここの[ugoa]は、誰に対するアクセスの設定を変更するかを対象となる人を以 下の表から選んで並べる(複数可)。
文字 単語 意味
u user ユーザ(利用者,所有者)
g group グループ
o others その他
a all 全員、ugo と同じ
[=+-]の意味
文字 意味
+ 許可を追加する
- 許可を除く
= 指定した許可だけとする
[rwxXst]の部分には次のような指定が可能。
文字 単語 意味
r read 読込み可
w write 書込み可
x execute 実行可
X execute 実行可(所有者に対して「実行可」がある時だけ)
setには[ugoa][=+-][rwx]の指定を「u=rw,og=r」のように「,」で区 切って複数並べることもできる。

chmod には、-R (recursive)オプションがある。 これは、ディレクトリをたぐり全部変更することを意味する。

◆モードの実例

rw-r--r--
誰かでも読めるファイル
rwxr-xr-x
誰かでも読めるアクセスできるディレクトリ。 xもたてる。 (たてる==ビットを1にする。)
rwxr-xr-x
実行可能ファイル
rwx------
MH や Mew を使っている場合は、~/Mail ディレクトリのモード
rw-r--r--
WWWページ用のファイル (~/public_html以下のファイル)
rwxr-xr-x
WWWページ用のディレクトリ (public_html以下のディレクトリ)
rwxr-xr-x または rwx--x--x
WWWページを作成する時のホーム・ディレクトリ (~~/public_html の親ディレクトリ)。 x ビットを出す。
rw-rw-r-- または rwxrwxr-x
グループで共同作業するような時には、グループに属する人には書き込みを許す。
r-xr-xr-x, r-x------
読み込み専用のディレクトリ。 その下のファイルを削除することができない。
注意:WWWページを作成する時には、ホーム・ディレクトリのモードにも注意す る。ホーム・ディレクトリがrwx------になっていたら、いくら ~/public_html のモードを rwxr-xr-x にしても、アクセスで きない。

■コマンドのまとめ

ps			プロセスの一覧の表示
ps ux			プロセスの一覧の表示(BSD,Linux)
ps aux			プロセスの一覧の表示(BSD,Linux)
stty all		端末の状態の表示(BSD)
stty -a			端末の状態の表示(System V,Linux)
kill PID		プロセスを殺す
kill -KILL PID		プロセスを殺す(必殺)
ls -l	f1 f2 f3	ファイルの属性の表示
ls -d	d1 d2 d3	ディレクトリの名前の一覧の表示
chmod [ugoa][=+-][rwx] f1 f2 f3	モード属性の変更
whoami		       プロセスのUID属性の表示
groups		       プロセスのgroups属性の表示
id		       プロセスのUID,GID,groups属性の表示
PID はプロセス識別子。 ;

■電子メール

who@coins.tsukuba.ac.jp に届いた電子メールは、毎日、読むこと。特に、コ ンピュータ・リテラシの授業の最中は必ず読むこと。

TAや教官からメールが来て、必要な返事は、次の実習時間/講義時間までに 出すこと。

coins 以外のメール・サーバを主に使うときには、~/.forward による転送の設 定を行うこと。

■~/.forwardによる電子メールの転送

メール・リーダには、 受け取ったメールをユーザの操作で1つひとつ 転送(forward) する機能がある。 それとは別に、届いたメールをユーザの操作を介さずに自動的に他のアドレス (普通は他のホストにある別の自分の電子メール・アドレス)に転送する機能 がある。この機能を使うには、ホーム・ディレクトリの下の ~/.forward というファイルに、転送先のアドレスを書く。 たとえば、 shiro@himalaya.is.tsukuba.ac.jp に届いたメールを全て shiro@alps.is.tsukuba.ac.jp に転送したいとする。この時、 himalaya の方のホーム・ディレクトリの下の ~/.forward に次のように書く。
shiro@alps.is.tsukuba.ac.jp
単純に転送先のアドレスを書く方法では、~/.forwardが あるホストには、何も残らないが、コピーを残しながら、転送する方法もある。 それには、次のように自分のログイン名に\を付けたア ドレスを含める。
\shiro, shiro@alps.is.tsukuba.ac.jp
注意:「\」は、ASCII 「5c(16進数)」である。 「\」と表示されたり「¥」と表示されることがある。 「/」ではない。

この例では、himalaya に届いた電子メールは、himalaya と いうホストの \shiroというユーザの 配送プログラム用メール・ボックスに入り、 さらに、shiro@alps.is.tsukuba.ac.jp にも送られる。

~/.forwardにおけるループの危険性

複数のメール・アドレスがある人は、どのホストにログインした時にも、全部 のホストに届いた電子メールが読める状態にしたいと思うかもしれない。 上の例では、 alps にログインした時にも、 alpshimalaya の両方のメールが読め、 また、himalaya にログインしてもやはり alpshimalaya の両方のメールが読める と便利に思えるかもしれない。しかし、こうすることは技術的に難しいので、 しばらくはあきらめて欲しい。

\loginnameの機能をつかっても、なかなかうまくいかない。 たとえば、次のよう な ~/.forward を作成したと考える。(実際に実行すると危険なので、 考えるだけする。)

(alps:~/.forward)
\shiro, shiro@himalaya.is.tsukuba.ac.jp
(himalaya:~/.forward)
\shiro, shiro@alps.is.tsukuba.ac.jp
この状態で、shiro@alps.is.tsukuba.ac.jp にメールが届いた 場合、次のようなことが起る。
  1. alps にコピーが残され、かつ、 shiro@himalaya.is.tsukuba.ac.jp に送らる。
  2. himalaya では、やはり、コピーが残され(ここまでは順調)、 さらに、shiro@alps.is.tsukuba.ac.jp に送られる(!)。
  3. alps では、コピーが残され(2回目)、himalaya に送られる。
  4. himalaya では、コピーが残され(2回目)、 さらに、shiro@alps.is.tsukuba.ac.jp に送られる。
  5. alps では、コピーが残され(3回目)、himalaya に送られる。
  6. himalaya では、コピーが残され(3回目)、 さらに、shiro@alps.is.tsukuba.ac.jp に送られる。
  7. alps では、コピーが残され(4回目)、himalaya に送られる。
  8. himalaya では、コピーが残され(4回目)、 さらに、shiro@alps.is.tsukuba.ac.jp に送られる。
  9. ...
このような電子メールのピンポンが、永遠に続く。実際には、電子メールの転 送には上限が設定されているので、その上限に達した段階でエラーになって止 る。

3ヵ所以上でこの設定をしたとすると、中継される度にメールが増殖する。

\loginname の機能を使っていなかったとすると、コピーは 残らないが、メールが行き来するだけで、どこにも届けられずにエラーになる。

~/.forward の設定をしたら、必ず自分で自分あてに電子メールを出 して届くかテストすること。~/.forward の設定を間違えると、エラー のメールも届かなくなるので、エラーが起こっていることさえわからなくなる。

~/.forward の機能は、もともとは、sendmail という種類のMTA の機 能である。他の MTA (qmail, postfix)でも使えるように設定していることが多い。

◆電子メールをプログラムに転送する

~/.forward の応用として、他のアドレスに電子メールを転送するの ではなく、(サーバ上で実行される)プログラムに転送する機能がある。すな わち、(サーバ上で)プログラムを実行して標準入力に電子メールの内容を与 えるという機能がある。これには、次のように~/.forwardに書く。
"| /program/path/name arg1 arg2 arg3 ... argn" 
このように、| に続いて、プログラムのパス名と引数を書き、 全体を "" で括る。

この機能を使って、受け取った電子メールを自動的に分類したり、 spamメール を排除したりすることができる。たとえば、MH の slocalやprocmail と呼ば れているプログラムがこの機能を使っている。

■実習

実習時間中には、 以下の課題をできるだけ多く行いなさい。全部を行う必要はない。

★練習問題(80) psコマンド

ps コマンドを使って、プロセスの一覧を表示しなさい。

★練習問題(81) psコマンドのオプション

ps コマンドで、次のオプションの動作を確認しなさい。
a
all。他人のプロセスも含めて全てのプロセス。
l
long。長い表示。
u
長い表示。
U user (大文字)
ユーザ名 user のプロセスだけ
x
端末無しのプロセスの表示
ux
u と x の組み合わせ
w
横幅を広げた表示。
ww
もっと横幅を広げた表示。www, wwww も有効。
BSD 系の ps (Linux含む) では、オプションの「-」を省略できる。

くわしくは、man ps を調べなさい。

★練習問題(82) psコマンドで横長の表示

ps ux や ps aux では、MacOSX 関連のプロセスの表示が切れてしまう。 w コマンドを使うか、端末を横長にして表示してみなさい。

★練習問題(83) topコマンド

top コマンドで、「重たい」プロセスを表示しなさい。 「重たい」プロセスとは、CPU時間を大量に消費しているプロセスや メモリを大量に消費しているプロセスのことである。 終了するには、小文字の q を打つ。^C でもよい。
% top [←]
% top -o cpu [←]
(CPU を消費している順)
MacOSX では、top コマンド自分自身が「重たい」と認識される。 その場合は、top コマンドが頻度を下げる。
% top -s 4 -o cpu [←]
man top でマニュアルを表示して、-o オプションと -U の使い方を 調べなさい。そして、メモリの利用順 (rsize) で表示しなさい。 -U オプションで自分自身のプロセスだけを表示しなさい。

top コマンドの -U オプションは、マニュアルに記述された通りの動作をしない。

★練習問題(84) pstreeコマンド

pstreeコマンドを実行しなさい。それでプロセスの親子関係により木構造が作 られていることを確認しなさい。

★練習問題(85) 「アクティビティモニタ.app」の利用

「ユーティリティ(/Applications/Utilities/)」にある 「アクティビティモニタ.app(Activity Monitor.app)」 を動作させ、プロセスの一覧を表示させなさい。
% open "/Applications/Utilities/Activity Monitor.app" [←]
または、Finder で、「移動」メニューから「ユーティリティ」を 選択。「アクティビティモニタ.app」のアイコンをダブルクリック。

アクティビティモニタの表示

アクティビティモニタの表示

表示されるプロセスの範囲を変えてみなさい。

top コマンドの表示と比較しなさい。

★練習問題(86) lsofコマンド

lsof コマンド(list open files) は、プロセスの一覧と同時に、プロセスがど のファイルを開いているかを表示するコマンドである。これを実行してみなさ い。

★練習問題(87) killコマンド

kill コマンドを使って、プロセスを殺してみなさい。たとえば、端末を2個表 示し、片方の端末で、lv コマンドでファイルを表示しなさい。もう片方の端末 で、ps コマンドで PID を調べ、kill コマンドで殺しなさい。

★練習問題(88) killコマンドで他人のプロセスを殺そうとしてみる

ps コマンドで調べたプロセスのうち、他人のプロセス(root、その他) を kill コマンドで殺そうとしてみなさい。何がおきるかを観察しなさい。どのよ うなエラーが生じるか。

★練習問題(89) MacOSX Command+Option+Esc

MacOSX で、Command+Option+Esc キーを押すと 「アプリケーションの強制終了」のウインドウを表示できる。

(まず、Commandキー(Command) と Option キーを左手で押し、 押しっぱなしの状態で、右手で Esc キーを一度押して離す。)

Command+Option+Escキー

「アプリケーションの強制終了」のウインドウ

★練習問題(90) ps -lによる親子関係

ps -l を使えば、プロセスの親子関係を調べることができる。親子関係は、全 体としては、木構造になっている。そのことを調べなさい。

全てのプロセスの親プロセスは、PID 1 プロセスになっている(根に相当)。

システムによっては、pstree というコマンドが使える。

★練習問題(91) whoami,groups,idコマンド

whoami, groups, idコマンドを使って、プロセス(シェル)のUID, GID, groups 属性を表示しなさい。

★練習問題(92) chgrp コマンド

chgrp コマンドで、ファイルやディレクトリのGID属性を変更しなさい。

★練習問題(93) ディレクトリのGIDの伝播

UIDとGIDの伝播を確認しなさい。 /tmp など、誰でも書き込みできる場所にファイルを作成すると、その ファイルの UID 属性はどうなるか調べなさい。新たに実験用のディレクトリを mkdir コマンドで作成しなさい。そのディレクトリのGID属性を chgrp で変更 し、その中に新たなファイルやディレクトリを作成したら、その GID がどう設 定されるかを確かめなさい。また、既存のファイルをmv コマンドで移動したら どうなるかを調べなさい。

★練習問題(94) .forwardの設定

coins 以外に日常的に読み書きするメール・アカウントがある 人は、.forward を設定して、転送するように設定しなさい。 設定が完了したら、必ずテストして、うまく動いていることを 確認しなさい。 メールがループしないことを確かめなさい。

★練習問題(95) .parentlockの観察

Firefox や Thunderbird を実行しなさい。そして、.parentlock というファイ ルが作成されることを観察しなさい。
% ls -l ~/Library/*/Firefox/Profiles/*/.parentlock [←]
% ls -l  ~/Library/Thunderbird/Profiles/*/.parentlock [←]
「*」は、シェルのワイルドカードの機能である。 任意の文字列に適合する。詳しくは、後述する。

★練習問題(96) 複数の Firefox の実行

2台の iMac を利用して、それぞれでログインしなさい。そして、それぞれで FirefoxThunderbird を実行してみなさい。2台目では、次のような表示がなされるこ とを確認しなさい。

複数のFirefoxの同時実行

複数のFirefoxの同時実行

★練習問題(97) Firefoxの強制終了と.parentlockの削除

注意:この実験は危険が伴うので、実習時間中に行うことが望ましい。
  1. kill コマンドや 「アプリケーションの強制終了」で Firefox を強制終了してみなさい。
  2. その状態で、Firefox がうまく実行できないことを確認しなさい。
  3. .parentlockの観察 を行いなさい。
  4. そのファイルを rm コマンド等など削除しなさい。
    % rm ~/Library/*/Firefox/Profiles/*/.parentlock [←]
    
手引き 5章 85 ページ脚注 参照。ただし、ファイル名に空白を含むファイ ルを削除しようとしているので、脚注の方法ではうまくいかない。

★練習問題(98) Firefoxのプロファイル

Firefox には、様々な設定(たとえばブックマークや最初に表示されるページ) を「プロファイル」と呼ばれるものに個別に保存することができる。この機能 を利用してみなさい。

coins では、コマンドラインから次のように打つと、 ProfileManager という機能が働く。

% firefox-profilemanger  [←]
この画面で、プロファイルの作成、削除、指定しなかった時に使われるプロファ イルを指定することができる。(プロファイルが複数ある場合、1個目の Firefox のプロセスを実行する時にption キーを押しながら実行すると、この 機能が働く。)

複数のプロファイルを用いればね複数の Firefox のプロセスを同時に実行する ことができる。Firefox は、もともと1つのプロセスで複数のウインドウを開 くこともできる。この2つの機能の違いと有効な利用方法を考えなさい。

★練習問題(99) 8進数を利用したchmodコマンド

chmod コマンドは、モードを8進数で与えることもできる。 このことを man で確認しなさい。また、利用してみなさい。 8進数で指定することの利点を考えなさい。

◆課題7 プロセス、アクセス制御、電子メールの転送

締め切りは、2007年5月11日金曜日とする。

以下の問題について、問題、および、回答をテキスト・ファイルに記述し、 レポート提出ページから提出しなさい。端末の表示 (コマンドの実行結果)は、コピー&ペースト等の機能を使って提出するファイ ルに含めなさい。課題が達成されたことを示す程度には見やすいように編集し なさい。ただし、過度の編集は避けなさい。編集した部分は必要に応じて省略 記号を入れなさい。

テキスト・ファイルで、右揃えをするには、パラグラフの区切りを、空行にし た上で、M-q (Esc q, M-x fill-paragraph) の機 能を利用するとよい。

(1) 端末を2つ開きなさい。片方で強制終了させてもよいプロセスを作成しな さい。プロセスの作成方法としては、たとえば、lv コマンドでテキスト・ファ イルを表示する方法が考えられる。もう一方の端末で、そのコンピュータで動 作している自分自身のプロセスだけを ps コマンドで表示しなさい。端末と結 びついていないプロセスも含めなさい。

(2) kill コマンドを使って、(1) で作成したプロセスを殺しなさい。ps コマ ンドの結果を示し、それがきちんと死んだことを示しなさい。

(3) ls -l (ls -ld) を使って、次のファイルのモードを調べなさい。

(4) まず、適当な内容を持つテキスト・ファイルを作成しなさい。そして、次 のような要求を満たすように chmod コマンドを使ってモードを変更しなさい。 提出するファイルには、chmod コマンドをどのように利用したか、また、その 結果 ls -l の表示がどのようになったかを含めなさい。

(5) [加点] 次のようなファイルやディレクトリを作成し、それが動作している ことを ls -l や rm コマンドなどで示しなさい。

(6) 電子メールの転送について、当てはまる行の先頭に yes, 当てはまらない 行の先頭に no と記述しなさい。

(a) coins 以外に電子メールのアカウントがある。
(b) coins のメールを毎日読む。
(c) ~/.forward の機能を理解した。
(d) ~/.forward を設定した。

(7) coinsに届いたメールを毎日確認する方法を書きなさい。

(8) The Unix Supr Text の 6 章と 11章を読みなさい。標準入出力の切り替え (リダイレクション)とパイプについて機能と目的を5-10行でまとめなさい。

(9) The Unix Supr Text の 6 章と 11章を読みなさい。ファイル名置き換えに ついて機能と目的を5-10行でまとめなさい。


Last updated: 2007/05/10 18:13:03
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>