Series: IBM Z Xplore — Fundamentals + Concepts | Challenge: USS1 | Beginner, Fundamentals | 60 minutes
Platform status: Completed (as of 2026-11-03)
Prerequisite: VSC1, FILES1, JCL1. Source: IBM Z Xplore official USS1 challenge documentation, plus my own practice.
USS とは、一言でいうと
USS(UNIX System Services)は、z/OS の中にある POSIX 準拠の UNIX 環境です。別のマシンではありません。すでに使ってきた z/OS と同じシステム API の上で動きますが、整理の仕方は UNIX 流で、ディレクトリの中にディレクトリ、ディレクトリの中にファイルがあります。FILES1 で学んだデータセットとメンバーという整理の仕方と並んで存在します。COBOL のプログラマーには両方が必要です。ソースや業務データはデータセットにあることが多く、スクリプトやモダンなツールは USS にあることが多いからです。
パート 1 — シェルに入る
- VS Code でターミナルを開き、まず PowerShell から CMD に切り替えました。チュートリアルに、PowerShell で ssh を使うとパスワードが合っていても Permission denied になることがあると書いてあったからです。PowerShell のプロンプトで
cmdと打ち、次にssh z70127@204.90.115.200と打ちました。 - 最初のパスワード入力は Permission denied, please try again. と返ってきました。もう一度入力したら入ることができました。チュートリアルが間違っていたわけではなく、最初の入力が失敗しただけで、打ち直したら解決しました。
- ログイン後のバナーには IBM Z Xplore learning platform、UNIX System Services 3.1 と表示され、集中管理されているツールは自分で入れ直さないこと、仮想環境を作らないこと、許可なく製品を入れないこと、商用のソースコードをアップロードしないこと、といった注意書きがありました。プロンプトの前には
/etc/zprofile:338: FSUZ0155 no matches found: /z/z70127/.npm/_logs/*.logという行も出ましたが、何も妨げなかったので、そのまま進めました。 - 最初の
lsではtmpしか表示されませんでした。uss-setupを実行すると "Hi and welcome to the ZXPLORE UNIX System Service Challenges!" と返ってきて、もう一度lsを実行すると、ホームディレクトリはチュートリアルの例よりもずっとにぎやかでした。animals.sh、assembler、cobol-check.config.properties、codeathons、directory1、dslist.py、movie-data.csv、members.py、odbcなど、これまでの作業で残ったものが並んでいました。実際のホームディレクトリは教科書のきれいな例ではない、という当たり前のことを思い出させられました。
パート 2 — 移動と、ファイルの作成
-
pwdで自分の位置を確認すると/z/z70127でした。cd ~でホームに戻り、cd directory1で入り、pwdで/z/z70127/directory1を確認し、cd ..で 1 つ上に戻りました。 - 次に自分のものを作りました。
touch mynewfileとmkdir mynewdirを実行し、lsで確認しました。一覧にはmynewdirとmynewfileが加わり、そのほかcode1.py、code2.py、go2、hackathons、j2p、scramble.sh、secret.txt、test、zosmfなども並んでいました。この時点では削除せず、後のduの出力でも両方とも 0 と表示されました。空のファイルと空のディレクトリなら、当然の結果です。
パート 3 — Zowe でも同じファイルを見る
- シェルは入口の 1 つで、Zowe はもう 1 つの入口です。Zowe Explorer の USS ビューで、フィルターを自分のホームディレクトリ
/z/z70127(すべて小文字)に設定しました。ターミナルと Zowe で同じホームディレクトリが見えることが、ここでの要点でした。USS のファイルはターミナルの中に閉じているわけではなく、データセットだけがシステムの中身を見る方法でもありません。このチャレンジの残りは、学ぶべきはコマンドを打つこと、確認に使うのはビューだという理由で、ターミナルで進め、Zowe で確認しました。
パート 4 — 秘密の解読
- 課題は、
/z/public/secret.txtに対してscramble.shを実行し、解読できる回転数を見つけることでした。このプログラムは第 1 引数にファイル、第 2 引数に回転数をとり、小文字にしか効きません。数が合えば解読した出力が、合わなければ意味不明な文字列が出ます。 - 試した順番は 13、7、3、12 でした。どれも "Processing..........Done!" の後に読めない文字列が出るだけでした。5 回目の 17 で、"congratulations! you unscrambled the message in the uss challenge!!" と出ました。方法はこれだけです。近道はなく、4 回の間違いを捨て、1 回の正解を残しただけです。数を試し、出力を読み、「これではない」と判断すること自体が作業であって、作業の前の失敗ではありません。
パート 5 — リダイレクトと、ファイルをきちんと作ること
- リダイレクトは、
>と>>が理論でなくなる場所です。成功したコマンドをもう一度実行し、末尾に> ussout.txtを付けて、出力を画面ではなくファイルに入れ、cat ussout.txtで確認しました。その後は上書きせず、追加だけをしました。まずdu -ak >> ussout.txt、次にdate >> ussout.txtです。この違いは重要で、ステップ 11 や 12 で上書きしてしまったら、解読したメッセージが消えてしまいます。
-
du -akはキロバイト単位のディスク使用量を、カレントディレクトリとその下すべてについて(-a)一覧にします。自分のホームディレクトリは合計 694 で、一覧にはこれまでのチャレンジの残り、作ったばかりの 0 サイズのmynewfileとmynewdir、そしてussout.txt自体の 8 が含まれていました。最後のcat ussout.txtでは、解読したメッセージ、次にduの出力、最後に日付 Tue Nov 3 00:37:34 CST 2026 という正しい順番で並んでいました。
パート 6 — 検証
-
ZXP.PUBLIC.JCLから検証ジョブCHKUSS1をサブミットしました。Jobs ビューには@USS1(JOB02768) - SOW1 - CC 0000と表示されました。次にプラットフォームに Challenge Complete のオーバーレイが出て、"Great work — your progress has been recorded." と表示されました。これが証拠で、自分の言葉だけではありません。

COBOL にとってなぜ重要か
USS がなければ、COBOL のプログラマーはシステムの半分にしか入れません。データセットにはソースとデータがありますが、ファイルを動かし、スクリプトを実行し、ディスク使用量を確認し、リダイレクトでコマンドをつなげるのはシェルです。次のチャレンジ Code も USS の中で Python を使うので、これは寄り道ではありません。次に進むための作業環境そのものです。最も持ち帰ったのは、個別のコマンドではなく、習慣です。コマンドを実行し、実際の出力を読み、それから次に何をするか決める。スクランブルの試行も、> と >> の区別も、まさにその習慣を報いるものでした。
次回:Code — z/OS のメインフレーム上で直接 Python を使ったプログラミングの基礎(120 分)。