2009年05月12日 情報科学類 コンピュータリテラシ 筑波大学 システム情報工学研究科 コンピュータサイエンス専攻, 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2009/2009-05-12
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
「端末」を複数開くと、「シェル」のプロセスが2つ。 プログラムとしては、同じ tcsh だが、プロセスとしては別物になる。
その昔は、1度に1個のプログラムだけしかメモリに入れられなかった。 (プログラムとプロセスの違いが希薄。)
% ls
% 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プロセスに対応。左から次のような意味を持つ。
/dev/ttyp3
は
p3
になる。
R
(runnable)
U
(uninterruptible), D
(Disk),
S
(Sleep)、I
(Idle)
Z
(Zombie)
T
(Traced)
TIME
COMMAND
% ps x
% 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
%MEM
VSZ
(Virtual Size)
RSS
(resident set size)
STARTED
親子関係により、プロセスは全体として木構造を作る。
親プロセスのプロセス識別子は、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
%
Unix では、プロセスを殺す方法は、主に次の2つ。
% 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行削除の意味。
^C
や ^\
で死なないプロセス
(emacs など)
を殺すには、kill コマンドを使う。
% kill pid
これは、プロセス識別子pidのプロセスを殺す。
他人のプロセスは、権限がないので殺せない。
注意:pid
には、プロセス識別子となる番号を入れる。pid
と打つのではない。pid と打たれても、kill コマンドは、どのプロセスを殺せ
ばよいのかわからない。
-KILL
をつけてkillコマンドを実行する。
% kill -KILL pid
例
図? アクセス制御における主体、オブジェクト、および、操作
Unixでは、アクセス制御の主体は、プロセスである。 アクセス制御のオブジェクトは、ファイル、または、プロセスである。 操作には、次のようなものがある。
図? 実世界のユーザとUNIX中のプロセス・ファイル
Unixでは、全てのファイルやプロセスは、あるユーザの所有物である。 ファイルとプロセスには、UID が付加されている。
1人のユーザが複数のグループに属することができる。
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)
%
ファイルの「内容」のアクセス3段階であるが、ファイルの「属性」次の2段 階である。
スーパー・ユーザ(super user)
は、UID が 0 。
特権ユーザ(privileged user)、
ルート(root)、
su
(su コマンド、あるいは super user の略)ともよばれる。
スーパーユーザのユーザ名は、慣例として
root
という文字列が使われる。
ファイルのバックアップなど、システム管理の作業には スーパー・ユーザの仕組みが必要になる。
chown
コマ
ンドを用いる。ただし、スーパーユーザの権限が必要である。
ファイルをコピーして、元ファイルを消すことはできる。
ファイルの GID 属性を変更するには、chgrp
コマンドを使う。
一般ユーザは、自分が属しているグループにのみ変更できる。
任意のグループに変更するには、スーパー・ユーザの権限が必要である。
% 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 と同じ |
文字 | 意味 |
+ | 許可を追加する |
- | 許可を除く |
= | 指定した許可だけとする |
文字 | 単語 | 意味 |
r | read | 読込み可 |
w | write | 書込み可 |
x | execute | 実行可 |
X | execute | 実行可(所有者に対して「実行可」がある時だけ) |
chmod には、-R (recursive)オプションがある。 これは、ディレクトリをたぐり全部変更することを意味する。
rw-r--r--
rwxr-xr-x
rwxr-xr-x
rwx------
~/Mail
ディレクトリのモード
rw-r--r--
~/public_html
以下のファイル)
rwxr-xr-x
public_html
以下のディレクトリ)
rwxr-xr-x
または rwx--x--x
~
。~/public_html
の親ディレクトリ)。
x ビットを出す。
rw-rw-r--
または rwxrwxr-x
r-xr-xr-x
, r-x------
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 はプロセス識別子。 ;
TAや教官からメールが来て、必要な返事は、次の実習時間/講義時間までに 出すこと。
coins 以外のメール・サーバを主に使うときには、~/.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
にも送られる。
alps
にログインした時にも、
alps
と himalaya
の両方のメールが読め、
また、himalaya
にログインしてもやはり
alps
と himalaya
の両方のメールが読める
と便利に思えるかもしれない。しかし、こうすることは技術的に難しいので、
しばらくはあきらめて欲しい。
\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
にメールが届いた
場合、次のようなことが起る。
alps
にコピーが残され、かつ、
shiro@himalaya.is.tsukuba.ac.jp
に送らる。
himalaya
では、やはり、コピーが残され(ここまでは順調)、
さらに、shiro@alps.is.tsukuba.ac.jp
に送られる(!)。
alps
では、コピーが残され(2回目)、himalaya
に送られる。
himalaya
では、コピーが残され(2回目)、
さらに、shiro@alps.is.tsukuba.ac.jp
に送られる。
alps
では、コピーが残され(3回目)、himalaya
に送られる。
himalaya
では、コピーが残され(3回目)、
さらに、shiro@alps.is.tsukuba.ac.jp
に送られる。
alps
では、コピーが残され(4回目)、himalaya
に送られる。
himalaya
では、コピーが残され(4回目)、
さらに、shiro@alps.is.tsukuba.ac.jp
に送られる。
3ヵ所以上でこの設定をしたとすると、中継される度にメールが増殖する。
\loginname
の機能を使っていなかったとすると、コピーは
残らないが、メールが行き来するだけで、どこにも届けられずにエラーになる。
~/.forward
の設定をしたら、必ず自分で自分あてに電子メールを出
して届くかテストすること。~/.forward
の設定を間違えると、エラー
のメールも届かなくなるので、エラーが起こっていることさえわからなくなる。
~/.forward
の機能は、もともとは、sendmail という種類のMTA の機
能である。他の MTA (qmail, postfix)でも使えるように設定していることが多い。
~/.forward
の応用として、他のアドレスに電子メールを転送するの
ではなく、(サーバ上で実行される)プログラムに転送する機能がある。すな
わち、(サーバ上で)プログラムを実行して標準入力に電子メールの内容を与
えるという機能がある。これには、次のように~/.forward
に書く。
"| /program/path/name arg1 arg2 arg3 ... argn"このように、
|
に続いて、プログラムのパス名と引数を書き、
全体を ""
で括る。
この機能を使って、受け取った電子メールを自動的に分類したり、
spamメール
を排除したりすることができる。たとえば、MH の
slocalやprocmail
と呼ば
れているプログラムがこの機能を使っている。
くわしくは、man ps を調べなさい。
% top
% top -o cpu
(CPU を消費している順)
MacOSX では、top コマンド自分自身が「重たい」と認識される。
その場合は、top コマンドが頻度を下げる。
% top -s 4 -o cpu
man top でマニュアルを表示して、-o オプションと -U の使い方を
調べなさい。そして、メモリの利用順 (rsize) で表示しなさい。
-U オプションで自分自身のプロセスだけを表示しなさい。
% open "/Applications/Utilities/Activity Monitor.app"
または、Finder で、「移動」メニューから「ユーティリティ」を
選択。「アクティビティモニタ.app」のアイコンをダブルクリック。
アクティビティモニタの表示
表示されるプロセスの範囲を変えてみなさい。
top コマンドの表示と比較しなさい。
(まず、Commandキー() と Option キーを左手で押し、
押しっぱなしの状態で、右手で Esc キーを一度押して離す。)
全てのプロセスの親プロセスは、PID 1 プロセスになっている(根に相当)。
システムによっては、pstree というコマンドが使える。
/tmp
など、誰でも書き込みできる場所にファイルを作成すると、その
ファイルの UID 属性はどうなるか調べなさい。新たに実験用のディレクトリを
mkdir コマンドで作成しなさい。そのディレクトリのGID属性を chgrp で変更
し、その中に新たなファイルやディレクトリを作成したら、その GID がどう設
定されるかを確かめなさい。また、既存のファイルをmv コマンドで移動したら
どうなるかを調べなさい。
emacs -nw
で、端末の中で Emacs (no window)を実行する。
いるいは、lv /etc/services 等で、ファイルを表示する。
fg
コマンドを実行する。
% fg
% ls -l ~/Library/*/Firefox/Profiles/*/.parentlock
% ls -l ~/Library/Thunderbird/Profiles/*/.parentlock
複数のFirefoxの同時実行
coins では、コマンドラインから次のように打つと、 ProfileManager という機能が働く。
% firefox-profilemanger
この画面で、プロファイルの作成、削除、指定しなかった時に使われるプロファ
イルを指定することができる。(プロファイルが複数ある場合、1個目の
Firefox のプロセスを実行する時にption キーを押しながら実行すると、この
機能が働く。)
複数のプロファイルを用いればね複数の Firefox のプロセスを同時に実行する ことができる。Firefox は、もともと1つのプロセスで複数のウインドウを開 くこともできる。この2つの機能の違いと有効な利用方法を考えなさい。
以下の問題について、問題、および、回答をテキスト・ファイルに記述し、 レポート提出ページから提出しなさい。端末の表示 (コマンドの実行結果)は、コピー&ペースト等の機能を使って提出するファイ ルに含めなさい。課題が達成されたことを示す程度には見やすいように編集し なさい。ただし、過度の編集は避けなさい。編集した部分は必要に応じて省略 記号を入れなさい。
テキスト・ファイルで、右揃えをするには、パラグラフの区切りを、空行にし た上で、M-q (Esc q, M-x fill-paragraph) の機 能を利用するとよい。
(1) 端末を2つ開きなさい。片方で強制終了させてもよいプロセスを作成しな さい。プロセスの作成方法としては、たとえば、lv コマンドでテキスト・ファ イルを表示する方法が考えられる。もう一方の端末で、そのコンピュータで動 作している自分自身のプロセスだけを ps コマンドで表示しなさい。端末と結 びついていないプロセスも含めなさい。
(2) kill コマンドを使って、(1) で作成したプロセスを殺しなさい。ps コマ ンドの結果を示し、それがきちんと死んだことを示しなさい。
(3) まず、適当な内容を持つテキスト・ファイルを作成しなさい。そして、次 のような要求を満たすように chmod コマンドを使ってモードを変更しなさい。 提出するファイルには、chmod コマンドをどのように利用したか、また、その 結果 ls -l の表示がどのようになったかを含めなさい。
(4) 電子メールの転送について、当てはまる行の先頭に yes, 当てはまらない 行の先頭に no と記述しなさい。
(a) coins 以外に電子メールのアカウントがある。 (b) coins のメールを毎日読む。 (c) ~/.forward の機能を理解した。 (d) ~/.forward を設定した。
(5) coinsに届いたメールを毎日確認する方法を書きなさい。
(6) ls -l (ls -ld) を使って、次のファイルのモードを調べなさい。そして、 どのようなユーザやグループがどのようにアクセスできるかを説明しなさい。
(7) The Unix Super Text の次の部分を読みなさい。
(8) The Unix Super Text の次の部分を読みなさい。