class: title, smokescreen, shelf, no-footer # 第02回 Unix演習<br><small>プロセスを調べる</small> <div class=footnote> <small> </small> </div> --- class: compact # 演習編の凡例 | 項目 | | デフォルト値 | 備考 | |------- |------------- |----------------------------- |------------------------------------- | | how | 何を使って | | Unixコマンド(CLI)を使う演習 | | who | ユーザ名 | admin | AWS EC2のDebianにログインするユーザ | | where | 作業場所 | /home/admin | EC2にログインした場所 | | | サーバ名 | www1.学籍番号.cluod.fml.org | 第03回以降はここにアクセス | | | ターミナル | AWS Academy(vocareum) | ブラウザの中からサーバへアクセス | | what | 何をするの? | | 作業内容は各回の指示書を参照 | | | 第01回 | OSの環境調査 | | | | 第02-03回 | プロセスの調査 | | | | 第05回 | メモリの調査 | | | | 第06回 | フィルタの調査(ACL) | | | | 第07回 | ファイルの読み方(ACL) | | | | 第08回 | デバイスの調査 | | --- class: compact # 凡例(講義スライドより再掲) <small> - 前提とする演習環境 - AWS Academy - AWS 提供の Debian GNU/Linux イメージ上で動作確認し、それを説明の基準とする - 動作確認環境: Debian GNU/Linux 12.4 (アーキテクチャはamd64) - Unixマニュアルの読み方と使い方について少々 - もともとが英語なので<B>単語のあいだにはスペースが必須</B>です。 スペースでもタブでもOK - <B>大文字小文字は区別</B>しています - コマンド引数は可変長。<B>オプションは`-`の右に英数字</B>。オプションの右に引数 <br> 例: ps -aux とか ls -l htdocs - <B>マニュアルでは、コマンド例の右端にENTERは書いてありません</B> <br> つねにコマンド入力の際には最後にENTERキーを押してください ``` $ ps -aux [ENTER} ``` <small> - 技術雑誌では、上の`[ENTER]`のあたりにENTERや矢印が書いてあるが、ふつうのマニュアルでは省略 </small> </small> --- class: compact # 今回は? Unixプロセスを調べるコマンドたち <div class=footnote> <small> <small> (脚注)今回lsofはコマンド名の紹介だけです。演習では使いません </small> </small> </div> - よく使うコマンドを紹介: ps ss (topは第4回に紹介します) | コマンド | 概要 | 実行例 | | ---- | ------------------ | ------- | | ps | プロセスの一覧を表示する | ps aux | | ss | ソケット情報を調べる | ss -l4n | | top | プロセスの一覧を表示する | top | | | (重要なもの順、5秒ごとに更新) | | | lsof | プロセスと関連するファイル情報を表示 | lsof | --- class: compact # psコマンドを使いUnixプロセスを調べる <div class=footnote> <small> <small> (脚注) サーバプロセスを表示する -x オプションは 「ターミナルがないプロセスを表示」するという意味です </small> </small> </div> - ps コマンド (process status の略) - -u ... 各種の表示 - -x ... サーバプロセスも表示する - -a ... 自分以外(全ユーザ)のプロセスも表示 - [例題] vocareum環境で`ps -ux`を実行してみよう。 何が動いているか? --- class: compact # 例題: vocareum環境でpsコマンドを使ってみた(1) <small> ``` ddd_v1_w_MmtR_921342@runweb103833:~$ ps -ux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ddd_v1_+ 18158 0.0 0.0 82676 7468 ? S 00:53 0:00 /usr/local/vocareum/tool ddd_v1_+ 18192 0.0 0.0 9272 3964 pts/109 Ss 00:53 0:00 /bin/bash --rcfile /mnt/ ddd_v1_+ 18680 0.0 0.0 21400 3652 pts/109 R+ 01:10 0:00 ps ux ``` <small> - 解説: この環境は特殊すぎ(このあとEC2でやると普通の表示になります) - %CPU列、%MEM列はOS上の利用比率、 VSZ列とRSS列は「利用しているメモリ量」、 TIME列は「総実行時間」 <br> <B>これらの数字が大きいようだとOSに負荷をかけている犯人かもしれないと疑うこと</B> - TTY 列 - 4-5行目の pts/109 はユーザが使っているOS上のIDです。 レオパレスの部屋番号みたいなもんだと思ってくれてよいです (正確な呼び名は「擬似ターミナル」です) - TTY が ? の3行目がサーバプロセス。 Unixでは<B>デーモン(daemon)</B>とも呼びます。 - STAT 列 ... ステータス - Rが実行中(RUNNING)、SはSLEEP - ここではpsコマンドを実行しているのでpsだけRで、あとはS。 <br> ある瞬間に実行できるプロセスは1個だけなので、表示はSだらけが当然 </small> </small> --- class: compact # 参考: vocareum環境でpsコマンドを使ってみた(2) <small> ``` dd_v1_w_MmtR_921342@runweb103833:~$ ps -uxww USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ddd_v1_+ 18158 0.0 0.0 82676 7468 ? S 00:53 0:00 /usr/local/vocareum/tools/ttyd/ttyd.1.6.3.voc.ub16 --port 41876 --once /bin/bash -c /bin/bash --rcfile /mnt/vocwork5/ddd_v1_w_MmtR_921342/asn1710200_1/asn1710201_1/work/.termrc -i ddd_v1_+ 18192 0.0 0.0 9272 3964 pts/109 Ss 00:53 0:00 /bin/bash --rcfile /mnt/vocwork5/ddd_v1_w_MmtR_921342/asn1710200_1/asn1710201_1/work/.termrc -i ddd_v1_+ 20098 0.0 0.0 21400 3632 pts/109 R+ 01:11 0:00 ps -uxww ``` <small> - `ps -uxww`を実行するとプロセスの引数も全部表示できます - (以下は出力を見ての推測ですけど) - 3行目の「ttyd.1.6.3.〜」というサーバプロセスが41876/tcpで待ち受けていて、そこにWWWサーバからHTTPでアクセス - `ユーザのブラウザ -> WWWサーバ -> ttyd`という風に接続して、 ブラウザの中からEC2にログインして操作させてます - (なんでパッと見で分かるの?の説明は長いので省略します、あしからず) </small> </small> --- class: compact # 例題: ssコマンドでサーバプロセスのポートを調べる <div class=footnote> <small> <small> (脚注1) やってくる(incoming)の通信をサーバが待ち受けることを<b>listen</b>すると表現する <br> (脚注2) 数字表示は、たいていのコマンドで -n なので覚えておくとよい </small> </small> </div> - <B>サーバが正常に動作しているなら待ち受けるポートが開いている</B>はずです。 <br> それを確認します - ss = socket statistics の頭文字(たぶん) <br> <B>このての管理コマンドのsは「〜 status」か「〜 statistics」だと覚えておけば良い</B> - サーバプロセスが待ち受けているTCPポートを調べるには ss コマンド - -l ... listenしているポートを表示 (limaの l, listenだからl) - -4 ... IPv4 のみ(IPv4 の 4) - -n ... ポート番号を数字で表示 (number の n) - 例題: vocareum環境で`ss -l4n`を実行してみましょう! --- class: compact # vocareum環境で`ss -l4n`を実行した結果の解説 <small> ``` ddd_v1_w_MmtR_921342@runweb103833:~$ ss -l4n Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 *:68 *:* 〜 省略 〜 tcp LISTEN 0 128 *:41876 *:* tcp LISTEN 0 128 *:22 *:* tcp LISTEN 0 100 127.0.0.1:38455 *:* 〜 省略 〜 ``` - 全サーバが表示されるので、 とても縦長の表示になりますが、それで正解です - あとで EC2 でやれば、もっと短いので分かりやすいはず - <B>TCPのサーバが待ち受けしているならLISTENと表示</B>されます - 例: よ〜くみると`*:22`という行があります。それがsshdです - `*`は「サーバの全IPアドレス」という意味 - `:`は区切り文字 - 22は「ポート番号22」(この場合 22/tcp ということです) </small> --- name: exercises-aws class: title, smokescreen, shelf, no-footer # 第02回 AWS演習<br><small>EC2上にwww.pyをダウンロードして起動する</small> <div class=footnote> <small> <small> もっと実務目線で春学期の復習を行います </small> </small> </div> <!-- section-begin aws.ec2.wwwpy --> --- name: aws.ec2.wwwpy class: title, smokescreen, shelf, no-footer # <small>EC2上にwww.pyをダウンロードして起動する</small> <div class=footnote> <small> <small> </small> </small> </div> --- class: compact,img-right # EC2にログイン <div class=footnote> <small> <small> </small> </small> </div> ![](../images/learnerlab.png) 1. EC2にログイン - <B>vocareum環境からSSHしてください</B> - ユーザ名はadmin - SSHの秘密鍵の指定を忘れずに! ``` ssh -i .ssh/labsuser.pem admin@10.20.30.40 ``` 注: 10.20.30.40のところは各自のPublic IPに変更して下さい --- class: compact # www.pyをダウンロードする <div class=footnote> <small> <small> (脚注) curl は「しーゆーあーるえる(see url)」か「かーる」と発音します。 <br> たしか初登場当時はsee urlと発音しろだったと思う(<- 曖昧な記憶)のですが、 最近の人は「かーる」と発音する人が多いみたい? </small> </small> </div> - curlはダウンロードの定番コマンドです。これを使いwww.pyをダウンロードします - EC2上でwww.pyをダウンロードしてください <br> (-OはOscarのO、大文字のOです) ``` [コマンドの説明] curl -O http://api.fml.org/dist/isd/www.py [実行例] admin@ip-172-31-83-21:~$ curl -O http://api.fml.org/dist/isd/www.py % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2933 100 2933 0 0 3230 0 --:--:-- --:--:-- --:--:-- 3226 ``` --- class: compact,img-right # www.pyを起動する <div class=footnote> <small> <small> (脚注) www.py起動後もコマンドを受けつけるよう右端に&をつけます。 画面はwww.pyからの出力も出て乱れますが、それで正常 </small> </small> </div> - EC2上でwww.pyを起動します - sudoと右端につける&の両方を忘れずに! ``` [コマンドの説明] sudo python3 www.py & [実行例] admin@ip-172-31-83-21:~$ sudo python3 www.py & [1] 1635 admin@ip-172-31-83-21:~$ (debug) serving at port 80 ``` --- class: compact # 実行例(3つまとめて) <small><small> ``` ddd_v1_w_utKi_914531@runweb106904:~$ ssh -i .ssh/labsuser.pem admin@3.86.94.242 Linux ip-172-31-83-21 5.10.0-26-cloud-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Dec 12 10:46:25 2023 from 34.217.71.59 admin@ip-172-31-83-21:~$ curl -O http://api.fml.org/dist/isd/www.py % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2933 100 2933 0 0 3230 0 --:--:-- --:--:-- --:--:-- 3226 admin@ip-172-31-83-21:~$ sudo python3 www.py & [1] 1635 admin@ip-172-31-83-21:~$ (debug) serving at port 80 ``` </small></small> <!-- section-end aws.ec2.wwwpy --> --- name: exercises class: title, smokescreen, shelf, no-footer # 課題 <div class=footnote> <small> <small> </small> </small> </div> --- class: compact # 課題(必須) 1. EC2で`ps -aux`を実行し、次の2プロセスを確認せよ - SSHサーバ(`/usr/sbin/sshd`)が動いている - www.pyを引数とするpython3が動いている 2. EC2で`ss -l4n`を実行し、SSHサーバが22/tcpをlistenしていることを確認せよ 3. おなじくwww.pyが80/tcpをlistenしていることを確認せよ <small> 【重要な補足】 - pythonのようなスクリプト言語では実際に動いているプロセスはpython3 <br> 注: 一方、C言語(コンパイラ言語)では実行するa.outがプロセスになっている - python3の引数がwww.pyになっていることを確認すること。 - www.pyの先頭にある`#!/usr/bin/python3`部分からプロセスの実体を/usr/bin/python3と解釈している <br> これは、<B>UNIXの約束事</B> </small>