UNIX演習

1. 目的

EWS(Engineering WorkStation)の代表的なOSであるUNIX系OSの基本を理解し、OS を含めたソフトウェアに対する基本的知識を習得する。

2. 理論

2.1 OS

オペレーティングシステム(Operating System; OS)とは、コンピュータを動作させるための基本的なソフトウェアを指す。CPUなどのハードウェアを制御し、ユーザが使用する応用ソフトウェアの基盤を用意している。例えばWindows, macOS, Linux, iOS, AndroidなどがOSである。

Wordやブラウザなどの応用ソフトウェアがハードディスクやメモリのファイルにアクセスする時、応用ソフトウェアが直接ハードディスクやメモリを制御しているわけではない。OSがそういったハードウェアへのアクセスを仲介し、抽象化(ハードウェアの違いを吸収し、応用ソフトウェアから簡単な命令でハードウェアにアクセスできるようにする)を行っている。他にもマルチタスクの管理、ネットワークの管理などコンピュータの基本的な動作を司っている。

2.2 UNIX

UNIXとはOSの一種であり、主にサーバなどに使われてきた。1969年にベル研究所で開発が開始されて以降、コンピュータのOSとして普及し、同様の特徴をもつ多くの派生OSが誕生した。現在でもUNIXシステムに準拠したUNIX系(派生)OSがサーバをはじめ広く使われている。UNIX系OSとしてはLinux, macOS, BSDなどがある。またAndroidはLinuxカーネル(OSの核となる機能)を利用している。

中でもLinuxは、サーバのみならず個人用コンピュータでも広く使われている。Linuxは無料で使えるのに加えてオープンソースソフトウェア(Open Source Software; OSS)であり、公開されたプログラムを自由に改良して再配布できる。それぞれの開発者の考えに基づいてLinuxベースで作られたOSのセット(ディストリビューション)が多数配布されている。

UNIX系OSのベースとなっているのはCUI (Character User Interface)であり、これはWindowsにみられるようなマウスでアイコンをクリックするものと異なり、全てを文字で操作する操作環境である。フォルダ(ディレクトリ)やファイルの概念はWindowsなどとほぼ同様であるが、cdlsなどのコマンドを使ってファイルの操作を行う。

2.3 ディレクトリ操作

Windowsでいうフォルダのことを、UNIX系OSではディレクトリという。

たとえば、WindowsでC:ドライブの下(中)のUsersフォルダの下のjikken2eフォルダの下のexample.txtファイルという構造を表現したい時、以下のように記述する。

C:\Windows\Users\jikken2e\example.txt

これに対し、UNIXでhomeディレクトリの下のjikken2eディレクトリの下のexample.txtファイルという構造を表現したいときは、

/home/jikken2e/example.txt

となる。

ディレクトリ(フォルダ)は木構造になっており、1つのディレクトリの下には複数(ないこともある)のディレクトリやファイルが存在する。

UNIX系OSでは、pwdコマンドで現在作業を行っているディレクトリを確認できる。 たとえば以下のようなディレクトリ構造があるとする。

home
└ jikken2e
  ├ example.txt
  └ 2021EXX
    └ example2.txt

ディレクトリjikken2e/で作業しているときにpwdを実行すると、

/home/jikken2e

と表示される。

ここから一つ下(右)の2021EXX/ディレクトリに移って作業したい場合、cd 2021EXXと入力するとディレクトリを移動できる。 いまpwd

/home/jikken2e/2021EXX

である。

では一つ上(左)のディレクトリに戻りたい場合は、cd ..と入力する。..は一つ上のディレクトリを意味する特別な文字である。 このときpwd

/home/jikken2e

に戻った。

現在作業しているディレクトリの下にどのようなディレクトリやファイルがあるかは、lsで確認できる。

2.4 アクセス権

UNIX系OSでは、以下の単位でファイルに対するアクセス権を管理できる。

  1. 所有者
  2. グループ
  3. その他

アクセス権にはRead(読み込み)、Write(書き込み)、eXecute(実行)の3つがあり、それぞれr, w, xと略される。所有者、グループ、その他それぞれに、どの権限を与えるかを指定することができる。

ディレクトリやファイルに現在どのようなアクセス権が設定されているかは、ls -alで確認できる。それぞれのディレクトリやファイルの先頭に、たとえば以下のような10文字の記述がある。

drwxr-xr-x

これは以下のように分解できる。

d
 rwx       所有者(u)のアクセス権
    r-x    グループ(g)のアクセス権
       r-x その他(o)のアクセス権

このように、それぞれがどの権限を持っているかを示している。-は権限がないことを示す。

アクセス権はchmodコマンドで変更できる。

3. 実験方法

3.0 Azureサーバへのログイン

(この項はレポートの実験方法や結果に記述する必要はない。)

Windowsの場合

MobaXtermをインストールする。

MobaXterm

MobaXtermを起動する。

Sessionをクリックする。

SSHをクリックし、以下の内容を入力する。

Remote host: (授業中に伝えます)

Specity username: (授業中に伝えます)

すると、黒い画面でパスワードを聞かれるため、以下のパスワードを入力する。

Password: (授業中に伝えます)

Tip

入力してもなにも表示されていないが、ちゃんと入力できている。Enterで確定

すると、このような画面で「パスワードを保存しますか?」と聞かれるのでYesを選択

以下のような画面が出れば成功!

ここでslを入力してEnterを押すとSLが表示される。

課題

SLの画面を先生に見せてOKをもらう。

Mac OSの場合

XQuartzをインストールする。

XQuartz

ターミナルを開いて以下の内容を入力する。

ssh –Y (授業中に伝えます)

すると、パスワードを聞かれるため、以下のパスワードを入力する。

Password: (授業中に伝えます)

ログイン後slを入力してEnterを押すとSLが表示される。

課題

SLの画面を先生に見せてOKをもらう。

3.1 UNIXの基本的なコマンド

表1 UNIXの基本的なコマンド

コマンド 意味
pwd 現在のディレクトリ(カレントディレクトリ)を表示
ls カレントディレクトリにあるファイルを表示
cd [dirname] カレントディレクトリを[dirname]に変更する。
指定のない場合はホームディレクトリに変更する。
mkdir [dirname] 現在のディレクトリに[dirname]で指定した
ディレクトリを作成する。
touch [file] [file]で指定したファイルの最終更新日を変更する。
指定ファイルが存在しない場合は、空ファイルを作成する。
cp [file1] [file2] [file1][file2]に上書きコピーする。
rm [file] [file]で指定したファイルを削除する。
Jobs 実行中のプログラムを表示する
ps 実行中のプログラムのプロセス番号を表示する
kill [プロセス番号] 指定した番号のプロセスやジョブを終了する
cat [file] [file]で指定したファイルの中身を表示する
tail [file] [file]で指定したファイルの最後の方を表示する
grep [pattern] [pattern]で指定した表現を検索
※他にも様々な使い方がある
man [command] [command]の使い方を表示する

各コマンドを次の順に実行して動作の意味を確認する。

  1. cdと入力してエンターキーを押し(この表記はくどいので、以後『cdを実行し』と表記)、ホームディレクトリに処理を移す。
  2. mkdir 2021EXX(XXは自分の学籍番号)を実行し、ホームディレクトリ内に自分の学籍番号のディレクトリを作る。
  3. cd 2021EXXを実行し、自分の学籍番号のディレクトリに処理を移す。
  4. pwdを実行し、カレントディレクトリ(現在作業中のディレクトリ)を表示する。
  5. lsを実行し、カレントディレクトリ内のファイルを表示する。現在ディレクトリは空である。
  6. touch test.txtを実行し、ホームディレクトリ内に空のテキストファイルtest.txtを作成する。
  7. lsを実行し、ディレクトリ内のファイルを表示する。先ほどはなかったtest.txtがあることを確認する。
  8. ls -alを実行し、カレントディレクトリ内のファイルを表示する。
    ※コマンドに続けてスペースを空けて入力した文字列-alを引数やオプションと呼ぶ。これをつけることで動作を変更することができる。
  9. mkdir test220506を実行し、学籍番号のディレクトリ内に新しいディレクトリを作る。
  10. cd test22まで入力してからTabキーを押す。
    ※この機能を補完と呼ぶ。打ち間違えを防ぐ意味でも大変便利。
  11. 補完によりcd test220506/まで入力が終わったらEnterを押して、ディレクトリを切り替える。
  12. lsを実行し、カレントディレクトリ内のファイルを表示する。
  13. cd ..を実行し、学籍番号のディレクトリに戻る。
  14. cp test.txt test220506を実行し、ファイルをコピーする。
  15. cd test220506を実行する。
  16. ls -alを実行し、test.txtがコピーされていることを確認する。
  17. cp test.txt test220506を実行し、ファイルをコピーする。
  18. ls -alを実行する。先ほどと同じコマンドを打ったはずなのに、結果が異なることを確認する。
  19. rm test220506コマンドを入力してこのファイルを削除する。
  20. ls -alを実行し、ファイルが消えていることを確認する。

課題

tree ..を実行し、結果を先生に見せる。この結果はレポートに書く必要はない。

Tip

cd ..と書くことで、1つ上の階層のディレクトリに処理を移せます。

3.2 バックグラウンドジョブ

  1. emacsを実行し、emacsを起動する。
  2. 起動したウィンドウは無視し、ターミナルに文字を入力しようと試みる。
    ※入力できないのが正常、確認したらemacsのウィンドウを閉じる。
  3. emacs &を実行し、emacsを起動する。
  4. ターミナルに好きな文字を入力できることを確かめる。
  5. jobsを実行し、起動したemacsのジョブ番号を調べる。
  6. psを実行し、起動したemacsのプロセス番号を調べる。
  7. kill [プロセス番号]を実行し、起動したemacsを強制終了する。

Tip

emacsのように短い時間で終了しないプログラムは、最後に&をつけることで
バックグラウンドで並列実行できます。

Tip

ジョブとプロセスは、実行中の処理に番号がついているという意味で似ていますが、少し異なる概念です。興味があれば調べてみてください。

3.3 アクセス権の設定

  1. cdを実行し、ホームディレクトリに処理を移す。
  2. cd 2021EXXを実行し、自分の学籍番号のディレクトリに処理を移す。
  3. mkdir jikken220506を実行し、ディレクトリを作成する。
  4. cd jikken220506を実行し、ディレクトリを切り替える。
  5. touch hello.txtを実行し、空のファイルhello.txtを作成する。
  6. ls -alを用いて、hello.txtのアクセス権を確認する。
    a.txtの左側に、-rw-r--r--のような文字列があり、これがアクセス権を表示している。
  7. emacs hello.txtを実行し、emacsを起動する。
  8. emacs上でhello.txtに「Hello.」と追加して保存して終了する。
  9. ターミナルでcat hello.txtを実行し、結果を確認する。
  10. chmod 000 hello.txtを実行し、すべてのアクセス権を削除する。
  11. ls -alを用いて、hello.txtのアクセス権を確認する。
    さきほどと異なり、全てハイフン-となっている。
  12. cat hello.txtを実行し、結果を確認する。
  13. chmod 400 hello.txtを実行し、所有者にReadだけを許可する。
  14. ls -alを用いて、hello.txtのアクセス権を確認する。
  15. cat hello.txtを実行し、結果を確認する。
  16. emacs hello.txtを実行し、hello.txtを編集しようと試みる。
    ※書き込みできないことを確認する。確認したら終了する。
  17. chmod 700 hello.txtを実行し、所有者にRead, Write, eXecuteを許可する。
  18. ls -alを用いて、hello.txtのアクセス権を確認する。
  19. emacs hello.txtを実行し、hello.txtの中身を「Hello World.」として保存する。
  20. cat hello.txtを実行し、結果を確認する。
  21. cd ..を実行し、学籍番号のディレクトリに処理を移す。
  22. ls -alを用いて、ディレクトリjikken220506/のアクセス権を確認する。
  23. chmod u=rw,g=r,o= jikken220506を実行する。
  24. ls -alコマンドを用いて、jikken220506/のアクセス権を確認する。
  25. cd jikken220506を実行し、結果を確認する。
    ※ディレクトリを移動できないことを確認する。
  26. chmod u+x jikken220506を実行する。
  27. cd jikken220506を実行する。
  28. pwdを実行し、カレントディレクトリを表示する。

課題

ls -alを実行し、結果を先生に見せる。この結果はレポートに書く必要はない。

参考文献

Linuxコマンド一覧(UNIX入門)