SadServers解説#3 "Santiago": Find the secret combination
問題概要
シナリオ
隠された組み合わせを見つけてください。
問題詳細
"Alice"が隠した秘密の数字の組み合わせを、以下の課題に沿って見つけてください。
課題1
/home/adminディレクトリにある*.txtファイル(拡張子が.txtのファイル)で、"Alice"という文字列が出現する行数を数えてください(大文字と小文字は区別します)。
課題2
"Alice"という文字列が一度だけ現れるファイルがあります。そのファイルの中で、"Alice"が出現した行の次の行に書いてある数字を調べてください。
解決判定
この2つの数字を繋げて、1つの数字として/home/admin/solutionに書き込み、Check My Solution
ボタンをクリックしてください。たとえば、課題1の数字が11で、課題2の数字が22なら、 次のようなコマンドを実行しCheck My Solution
ボタンをクリックしてください。
~$ echo "1122" > solution
解答が正解かどうか、コマンドプロンプト上で確認することも可能です。ハッシュ値を求める次のコマンドを実行して、以下と同じ出力が得られた場合は正解です。
~$ md5sum solution
d80e026d18a57b56bddf1d99a8a491f9 solution
解答の評価方法は、/home/admin/agent/check.shを見てください。
問題解決の方針
【表示する】
今回の問題では、文字列の出現回数を数えたり、検索したりできるかが問われています。
解決の手順を表示する
- /home/admin/に存在するファイルの"Alice"という文字列の出現回数を数える
- "Alice"という文字列の出現回数が1回だったファイルの、"Alice"の次の行を表示する。
ヒント
課題1 ヒント
/home/admin以下の*.txtファイルを見てみます。
~$ ls *.txt
11-0.txt 1342-0.txt 1661-0.txt 84-0.txt
4つのファイルが存在します。
特定の文字列の出現回数を数えるには、grep
コマンドの-c
オプションを使用します。
実行コマンド
~$ grep -c Alice 11-0.txt
398
~$ grep -c Alice 1342-0.txt
1
~$ grep -c Alice 1661-0.txt
12
~$ grep -c Alice 84-0.txt
0
課題1の数字は、398+1+12+0=411です。
課題1 別解
それぞれのファイルに対してgrep
コマンドを実行しなくても、grep
コマンドの-r
オプションや、xargs
コマンドを実行することで、一気に数えることもできます。
~$ grep -rc Alice *.txt
11-0.txt:398
1342-0.txt:1
1661-0.txt:12
84-0.txt:0
~$ ls *.txt | xargs grep -c Alice
11-0.txt:398
1342-0.txt:1
1661-0.txt:12
84-0.txt:0
課題2 ヒント
課題1の結果から、Aliceが一度だけ出現するファイルは1342-0.txt
であることが分かりました。
1342-0.txt
の中身を、less
コマンドで表示し、Aliceの文字列の次の行の内容を確認します。
実行コマンド
~$ less 1342-0.txt
...
PUBLISHER
Alice
156 CHARING CROSS ROAD
LONDON
...
上の実行結果から、課題2の数字は156です。
課題2 別解
grep
コマンドの-[数字]
オプションで該当する行の前後をまとめて表示したり、-A [数字]
オプションで該当する行の後ろの行をまとめて表示したりすることができます。
~$ grep -1 Alice 1342-0.txt
PUBLISHER
Alice
156 CHARING CROSS ROAD
~$ grep -A 1 Alice 1342-0.txt
Alice
156 CHARING CROSS ROAD
答え
課題1の数字が411で、課題2の数字が156になりました。以下のコマンドを実行し、Check My Solution
ボタンをクリックしてください。
~$ echo "411156" > solution
「いきなり問題を解き始めても調べるばかりになってしまう…」 「やりたいことが分かっても、コマンドが分からない…」 という方は、下記の記事でLinuxのコマンドを復習してから、SadServersの問題に取り掛かってみてはいかがでしょうか。
問題一覧はこちら
Discussion