UNIXv1の操作方法に関して

はじめに

本記事では、初期UNIXであるResearch Unix version1(以降UNIXv1)を操作するための基本的な知識、操作方法および注意点を記載する。

前回の記事

no000.hateblo.jp

もくじ

UNIXv1のディレクトリ構造

図1ではUNIXv1におけるディレクトリ構造を図に起こしたものである。tmpディレクトリの中身は最初から存在するutmpとedコマンドで利用されるetm* を記載している。使用するプログラムによっては他のtmpファイルが生成されることもある。

図1 Unixv1のディレクトリ構造

プロセス

図2は自作したpsコマンドの出力結果である。ここではSLOTが16個までしかないと疑問を感じると思う。これは、UNIXv1が16個までのプロセスしか管理できないためそのような表記となっている。また、基本的にSLOT1はinitに、SLOT2~10は端末、システムコンソールに利用されているため、残り6個のSLOTがユーザーによって利用できるプロセスとなる。

図2 psコマンドの出力結果

シェルの操作方法

ログイン

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コマンド等で連結すれば便利である。

Unix Manual, first edition

UNIXv2

実行される基本コマンドはUNIXv2のものであるため、コマンドなどはこちらを参照した方が良い。

https://www.tuhs.org/Archive/Distributions/Research/Dennis_v2/unix_2nd_edition_manual.pdf

最後に

次回は基本的なコマンドの利用について記事にする予定である。

参考

次回

未公開