IBM Z マスターへの道④ ~USS~

[前回](https://qiita.com/trtrbohz/items/6e0cc87f42f15067013d)に引き続き、第4回 USSシナリオ を実施する。
このシナリオの学習目的は
・UNIX System Service(USS)は z/OS 内の UNIX 環境の POSIX 準拠の実装。これまで使用していた z/OS と同じシステム API を引き続き使用することを可能にする UNIX 環境に触れること。 
・シェルを使用していくつかのスクリプトを実行すること

![スクリーンショット 2022-08-18 10.55.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/56988b90-f468-cbb4-666d-55aad0cf8358.png)


### 0.1. 課題にアクセス
まず、[Z xplore](https://ibmzxplore.influitive.com/forum/) にアクセスし、「FUNDAMENTALS」をクリック
 ![スクリーンショット 2022-06-06 12.06.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/d3b1ccc3-e8e3-ccc7-035f-73a91bf06df7.png)

### 0.２. シナリオPDF入手
4つ目のシナリオである「USS」が選択可能となっているのでクリックし、PDFをダウンロードしておく。

![010.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/8452d5bc-ef9a-0404-d79a-87e172877a28.jpeg)



### 1. FIND TEHE TERMINAL

VSCode のメニューに[ターミナル]-[New Terminal]がある。
これを介してシステムにテキストべースで命令を送ることができる。いわゆるCLI(Command Line Interface)。
古いWindowsやMacOSであれば、別途SSHでクライアントツール(PuTTYなど)をダウンロードする必要がある。
それちらに関してはサポートフォーラムに相談すること。
※ターミナルについては、OS付属のターミナル(WindowsのPowershell, Macのターミナルも可)
![スクリーンショット 2022-08-08 16.29.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/cdeeef2d-1d0c-22b4-b843-985ba293a02d.png)


### 2. CONNECT THROUGH SSH
z/OS システムに次のコマンドでログインする。
```
ssh zxxxxx@204.90.115.200  (”zxxxxx”の部分はご自身のユーザIDを適応)
```
つまり、SSHコマンドを使ってIPアドレスが示すシステムに自身のIDで接続する。
その際「Remote Host Identification Has Changed」(ホストの鍵が変わっているよ)と言ったメッセージが出る場合、以前違うIPアドレスからアクセスしたことを示しているので、古いレコードを ~/.ssh/known_hosts ファイルから以下のような行を消すこと。
![020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/59123975-e3c1-a66e-0bdd-1c3dbab343d4.png)


### 3. VERIFY ME, THANK YOU
SSHコマンドでログインする際にパスワード入力を求められるが、その際は、z/OS システムにログインした時のパスワードを使い、以下を実施。
・パスワードはショルダーハッキングを防ぐため非表示となっている。
・リモートシステムの鍵を信用し許諾する
・"The authenticity can’t be established” と表示されるかも。その時は「yes」と入力する。

![スクリーンショット 2022-08-08 16.31.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/47584ea0-e490-a254-01c1-ef23025f368d.png)


### 4. YOU'RE IN! NOW WHAT?
SSHコマンドでUSS環境にログインし"ls"コマンドの結果として、ディレクトリ内のファイルやフォルダが表示される。デフォルトのディレクトリ("home")が空であれば、"use-setup"コマンドを打った後、再度"ls"コマンドを入力してみる。 
![030.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/5790fb95-39db-e3bc-108d-4f4fbf91043b.png)

USSは階層構造を持ち、ディレクトリ内にファイルやディレクトリがある。ファイルやフォルダをフォルダに入れ子にして管理するやり方におそらく慣れていると思う。また、切断したければ"exit"コマンドを入力しログアウトする。が、"ssh"コマンドを使うと再度接続できる。
![040.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/fb0f3c69-45cc-740e-c37f-23f136c99af6.png)


### 5. GETTING ORIENTED
"ls"コマンドで結果を見るほか、「どこにいるのか？」も知りたいと思う。
そんな時には、コマンドプロンプトに現在どこのディレクトリにいるのか表示されている。
また、"pwd"コマンドを使ってもワーキングディレクトリを表示してくれる。
ファイルシステム内を"cd"コマンドで移動するので便利。
"cd ~"コマンドを打ち込むことにより、すぐにホームディレクトリに戻ることができる。

![050.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/dff221e9-e956-b535-3678-8ac47dc83a5e.jpeg)


### 6. CHANGE DIRECTORY WITH CD
"cd" + 移行先ディレクトリ により、他のディレクトリに移る。
例えば"ls"コマンドにて表示されるディレクトリ(directory1)であれば、"cd directory1" とすると、directory1 ディレクトリに移ることができる。
"pwd"コマンドにより、カレントディレクトリが"/z/zxxxxx/directory1"と表示される。

ホームディレクトリに戻るため、１つ階層を戻る必要がある。"cd .."で一階層戻り、"cd ~"でホームディレクトリに戻ることができる。
これまでのところ、一度に一階層を行き来できたが、移動先の絶対パスを指定することによってディレクトリーを一気に変更することもできる。
例えば、"cd /z/public/test" によって、その新しい所に直接移動できる。
そこでまた"cd ~"を使えばホームディレクトリに戻ることもできる。
(あと、ホームディレクトリが空であれば、"use-setup"コマンドを実行すること ) 

![スクリーンショット 2022-08-08 16.38.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/fb714e07-4b43-cf50-5775-833a0a2e1599.png)


### 7. FRESH FILES AND FOLDERS
"touch"コマンドはファイルの最終変更時間を更新するために使われるが、空ファイルを作るためにも使われる。"touch mynewfile"コマンドを入力し、ls コマンドを使って新規ファイルを表示する。
"mkdir"コマンドを使って、新規ディレクトリを作成することができる。例えば、"mkdir mynewdir"とすると新規ディレクトリを作成することができる。

![スクリーンショット 2022-08-08 16.39.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/f8601d8a-df78-8457-1710-0ed4e07f2f02.png)


### 8. INVITE ZOWE TO THE PARTY
Zoweを介してUSSファイルやディレクトリを閲覧することができる。
USSのプロファイル横にある虫眼鏡アイコンをクリックするだけでホームディレクトリのフルパスを入力することができる。
全て小文字を使用し、 zxxxxx または z99994ではなく、自身のユーザIDを使用すること。  

![060.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/2bee1789-2186-5fbd-77a8-840d369507f4.jpeg)


### 9. I'VE GOT A SECRET
ホームディレクトリに scramble.sh というファイルがある。
"ls -l"コマンドにより、権限(r,w,x等)を記した左のパーミッション欄内の右端にxが表示されていることにより、このファイルが実行可能プログラムであることが分かる。
これは、ユーザがそれを読み書きできるだけでなくそれを拡張することもできることも表す。
許可ビットについては割愛
現時点では、./scramble.sh でプログラムを実行できること、および結果が知る必要のあることのすべて。

【クイズ】  /z/public/secret.txt に対してある数値を使って scramble.sh を実施する(```./scramble.sh /z/public/secret.txt 〈ある数字〉```)と「congratulations! you unscrambled the message in the uss challenge!!」といったメッセージが出力される。この時のある数字とはなにか？
ヒント：ある数は1−26。推理と数回試行するべし。


### 10. REDIRECT THE OUTPUT
一旦プログラムを実行してみたら、実行結果をファイルに出力するには、リダイレクトを使う。これ、非常に簡単。
入力、もしくは適正な値でコマンドを再実行してみる。その際、```> ussout.txt```を末尾に追加。
プログラムが動いている間、出力はないが、"> アウトプットファイル名"をコマンドの後ろに付けることによって、画面上に出力する代わりにファイルに出力できる。
ファイルが存在しなければ、新規にファイルを作るが、もし既存ファイルがあれば上書きしてしまうので注意が必要。
あとで"cat"コマンドで確かめること。

また、">>"を使うと、ファイルの末尾にアウトプットをリダイレクトすることができる。つまり、追記。
それはステップ11で紹介する。

VSCodeの「 USS 」ビューでファイルを開くことにより、ファイル内の内容を確認できる。右クリック -「Pull from Mainframe」をクリックすると、書き込んでから最新表示する場合があることを覚えておくこと。 

![070.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/4f4a2cce-53a5-3f71-2a92-f3d1f43a2f09.png)


### 11. EXPLORING SPACE
デコードされた出力を ussout.txt に出力し、"du -ak"コマンドを実行してみる。
"du"コマンドはディレクトリ内のディスク使用量を K byte で出力する。この時点で、使用している合計キロバイト数は 50 キロバイト未満になる。このコマンドを正しく実行すると、ussout.txt には、暗号化された秘密メッセージの後にディスク使用コマンドの出力が表示される。 

![080.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/1eae215c-6d01-e49b-6a86-564007cc5797.png)


### 12. MAKE IT COUNT
最後に"date"コマンドの出力を同じファイルに前述と同じ方法でリダイレクトし、ussout.txtに秘密のメッセージ、ディスク使用量、dateコマンドのアウトプットがあることを確認すること。
全てできれば ZXP.PUBLIC.JCL から CHKUSS を起動し、完了。

![090.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/d5c8a8c1-692d-8606-4f83-c70475e00ca2.png)


### NICE JOB! LET'S RECAP
SSH を介して USS に接続し、さらに VS Codeのプラグインを介して接続した。 
そこから、ディレクトリーのナビゲート、管理対象出力、一部のテキストのハッキング、および引数についてのすべての情報が得られた。 


### NEXT UP...
次の課題で USS スペースの作業を続ける予定であるため、これらの端末コマンドおよび VSCodeをそのままにしておくように。
Pythonを使った非常に基本的なコーディングをしてみる。 


### 最後に、締め
USS挑戦画面( https://ibmzxplore.influitive.com/ )を見てみると、「Challenge Complete, check my FILES submission」ボタンが表示されているので、こちらをクリックして完了！

![スクリーンショット 2022-08-08 17.27.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/cd14f98b-388e-5cc3-1567-155d6c43d3a7.png)


### クイズの答え
答え：１７
![100.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/07fe4f16-968f-6102-0393-8b1e93f6be7c.png)