この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
こんにちは、協栄情報のきおかです。
今回はブラウザでLinuxサーバーをCLIで操作してトラブルシューティングする学習サイト、SadServersを使ってみました。
使い方と実際に使った例を記載しました。Linuxを実際に触って学習したい方におすすめです。
使い方
使い方はとってもシンプルです。
- SadServersにアクセスします。
Show Me Sad Servers
をクリックします。
Level
やType
をみて、やってみたいものを決めて、Run
をクリックします。
- サーバーが準備されるので少し待ちます。待っている間に
General Instructions;
やグレー背景色で囲まれているSenario; ...
部分を読んでおきます。
Waiting for server...
がReady!
に変わったら、Open the server terminal in a new window.
をクリックします。
- 新しいウィンドウで対象のLinuxサーバーのCLIが表示されるので、問題を解いていきます。
- わからない場合は、元のページの下にある
Next Clue / Solution
をクリックしてヒントをみます。それでもわからない場合は、Close
を押して再度Next Clue / Solution
をクリックしてヒントをみます。これを繰り返してください。
- 課題が解決できたら、元のページの
Check My Solution
をクリックして、テストコードを実行します。正解であればお祝い画面が表示されます。不正解であれば不正解と表示されます。
実際に使った例
私は#2 "Saskatoon": counting IPs.
を遊んでみました。以下ネタバレなのでご注意ください。
先ほどご紹介した方法でLinuxサーバーを立ち上げます。
課題
/home/admin/access.log
には1つのHTTPリクエストが1行ずつ記載されており、最初の列にリクエストを送ってきたコンピュータのIP亜アドレスが記載されています。
最も多くリクエストを送ってきたIPアドレスを見つけて、/home/admin/highestip.txt
にそのIPアドレスを書き込むことが課題です。
考える
まず情報を集めて、どうすればいいか考えます。
ちなみに筆者である私きおかはLinuxを触った経験があれど、LPICなどは取っていません。課題がある度に調べて学んできた質なので、常識的なコマンドも知らなかったり、より簡単なコマンドがあるのに複雑なものを使ってたりします。このサイトでまず学んでみたいですね(())
というわけで、cat /home/admin/access.log
を試し、head -n 1 /home/admin/access.log
で列に注目して観察したりしてみました。
問題文で「列(line)」と言っていたのは、半角スペースで区切られたもののようですね。以下のような形式になっています。
[IPv4 address] - - [date] [HTTP header info] [Response code] ...
なので、1つ目の半角スペースの前の部分を取得するか、半角スペースを区切りとして1つ目の塊を取得するみたいなものが書ければ良さそうです。
といってもそのようなLinuxコマンドを知らないので、素直にNext Clue / Solution
を見ます。以降はそのまま解答になるので、次の章に移ります。
解答
特に言及することもなく、ひたすらに純な解答です。一応ヒントに沿って、解答を作成していった手順がわかるように、ステップバイステップで記載しています。
# 最初の列(IPv4 address)のみを表示
$ awk {‘print $1’} access.log
# awkの出力結果をソート
$ awk {‘print $1’} access.log | sort
# 重複する行をまとめる。その際、重複した数を1列目に出力し、2列目以降は該当するものをユニークに出力する。
$ awk {‘print $1’} access.log | sort | uniq -c
# 計算結果をソート
$ awk {‘print $1’} access.log | sort | uniq -c | sort
# 最終行に最もリクエストが多かったIPアドレスが表示されるので、それを/home/admin/highestip.txtに出力
$ echo [target IPv4 address] > /home/admin/highestip.txt
SadServersがユニークでグレートな理由
SadServers最高ですね。社内の研修で全然使えるレベルです。
特に素晴らしいのは、学習工程を分掌できることです。これは学習管理がより明確で低コストで行えることを意味します。
例えば、「Linuxを学習してほしい」という単純な研修目的をとってみても、様々な障壁やコストが想定されます。学習者が必ずしもCLIのコマンド実行時に躓いているとは限りません。環境構築で躓くかもしれないし、ネットワークの問題で躓くかもしれません。加えて教育担当側でもコンテンツ選定や学習者の学習確認にもコストがかかります。
まとめると、以下のような障壁やコストが想定できます。
- 学習者がLinux環境を構築するのに手間取ってしまう(環境構築の壁)
- 学習者がネットワークの問題でLinuxの課題が解けていない(ネットワークの壁)
- 教育担当者が課題を選定するのが難しい(カリキュラム作成のコスト)
- 教育担当者が課題の回答をテストするのが手間(テストのコスト)
- 教育担当者が、学習者の学習ステップを管理しにくい。例えば、各学習者が環境構築で躓いているのか、ネットワーク問題で躓いているのか、Linuxコマンドの実行段階で躓いているのか、管理にコストがかかる(教育管理コスト)
SadServersを導入することで、上記の問題を解決できますね。つまり、学習者と教育担当が共にLinuxコマンドの学習に集中でき、逆説的に学習効率が上がることが見込めます。
まとめ
SadServers最高ですね。インフラは関係ないですが、clientside devというサイトではブラウザでJavascriptを学習できるサイトがあったりと、やはり英語環境にはリソースが潤沢にありますね。
今回はここまで〜。