UNIXv1の操作方法に関して
はじめに
本記事では、初期UNIXであるResearch Unix version1(以降UNIXv1)を操作するための基本的な知識、操作方法および注意点を記載する。
前回の記事
もくじ
UNIXv1のディレクトリ構造
図1ではUNIXv1におけるディレクトリ構造を図に起こしたものである。tmpディレクトリの中身は最初から存在するutmpとedコマンドで利用されるetm* を記載している。使用するプログラムによっては他のtmpファイルが生成されることもある。
プロセス
図2は自作したpsコマンドの出力結果である。ここではSLOTが16個までしかないと疑問を感じると思う。これは、UNIXv1が16個までのプロセスしか管理できないためそのような表記となっている。また、基本的にSLOT1はinitに、SLOT2~10は端末、システムコンソールに利用されているため、残り6個のSLOTがユーザーによって利用できるプロセスとなる。
シェルの操作方法
ログイン
rootユーザーログインをしたい場合はlogin:の際にrootと入力、ユーザーログインをしたい場合はlogin:の後にユーザー名を入力する。
ユーザーken
root
ログイン可能なデフォルトのユーザーは以下となる。
ken jack
ログアウト
Ctrl-d(EOF)を押すことでログアウトができる。
ディレクトリの移動
chdirコマンドを利用して移動する。
@ chdir ..
最後が/(スラッシュ)で終わるとエラーとなる。
@ chdir ../ Bad directory
ディレクトリ内部のリスト
lsコマンドを利用することで取得ができる。
@ ls as2 getty glob init msh passwd std0 suftab uids @
ls -alもサポートされている
@ ls -al total 34 104 sdrwr- 2 root 110 Jan 1 00:00:00 . 41 sdrwr- 7 root 110 Jan 1 00:00:00 .. 106 lxrwr- 1 bin 5778 Jan 1 00:00:00 as2 105 sxrwr- 1 bin 446 Jan 1 00:00:00 getty 107 sxrwr- 1 sys 2662 Jan 1 00:00:00 glob 108 sxrwr- 1 sys 1192 Jan 1 00:00:00 init 109 sxrwr- 1 sys 186 Jan 1 00:00:00 msh 110 s-rw-- 1 sys 299 Jan 1 00:00:00 passwd 111 s-rwr- 1 root 512 Jan 1 00:00:00 std0 112 s-rwr- 1 bin 2082 Jan 1 00:00:00 suftab 113 s-rwr- 1 sys 96 Jan 1 00:00:00 uids @
プロンプト
rootユーザーの場合#、userユーザーの場合@がプロンプトとして表示がされる。
ユーザーken
root
逐次処理
コマンドの逐次処理は;(セミコロン)を利用してできる。
@ ls; ls
同時実行
&を利用して同時実行を行わせることができる。
@ ls & ls
バックグラウンドプロセス
入力の最後を&にしてコマンドを実行した場合、バックグラウンドプロセスとして稼働させることができる。
@ ls &
注意してほしいのが、バックグラウンドプロセスを無限ループで稼働させた場合、バックグラウンドプロセスの数によってはシステムがハングアップするということである。
リダイレクト
現在におけるリダイレクトもある。ファイル名の先頭2文字を特殊扱いすることで動作することに注意。
標準出力
@ ls >file
標準入力
@ cat <file
文字列
"(ダブルクォーテーション)、'(シングルクォーテーション)によって表現ができる。
@ echo "hello"
文字の削除
文字の削除は#を使い入力を行う。画面上では#として入力されているように見えるが、システム内部では1文字削除されたものとして扱われている。もし、#を入力したい場合は\#とエスケープシーケンスを利用して入力する。
@ echo "hello#####unix" unix
行の削除
行単位で削除する場合は@を利用する。これが入力された場合、行頭から@が入力された箇所までの入力が無効化される。@を入力したい場合は\@とエスケープシーケンスを利用する。
@ echo "hello"@echo "unix" unix
割込み
無限ループプログラムなどを稼働させた場合に中止させたい場合、ASCII DELを入力することで中止することができる。現代のキーボードではBackSpaceやDelキーを入力することでASCII DELの送信ができる。実行している方法は割とトリッキーな方法であり、おもしろい。
正規表現
初期の単純な正規表現として?、 * が存在する。
?は一文字マッチとなる
@ ls ma?i.s maki.s @
*はワイルドカードとなる。
@ ls *.a bilib.a filib.a liba.a libb.a libc.a libf.a @
その他注意事項
扱えるプロセスの制限
プロセスは端末のプロセスを合わせて16個までしか実行可能状態にできない。もし、それ以上のプロセスを立ち上げようとした場合
@ ls Try again
という警告が出力され、実行することができない。端末、initのプロセスは1~10までのプロセスとして常に利用しているため、残りの6個が扱えるということになる。
動かしているカーネルイメージおよびバイナリに関して
今回動かしているUNIXv1のイメージは純粋なUNIXv1ではない。コマンドにはUNIXv2のバイナリが利用されており、それを利用するためにUNIXv1にはパッチが施されている。また、C言語を動作させるためにユーザー空間の拡張が行われている。
マニュアルをダウンロード
下記の場所に公開がされている。
UNIXv1
https://www.tuhs.org/Archive/Distributions/Research/Dennis_v1/UNIX_ProgrammersManual_Nov71.pdf
もし、OCR化された文書が欲しい場合、以下の場所に公開されている。各章に分かれているのはpdfuniteコマンド等で連結すれば便利である。
UNIXv2
実行される基本コマンドはUNIXv2のものであるため、コマンドなどはこちらを参照した方が良い。
https://www.tuhs.org/Archive/Distributions/Research/Dennis_v2/unix_2nd_edition_manual.pdf
最後に
次回は基本的なコマンドの利用について記事にする予定である。
参考
- 図の作成にはFlowchart Maker & Online Diagram Softwareを利用
- GitHub - dspinellis/unix-history-repo at Research-V2 : UNIXv2におけるソースコード
- Unix Manual, first edition : UNIXv1のユーザーマニュアル
次回
未公開