2006年05月16日 コンピュータリテラシ 筑波大学 電子・情報工学系 コンピュータサイエンス専攻 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2006/2006-05-16
あるいは、次のページから手繰っていくこともできます。
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![]()
手引き26ページにあるように、ssh コマンドを使う。
host1% ssh hostname Password: (パスワードを打つ)hostname%
![]()
hostname
は、
azalea21
など、接続したいコンピュータの名前を入れる。
ログイン先とログインもとでユーザ名が異なる時(プロセスを殺したいと時など、 一時的に他人の端末を借りる時)には、次のように、-l オプションに続きログ イン先のユーザ名を使う。
host1% ssh hostname -l user Password: (パスワードを打つ)または、「@」の前にログイン先のユーザ名を指定する。hostname%
![]()
host1% ssh user@hostname Password: (パスワードを打つ)hostname%
![]()
遠隔ログインすると、ログイン先でシェルが実行される。 シェルを終了(exitコマンド)すると、遠隔ログイン自身も終了する。
ssh で一番最初に接続する時には、次のように Warning: が出ることがある。
[azalea20:~] yas% ssh azalea21この意味については、後述。 公開鍵暗号系をきちんと理解した上でThe authenticity of host 'azalea21 (130.158.86.41)' can't be established. RSA key fingerprint is d8:b2:bd:32:c0:9d:80:16:dc:40:7e:73:03:25:4f:b9. Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'azalea21,130.158.86.41' (RSA) to the list of known hosts. Password: Welcome to Darwin! [azalea21:~] yas%
![]()
yes![[←]](../icons/screen-return.gif)
と打つべきである。
手引きXVIページ。
きちんと終了するには、 2種類の記憶のための部品 メモリ(RAM)の内容のうち、いくつかを ハードディスクにきちんと保存する必要がある。
いきなり電源を切ったり、リセットしたりすると、 ハード・ディスクに保存すべき内容を保存しないまま 失われた状態になり、つじつまが合わなくなる。
図? アクセス制御における主体、オブジェクト、および、操作
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
にしても、アクセスで
きない。
三角のボタン▲▼を使うことで、より詳しい表示と切り替えることができる。
Finder のウインドウの左側に表示される「サイドバー」に、ホーム・ディレク トリやデスクトップを入れておくと便利。入れるには、Finder でそのフォルダ を表示して、サイドバーにドラッグする。同じサイドバーは、保存のウインド ウにも表示される。
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 はプロセス識別子。 ;
くわしくは、man ps を調べなさい。
手引き23ページの「ps -u [自分のログイン名]」 という記述は、MacOSX では誤り。 orchid-calc1 などの Linux や、 System V 系 Unix (Solaris) では有効。
% 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 コマンドの表示と比較しなさい。
あるいは、次のコンピュータに遠隔ログインしてみなさい。
ログインしたら、次のようなコマンドを実行してみなさい。 そして、ログイン元のコンピュータの結果と比較しなさい。
遠隔ログインした先のコンピュータで kill コマンドでプロセスを殺しなさい。
(まず、Commandキー() と Option キーを左手で押し、
押しっぱなしの状態で、右手で Esc キーを一度押して離す。)
全てのプロセスの親プロセスは、PID 1 プロセスになっている(根に相当)。
システムによっては、pstree というコマンドが使える。
/tmp
など、誰でも書き込みできる場所にファイルを作成すると、その
ファイルの UID 属性はどうなるか調べなさい。新たに実験用のディレクトリを
mkdir コマンドで作成しなさい。そのディレクトリのGID属性を chgrp で変更
し、その中に新たなファイルやディレクトリを作成したら、その GID がどう設
定されるかを確かめなさい。また、既存のファイルをmv コマンドで移動したら
どうなるかを調べなさい。
以下の問題について、問題、および、回答をテキスト・ファイルに記述し、 レポート提出ページから提出しなさい。 端末の表示(コマンドの実行結果)は、コピー&ペースト等の機能を使って提出 するファイルに含めなさい。
テキスト・ファイルで、右揃えをするには、パラグラフの区切りを、空行にし た上で、M-q (Esc q, M-x fill-paragraph) の機 能を利用するとよい。
(1) 端末を2つ開きなさい。片方で強制終了させてもよいプロセスを作成しな さい。もう一方の端末で、そのコンピュータで動作している自分自身のプ ロセスだけを ps コマンドで表示しなさい。端末と結びついていないプロ セスも含めなさい。
(2) kill コマンドを使って、(1) で作成したプロセスを殺しなさい。ps コマ ンドの結果を示し、それがきちんと死んだことを示しなさい。
(3) ls -l (ls -ld) を使って、次のファイルのモードを調べなさい。
(5) ssh で、別のコンピュータに遠隔ログインしなさい。そこで動作している 自分自身のプロセスを殺しなさい。一般のプロセスを殺したときとシェル (tcsh)を殺した時の動きは少し異なる。そのことを説明しなさい。 (加点 課題)。
(6) 次のようなファイルやディレクトリを作成し、それが動作していることを ls -l や rm コマンドなどで示しなさい (加点課題)。