はじめに
Javaを学んでもらう前に、まずはUNIXコマンドというものを勉強します。 ドラマや映画などでハッキングをしているシーンを思い浮かべてみてください。
そのときによく画面に「黒い背景に文字だけの表示」 がされているのを見たことがないでしょうか。
まさにあんな感じで、キーボードだけでコンピュータを操作する際に使用するのが UNIXコマンドです。
開発環境構築の「Javaに触れる」 でも少し触りましたね。
この章では、
• 「そもそもUNIXとはなんなのか」
• 「なぜUNIXコマンドを学ぶのか」
• 「実際にUNIXコマンドで操作してみる」
といったことを学んでいただきます。
そもそもUNIXとは?
UNIXとは、OS(Operation System)の一種です。
みなさんが今触れている、 WindowsやMacOS、さらには Android や iOS などの仲間なんです。 そして、OSの中でも歴史がとても古く、今あるOSの始祖的な存在です。
このUNIXというOSは基本的にキーボードだけで黒い画面を操作することでコンピュータに指示を出すという作りになっています。
その際に使われるコマンドが「UNIXコマンド」と呼ばれているということなんですね。
なぜUNIXコマンドを学ぶのか
さて、みなさんはおそらく今後主にWindowsで開発をしていくものと思いますが、じゃあなぜ別のOSのコマンドを学ばなければならないのでしょうか。
ここで少し、「サーバー」というものに触れていきましょう。
サーバーという言葉は聞いたことがあると思います。 「サーバーが重い」とか「サーバーが落ちた」とか言っている人、よく見かけますよね?
このサーバーというものは、簡単に言えば丈夫なコンピューターです。
これからみなさんが開発などで関わっていく 「システム」 とか 「プログラム」 とか呼ばれるものは、この「サーバー」 に設置して、全世界 (もしくは限定的に社内だけなど) に公開をします。
公開するだけだったら、 実は手元のPCだけでもできます。しかしPCは「パーソナルコンピュータ」 なので、基本的には1人が専用に使うようにできています。
1日のうち数時間から10数時間しか稼働しないような設計になっているんですね。
しかしシステムをWEB上に公開したら、基本的に24時間365日フル稼働しなければいけません。
そして、CPUやメモリ、ストレージ容量など、 PCよりも高いスペックを求められることが多いのです。そのため、それに耐えうるコンピュータが必要になってくるのですが、 その時に使用されるのがサーバーです。
このサーバーのOSには主にLinux というものが使われています。
「そもそもUNIXとは?」の項目の中でUNIXは始祖的な存在であると書きましたが、ここで出てきたLinuxは UNIXをもとに作られたOSなのです。 詳しい歴史背景などは割愛しますが、気になる人は調べてみてください。
LinuxはUNIXをベースに作られていますので、 UNIXコマンドが使えるよう設計されています。少し関係ないですが、macOSもUNIXをベースに作られていますので、 同様にUNIXコマンドが使えます。
一方WindowsはUNIXをベースに作られたわけではないのでUNIXコマンドは使用できませんが、コマンドはWindows特有ではあるものの同じようにコマンドでの操作ができます。
また、開発環境構築で導入した 「WSL2」 を使うことで、 Windows で UNIXコマンドを使用することもできます。
・プログラムだけじゃなくてサーバーを操作する必要が出てきたときのため
・PCでマウス操作などでは実行しにくい (もしくはできない) プログラムを実行する必要ができてたりしたときのため
・ここまでには記載してないですが、コマンド操作の方が効率的な場面がいくつもあるため、覚えておいた方が自分のためになる
・(そもそも開発者としてUNIXコマンドくらい使えなきゃっていう風潮があるため)
こんな理由から、UNIXコマンドを学んでいただきます。
実際にUNIXコマンドで操作してみる
では、実際に自分のPCで操作しながらUNIXコマンドを学んでいきましょう。
Windowsの方はUbuntuを、 Macの方はターミナルを起動してください。
(参考画像はWindowsのものになります)

pwd と打ち、Enterを押します。 (今後コマンドを打ったらEnterを押して進めてください)

画像のように文字が表示されましたか? これは、現在自分がいるディレクトリの絶対パスが表示されています。
「pwd」とは「Print Working Directory」で、作業している今のディレクトリの絶対パスを表示するという命令です。
特定の文字を入力して、Enterを押して指示を与えることで、コンピュータが指示に対応した処理をしてくれる。
これがUNIXコマンドとなります。
流れはわかりましたか? では次に行ってみましょう。
mkdirは「make directory」 で、空のディレクトリを作成するコマンドです。 以下のコマンドでディレクトリを試しに作成してみましょう。
今作成したディレクトリを確認するために、次は 「ls」というコマンドについてです。 lsは「List」の意味で、「一覧を表示する」 という命令です。
表示された一覧にtestdirが存在すれOKです。

cdとは「Change Directory」 で、ディレクトリを変更するという命令です。 cd の後に半角スペースを開けて行先を指定することで、ディレクトリを移動することができます。 先ほど作成したディレクトリに移動してみましょうcd testdir
この状態で「pwd」 のコマンドを打ってみましょう。
Ubuntuを使用していた場合、/home/reorga/testdirと表示されていると思います。(macの方は先ほどpwdで表示された場所の最後に/testdirが表示されていればOKです)
今、皆さんは相対パスを指定してディレクトリを移動しました。相対パスとはなんでしょうか。
特定のディレクトリまでのフォルダ階層のことを一般にパスと呼びます。
その中でも相対パスとは、今自分が開いているディレクトリから対象のディレクトリまでの階層順のことを指します。どういうことかをコマンド操作をしながら確認しましょう。
まずは以下のコマンドでさっきまでいたディレクトリに戻ります。
cd だけで実行すると、 ホームディレクトリに移動します。
ホームディレクトリとは、 Ubuntuやターミナルを開いた直後にいる場所です。
つまりさっきまでいた場所に移動した訳です。
次に、cd ..を実行したあとpwdでフォルダの階層を確認してみましょう。

UNIXコマンドにおいて、”..”は今いるディレクトリの一つ前、という意味になります。つまり今回は、ホームディレクトリの一つ前の場所に移動しました。
では次にcd testdirと実行してみましょう

すると、エラーが発生しそのようなディレクトリはないと表示されます。
これは相対パス的にみると、上の画像では開いているディレクトリ(/home)からtestdirは二つ先の階層(/home/reoga/testdir)にあるためです。/homeディレクトリの直下にはtestdirというディレクトリはないためエラーになります。
では皆さん、相対と聞いて連想する単語は何でしょうか?そうです、「絶対」です。
もちろんパスにも絶対パスという概念があります。
絶対パスとは、一番最初のディレクトリ(ルートディレクトリ)から目的のディレクトリまでの階層順のことです。
ルート(根底)から指定するパスのことを絶対パスと呼ぶので、自分がどこにいようが 絶対パスが変わることはありません。
コマンドで確かめてみましょう
まずはtestdirの場所を確認するため、cdでホームディレクトリに移動し cd testdirでさらに移動した後pwdでパスの表示をします。

では、cd ..を二回繰り返して、二つ前の階層に戻ったあと、先ほどpwdで表示したパスをコピーして、cdの後ろに貼り付けて実行してみましょう。

すると今度はエラーを起こさずにtestdirまで移動できたと思います。
ちなみに、ルートディレクトリとは絶対パスの一番左にある/のことです。
rmは「remove」で、指定したファイルやフォルダを削除するコマンドです。
コマンドで、 先ほど作成したディレクトリを削除してみましょう。
cdでホームディレクトリに戻ったあと、rm -r testdirを実行します
ここで、rmの後ろにある-rについてですが、rmはファイルを削除するのが主なコマンドです。通常ではフォルダを削除することはできませんが、オプションとして-rを指定することで、フォルダを削除するというコマンドになります。
できたら、「Is」 でリスト表示し、 testdir がなくなっていることを確認します。

寄り道
ここまでいくつかコマンドを試してもらいましたが、「こんなのマウス操作の方が早くない?」 と思った方もいるのではないでしょうか。
ここで少し寄り道し、コマンドだと効率的にこんなことができるぞというのを体験してみましょう。
あなたは今、「testdir1 ~ testdir40まで合計40個の空のディレクトリを作成してくれ」と指示をされました。さぁ、どうしますか?
マウスでぽちぽちと1個ずつ作るのも良いですが、実はコマンドだったら一瞬で作成できてしまうのです。 以下のコマンドを実行してみてください。
mkdir testdir{1..40}
lsで確認してみましょう。 たったこれだけでディレクトリが一気にできていることが確認できると思います。
{1.4} の部分で、「1から40まで番号を付けながら繰り返す」 という意味があるんですね。
今度は逆に今作ったディレクトリを全て削除します。
rm -r testdir*
lsで確認してみると、 さっき作ったディレクトリが全て削除されていることが確認できると思います。
* は「任意の文字以上」という意味です。 つまり、「testdir」とか「testdirectory」とか「testdiraaa」とか、 testdirで始まる全てのディレクトリが対象になって削除されるのです。
どうですか? コマンドにはこういった場面に合えばめちゃくちゃ効率化できる」という面があるのです。
もしこういう便利な機能をいっぱい知っていたら、どんどん仕事が効率化できるんです。
本章でお教えするコマンドは10数個ですが、 コマンドは無数にあるので自分でもいろんなものを探して勉強してみると、とても面白いと思いますよ。
では元の道に戻りまして…。
cpは「copy」で、ファイルやディレクトリをコピーするという命令です。
現在フォームディレクトリにいると思いますので、mkdirでディレクトリをつくり、cpでそのディレクトリのコピーを作成します。
cp -r testdir testdir2
これで、testdir を testdir2と言う名前でコピーするという命令になります。 lsで確認してみると、 testdir2 というディレクトリができていることが確認できるかと思います。

mvは「move」 で、 ファイルやディレクトリを移動させるという命令です。
また、移動後の名前を指定することができるため、リネーム(名前変更)に使用することもできます。
以下のコマンドを実行してください。
mv testdir2 testdir3
これで、testdir2というファイルを testdir3と言う名前で移動する (=名前をtestdir3に変更する)という命令になります。lsで確認すると、testdir2 というディレクトリがなくなり、testdir3という名前のディレクトリが存在することがわかると思います。

touchはファイルを新規作成するコマンドです。以下のコマンドを実行してください。
touch test.txt
lsで確認すると、 test.txt と言うファイルができていることがわかると思います。
とりあえずファイルを新規で作成する時に使用します。
viは実行するとテキストエディタが開き、 ファイルの内容を編集することができるコマンドです。
正直「vi」に関してはそれだけで1章できてしまうくらい奥が深いのですが、 ここではサクッと紹介だけしていきます。
先ほど作成したtest.txtを編集します。以下のコマンドを実行してください。
vi test.txt
すると、先ほどまでとは違った画面が表示されると思います。 これがテキストエディタです。

エディタを開いた時点では 「ビジュアルモード」 となっており、 中身をみることしかできません。
そして、空のファイルを開いたので、 もちろん中身は何もありません。
ここから中身を編集するには 「インサートモード」に切り替える必要があります。
キーボードの「i」 を押してみてください。
すると画面下部に「INSERT」という文字が出てきたことが確認できたでしょうか。

これで「インサートモード」に切り替わったので入力ができるようになりました。
それでは「Hello World」 と入力してみましょう。 打てましたか? では保存して終了します。
まずは「Esc」キーを押し、 その後 「:wq」 (コロン・ダブリュー・キュー) と入力してEnterを押してください。
先ほどの画面に戻りましたね。
「w」はwrite(書き込み)、「q」はquit (終了)という意味です。
「:」は、命令の合図みたいなものです。
ちなみに、保存はせずに終了したい場合には 「:q!」と入力します。
さてひととおり 「vi」 について説明をしました。
- vi ファイル名でファイルを開き
- i キーでインサートモードにする
- 入力が終わったら Escキーでビジュアルモードに戻して
- :wqで保存して終了
この流れは頭に叩き込む必要がありますので、 何度か繰り返してやってみると良いでしょう。
catは「ファイルの中身を出力する」というコマンドです。
こちらを使用して、先ほど入力した test.txt の中身を出力してみましょう。 以下のコマンドを実行してください。
cat test.txt
「Hello World」と出力されたでしょうか。
課題の提出
ひとまず本章は全て終わりましたので、課題を提出してください。
ホームディレクトリで作成したtestdir3とtest.txtがあることがわかる画面と、test.txtの内容をcatで表示した画面をスプレッドシートに貼り付けて提出してください。
よく使うコマンド一覧
最後によく使用するコマンドの一覧を乗せておきます。
ここにあるものはコマンドの中のほんの一部ですので、検索してみたりしていろいろなコマンドを試してみましょう。
★ディレクトリ操作
★ファイル操作
