SadServersでコマンドライン殺人事件の犯人探してみた#3

# はじめに

コマンドライン殺人事件が気になるからやってみた。ヒントを見て英文は翻訳しながら進めています。
制作途中です。

# #3のシナリオやってみた。
手掛かりを元に犯人を見つけ出すという内容。
ネタバレを含むので観覧に注意してください。

Sadserversの情報によるとヒントは~/clmysteryのディレクトリ配下にあるとのこと

# 調査開始

<details><summary>まずは指示をみてみる</summary>

```

~$ ls
agent  clmystery  mysolution

~$ cd clmystery

~/clmystery$ ls
LICENSE.md  README.md  cheatsheet.md  cheatsheet.pdf  hint1  hint2  hint3  hint4  hint5  hint6  hint7  hint8  instructions  mystery

~/clmystery$ cat instructions 
.OOOOOOOOOOOOOOO @@                                   @@ OOOOOOOOOOOOOOOO.
OOOOOOOOOOOOOOOO @@                                    @@ OOOOOOOOOOOOOOOO
OOOOOOOOOO'''''' @@                                    @@ ```````OOOOOOOOO
OOOOO'' aaa@@@@@@@@@@@@@@@@@@@@"""                   """""""""@@aaaa `OOOO
OOOOO,""""@@@@@@@@@@@@@@""""                                     a@"" OOOA
OOOOOOOOOoooooo,                                            |OOoooooOOOOOS
OOOOOOOOOOOOOOOOo,                                          |OOOOOOOOOOOOC
OOOOOOOOOOOOOOOOOO                                         ,|OOOOOOOOOOOOI
OOOOOOOOOOOOOOOOOO @          THE                          |OOOOOOOOOOOOOI
OOOOOOOOOOOOOOOOO'@           COMMAND                      OOOOOOOOOOOOOOb
OOOOOOOOOOOOOOO'a'            LINE                         |OOOOOOOOOOOOOy
OOOOOOOOOOOOOO''              MURDERS                      aa`OOOOOOOOOOOP
OOOOOOOOOOOOOOb,..                                          `@aa``OOOOOOOh
OOOOOOOOOOOOOOOOOOo                                           `@@@aa OOOOo
OOOOOOOOOOOOOOOOOOO|                                             @@@ OOOOe
OOOOOOOOOOOOOOOOOOO@                               aaaaaaa       @@',OOOOn
OOOOOOOOOOOOOOOOOOO@                        aaa@@@@@@@@""        @@ OOOOOi
OOOOOOOOOO~~ aaaaaa"a                 aaa@@@@@@@@@@""            @@ OOOOOx
OOOOOO aaaa@"""""""" ""            @@@@@@@@@@@@""               @@@|`OOOO'
OOOOOOOo`@@a                  aa@@  @@@@@@@""         a@        @@@@ OOOO9
OOOOOOO'  `@@a               @@a@@   @@""           a@@   a     |@@@ OOOO3
`OOOO'       `@    aa@@       aaa"""          @a        a@     a@@@',OOOO'


There's been a murder in Terminal City, and TCPD needs your help.

To figure out whodunit, go to the 'mystery' subdirectory and start working from there.

You'll want to start by collecting all the clues at the crime scene (the 'crimescene' file).

The officers on the scene are pretty meticulous, so they've written down EVERYTHING in their officer reports.

Fortunately the sergeant went through and marked the real clues with the word "CLUE" in all caps.

If you get stuck, open one of the hint files (from the CL, type 'cat hint1', 'cat hint2', etc.).

To check your answer or find out the solution, open the file 'solution' (from the CL, type 'cat solution').

To get started on how to use the command line, open cheatsheet.md or cheatsheet.pdf (from the command line, you can type 'nano cheatsheet.md').

Don't use a text editor to view any files except these instructions, the cheatsheet, and hints.

```

</details>

<details><summary>翻訳文</summary>

```
# ターミナル・シティで殺人事件が発生し、TCPDがあなたの助けを必要としています。

犯人を突き止めるには、'mystery'サブディレクトリに行き、そこから作業を開始する。

まず、犯行現場（'crimescene'ファイル）にある手がかりをすべて集めることから始めましょう。

現場にいた巡査はかなり几帳面なので、巡査報告書にあらゆることを書き留めている。

幸いなことに、巡査部長は本物の手がかりに目を通し、大文字で「CLUE」と印をつけた。

行き詰まったら、ヒントファイルを開いてください（CLから'cat hint1'、'cat hint2'などとタイプしてください）。

解答を確認したり、解答を見つけるには、「solution」ファイルを開いてください（CLから「cat solution」と入力してください）。

コマンドラインの使い方を始めるには、cheatsheet.mdまたはcheatsheet.pdfを開く（コマンドラインから、'nano cheatsheet.md'とタイプする）。

この説明書、チートシート、ヒント以外のファイルを見るのにテキストエディタは使わないでください。

```

</details>

<details><summary>掴んだ手掛かり</summary>

- mysteryのサブディレクトリに行き作業を始める
- crimesceneファイルに手掛かりがある
- 手掛かりには「CLUE」と大文字で記されている

</details>

# 捜査開始

<details><summary>捜査内容</summary>

mysteryディレクトリのcrimesceneファイルから「CLUE」と記された部分を探す

</details>

<details><summary>実行したコマンド</summary>

```
~/clmystery/mystery$ ls
crimescene  interviews  memberships  people  streets  vehicles

~/clmystery/mystery$ grep CLUE crimescene 
CLUE: Footage from an ATM security camera is blurry but shows that the perpetrator is a tall male, at least 6'.
CLUE: Found a wallet believed to belong to the killer: no ID, just loose change, and membership cards for Rotary_Club, Delta SkyMiles, the local library, and the Museum of Bash History. The cards are totally untraceable and have no name, for some reason.
CLUE: Questioned the barista at the local coffee shop. He said a woman left right before they heard the shots. The name on her latte was Annabel, she had blond spiky hair and a New Zealand accent.

# 手掛かりの翻訳文

CLUE 犯罪現場 
CLUE：ATMの監視カメラの映像は不鮮明だが、犯人は身長180cm以上の長身の男性であることがわかる。
CLUE：犯人のものと思われる財布を発見。IDはなく、小銭とロータリー・クラブ、デルタ・スカイマイル、地元の図書館、バッシュ歴史博物館の会員カードのみ。カードは全く追跡不可能で、なぜか名前もない。
手がかり： 地元のコーヒーショップのバリスタに質問。銃声を聞く直前に女性が立ち去ったという。ラテに書いてあった名前はアナベルで、ブロンドのとがった髪でニュージーランド訛りだった。
```
</details>

<details><summary>掴んだ手掛かり</summary>

* 容疑者は男性
* 身長は180cm以上
* 犯人の入っている会員リスト
  * Rotary_Club
  * Delta SkyMiles
  * Bash History
  * local library
  * AAA
* 目撃者の名前はAnnabelでニュージーランド訛りのブロンドヘアー

</details>

# 目撃者の捜索

<details><summary>捜査内容</summary>
目撃者の情報が手に入ったのでAnnabelを探す。この街の住人はPeopleファイルにリスト化されているのでそこからAnnabelの名前を探す。

</details>

<details><summary>実行したコマンド</summary>

```
~/clmystery/mystery$ grep Annabel people 
Annabel Sun     F       26      Hart Place, line 40
Oluwasegun Annabel      M       37      Mattapan Street, line 173
Annabel Church  F       38      Buckingham Place, line 179
Annabel Fuglsang        M       40      Haley Street, line 176
```
</details>

<details><summary>掴んだ手掛かり</summary>

- 目撃者は女性なので二択に絞れる
- Annabel Sun
- Annabel Church
- 二人の住所を確認できた

</details>

# 目撃者の聞き込み調査

<details><summary>捜査内容</summary>

先ほど掴んだ手掛かりを使って目撃者の住所に行き証言を聞く

</details>

<details><summary>実行したコマンド</summary>

```
 # Annabel Sun
~/clmystery/mystery$ head -n 40 streets/Hart_Place | tail -n 1
SEE INTERVIEW #47246024

# Annabel Church

~/clmystery/mystery$ head -n 179 streets/Buckingham_Place | tail -n 1
SEE INTERVIEW #699607

# headのnオプションで行数を指定する。これだけだと情報が多いので　パイプでtail -n 1　にする指定した行の一列だけ表時することができる
```

</details>

<details><summary>掴んだ手掛かり</summary>

* すでに聞き込みに答えていてインタビューに記録されている
* 記録されているインタビュー番号がとくていできたのでそれを見にいく

</details>

# 目撃者の証言を確認してみる

<details><summary>捜査内容</summary>

インタビューが記録されているディレクトリから目撃者のインタビューの内容を確認する

</details>

<details><summary>実行したコマンド</summary>

``` 
# Annabel Sun　のインタビュー
~/clmystery/mystery$ cat interviews/interview-47246024 
Ms. Sun has brown hair and is not from New Zealand.  Not the witness from the cafe.

# 翻訳文
サンさんは茶髪でニュージーランド出身ではない。 カフェの目撃者ではない。

# Annabel Church のインタビュー
~/clmystery/mystery$ cat interviews/interview-699607
Interviewed Ms. Church at 2:04 pm.  Witness stated that she did not see anyone she could identify as the shooter, that she ran away as soon as the shots were fired.

However, she reports seeing the car that fled the scene.  Describes it as a blue Honda, with a license plate that starts with "L337" and ends with "9"

# 翻訳文
午後2時4分、チャーチさんと面談。 目撃者は、犯人とわかる人物は見ておらず、発砲と同時に逃げ出したと述べている。

しかし、彼女は現場から逃げた車を見たと報告している。 ナンバープレートは 「L337 」で始まり 「9 」で終わる。

```

</details>

<details><summary>掴んだ手掛かり</summary>

* 逃げた車を見た
* メーカー Honda
* ナンバープレートが「L337」で始まり「9」で終わるナンバー

</details>

# 逃走した車両を調べる

<details><summary>捜査内容</summary>

ナンバープレートと車種から容疑者を絞っていく

</details>

<details><summary>実行したコマンド</summary>

```
# オプションの 「-A 5」を入れることで検索が該当した部分から後5行を含めて表示することができる。これをしないと正しく情報を得ることができない

~/clmystery/mystery$ grep -A 5 L337 vehicles 
License Plate L337ZR9
Make: Honda
Color: Red
Owner: Katie Park
Height: 6'2"
Weight: 189 lbs
--
License Plate L337P89
Make: Honda
Color: Teal
Owner: Mike Bostock
Height: 6'4"
Weight: 173 lbs
--
License Plate L337GX9
Make: Mazda
Color: Orange
Owner: John Keefe
Height: 6'4"
Weight: 185 lbs
--
License Plate L337QE9
Make: Honda
Color: Blue
Owner: Erika Owens
Height: 6'5"
Weight: 220 lbs
--
License Plate L337GB9
Make: Toyota
Color: Blue
Owner: Matt Waite
Height: 6'1"
Weight: 190 lbs
--
License Plate L337OI9
Make: Jaguar
Color: Blue
Owner: Brian Boyer
Height: 6'6"
Weight: 201 lbs
--
License Plate L337X19
Make: Fiat
Color: Blue
Owner: Al Shaw
Height: 6'5"
Weight: 240 lbs
--
License Plate L337539
Make: Honda
Color: Blue
Owner: Aron Pilhofer
Height: 5'3"
Weight: 198 lbs
--
License Plate L3373U9
Make: Ford
Color: Blue
Owner: Miranda Mulligan
Height: 6'6"
Weight: 156 lbs
--
License Plate L337369
Make: Honda
Color: Blue
Owner: Heather Billings
Height: 5'2"
Weight: 244 lbs
--
License Plate L337DV9
Make: Honda
Color: Blue
Owner: Joe Germuska
Height: 6'2"
Weight: 164 lbs
--
License Plate L3375A9
Make: Honda
Color: Blue
Owner: Jeremy Bowers
Height: 6'1"
Weight: 204 lbs
--
License Plate L337WR9
Make: Honda
Color: Blue
Owner: Jacqui Maher
Height: 6'2"
Weight: 130 lbs

```

</details>

<details><summary>掴んだ手掛かり</summary>

* ナンバーが「L337」から始まり「9」で終わる車両が複数
* 車種もHonda以外のものが含まれている
* 車の所有者

</details>

# 車両と容疑者を絞る  

<details><summary>捜査内容</summary>

手掛かりのナンバープレートが複数あるのと車種もHondaのみに絞り容疑者の性別も確認して絞り込む

</details>

<details><summary>実行したコマンド</summary>

```
~/clmystery/mystery$ grep "Jeremy Bowers" people 
people:Jeremy Bowers    M       34      Dunstable Road, line 284

~/clmystery/mystery$ grep "Aron Pilhofer" people 
people:Aron Pilhofer    M       16      Claybourne Street, line 145

~/clmystery/mystery$ grep "Mike Bostock" people 
people:Mike Bostock     M       45      Senders Court, line 287

# この人だけ複数人ヒットするので -w をつけて完全一致を条件にすると一人になる
~/clmystery/mystery$ grep -w "Joe Germuska" people 
people:Joe Germuska     M       65      Plainfield Street, line 275

```

</details>


<details><summary>掴んだ手掛かり</summary>

容疑者の特徴である男性のみの絞ると4人まで絞り込むことができた。
それぞれ住所も把握したのでこの４人から聞き込みを始める

</details>

# 4人の容疑者の取材の記録をみてみる

<details><summary>捜査内容</summary>

容疑者候補の４人から取材の記録を見に行き犯人の特徴からさらに絞り込む

</details>


<details><summary>実行したコマンド</summary>

```
 # 容疑者ごとにstreetsを変更してインタビュー番号を入手する

 # "Mike Bostock"
~/clmystery/mystery$ head -n 287 streets/Senders_Court |tail -n 1
SEE INTERVIEW #290346

~/clmystery/mystery$ cat interviews/interview-290346 
Drives a similar car to the description.

Is a SkyMiles, TCPL, Museum of Bash History, and AAA member.

Bostock is 6' 4", easily tall enough to match the camera footage.

However, upon questioning, Bostock can prove that he was out of town on the morning of the murder, multiple witnesses and credit card transactions confirm.

# "Aron Pilhofer"
~/clmystery/mystery$ head -n 145 streets/Claybourne_Street | tail -n 1
SEE INTERVIEW #1767435

 cat interviews/interview-1767435 
Too short to match the camera footage.  Pilhofer is not considered a suspect.

# "Jeremy Bowers"
~/clmystery/mystery$ head -n 284 streets/Dunstable_Road | tail -n 1
SEE INTERVIEW #9620713

~/clmystery/mystery$ cat interviews/interview-9620713 
Home appears to be empty, no answer at the door.

After questioning neighbors, appears that the occupant may have left for a trip recently.

Considered a suspect until proven otherwise, but would have to eliminate other suspects to confirm.

# "Joe Germuska"
head -n 275 streets/Plainfield_Street | tail -n 1
SEE INTERVIEW #29741223

~/clmystery/mystery$ cat interviews/interview-29741223 
Not available to interview

```

</details>

<details><summary>インタビューの翻訳</summary>

```
# "Mike Bostock"
説明と同じような車に乗っている。

スカイマイル、TCPL、バッシュ歴史博物館、AAA会員。

ボストックの身長は180センチで、カメラの映像と一致する。

しかし、尋問の結果、ボストックは、殺人のあった日の朝、外出中であったことを証明できる。複数の目撃者とクレジットカードの取引がそれを証明している。

# "Aron Pilhofer"
カメラの映像と一致するには短すぎる  ピルホーファーは容疑者と見なされていない。

# "Jeremy Bowers"
自宅には誰もいないようだ。

近所の人に尋ねたところ、住人は最近旅行に出たようだ。

証明されるまでは容疑者と考えられるが、確認するには他の容疑者を排除する必要がある。

# "Joe Germuska"
取材不可

```
</details>

<details><summary>掴んだ手掛かり</summary>

容疑者が3人に絞られたそのうち二人にはアリバイがあり1人は取材を受けていない
取材受けた一人はアリバイに確証が持てないので、犯人の持ち物から得た会員情報を元にだれがどの会員なのかを絞っていく

</details>

# ３人の容疑者のメンバーシップ情報を確認する

<details><summary>調査内容</summary>

犯人のIDからどこの会員かは分かっているので容疑者のメンバーシップを調べ一致する容疑者を見つける

</details>

<details><summary>実行したコマンド</summary>

```
 # *ワイルドカードを使ってこのディレクトリの中の全てのファイルから検索する
~/clmystery/mystery/memberships$ grep "Jeremy Bowers" *
AAA:Jeremy Bowers
Delta_SkyMiles:Jeremy Bowers
Museum_of_Bash_History:Jeremy Bowers
Terminal_City_Library:Jeremy Bowers

~/clmystery/mystery/memberships$ grep "Mike Bostock" *
AAA:Mike Bostock
Delta_SkyMiles:Mike Bostock
Museum_of_Bash_History:Mike Bostock
Terminal_City_Library:Mike Bostock

~/clmystery/mystery/memberships$ grep "Joe Germuska" *
AAA:Joe Germuska
Delta_SkyMiles:Joe Germuska
Museum_of_Bash_History:Joe Germuska
Rotary_Club:Joe Germuska
Terminal_City_Library:Joe Germuska

```

</details>

<details><summary>掴んだ手掛かり</summary>

犯人の特徴とIDの会員情報が全て一致する容疑者を発見！
この人が犯人だ「Joe Germuska」

</details>

# 犯人を報告した

<details><summary>犯人を報告</summary>

~/mysolutionに犯人の名前を書き込み回答をチェックしてくれとのことなので、
```
$ echo "Joe Germuska" > ~/mysolution

```
これで犯人を報告できたのでSadServersに確認してもらう
</details>

# 犯人の特定完了

SadServersから正解の回答と言われたので今回の事件は一見落着

# 感想

今回のシナリオからかなり難易度が感じたと思った。ただ、使用したコマンドは#1#2で使用したものにオプションを理解するだけで犯人を特定することができたので、英文がスラスラ読めればさほど難しくないかもしれない。