WWWサーバーでよく使用されている、UNIXというOSの使い方について説明します。TELNETでサーバーに接続できる(シェルが開放されている)人は参考にしてください。
UNIXは実は、AT&Tベル研の研究者が自分のマシンでゲームをやりたいがために趣味で開発したOSですが、その後、大学研究者などによって機能強化され、近年のダウンサイジングの流れにより、大型コンピュータに代わるOSとして注目を浴びました。
WWWサーバーはUNIXであることが多いです。エンジニアリングワークステーションというCADなどの技術系の分野に強いです。データーベースなどの業務系では、汎用機、UNIX、Windows NTの三つ巴状態でしょうか。
一言でUNIXと言っても、Solaris, System V, AIX, FreeBSD, Linuxなどなど、各社、各団体がさまざまなバージョンを提供しており、細かな仕様は異なっています。CPUも様々なものがあるので、基本的にバイナリ互換が保証されている例は少ないです。フリーソフトなどは幾つかの方言に対応したソースコードの形式で提供されることが多いです。
MS-DOSはVer2.?あたりでUNIXの良い所をいろいろ取り入れたので、両者は似ている点がかなりあります。Windows 95のMS-DOSプロンプトを使いこなせる人は、UNIXに馴れるのも、そう難しくはないでしょう。
Windowsでは「A:」などのドライブという概念がありますが、UNIXにはありません。増設ハードディスクやCD-ROMなども、「/なんとか/かんとか」という名前でアクセスできるようになっています。
MacintoshやWindows 95ではフォルダと呼んでいます。Windowsでも、MS-DOSやWindows 3.1までの時代はディレクトリと呼んでいました。ディレクトリの区切りは、Windowsではバックスラッシュ( \ )、Macintoshではコロン(:)、UNIXではスラッシュ( / )を使用します。
ディレクトリ階層構造の一番上のディレクトリを、ルートディレクトリと呼びます。先頭のスラッシュ( / )一文字がルートディレクトリを表わします。
TELNETやFTPログインした時のカレントディレクトリをホームディレクトリと言います。cdコマンドを引数無しで実行するとホームディレクトリに移動します。
現在自分のいるディレクトリをカレントディレクトリと呼びます。pwdコマンドを実行すると、カレントディレクトリがわかります。
ルートディレクトリを除くすべてのディレクトリは親ディレクトリを持ちます。親ディレクトリは .. で表わされます。 ../xxx.html とは、現在のカレントディレクトリの親ディレクトリに存在する xxx.html をさします。/home/users/../users/tohoho は、/home/users/tohoho と同じ意味になります。
あるディレクトリの中にあるファイルの位置を /home/foo/public_html/index.html のように表したものをパス名と呼びます。これは、homeディレクトリの中の、fooディレクトリの中の、public_htmlディレクトリの中の、index.html というファイルを示します。
パス名がスラッシュ( / )で始まる場合はルートディレクトリからの相対位置を示します。これを絶対パス名とか、フルパス名と呼びます。URLでの記述と若干異なる場合があります。例えば、私の場合、/home6/s-hasei/public_html/index.htm という絶対パス名が、URLでは、/~s-hasei/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.cgiindex.htmlの絶対パス名は/home/foo/public_html/index.htmlindex.htmlから見たaaa.cgiの相対パス名はcgi-bin/aaa.cgiaaa.cgiから見たxxx.gifの相対パス名は../image/xxx.gifaaa.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)か通常ファイル(-)を表す。 (2) 残りの9文字がパーミッションをあらわす。 (3) ファイル(ディレクトリ)のリンク数。意味は省略します。 (4) ファイル(ディレクトリ)の作成者(ユーザー名)。 (5) ファイル(ディレクトリ)の作成者が所属するグループ名。 (6) ファイル(ディレクトリ)のサイズ。 (7) ファイル(ディレクトリ)の作成日時。 (8) ファイル(ディレクトリ)の名前。
UNIXでは利用者は tohoho とか muhuhu などのユーザー名で識別されます。ユーザー情報は /etc/passwd というファイルに記録されています。
ユーザーはいくつかのグループに所属することができます。例えば、tohoho と muhuhu の2人が adm というグループに所属しているといった具合です。グループ情報は /etc/groups というファイルに記録されています。
「rwxr-xr-x」などの9文字はパーミッションを表します。詳細は「パーミッションを変更するには」を参照してください。
Windowsの[MS-DOSプロンプト]に相当するUNIX上のコマンドをシェルと呼びます。テキストモードでコマンドを入力して、結果もテキストで表示されます。
プログラム同士が情報を交換する際に参照できる特殊な変数を環境変数と呼びます。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 と指定しておきます。さもなくば、時間が9時間ずれてしまうことがあります。 環境変数の値を知るには、シェルの場合は printenv ( printenv が使用できない時は set ) コマンド、perlの場合は $ENV{'環境変数名'} を用います。
UNIX上の作業の基本を○○するにはという形式で説明します。
- コマンドの詳細を知るにはmanコマンドを使用してください。
- Xxxx ...は、Xxxxを複数指定可能であることを示します。
- ログアウトするには
- 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)
OS標準コマンドではないのでサポートされていない場合もあります。- nkf -j SrcFile > DstFile
nkf -e SrcFile > DstFile
nkf -s SrcFile > DstFile
UNIXと、Windows 95の「MS-DOSプロンプト」での違いをあげてみました。
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文字 ??? ファイル名の大文字・小文字 区別する 区別しない 実行可能ファイル パーミッションによる 拡張子による テキストファイルの改行文字 <LF> <CR><LF> 漢字コード EUCが多い シフトJIS ちなみに、Macintoshではディレクトリの区切りはコロン( : )なんだそうです。