Command File

last-modified: 2nd/June/'01;
since: 1st/June/2001;

前節の例では、 Perl スクリプトを、 perl コマンドの引数に指定する事で実行しました。しかし、スクリプトファイル自体をコマンドファイルにすることも可能です。具体的には、スクリプトファイル名だけで、シェルプロンプトから実行できます。

今理解したスクリプト well.pl をもう一度利用します。

well.pl>>

 1:
 2:
 3:
 4:
print "What is your name? ";
$name = <STDIN>;
chomp $name;
print "Dear $name. Wellcome! \n";

このファイルをコマンドファイルにするには、二つの事が必要です。一つは、 Perl のインタープリタ(perl)のパスの確認。もう一つは、実行可能属性を付ける事です。

perl のパス

ご利用の環境の perl がどこにあるのかを確認します。シェルプロンプトに which perl と記述してください。すると、次のような返事が返ってきます;

シェルプロンプト>>

 1:
 2:
 3:
% which perl
/usr/bin/perl
%

この例では、 /usr/bin/perl が、 perl のパス(インタープリタの所在地)です。先ほどのスクリプトファイルの冒頭を、次のように修正します。

well.pl>>

 1:
 2:
 3:
 4:
 5:
 6:
#!/usr/bin/perl
#上の行では perl のパスを記述してください。
print "What is your name? ";
$name = <STDIN>;
chomp $name;
print "Dear $name. Wellcome! \n";

1 行目に、「#!perlのパス」と記述することで、このファイルを Perl スクリプトとして直接実行できます。先ほど Perl のパスが /usr/local/bin/perl と返って来た方は、 #!/usr/local/bin/perl と記述してください。

一般に、 Perl では、 # から行末までがコメントとなり、インタープリタから無視されます。

環境によっては、perl のパスは /usr/local/bin/perl かも知れませんし、全く別のパスかもしれません。管理者が perl をインストールしたなら、 /usr/local/bin/perl に make するでしょうし、最初から入っていたなら、 /usr/bin/perl でしょう。全然別の可能性もあります。

which perl で分からない環境では、利用可能ではないかもしれません。また、一般ユーザに which を許可していないかもしれません。詳細はシステム管理者に問い合わせてください。

perl を許可した環境で、管理者が親切ならば、 /usr/bin/perl/usr/local/bin/perl の両方が利用できるようになっているかもしれません。これは、シンボリックリンク (symbolic link, symlink, soft link) で実現します。

実行可能属性

このファイルをコマンドファイル化するには、実行可能属性を付ける事が必要です。

ファイルの属性を設定するには、 chmod コマンドを利用します。シェルプロンプトから、次のように記述し、実行してください。

シェルプロンプト>>

% chmod +x well.pl

属性が変わったか確認しましょう。シェルから次のように記述し、実行してください。

シェルプロンプト>>

% ls -l well.pl

ls コマンドは、ディレクトリに関する情報を見るものです。 -l スイッチを付ける事で、ファイルの情報も一覧表示されます。

[ls -l の表示フォーマット]
応答例: -rwxr-xr-x1sugaitccmp42June 2 22:15well.pl
意味: ファイル種別許可属性リンク数所有者所属グループサイズ最終更新日時ファイル名

ファイル種別は、ディレクトリならば d、ファイルならば - になります。リンク数(リンクカウント)は、ハードリンクの個数によって変わります。 UNIX (Linux) のファイルシステムの話は少し込み入りますので、ここではしません。

許可属性は、 ls -l の応答の、最初の一文字を除いた "rwxrwxr-x" の部分です。最初の3文字が所有者の許可属性、次の3文字が所有者と同じグループに属しているユーザの許可属性、最後の3文字がそれ以外のユーザの許可属性です。

上の例では、 well.pl に関する情報の「許可属性」に x (executable) が追加されている事を確認してください。

[許可属性の意味]
rw-r--r--
所有者グループそれ以外

各々の3文字は、左から順に、「読み出し (r)」、「書き換え (w)」、「実行 (x)」を意味し、其々が不許可であれば、 - が表示されます。

[許可属性の記号の意味]
記号(数字)意味
r(4)読み出し (read)
w(2)書き換え (write)
x(1)実行 (execute)
-(0)不許可

許可属性に実行 (x) が追加されていれば、これで、シェルプロンプトから、次のように直接実行できます。

シェルプロンプト>>

% ./well.pl

ピリオド( . )は、カレントディレクトリ(現在開いているディレクトリ)を意味し、スラッシュ( / )はディレクトリ、ファイルの区切り文字です。従って、 ./ でカレントディレクトリ内を意味します。

ここで見たコマンドラインからのコマンドファイルの実行は、 UNIX 以外では利用できません。 perl well.pl のように、 perl の引数から実行してください。但し、許可属性の話は CGI を利用するためには必須の知識です。覚えておくと良いでしょう。

許可属性

自分だけに実行可能属性を与えたい場合は、シェルから次のように記述します。

シェルプロンプト>>

% chmod u+x well.pl

所有者は u、グループは g、その他は o で表します。全てを表す場合は、なにも書かないか、 a です。例えば、所有者とグループに書き換えを許可する場合は、次のように記述します。

シェルプロンプト>>

% chmod ug+w well.pl

また、 "rw--r--r--" と云う許可属性を与える場合は、次のように記述します。

シェルプロンプト>>

% chmod rw--r--r-- well.pl

または、

シェルプロンプト>>

% chmod 644 well.pl

許可属性の数字による8進数表示は、 r = 4, w = 2, x = 1 として、各カテゴリ毎に足し合わせたものを三つ並べます。具体的には、上の例の許可属性の場合は、次のように計算します。

[2進数と8進数]
2進数8進数
0000
0011
0102
0113
1004
1015
1106
1117

例えば、 "rwxr-xr-x" の場合は、8進数表示で幾つになるでしょう?答えは、 755 です。

数字が不思議に思われるかもしれません。これは三桁の2進数で表される許可ビット (permission bits) の8進数表現です。

例えば、 rw- = (110)2 = (100)2 + (010)2 + (000)2 = (4)8 + (2)8 + (2)8 = 6


次に、このコマンドファイルを WWW 上において、ブラウザで表示できるように工夫しましょう。つまり、これが CGI と呼ばれるものになります。

Copyright: SUGAI, Manabu. Since: 2001
FC2> モビット