UNIX 講習会 (2) 演習問題の回答

^ up  

Last modified: Thu May 24 16:28:16 2001

回答は先着順に並べてあります。 赤ペン先生のいい加減な添削つき。


問題

  1. あなたのホームディレクトリの内でもっとも長いパス名をかけ。
  2. あるディレクトリに chmod 770 を適用してもよいのは どんな場合か、説明せよ。
  3. snow と soleil には、どちらも kterm と mule が入っている。 パス名はそれぞれ /usr/bin/X11/kterm/usr/local/bin/mule なのだが、実はこれらのディレクトリに至るパスには多くの シンボリックリンクが含まれており、どちらも「真のパス」ではない。 snow と soleil における kterm と mule の実体はどこにあるか。
  4. ディレクトリ dir/ がある。
    du dir/
    を実行すると容量は 5MBytes であった。 しかし
    cp -r dir/ ~
    を実行すると 100MBytes 以上のファイルがコピーされ、 ホームディレクトリが溢れてしまった。 これはなぜか。
  5. ある日 netscape を立ち上げたら、暴走して制御できなくなった。 これを終了させる手順を説明せよ (複数あるかもしれない)。
  6. snow で ps aux を実行せよ。 実際にはそのとき研究室にはいなかったユーザ名をすべてあげよ。
  7. 研究室でつぎのコマンドを実行したとき、他人に迷惑な順に並べよ。 理由もつけること。なお条件によって結果が異なる場合は いくつかの状況を仮定せよ (実際に実行してみてもよい)。
    • ps aux
    • cat a.txt
    • mslr verylargecorpus.txt
    • find /
    • sleep 100000000

    (mslr は田中・徳永研で開発されているパーザで重くなるプロセスの代表、 sleep については man を参照)


回答 A

2  グループで大きなプログラムを作成してる時。お互いのプログラムが
   見えなかったり、実行できないと支障が生じることも考えられるので。
    (プログラムじゃなくてもいいんだけど、まあ50%正解でしょう、なぜ50%かは新山の回答を見よ)

3 /usr/X11R6v3/bin/kterm

  /usr/local/bin/emacs

  emacsにmuleからリンクが張られている。
    (これは snow と soleil の結果じゃないぜ)

4  コマンドの順番を間違えて、cp ~ dir/ としてしまったから。いろいろ可能性を
   調べて、du をいろいろな方向から調べたがなにもわからず。挙げ句このような
   回答となり果てました。
    (残念でした、でも「なり果てる」って表現がウケたっす)

5  最初にネットスケープのプロセス番号(pid)を調べる。
   次にシグナルを  kill pid  で送る。
   それでも止まらなければ、  kill KILL pid で完全に殺してしまうしかない。
    (-KILL にハイフンぬけてるよ)

6
  5月6日4時10分実施
  aterada
  kshirai
  take

7  考えてわからないので実行しました。CPU使用を占有するものほど迷惑だと
   考えました。find /が圧倒的。mslr はそんな命令はないと言われたが、
   雰囲気からしてfind /と同等と推定。他の三つは差も占有時間もほとんど
   なかった。強いて挙げるなら一瞬でも占有したps aux。catの対象の大きさに
   よっては逆転もあり得るか。
    (「一瞬でも占有したps aux」をあげているのが鋭い。じっさい、ps は結構 CPU 食うのです)

  1find /
  2mslr
  3ps aux
  4cat 
  5sleep 100000000

ページの先頭へ


回答 B

2自分と同じグループの人が読み書き実行できる。共同で何か作業をしている時
 たとえばみんなで一つのプログラムを書いている時など
    (まあ 50% 正解、なぜ50%かは新山の回答を見よ)

3ディスクはコンピュータ上に実際になくてもかまわなくて、分散しているのを
  ファイル共有している。一回目のプリント図1だとktermはsnowにあると
  おもうのですが、実際にはどうやってたどったらいいのでしょうか。/
    (ls -l でたどれますよ)

4自分のホームディレクトリにあるdirだけでなくおなじ計算機の中に
  はいっているすべてのdirとそのしたのファイルぜんぶがコピーされたのだと
  思います。
    (なんでそうなるの? 「dir」ってのはたまたま与えた名前だよ)

5強制終了のKILLシグナルを送る
kill -KILL netscape
    (できればいきなり KILL を送るのは避けてほしかった)

6 shotu aterada nishio
   
7
  1  mslr verylargecorpus.txt 重くなるから。やってみましたが、コマンドが
      見つからないそうです
  2 sleep 1000000000 この時間止まる
    (残念でした、sleep はいちばん迷惑かからないのです)
  3 find / 全部のファイルを探す。止まらなくなりました。ずっと続けたら迷惑
    (ちゃんと Control-C で止めたんでしょうね…?)
  4 ps aux ただプロセスを見るだけ 
  5 cat a.txt ファイルの中身を表示するだけ。実際そのファイルがないので
     実行できませんでした。
    (「もしそのファイルがあったら」という状況も仮定してください。
    その大きさによっても結果はちがってくる)
   
 どれくらい迷惑がかかっているか、誰にも文句をいわれなかったのであまり良く
 わかりませんでした。上の三つが特に迷惑なんだと思います。 
    (まあそりゃあすぐには文句はでないでしょうよ。ただし、
     本当に迷惑のかかるプロセスが動いていると ls しても目に見えて
     遅くなるのですぐわかります)

ページの先頭へ


回答 C

2. 自分,および同じグループに属する者だけに自由に
   アクセスできるようにしたい場合
    (うん、そりゃあ正しいんだが、具体的にどんな状況で必要になるかを想像してほしかった)
3. kterm : snow : /a/snow/export/local/X11R6.3/bin/kterm
           soleil : /a/soleil/export/local/bin/kterm
   mule : snow : /a/snow/export/local/bin/mule2-19.34
          soleil : /a/soleil/export/local/bin/mule2-19.34
    (文句なしのできです)
4. オプションrでは,シンボリックリンクのリンク先の内容まで
   すべてコピーしてしまう。du dir/ではシンボリックリンクの
   リンク先の容量は含まれない。
    (正解です)
5. (1)psコマンドでプロセスIDを確認する。
   (2)killコマンドでTERMシグナルを送る。
   (3)psコマンドでプロセスが終了しているか確認する。
   (4)終了していなければ,killコマンドでKILLシグナルを送る。
   (5)psコマンドでプロセスが終了しているか確認する。
    (正解です、欲をいえば他にもあるんじゃないかってとこかな)
6. kshirai, shotsu
7. mslr verylargecorpus.txt
   find /
   cat a.txt
   ps aux
   sleep 100000000
   (理由)
   findはルートディレクトリからすべてのパスを見るため,時間もかかり,
   CPU使用率も高くなる。しかし,結果の出力が多いため,
   使用率は100%近くまで上がることはない。一方,mslrでは,
   1文が非常に長いと処理に時間がかかる上に使用率も
   100%近くまで上がる。catでは,表示させるファイルが大きければ
   大きいほど時間はかかるが,これもfindと同様,出力が多くなるので
   使用率はそれほど高くならない。sleepは指定した時間だけプロセスが
   sleep状態になるだけなので,CPUはほとんど使わない。
    (だいたいあってます、でもcatが一瞬で終わるなら、ps のほうが負荷は高いです)

ページの先頭へ


回答 D

2:
%chmod 770
は、ユーザとグループには、全てのパーミションが与えられていて、外部からは
全く与えていないということなので、グループ内で共有してもよいディレクトリ
である。各ユーザにリンクされている共有ファイル(変更してもよい)などに
使用することができる。
    (「各ユーザにリンクされている共有ファイル」って説明がよくわかんないけど、まあいいです)

3:
ls -l
コマンドで再帰的に調べると、以下の出力が出た。
(/usr/binにて、ls -l X11を実行) X11 -> /usr/local/X11R6.3/bin
(/usr/local/binにて、ls -l muleを実行)mule -> mule2-19.34
    (残念ながら /usr/local がこれまたリンクだったんだねー)

4:
-r
によりディレクトリより下の全てのリンク先のディレクトリ、ファイルまでもが
コピーされてしまうため。
例:
% du /usr/bin/X11
0       /usr/bin/X11
% du /usr/local/X11R6.3/bin
39744   /usr/local/X11R6.3/bin
なので、/usr/bin/X11をコピーすると、 /usr/local/X11R6.3/binが
コピーされることになる。
    (正解です)

5:
%kterm &
をたちあげ、
ps
コマンドでプロセス番号を取得し、
%kill (プロセス番号)
コマンドで消す。
それでもだめならば、
%kill -kill (プロセス番号)
コマンドで強制終了させる。
    (正解です、欲をいえばあともうひとつ)

6:
%ps aux >output
で調べた。
結果は、
skk        5178  0.0  0.0 6.84M 184K ??       I    13:30:19     0:00.00 /usr/local/bin/dbskkd-cdb
kshirai    6213  0.0  0.0 3.73M 168K ??       I      Apr 27     0:00.02 ssh-agent -c
take      25715  0.0  0.0 3.73M 160K ??       I      Apr 25     0:00.00 ssh-agent
となった。
    (skk は実在のユーザじゃないけど、まあいいです)

7:
ps aux                     全てのプロセスを詳細表示
cat a.txt                  ファイル"a.txt"を表示させる
mslr verylargecorpus.txt   mslrプログラムを実行させる
find /                     全てのファイル(フォルダを含む)を表示させる      
sleep 100000000            100000000秒

他人に迷惑というのは、CPUを使う割合が多いと解釈してみると、
(find /)ルートディレクトリから全てを表示するので莫大な量となり迷惑である
(cat a.txt)これは”a.txt”の容量による。莫大な量なら、上と同様に迷惑である
(ps aux)これも動いているプロセスの量によるが、そんなに莫大にはならないと考えた
(sleep 100000000)CPUはそんなに使用しない

(mslr verylargecorpus.txt)これに関しては実行できなかったので省略する
    (まあ正解ですね)

ページの先頭へ


回答 E

2.あるディレクトリに chmod 770 を適用してもよいのは どんな場合か、説明せよ。
自分の含まれるグループ(cl)全体の共有ファイル(グループ全員が所有者と
ほぼ同じ権利を持つ) 
    (具体的にどんな状況で必要になるかを想像してほしかった)

3.snow と soleil には、どちらも kterm と mule が入っている。 
  パス名はそれぞれ /usr/bin/X11/kterm と/usr/local/bin/mule なのだが、
  実はこれらのディレクトリに至るパスには多くの シンボリックリンクが含まれてお
  り、どちらも「真のパス」ではない。 snow と soleil における kterm と 
  mule の実体はどこにあるか。 

snow  kterm:/a/snow/export/local/X11R6.3/bin/kterm
      mule :/a/snow/export/local/bin/mule

soleil kterm:/usr/local/bin/kterm
       mule :/a/soleil/export/local/bin/mule2-19.34
    (惜しい、soleil の kterm、/usr/local はリンクだよ)

4.ディレクトリ dir/ がある。 
     du dir/
   を実行すると容量は 5MBytes であった。 しかし 
     cp -r dir/ ~
   を実行すると 100MBytes 以上のファイルがコピーされ、 
   ホームディレクトリが溢れてしまった。 これはなぜか。 

   duは引数として与えたディレクトリの子であるファイルの総容量を
   返すので、dir/の内部ディレクトリに含まれる(dir/にとって孫以下にあたる)
   ファイルの容量が95MBytesあったと考えられる。(cpは-rオプションで再帰的に
   内部ディレクトリについてもコピーを実行した)
    (それはつまりこういうこと? 「du はそのディレクトリのすぐ下にある
    ディレクトリしか調べず、孫ディレクトリについては調べない」と。そんなことはないです。
    du もちゃんと「再帰的」にすべてのディレクトリを探査します)

5.ある日 netscape を立ち上げたら、暴走して制御できなくなった。 これを
  終了させる手順を説明せよ (複数あるかもしれない)。

 (netscapeがforegroundでSTOPを受け付けない場合)
  ktermにCtrl+U(KILL)の信号を送って強制終了する
 
 (netscapeがbackground状態の場合)
  psでネスケ君のプロセスIDを調べる
      ↓
  kill KILL (pid)命令で強制終了させる
    (KILL の前にハイフンぬけてます。あと、いきなりKILLではなくて
    最初は TERM を送って様子を見てからですね)

6.snow で ps aux を実行せよ。 実際にはそのとき研究室にはいなかったユーザ名を
  すべてあげよ。 
 sbilac tanaka take ean (@5/7 10:59)
  #田中、徳永両氏は個人部屋にいたかもです。 

7.研究室でつぎのコマンドを実行したとき、他人に迷惑な順に並べよ。 理由も
  つけること。なお条件によって結果が異なる場合は いくつかの状況を
  仮定せよ (実際に実行してみてもよい)。 
         ps aux 
         cat a.txt 
         mslr verylargecorpus.txt 
         find / 
         sleep 100000000 

1)sleep 100000000
  計算機が1億秒静止する。静止状態ではログアウトできないのでこの命令を下した端末
  がわかれば解除できるが、計算機を使用していた人々の驚きは大変なものだろう。
    (間違い。sleep はいちばん迷惑かからない。OS の授業でラウンドロビン型の
     スケジューリングについてやったはずだけれど、覚えてないのですか?
     それから「計算機が停止」というのがあいまい。これをはっきり定義すること。
     プロセスが停止するとか OS が終了するならわかるけど、電源が切れるわけ
     じゃないでしょう。それからこれはあくまで sleep を実行したプロセスが
     停止するだけであって、OS 全体がフリーズするわけじゃないよ。
     sleep を実行している端末があってもウインドウマネージャで強制的に
     kterm を閉じてしまえばログアウトはできるし)
2)mslr verylargecorpus.txt
  計算時間が非常に長いので迷惑。優先度を上げることで影響は抑えられる。
    (スケジューリングの優先度を上げたらかえって迷惑でしょう。逆です。)
3)find /
  おそらく1億秒はかからないだろうが、すべてのファイル情報(どんなファイルでも
  パス名に/を持つ)を出力する。優先度が小さいのでかなりのCPUを長時間消費する。
    (なんかこれも「優先度」という単語を間違って使っているようです)
4)ps aux
  実行時間は短いが最優先で処理を実行する
    (べつに最優先というわけではないですが、「最優先」って単語はどっからでてきた?)
5)cat a.txt
  ファイル"a.txt"が見つからないです...
    (「見つかる場合」も仮定してください。できるだけ多くの状況を仮定して)

ページの先頭へ


回答 F

2、同じ研究室内でデータを扱う場合
    (だいたいあってるけど、べつに「研究室 = 1グループ」ではないよ。
     たとえば田中・徳永研では研究のグループごとに UNIX のグループも分けられていることが
     多い。あと「扱う」って言葉が少々あいまい。)

3、
/a/snow/export/local/X11R6.3/bin/kterm
/a/snow/export/local/bin/mule2-19.34
    (soleil のほうは?)

4、
  ディレクトリのなかにシンボリックリンクがあったため。
  (シンボリックリンクは容量0らしいが、再帰的にコピーするとそのリンク先まで
    多分コピーしてしまうから)
    (正解です)
5、
  killコマンドをもちいて強制的に終了させる。
    (もうすこし具体的に説明してください)

6、いる人は使用状況から分かるけれど、いない人については良く分かりませんでした。

7、
  sleep 100000000                <-- メモリなどをくわないから

  ps aux                         <-- 実際動かしてみて、すぐに終ったから

  cat a.txt                      <-- ファイルの容量が多い...

  find /                         <-- 該当するものがたくさんあったから

  mslr verylargecorpus .txt      <-- 重いプロセスの代表らしいから
    (まず、順位がわからない。どれが結局一番迷惑なのか。
     それと「メモリなど」って表現をもっと詳しく。sleep 以外にもメモリをくわない
     コマンドはある、だから「など」の部分が重要なのに、それが書かれてない。
     「ファイルの容量が多い...」は書きかけのようで意味不明です。
     「該当するものがたくさんあったから」も、あったから何なのかよくわからない。
     該当するものの数と迷惑度にどういう関連があるか説明しなければ理由にならないでしょう。)

ページの先頭へ


回答 G

2.chmod 770を使用するのは、rwxrwx---であるから、所有者と、
その同じグループに属しているものは、読み書き実行ができるが、
一般の人はその権限が与えられていないことを示す。つまり、
全員ではないが、特定のグループに属する人に権限を与えたいときに使う。
    (まあそうですが、具体的にどんな状況で必要になるかを想像してほしかった)

3.
 snow:
 /usr/bin/X11 自体が、/usr/X11R6.3/bin/ にシンボリックリンクが
張られているので、/usr/bin/X11/kterm の実体は 
/usr/X11R6.3/bin/kterm である。
/usr/local/bin/mule は、同一ディレクトリ内の mule2-19.34 に
シンボリックリンクしているので、実体は、mule2-19.34である。

soleil:
 /usr/bin/X11 のシンボリックリンク先は、 /usr/openwin/bin/ であり、
この中の kterm は、 /usr/local/bin/kterm にシンボリックリンクされている。
ので、これが実体。
/usr/local/bin/mule も、snow同様に、同一ディレクトリ内の、 
/usr/local/bin/mule2-19.34にシンボリックリンクされているので、実体はこれ。
    (残念、snow も soleil も /usr/local はリンクだったんだねー)

4.ディレクトリ dir\ は、ただのシンボリックリンクだったため、
容量を調べたときはエイリアスとしての容量しか示されなかったが、
実際にrオプションのcpコマンドを実行すると、リンク先の実体をコピー
し始めたため、予想外の容量のものがコピーされてしまった。
    (ポイントはついてるけど、極端すぎ。dir/ がただのリンクだったら、du の結果は
     ゼロになるはずだ。du dir/ は 5Mbytes といってるんだから、ある程度はすでに
     ファイルが入っていて、その中にリンクも含まれていたと考えるのが正解)

5.
 1)強制終了する。電源をぽちっと押す。
 2)プロセスとして、killコマンドにより直接殺す。(netscape以外が無事な場合)
    (1 の方法はまあ正解。しかし過激なので、他に誰も考えた人はいなかった
     らしいね。ただしローカルな端末 (vectra) で動かしているならそれですべてのプロセスが
     死ぬからいいけど、リモート (たとえば、soleil) でネスケを動かしている人はこれをやっては
     ダメ。soleil 側のプロセスがずっと残ってしまうから。
     あと、kill コマンドはもうちょい具体的なやり方を)

6.satoko, yutaka, yumikom, aokumura, okazaki, take, shotsu, tezuka, 
kshiraiさんの名前を確認しましたが、aokumura, shotsu, kshirai, さんの
姿は見えませんでしたので研究室には居ないでしょう。takeさんは、もちろん
研究室にはおられません。

7.
1位:mslr verylargecorpus.txt
2  :find /  
3  :cat a.txt
4  :ps aux
5  :sleep 100000000 

mslrは、一番重いプロセスだから。findは、/ が一番の根っこなので、
再帰的に、以下すべての木を探索しているので時間がかかって迷惑。psは、
プロセス自体の状態を知るだけなので、そんなに他人に迷惑はかけないのでは。
 sleepは、眠っているので誰にも迷惑かけないんじゃないでしょうか。catは、
実在しないファイルのとき、psと順序が入れ替わります。多分。
    (かなりいいできです。find の理由がちょっとはずしてるけど、順番的には
    正しいし、仮定もまあ正しいといえます)

ページの先頭へ


回答 H

2.
そのディレクトリには、同じグループの中からであれば、読まれたり、書き換えられたり、実行されて良いファイルしか入っていない場合。
    (ちょっと説明がわかりにくい、50%正解、なぜ50%かは新山の回答を見よ)

3.
snow:
  kterm:/a/snow/export/local/X11R6.3/bin/kterm
  mule:/a/snow/export/local/bin/mule2-19.34
soleil:
  kterm:/a/soleil/export/local/bin/kterm
  mule:/a/soleil/export/local/bin/mule2-19.34 
    (正解です)
4.
 ディレクトリdir/にはシンボリックリンクが含まれており、cpを実行するとシンボリックリンクの参照先の実際のファイルをコピーする。そのためにホームディレクトリが溢れてしまったと考えられる。
    (正解です)

5.
 psコマンドでnetscapeのプロセスIDを調べ、「暴走」ということなので
kill -KILL プロセスID
として強制終了させる。
    (「暴走」という言葉に目をつけたのは着眼点としては評価できる。
     まあでも一応 TERM を試してみるってのが人情ってものでしょ)

6.
kshirai : ユーザー名はわかりません。
take :TOKUNAGA Takenobu 

7.
迷惑な順

*a.txtがない場合や、サイズが小さい場合
mslr verulargecorpus.txt
find /     (/以下のファイル名をすべて再帰的に表示するので時間がかかる。実際に実行してみたが途中でやめた。)
ps aux     (find /ほど時間はかからない)
cat a.txt    
sleep 100000000 (他のプロセスを実行できるので迷惑にならない)

*a.txtがあり、サイズが大きい場合
mslr verulargecorpus.txt
find /     
cat a.txt
ps aux        
sleep 100000000 
    (まあ正解です。cat が一瞬なら、じつは ps のほうが負荷かかるけど)
     

ページの先頭へ


回答 L

2)chmod 770 のディレクトリ

グループの人みんなの共有財産を入れておくディレクトリ。
そのグループの人なら好きにいじれる。
    (「共有財産」ってのがちょい曖昧。50%正解。なぜ50%かは、新山の回答を見よ)

3) ktermとmuleの実体のある場所

snow:
/a/snow/export/local/X11R6.3/bin/kterm
/a/snow/export/local/bin/mule2-19.34

soleil:
/a/soleil/export/local/bin/kterm
/a/soleil/export/local/bin//mule2-19.34
    (正解です)

4)dir/をコピーしたら容量が増えたのはなぜ?

dir/の中にリンクがたくさんはってあったから。
リンク先のファイルも全部コピーされた。
    (これも正解)

5)netscapeが暴走したら?

方法1:
1.kterm から ps x で netscape の pid を見る
2.kill pid
3.それでだめならkill -HUP pid
4.それでもだめならkill -KILL pid

方法2:
ウインドウマネージャの機能を使って、
deleteかkillを選んでマウスでnetscapeの画面にドラッグ
    (たぶんいちばんまともな正解です。「プロセスIDをpsで調べる」と書いているのは
     この人だけ。方法もちゃんと 2つ書いてるし。ひとつ気になったのは
     なぜ TERM ではなく HUP シグナル? ということだが、順序としては
     HUP → TERM → KILL という感じかな)
    (5/10 訂正…よく見たら他にもpsで調べるって書いてる人いるじゃん。
     (採点に時間があいてたから新山が忘れてたらしい)。つうことで、これは
     「ふつうの正解」に訂正します、すみません)

6)snowでps auxをしたとき、研究室にいなかった人は?

aokumura
kshirai

7)迷惑順

1.mslr verylargecorpus.txt
2.find /
3.cat a.txt
4.sleep 100000000
5.ps aux

実行してみた結果
-----------------------------------
 CPU  メモリ  コマンド
-----------------------------------
  1.3  0.6  cat 大きめなファイル名
  0.0  1.7  ps aux
  0.0  0.5  sleep 100000000
 21.5  0.8  find /
     不明   mslr
-----------------------------------

find /は3分程度で終了するので、実行中はちょっと重くなるけれど
mslrよりはまし?
verylargecorpus.txtが実はすごく小さくて、パーズが
即終了するようであれば、find > mslr かもしれない。
また、verylargecorpus.txtがなかったら、mslrは
全然迷惑でなくなる(かな?)

sleepはCPUとメモリはあまり使わないが、かなり長時間なので。
a.txtがよっぽど大きくない限り、catはそれほど時間が
かからないので、catとsleepの迷惑度はどっちが上か
難しい。
また、a.txtがなかったら、catも全然迷惑ではなくなる。

psはすぐ終了するので迷惑度は低い。
    (わざわざ測定したってところが素晴らしい! 迷惑だったろうけど、こういう報告を
    まとめるのは評価できます。仮定も細かく分けているし、新山の回答よりも
    よくできている。実際には ps は一瞬負荷がかかりますが)

ページの先頭へ


回答 I

2)グループで共同作業の時。
    (説明がいいかげんすぎだコノヤロ! もうちょっと詳しく)

3)kterm: usr/local/bin/kterm
    mule:  export/local/bin/mule2-19.34
    (最初の / が抜けているぞ。それから /usr/local も /export/local も
    リンクです。あと、soleil はどうしたの?)

4)シンボリックリンク先もコピーされるから。

   ※私の端末の man cp -r はシンボリックリンク先はコピーされないと
     書いているが他の端末のman ではコピーされると書かれている。
    (ええ? そんな端末あった? しかしmanページはときどき間違ってる可能性が
     あるので、実際に実行してみればどの機種でも同じだということがわかるでしょう)

5)Netscapeが落ちるまで弱い順にシグナルを送る。
    (もうちょっと具体的に。「弱い順」も説明すること)
6)まずはtake とtanaka。 他の人は研究室にいるかいないか分からなかった。
    (まだみんなの名前を覚えてないので、、、、
      ごめんなさい)
7)1
    2
    3
    4
    5 sleep 100000000(何もしないので)
ps -u コマンドでCPUとメモリ使用率で判断しようとしたが駄目だった。
プロセスの優先順位を表示するコマンドが分からなかった。
    (ああ、これは問題を誤解されたようですね。すみません。
    これはべつに実際に実行させてみて迷惑度を測定しろというわけではなくて、
    あらかじめ実行するまえに (してもいいけど) 推測しろということなのです)

ページの先頭へ


回答 J

2.
自分とグループの人が読み書き実行可能で、他人は読み書き実行不可。
グループなどで共同作業をする場合
    (まあ正解かな)

3.
/a/snow/export/local/X11R6.3/bin/kterm
/a/snow/export/local/bin/mule2-19.34
    (snow については正解、soleil はどうした?)

4.
cpコマンドにオプションrを付けると再帰的にコピーしていくため、dir/の下にシンボリックリンクがある場合リンク自体のサイズが小さくてもリンク先のサイズが大きければホームディレクトリは溢れる。
    (正解です)

5.
kill プロセスID を使って強制終了させる。
    (もうちょい詳しく説明してほしい。それと、方法はこれだけではないです)

6.

7.
迷惑な順番

○ mslr verylargecorpus.txt
○ find /
○ ps aux
○ sleep 100000000
○ cat a.txt

理由

catやsleepやpsはcpuにあまり負荷がかからないが、find / や mslr verylargecorpus.txtは負荷がかかるから。
    (cat よりも sleep のほうが迷惑は低いよ。あと、cat の迷惑度はファイルサイズに
     よってもちがう)

ページの先頭へ


回答 K

2. あるディレクトリにchmod 770を適用してもよいのはどんな場合か
     所有者とグループに対してすべてのアクセス権を与える一方、
     それ以外の人の一切のアクセスを拒否するので、
     グループ内で共有したいがそれ以外には見せたくないようなデータを置く
    (うん、それはいいんだけどさ、つまりそれは例えばどういう状況で必要ですか?)

3. snowとsoleilのktermとmuleの真のパス
     ・snow    kterm -- /a/snow/export/local/X11R6.3/bin/kterm
               mule  -- /a/snow/export/local/bin/mule2-19.34
     ・soleil  kterm -- /a/soleil/export/local/bin/kterm
               mule  -- /a/soleil/export/local/bin/mule2-19.34
    (正解です)

4. du dir/ を実行すると5MBytesであったが
   cp -r dir/ ~ を実行すると100MBytes以上のファイルがコピーされた理由
      dirの中にシンボリックリンクがある場合、
      du ではリンク自体の容量(文字数)を元に容量を返してしまうが、
      cp -r をするとシンボリックリンクのリンク先も含めて再帰的にコピーしてしまうため。
    (完璧な答えですね)

5. netscapeが暴走した時、終了させる方法
      こういう時に限って暴走してくれないので確かめていないが、
      マウス操作など一切が効かなくなっても、別のマシンからログインすれば、
      killできるかも。
    (ただ「暴走」といっても実際に症状は何通りもあるので、いろいろな状況を仮定して
     対処法をもっと具体的に説明してほしかった)

6. snow で ps aux を実行せよ。実際にはそのとき研究室にはいなかったユーザ名をすべてあげよ。
    kshirai
  kshirai    6213  0.0  0.0 3.73M 168K ??       I      Apr 27     0:00.02 ssh-agent -c

7. 研究室でつぎのコマンドを実行したとき、他人に迷惑な順に並べよ。
       mslr verylargecorpus.txt       MSLRパーザは重いから
       find /                         ルート以下のすべてのディレクトリを検索するから
       sleep 100000000                100000000秒スリープさせるので、長い時間居座る点で迷惑
       ps aux                         迷惑ではなさそう
       cat a.txt                      これは軽い処理
    (cat はファイルサイズによる。sleep が「長い時間居座る」から迷惑、
     というのは、たしかにそのとおりかもしれない。ここでは負荷という点でしか考えて
     なかったけど。でも 2〜3個のプロセスが残っているだけならさして迷惑ではない)

ページの先頭へ


新山の回答

  1. あなたのホームディレクトリの内でもっとも長いパス名をかけ。

    → 新山の場合はコレでした。 /home/tanaka/euske/work/OpenSSH/www/openssh/txt/draft-ietf-secsh-dh-group-exchange-00.txt (89文字)

    ちなみにぼくの場合はファイルが 4000個ぐらいあるので、 これは自動的に捜させた。求め方:

           % find ~ | awk '{print length($0), $0}' | sort -rn | head -1
    
  2. あるディレクトリに chmod 770 を適用してもよいのは どんな場合か、説明せよ。

    → 同一グループの人と共同作業したいとき。 そのグループの人間はだれでも自由にディレクトリにファイルを追加、削除、 修正できる。そして重要なのは、「グループ外の人間には ファイルを見せたく『ない』」ということ。パーミッション 770 の 「0」という部分は、部外者がこのファイルを閲覧することを 明示的に「禁止したい」という意向を表している。そうでなきゃ ふつう 775 にするでしょ。

  3. snow と soleil には、どちらも kterm と mule が入っている。 パス名はそれぞれ /usr/bin/X11/kterm/usr/local/bin/mule なのだが、実はこれらのディレクトリに至るパスには多くの シンボリックリンクが含まれており、どちらも「真のパス」ではない。 snow と soleil における kterm と mule の実体はどこにあるか。

    → ひとつひとつディレクトリを追っていけばわかります。

    (snow の場合)

           (kterm をさがす)
           % ls -l /
           /usr
           % ls -l /usr
           /usr/bin
           % ls -l /usr/bin
           /usr/bin/X11 -> /usr/local/X11R6.3/bin (/usr/bin/X11 はリンクだった)
           % ls -l /usr/local
           /usr/local -> /a/snow/export/local (/usr/local はリンクだった)
           % ls -l /
           /a
           % ls -l /a
           /a/snow
           % ls -l /a/snow
           /a/snow/export
           % ls -l /a/snow/export
           /a/snow/export/local
           % ls -l /a/snow/export/local
           /a/snow/export/local/X11R6.3
           % ls -l /a/snow/export/local/X11R6.3
           /a/snow/export/local/X11R6.3/bin
           % ls -l /a/snow/export/local/X11R6.3/bin
           /a/snow/export/local/X11R6.3/bin/kterm (発見)
           (mule をさがす, /usr/local までは省略)
           % ls -l /a/snow/export/local
           /a/snow/export/local/bin
           % ls -l /a/snow/export/local/bin
           /a/snow/export/local/bin/mule -> mule2-19.34
           % ls -l /a/snow/export/local/bin/mule2-19.34
           /a/snow/export/local/bin/mule2-19.34 (発見)
    

    (soleil の場合)

           (kterm をさがす)
           % ls -l /
           /usr
           % ls -l /usr
           /usr/bin
           % ls -l /usr/bin
           /usr/bin/X11 -> /usr/openwin/bin/ (/usr/bin/X11 はリンクだった)
           % ls -l /usr
           /usr/openwin
           % ls -l /usr/openwin/bin
           /usr/openwin/bin
           % ls -l /usr/openwin/bin/kterm
           /usr/openwin/bin/kterm -> /usr/local/bin/kterm
           % ls -l /usr
           /usr/local -> /a/soleil/export/local (/usr/local はリンクだった)
           % ls -l /
           /a
           % ls -l /a
           /a/soleil
           % ls -l /a/soleil
           /a/soleil/export
           % ls -l /a/soleil/export
           /a/soleil/export/local
           % ls -l /a/soleil/export/local
           /a/soleil/export/local/bin
           % ls -l /a/soleil/export/local/bin
           /a/soleil/export/local/bin/kterm (発見)
           (mule をさがす, /usr/local/bin までは省略)
           % ls -l /a/soleil/export/local/bin
           /a/soleil/export/local/bin/mule -> mule2-19.34
           % ls -l /a/soleil/export/local/bin/mule2-19.34
           /a/soleil/export/local/bin/mule2-19.34 (発見)
    
  4. ディレクトリ dir/ がある。
    du dir/
    を実行すると容量は 5MBytes であった。 しかし
    cp -r dir/ ~
    を実行すると 100MBytes 以上のファイルがコピーされ、 ホームディレクトリが溢れてしまった。 これはなぜか。

    dir/ の中にものすげーでっかいディレクトリへの シンボリックリンクが含まれていたから。 (cp -r はシンボリックリンクをそのままコピーせず、 中身の実体をぜんぶコピーするのだ)

  5. ある日 netscape を立ち上げたら、暴走して制御できなくなった。 これを終了させる手順を説明せよ (複数あるかもしれない)。

    1. ウインドウの枠から「Kill」をクリックする。運がよければ 死んでくれるかもしれない。

    2. netscape が動いているホストで ps x を実行する。 そこで netscape と表示されているプロセス ID を覚えておき、

           % kill プロセスID
    
    を実行 (デフォルトで -TERM が送られる)。これで死ななければ。
           % kill -KILL プロセスID
    
    を実行。

    (5/10 ごめんなさい、ぼくはここで kill と書くべきところを ps と書いてました)

  6. snow で ps aux を実行せよ。 実際にはそのとき研究室にはいなかったユーザ名をすべてあげよ。

    (5/7, 20:58)

    ちなみにこれは、次のようにして調べた。

           % ps aux | awk '{print $1}' | sort | uniq
    
  7. 研究室でつぎのコマンドを実行したとき、他人に迷惑な順に並べよ。 理由もつけること。なお条件によって結果が異なる場合は いくつかの状況を仮定せよ (実際に実行してみてもよい)。
    • ps aux
    • cat a.txt
    • mslr verylargecorpus.txt
    • find /
    • sleep 100000000

    (mslr は田中・徳永研で開発されているパーザで重くなるプロセスの代表、 sleep については man を参照)

    まず一番重くなるのは mslr (でも実際には実行できない)。 ただしこれは verylargecourpus.txt が巨大なテキストファイルだったらの 話。そうでなければすぐに終わるかもしれない。

    つぎに重いのは find。作業としてはそんなに重くないのだが、 端末があっぷあっぷになるので kterm と一緒に重くなる。

    つぎがたぶん ps aux。一瞬ではあるが、ps を実行している間は 非常に負荷がかかる。

    つぎが cat a.txt。しかしこれは a.txt が存在している 場合にかぎる。このファイルのサイズがとても巨大だったら、 きっと find と同じくらい迷惑だろう。いっぽうサイズが とても小さかったり、ファイル自体が存在しない場合 (エラーになる) は すぐ終わるので負荷は小さい。

    いちばん軽いのが sleep。これは時間はかかるが、 その間プロセスはずっと「止まっている」だけ。何の処理も しないから、誰にも迷惑かけない。

ページの先頭へ


総評

問題 2. は、「どういう状況のときに 770 というパーミッションを 設定してよいか」という問題であって、「770 というパーミッションの意味を 説明せよ」という問題じゃない。それを勘違いしている人が多かった。 一応言っておくけど、UNIX の定義だけ知っていて 「こうすれば、こうです」的な答えができても、それだけでは UNIX を 「使える」ことにはならないんだよ。ある機能がどういう意味をもっていて、 それがどう生活に役立つかを知らなければ、ただのオタクで終わってしまうのだ。 それから、パーミッションを「775」ではなくて「770」にする 理由というのがちゃんと存在する。それを答えてほしかった。結局この問題に 完璧に答えられた人はいない。

問題 3. は「snow と soleil」といっているのに、snow しか答えてない 人が多かった。あとどちらのホストでも /usr/local がリンクであるということに ひっかかった人も多い。

問題 5. は「手順」と書いているのに、それをちゃんと説明できた 人が少なかった。 みんな答えが簡単すぎる。いきなり「netscapeのプロセスIDを…」とか いったって、まずその前にプロセスIDを調べなきゃいけないでしょう。 そういうところが書いてない (ごめん、何人かは書いてた)。 就職するにも研究するにも、他人に 物事を順序立ってちゃんと説明できない人は「使えない人」になってしまうので 気をつけましょう。

問題 6. では、白井さんとか徳永先生は snow にプロセスを いつも残しているということがわかったね〜。

以上、厳しいつっこみですが、各自今後の参考にしていただければ幸いです。

ページの先頭へ


^ up   新山 祐介 euske@cl.cs.titech.ac.jp