Unix は 1969年 AT&T ベル研究所のケン・トンプソン、デニス・リッチー、ブライアン・カーニハン達が開発した OS です。元々、ベル研究所で「Multics」というマルチタスク OS を開発していましたが、システムが巨大になりすぎ頓挫していました。しかし、Multics 上で遊びで開発していた「Space Travel」というゲームをやる目的で、研究所の片隅でほこりをかぶっていた DEC 社の PDP-7 というコンピュータ上に Multics の小型版ともいうべき OS を開発しました。これが Unix の始まりです。
Unix系OSは各社、各団体が独自の強化を行い、System V(AT&T), BSD(California大学Berkeley校), Solaris(Sun Microsystems), HP-UX(HP), AIX(IBM), XENIX(Microsoft), UnixWare(Novell), FreeBSD, NetBSD, OpenBSD など、様々な種類やバージョンのものが開発されてきました。Unix系OSの標準化団体(UNIX International, OSF, X/Open...)もいくつか発足・統廃合され、現在では The Open Group という団体が標準化を行っています。
「UNIX」という名称は、The Open Group が商標を管理しており、IEEE が定める Unix系OS の標準仕様である「POSIX」を拡張した「Single UNIX Specification」という標準仕様を満たすもののみが「UNIX」を名乗ることができます。ただし、この仕様を満たしているものは多くはありません。仕様を満たしていない OS は、「UNIX」ではなく、「Unix系OS」や、小文字を交えた「Unix」と表記されます。
ヘルシンキ大学(フィンランド)のリーナス・トーバルズが 1991年に開発した Unix系OSのひとつです。オープンソースとして公開され、PC でも動作することから、急速に広まりました。厳密に言うと Linux は OS のカーネルのみの名称です。これに GNU プロジェクトが開発した C言語コンパイラ(gcc)などの各種基本ソフトを加えたものを GNU/Linux と呼びます。また、GNU/Linux をベースにインストーラやパッケージ管理システムなどを追加した各種「Linuxディストリビューション」が存在します。
初期の頃は、TurboLinux, Miracle Linux, Debian, Red Hat Linux など様々なディストリビューションが乱立していました。現在では Debian系と Red Hat系が主流となっています。Debian系では、廉価版PC用OSとしても採用されていた Ubuntu がよく利用されています。Red Hat Linux は、商用に安定性を高めた Red Hat Enterprise Linux(RHEL)と、実験的に最新技術を取り込む Fedora に分化しました。また、RHEL の互換フリー版 CentOS もよく利用されています。遊び心の Ubuntu、堅実な商用版 RHEL、堅実なフリー版 CentOS、挑戦的な Fedora といったところでしょうか。
追記:CentOS は RHEL の無償版に近いものという位置づけでしたが、2020年12月に方針変更があり、RHEL よりも少し新しく、Fedora よりも少し安定しているバージョンの位置づけとなりました。
当初の Unix系OSは主にエンジニアリング系の業務に利用されていましたが、現在では Webサーバ、メールサーバ、ルータなどのネットワーク機器、TV やカーナビなど様々な用途に使用されています。Mac も、Mac OS X で BSD Unix をベースとして書き換えられました。Google の Android も Linux をベースとしています。Unix/Linux の対局とも言える Microsoft Windows も Unix系OS とまでは呼ばれませんが、Unix系OS の技術や思想をすこしだけ取り入れています。
Windows では「C:」「D:」などのドライブという概念がありますが、Unix/Linux にはありません。増設ハードディスクや CD-ROM などは、/dev/hda や /dev/cdrom などのパス名でアクセスされます。
Windows で言うところの「フォルダ」とほぼ同じ意味です。ディレクトリ(フォルダ)の区切りは、Windows では \Program Files\Microsoft Office\... などバックスラッシュ(\)を用いますが、Unix/Linux では /home/yamada/public_html/index.html などスラッシュ(/)を用います。
home yamada public_html index.html image aaa.gif bbb.gif cgi-bin xxx.cgi zzz.cgi
ディレクトリ階層構造の一番上のディレクトリを、ルートディレクトリと呼びます。先頭のスラッシュ(/)はルートディレクトリを表わします。
/
Unix/Linux では、各ユーザ毎に個別のディレクトリが割り当てられます。これをホームディレクトリと呼びます。Linux では /home/ユーザ名、Mac OS X では /Users/ユーザ名、古い Unix系OSでは /usr/ユーザ名 などがよく使用されますが、異なるディレクトリにすることもできます。
/home/yamada
現在自分のいるディレクトリをカレントディレクトリと呼びます。pwd コマンドを実行することで、今、自分がどのディレクトリに居るか、カレントディレクトリを知ることができます。例えば、public_html ディレクトリに居る状態で pwd コマンドを実行すると、下記の様に表示されます。
/home/yamada/public_html
ルートディレクトリを除くすべてのディレクトリは親ディレクトリを持ちます。親ディレクトリは .. で表わされます。 ../xxx.html とは、現在のカレントディレクトリの親ディレクトリに存在する xxx.html をさします。/home/users/../users/tohoho は、/home/users/tohoho と同じ意味になります。
あるディレクトリの中にあるファイルの位置を /home/foo/index.html のように表したものをパス名と呼びます。これは、homeディレクトリの中の、fooディレクトリの中の、index.html というファイルを示します。
パス名がスラッシュ( / )で始まる場合はルートディレクトリからの相対位置を示します。これを絶対パス名とか、フルパス名と呼びます。URLでの記述と若干異なる場合があります。例えば、私の場合、/home/tohoho/public_html/index.htm という絶対パス名が、URLでは、/index.htm という仮想パス名にマッピングされています。また、BIGLOBEのように、FTPでログインする時と、CGIスクリプトが動作する時のルートディレクトリが異なる場合があるので注意が必要です。
パス名がスラッシュ(/)以外で始まる場合はカレントディレクトリからの相対位置を示します。これを相対パス名と呼びます。例えば、カレントディレクトリが /home/users の時に、tohoho/index.html と記述すると、/home/users/tohoho/index.html を示す事になります。
これは UNIX 用語というより WWW 用語ですが、「http://サーバー名/パス名」の「/パス名」の部分を仮想パス名と呼びます。前述したように、絶対パス名とは異なります。
ここまでの話をまとめてみます。例えば、下記の図でディレクトリ とファイル の関係が以下のようになっているとします。
home foo public_html index.html image xxx.gif yyy.gif cgi-bin aaa.cgi bbb.cgi
index.htmlの絶対パス名は次のようになります。
/home/foo/public_html/index.html
index.htmlから見たaaa.cgiの相対パス名は次のようになります。
cgi-bin/aaa.cgi
aaa.cgiから見たxxx.gifの相対パス名は次のようになります。
../image/xxx.gif
aaa.cgiの仮想パス名は、/home/foo/public_html/ が、WEBサーバの設定によって /~foo/ とマッピングされている場合、次のようになります。
/~foo/cgi-bin/aaa.cgi
UNIXにTELNETでログインした状態で「ls -l」を実行したとき、またはUNIXにFTPでログインした状態で「dir」を実行したとき、例えば次のように表示されます。
(1)--(2)- (3) -(4)- (5) -(6)- ----(7)----- ---(8)--- -rw-r--r-- 1 tohoho adm 12345 Apr 13 21:38 index.htm -rwxr-xr-x 1 tohoho adm 5314 Apr 13 21:38 xx.cgi drwxr-xr-x 1 tohoho adm 1024 Apr 13 21:38 tmp
それぞれの欄は次の意味をもちます。
(1) 最初の1文字がディレクトリ(d)か通常ファイル(-)を表す。UNIXでは利用者は tohoho とか muhuhu などのユーザー名で識別されます。ユーザー情報は /etc/passwd というファイルに記録されています。
ユーザーはいくつかのグループに所属することができます。例えば、tohoho と muhuhu の2人が adm というグループに所属しているといった具合です。グループ情報は /etc/groups というファイルに記録されています。
「rwxr-xr-x」などの9文字はパーミッションを表します。詳細は「パーミッションを変更するには」を参照してください。
Windows のコマンドプロンプト(旧称:MS-DOSプロンプト)に相当する UNIX 上のコマンドをシェルと呼びます。テキストモードでコマンドを入力して、結果もテキストで表示されます。詳しくは「とほほのBash入門」を参照してください。
プログラム同士が情報を交換する際に参照できる特殊な変数を環境変数と呼びます。Windows の AUTOEXEC.BAT で指定していた PATH のようなものです。CGI でも、多くの情報を環境変数を通じて、WWWサーバーと CGIスクリプトの間で交換しています。主な環境変数を以下に示します。
環境変数 | 意味 |
---|---|
PATH | コマンドのサーチパス。例えば、PATH=/bin:/usr/bin の時、ls コマンドを実行すると、シェルは /bin/ls /usr/bin/ls を順に探していき、最初に見つかったコマンドを実行します。これを「パスを張る」と呼びます。逆に言うと、PATHに設定されていないコマンドは /bin/ls と、絶対パス名で指定する必要があります。 |
TZ | タイムゾーン。その地域の時間帯を指定します。例えば、日本の場合は TZ=JST-9 (最近は TZ=Asia/Tokyo)と指定しておきます。さもなくば、システムによっては時間が9時間ずれてしまうことがあります。 |
環境変数の値を知るには、シェルの場合は printenv ( printenv が使用できない時は set ) コマンド、perlの場合は $ENV{'環境変数名'} を用います。
UNIX上の作業の基本を○○するにはという形式で説明します。
ログアウトするには
exit
コマンドの使用方法を知るには
man Command
コマンドの絶対パス名を知るには
which Command
コマンドを実行するには
Command
ファイルやディレクトリの一覧を見るには
ls -l ls -l file ...
カレントディレクトリ名を知るには
pwd
ホームディレクトリに移るには
cd
指定ディレクトリに移るには
cd dirName
ルートディレクトリに移るには
cd /
ひとつ上のディレクトリに移るには
cd ..
ファイルの中身を表示するには
cat fileName ...
ファイルの中身を始め10行だけ表示するには
head -10 fileName ...
ファイルの中身を最後10行だけ表示するには
tail -10 fileName ...
ファイルを作成するには
touch fileName
ディレクトリを作成するには
mkdir dirName ...
ファイルをコピーするには
cp FromFile ToFile cp FromFile ... ToDir
ディレクトリをコピーするには
cp -r FromDir ... ToDir
ファイルを移動させるには
mv FromFile ToFile mv FromFile ... ToDir
ディレクトリを移動させるには
mv FromDir ... ToDir
ファイルを削除するには
rm fileName ...
中身の無いディレクトリを削除するには
rmdir dirName ...
ディレクトリを中身ごと一括して削除するには
rm -r dirName ...
ファイル名やディレクトリ名を変更するには
mv OldName NewName
パーミッションを変更するには
chmod mode file
オーナーユーザーを変更するには
chown user file
オーナーグループを変更するには
chgrp group file
環境変数の一覧を表示するには(csh系の場合)
env printenv
環境変数の一覧を表示するには(bshの場合)
set
環境変数に値を設定するには(csh系の場合)
setenv ENV VALUE
環境変数に値を設定するには(bshの場合)
ENV=VALUE; export ENV
コマンドの出力をファイルに上書き保存するには
Command > FileName
コマンドの出力をファイルに追加保存するには
Command >> FileName
コマンドの出力を別コマンドに食わせるには
Command1 | Command2 ...
コマンドの出力を少しずつ表示するには
Command | more Command | less
テキストファイルから文字列を検索するには
grep KeyWord file ...
テキストファイルの内容をソートするには
sort file
ファイル同士の内容を比較するには(テキストファイル)
diff file1 file2
ファイル同士の内容を比較するには(バイナリファイル)
cmp file1 file2
複数のファイルをアーカイブするには
tar cvf file.tar FilesOrDirectorys...
アーカイブの中身(ファイル一覧)を見るには
tar tvf file.tar
アーカイブしたファイルを元に戻すには
tar xvf file.tar
ファイル(単数)を圧縮するには(.Zファイルができる)
compress file
圧縮したファイルを元に戻すには
uncompress file.Z
漢字コードを変換するには(-e=EUC,-s=SJIS:-j=JIS)
nkf -j SrcFile > DstFile nkf -e SrcFile > DstFile nkf -s SrcFile > DstFile
UNIX | Windows 95 | |
---|---|---|
ドライブの概念 | なし | あり |
ディレクトリ区切り文字 | / | \ |
ファイル一覧 | ls | dir |
ファイルコピー | cp | copy |
ファイル削除 | rm | del |
ファイル移動 | mv | move |
ファイル名前変更 | mv | ren |
ディレクトリ作成 | mkdir | mkdir |
ディレクトリ削除 | rmdir | rmdir |
ディレクトリ移動 | cd | cd |
一般的なヘルプの見方 | man command | command /? |
環境変数表示 | set/printenv | set |
ファイル名の長さ | 256文字 | 255文字 |
ファイル名の大文字・小文字 | 区別する | 区別しない |
実行可能ファイル | パーミッションによる | 拡張子による |
テキストファイルの改行文字 | <LF> | <CR><LF> |
漢字コード | UTF-8(昔はEUC) | シフトJIS/UTF-8 |