とほほのUNIX入門

とほほのWWW入門 > とほほのUNIX入門
1998年11月29日版
WWWサーバーでよく使用されている、UNIXというOSの使い方について説明します。TELNETでサーバーに接続できる(シェルが開放されている)人は参考にしてください。

概要

UNIXの歴史

UNIXは実は、AT&Tベル研の研究者が自分のマシンでゲームをやりたいがために趣味で開発したOSですが、その後、大学研究者などによって機能強化され、近年のダウンサイジングの流れにより、大型コンピュータに代わるOSとして注目を浴びました。

UNIXの使われかた

WWWサーバーはUNIXであることが多いです。エンジニアリングワークステーションというCADなどの技術系の分野に強いです。データーベースなどの業務系では、汎用機、UNIX、Windows NTの三つ巴状態でしょうか。

UNIXの方言

一言でUNIXと言っても、Solaris, System V, AIX, FreeBSD, Linuxなどなど、各社、各団体がさまざまなバージョンを提供しており、細かな仕様は異なっています。CPUも様々なものがあるので、基本的にバイナリ互換が保証されている例は少ないです。フリーソフトなどは幾つかの方言に対応したソースコードの形式で提供されることが多いです。

UNIXとMS-DOS

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.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)か通常ファイル(-)を表す。
(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上の作業の基本を○○するにはという形式で説明します。

ログアウトするには
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

UNIXと、Windows 95の「MS-DOSプロンプト」での違いをあげてみました。


UNIX Windows 95 
ドライブの概念なしあり
ディレクトリ区切り文字/\
ファイル一覧lsdir
ファイルコピーcpcopy
ファイル削除rmdel
ファイル移動mvmove
ファイル名前変更mvren
ディレクトリ作成mkdirmkdir
ディレクトリ削除rmdirrmdir
ディレクトリ移動cdcd
一般的なヘルプの見方man commandcommand /?
環境変数表示set/printenvset
ファイル名の長さ256文字???
ファイル名の大文字・小文字区別する区別しない
実行可能ファイルパーミッションによる拡張子による
テキストファイルの改行文字<LF><CR><LF>
漢字コードEUCが多いシフトJIS

ちなみに、Macintoshではディレクトリの区切りはコロン( : )なんだそうです。


Copyright (C) 1996-1999 とほほ
http://wakusei.cplaza.ne.jp/twn/wwwunix.htm