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などとほぼ同様であるが、cd
やls
などのコマンドを使ってファイルの操作を行う。
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では、以下の単位でファイルに対するアクセス権を管理できる。
- 所有者
- グループ
- その他
アクセス権には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を起動する。
Sessionをクリックする。
SSHをクリックし、以下の内容を入力する。
Remote host: (授業中に伝えます)
Specity username: (授業中に伝えます)
すると、黒い画面でパスワードを聞かれるため、以下のパスワードを入力する。
Password: (授業中に伝えます)
Tip
入力してもなにも表示されていないが、ちゃんと入力できている。Enterで確定
すると、このような画面で「パスワードを保存しますか?」と聞かれるのでYesを選択
以下のような画面が出れば成功!
ここでsl
を入力してEnterを押すとSLが表示される。
課題
SLの画面を先生に見せてOKをもらう。
Mac OSの場合
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] の使い方を表示する |
各コマンドを次の順に実行して動作の意味を確認する。
cd
と入力してエンターキーを押し(この表記はくどいので、以後『cd
を実行し』と表記)、ホームディレクトリに処理を移す。mkdir 2021EXX
(XXは自分の学籍番号)を実行し、ホームディレクトリ内に自分の学籍番号のディレクトリを作る。cd 2021EXX
を実行し、自分の学籍番号のディレクトリに処理を移す。pwd
を実行し、カレントディレクトリ(現在作業中のディレクトリ)を表示する。ls
を実行し、カレントディレクトリ内のファイルを表示する。現在ディレクトリは空である。touch test.txt
を実行し、ホームディレクトリ内に空のテキストファイルtest.txtを作成する。ls
を実行し、ディレクトリ内のファイルを表示する。先ほどはなかったtest.txt
があることを確認する。ls -al
を実行し、カレントディレクトリ内のファイルを表示する。
※コマンドに続けてスペースを空けて入力した文字列-al
を引数やオプションと呼ぶ。これをつけることで動作を変更することができる。mkdir test220506
を実行し、学籍番号のディレクトリ内に新しいディレクトリを作る。cd test22
まで入力してからTabキーを押す。
※この機能を補完と呼ぶ。打ち間違えを防ぐ意味でも大変便利。- 補完により
cd test220506/
まで入力が終わったらEnterを押して、ディレクトリを切り替える。 ls
を実行し、カレントディレクトリ内のファイルを表示する。cd ..
を実行し、学籍番号のディレクトリに戻る。cp test.txt test220506
を実行し、ファイルをコピーする。cd test220506
を実行する。ls -al
を実行し、test.txt
がコピーされていることを確認する。cp test.txt test220506
を実行し、ファイルをコピーする。ls -al
を実行する。先ほどと同じコマンドを打ったはずなのに、結果が異なることを確認する。rm test220506
コマンドを入力してこのファイルを削除する。ls -al
を実行し、ファイルが消えていることを確認する。
課題
tree ..
を実行し、結果を先生に見せる。この結果はレポートに書く必要はない。
Tip
cd ..
と書くことで、1つ上の階層のディレクトリに処理を移せます。
3.2 バックグラウンドジョブ
emacs
を実行し、emacsを起動する。- 起動したウィンドウは無視し、ターミナルに文字を入力しようと試みる。
※入力できないのが正常、確認したらemacsのウィンドウを閉じる。 emacs &
を実行し、emacsを起動する。- ターミナルに好きな文字を入力できることを確かめる。
jobs
を実行し、起動したemacsのジョブ番号を調べる。ps
を実行し、起動したemacsのプロセス番号を調べる。kill [プロセス番号]
を実行し、起動したemacsを強制終了する。
Tip
emacs
のように短い時間で終了しないプログラムは、最後に&
をつけることで
バックグラウンドで並列実行できます。
Tip
ジョブとプロセスは、実行中の処理に番号がついているという意味で似ていますが、少し異なる概念です。興味があれば調べてみてください。
3.3 アクセス権の設定
cd
を実行し、ホームディレクトリに処理を移す。cd 2021EXX
を実行し、自分の学籍番号のディレクトリに処理を移す。mkdir jikken220506
を実行し、ディレクトリを作成する。cd jikken220506
を実行し、ディレクトリを切り替える。touch hello.txt
を実行し、空のファイルhello.txt
を作成する。ls -al
を用いて、hello.txt
のアクセス権を確認する。a.txt
の左側に、-rw-r--r--
のような文字列があり、これがアクセス権を表示している。emacs hello.txt
を実行し、emacsを起動する。- emacs上で
hello.txt
に「Hello.」と追加して保存して終了する。 - ターミナルで
cat hello.txt
を実行し、結果を確認する。 chmod 000 hello.txt
を実行し、すべてのアクセス権を削除する。ls -al
を用いて、hello.txt
のアクセス権を確認する。
さきほどと異なり、全てハイフン-
となっている。cat hello.txt
を実行し、結果を確認する。chmod 400 hello.txt
を実行し、所有者にReadだけを許可する。ls -al
を用いて、hello.txt
のアクセス権を確認する。cat hello.txt
を実行し、結果を確認する。emacs hello.txt
を実行し、hello.txt
を編集しようと試みる。
※書き込みできないことを確認する。確認したら終了する。chmod 700 hello.txt
を実行し、所有者にRead, Write, eXecuteを許可する。ls -al
を用いて、hello.txt
のアクセス権を確認する。emacs hello.txt
を実行し、hello.txt
の中身を「Hello World.」として保存する。cat hello.txt
を実行し、結果を確認する。cd ..
を実行し、学籍番号のディレクトリに処理を移す。ls -al
を用いて、ディレクトリjikken220506/
のアクセス権を確認する。chmod u=rw,g=r,o= jikken220506
を実行する。ls -al
コマンドを用いて、jikken220506/
のアクセス権を確認する。cd jikken220506
を実行し、結果を確認する。
※ディレクトリを移動できないことを確認する。chmod u+x jikken220506
を実行する。cd jikken220506
を実行する。pwd
を実行し、カレントディレクトリを表示する。
課題
ls -al
を実行し、結果を先生に見せる。この結果はレポートに書く必要はない。