💃

SadServers解説#3 "Santiago": Find the secret combination

2024/01/20に公開

https://ja.wikipedia.org/wiki/サンティアゴ_(チリ)

問題概要

シナリオ

隠された組み合わせを見つけてください。

問題詳細

"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を見てください。
 

問題解決の方針

【表示する】

今回の問題では、文字列の出現回数を数えたり、検索したりできるかが問われています。

解決の手順を表示する
  1. /home/admin/に存在するファイルの"Alice"という文字列の出現回数を数える
  2. "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の問題に取り掛かってみてはいかがでしょうか。
https://zenn.dev/comf_nakamura/articles/linux_command
 

問題一覧はこちら

https://zenn.dev/comf_nakamura/articles/sadservers_sitemap

Discussion