SadServers No.3 解説 "The Command Line Murders"

# SadServers No.「Command Line Murders」解説: コマンドラインの推理冒険

## はじめに

Sad Server問題集の中で「Command Line Murders」はその中でも特に楽しく実践的なアプローチです。この問題はコマンドラインを活用した推理ゲームのような形式で、ファイル操作やテキスト検索などのLinuxコマンドの基本スキルを自然に身につけることができます。

本記事では、SadServersの「Command Line Murders」チャレンジの解き方を詳しく解説します。この問題を通して、grep、cat、head、tailなどの基本コマンドの使い方や、それらを組み合わせた効果的なファイル検索・解析方法を学ぶことができます。実際のシステム管理やログ解析の現場でも活用できるスキルの基礎を、楽しみながら習得していきましょう。

## 問題の概要

「Command Line Murders」は、架空の都市「Terminal City」で起きた殺人事件の犯人を特定するというストーリー仕立ての問題です。私たちはさまざまなファイルに散らばる手がかりを集め、コマンドラインツールを駆使して犯人を突き止める必要があります。

- 事件現場の情報は`/home/admin/clmystery/mystery/crimescene`ファイルに記録されている
- 手がかりはヒントファイル（hint1〜hint8）やその他の各種ファイルに分散している
- 犯人を特定したら、その名前を`/home/admin/mysolution`ファイルに書き込む
- 時間制限：20分

この問題はLinuxの基本コマンドを組み合わせて使いこなす力と、論理的に情報を整理して結論を導き出す推理力が試されます。

## 解決手順の詳細

それでは実際に、コマンドラインを使って事件を解決していきましょう。

### 1. 問題環境の確認とファイルの探索

まずは作業ディレクトリに移動して、利用可能なファイルを確認します。

```bash
cd /home/admin/clmystery
ls -la
```

この結果から、いくつかの重要なファイルとディレクトリが確認できます：
- `README.md`：問題の背景情報
- `hint1`〜`hint8`：ヒントファイル
- `instructions`：指示書
- `mystery/`：事件に関する情報が保存されているディレクトリ

まずは指示書を確認しましょう：

```bash
cat instructions
```

### 2. 事件現場（crimescene）の分析

ヒント2によれば、事件現場ファイルには「CLUE」というキーワードが含まれているようです。まずは事件現場ファイルを見つけましょう。

```bash
find . -name "*crime*" -type f
```

これにより`./mystery/crimescene`というファイルが見つかりました。次に、このファイルから「CLUE」を含む行を抽出します。

```bash
grep "CLUE" ./mystery/crimescene
```

このコマンドで、事件に関する重要な手がかりがいくつか見つかるはずです。例えば：
- 被害者に関する情報
- 目撃者「Annabel」に関する言及
- 犯人の車に関する情報（例：青いホンダ、ナンバープレートにL337の文字が含まれている）など

### 3. 目撃者「Annabel」の追跡

ヒント3と4によれば、目撃者のAnnabelがどこに住んでいるかを調べる必要があります。

```bash
grep "Annabel" ./mystery/people
```

このコマンドでAnnabelという名前の人物と住所のリストが得られます。ヒント4によれば、すべての結果が重要とは限らないようです。目撃者の情報（例：車の特徴など）を考慮して、関連性のある「Annabel」を絞り込みます。

### 4. 目撃者へのインタビュー

ヒント5の指示に従って、見つかったAnnabelの住所から正確な情報を取得します。例えば：

```bash
head -n 173 ./mystery/streets/Mattapan_Street | tail -n 1
```

このコマンドは指定した行数（例：173行目）の内容だけを表示します。目撃者の証言から、犯人の追加情報（車種やナンバープレートなど）が得られるでしょう。

### 5. 容疑者の車の特定

ヒント6と7によれば、目撃された車の特徴から容疑者を絞り込むことができます。

```bash
grep -A 5 "L337" ./mystery/vehicles
```

このコマンドはL337を含むナンバープレートを持つ車の情報と、その後の5行（所有者情報など）を表示します。青いホンダという条件も加味して、さらに絞り込みます。

```bash
grep -A 5 "L337" ./mystery/vehicles | grep -A 5 "Honda" | grep -A 5 "Blue"
```

### 6. 容疑者の所属組織の調査

ヒント8によれば、複数の組織のメンバーリストを組み合わせて容疑者を特定できるようです。

```bash
cd ./mystery/memberships
```

ここで利用可能なメンバーシップリストを確認します。

```bash
ls -la
```

これらのファイルから、容疑者の名前が複数のリストに現れるかどうかを調査します。

```bash
cat [組織ファイル1] [組織ファイル2] [組織ファイル3] | grep "[容疑者名]" | wc -l
```

このプロセスを繰り返し、最も有力な容疑者を特定します。

### 7. 犯人の特定と解答の提出

すべての証拠を照合して、最終的に犯人を特定します。そして、その名前を指定のファイルに書き込みます。

```bash
echo "[犯人の名前]" > /home/admin/mysolution
```

これで問題の解答が完了します。

### 結果の検証

解答が正しければ、指定されたmd5sumの値と一致するはずです。

```bash
md5sum /home/admin/mysolution
```

出力された値が「9bba101c7369f49ca890ea96aa242dd5」であれば正解です。

## 学んだこと・重要なポイント

この問題を解くことで、以下のような重要なLinuxスキルを実践的に学ぶことができます：

1. **基本コマンドの活用と組み合わせ**：
   - `grep`：ファイル内のパターン検索
   - `cat`：ファイルの内容表示
   - `head`/`tail`：ファイルの一部を表示
   - `find`：条件に合うファイルの検索
   - `wc -l`：行数のカウント
   - パイプ（`|`）を使ったコマンドの連結

2. **効率的な情報検索と分析**：
   - 大量のテキストから必要な情報を絞り込む方法
   - `grep`の高度なオプション（`-A`, `-B`, `-C`など）の活用
   - 複数条件での絞り込み検索

3. **論理的な推理プロセス**：
   - 断片的な情報から全体像を組み立てる思考法
   - 関連性のある情報の抽出と整理
   - 仮説の構築と検証

## おわりに
「Command Line Murders」は、Linuxコマンドラインの基本を楽しく学べる絶好のシナリオです。これらのスキルはLinuxサーバー管理、ログ解析、セキュリティ調査など、多くの実務シナリオで活用できます。例えば、不正アクセスの調査やシステム障害の原因特定など、実際の「デジタル捜査」でも同様のアプローチが用いられます。

## 参考情報

- [Grep コマンドの詳細なオプション](https://www.gnu.org/software/grep/manual/grep.html)
- [Linuxコマンドラインの基本](https://linuxjourney.com/)
- [bash シェルスクリプトの基礎](https://www.gnu.org/software/bash/manual/bash.html)
- [効率的なコマンドライン操作のテクニック](https://github.com/jlevy/the-art-of-command-line)
- [Command Line Murdersオリジナルリポジトリ](https://github.com/veltman/clmystery)
- [ログ解析の実践的アプローチ](https://www.loggly.com/ultimate-guide/analyzing-linux-logs/)

これらの資料を参考に、推理過程を楽しんでいただければ幸いです！