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/
「端末」を複数開くと、「シェル」のプロセスが2つ。 プログラムとしては、同じ tcsh だが、プロセスとしては別物になる。
その昔は、1度に1個のプログラムだけしかメモリに入れられなかった。 (プログラムとプロセスの違いが希薄。)
% ls![]()
% ps1行が1プロセスに対応。左から次のような意味を持つ。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 %
![]()
/dev/ttyp3
は
p3
になる。
R
(runnable)
U
(uninterruptible), D
(Disk),
S
(Sleep)、I
(Idle)
Z
(Zombie)
T
(Traced)
TIME
COMMAND
% ps x![]()
% ps uUSER 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 lUID 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つ。
% catLine 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「intr」のところに表示されるものが「^C」, 「quit」のところに表示されるものが「^\」に相当するキー。 「kill」は、1行削除の意味。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; % ![]()
^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コマンドも使える。
% iduid=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 file1file1に対して、グループ(g)とそれ以外の人(o)に対して「読込み可」の許可を 取り除いている。-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 %
![]()
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 cpuMacOSX では、top コマンド自分自身が「重たい」と認識される。 その場合は、top コマンドが頻度を下げる。(CPU を消費している順)
% top -s 4 -o cpuman 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 コマンドで移動したら
どうなるかを調べなさい。
% ls -l ~/Library/*/Firefox/Profiles/*/.parentlock![]()
% ls -l ~/Library/Thunderbird/Profiles/*/.parentlock「*」は、シェルのワイルドカードの機能である。 任意の文字列に適合する。詳しくは、後述する。![]()
複数のFirefoxの同時実行
% rm ~/Library/*/Firefox/Profiles/*/.parentlock![]()
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) 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行でまとめなさい。