はじめての自宅サーバ構築 - Fedora/CentOS -
Last Update 2018/01/16
[ 更新履歴 ] [ サイト マップ ] [ 質問掲示板 ] [ 雑談掲示板 ] [ リンク ]
トップ >> 当サイト情報 >> スレッド

このページは表示専用です。新規投稿・レスや最新情報はこちらです。

このスレッドはクローズされています。記事の閲覧のみとなります。

 Perlのシンボリックリンクのことです
日時: 2012/11/23 12:43
名前: みかん

1.不明点・障害内容:
2.ログの有無   :
  (有:その内容) :
3.Distribution  :Centos5.9
      Version :
4.Service Name  :
      Version :
5.ネットワーク構成:
こんにちは。

こちらを参考に自サバに取り組んでいます。

質問は書きのことです、よろしくどうぞ。

CGIを実行するPerlのシンボリックリンクを貼る所まで来たのですが
# which perl
/usr/bin/perl

# ln -s /usr/bin/perl /usr/local/bin/perl

# which perl
/usr/bin/perl
になっており/usr/local/bin/perlに変更できません
どこが悪いのでしょうか?

apacheとPHPのインストールおよびapacheの設定もやっております。

■ コンテンツ関連情報

 Re: Perlのシンボリックリンクのことです ( No.1 )
日時: 2012/11/23 12:46
名前: みかん

追記です。
下記のようなエラーがでます。

[root@mikan /]# ln -s /usr/bin/perl /usr/local/bin/perl
ln: `/usr/bin/perl' へのシンボリックリンク `/usr/local/bin/perl' を作成します: そのようなファイルやディレクトリはありません
[root@mikan /]#
 Re: Perlのシンボリックリンクのことです ( No.2 )
日時: 2012/11/23 14:18
名前: しずくちゃん

># which perl

whichではなくwhereisで確認してください
# whereis perl

または
# ls -al /usr/local/bin/perl
とやって
..... /usr/local/bin/perl -> /usr/bin/perl
のような表示が出ればリンクになっています。
 Re: Perlのシンボリックリンクのことです ( No.3 )
日時: 2012/11/23 14:32
名前: みかん

しずくちゃん、さん、ありがとうございます

やってみました。
[root@mikan /]# whereis perl
perl: /usr/bin/perl /usr/share/man/man1/perl.1.gz

[root@mikan /]# ls -al /usr/local/bin/perl
ls: /usr/local/bin/perl: そのようなファイルやディレクトリはありません

と、なってしまうのです。


 Re: Perlのシンボリックリンクのことです ( No.4 )
日時: 2012/11/23 15:11
名前: しずくちゃん

なんでなんでしょうかね・・

まずrootで作業していることを確認(と言っても # になってるからrootなんでしょうが…)

# cd /usr/local/bin
で /usr/local/bin へ移動。(移動できなければディレクトリが無いのかも)
# ls -al
とやって perlへのリンクの有無を確認してください。
無ければ、
# ln -s /usr/bin/perl perl
とやってリンクを作ってみます。エラーが出て作れないならパーミッションかなんかの問題かも。
エラーが出なければ、
# ls -al
とやって perl のリンクが出来ていればOKです。
 Re: Perlのシンボリックリンクのことです ( No.5 )
日時: 2012/11/23 15:34
名前: みかん

お世話になります。

/usr/localの中にbinがないようです。


# ln -s /usr/bin/perl perlとやりましたら下記のようになりました。
lrwxrwxrwx 1 root root 13 11月 23 15:18 perl -> /usr/bin/perl


binがなければmkdirコマンドでbinを作成せればよいですか?
 Re: Perlのシンボリックリンクのことです ( No.6 )
日時: 2012/11/23 15:46
名前: みかん

みかんさん、できました。

localの中にbinを作成したらokです。


]# whereis perl
/usr/local/bin/perl


新たな問題点、恐縮です。

test.cgiにアクセスしますと「Internal Server Error」になってしまうのです。
下記で実行できるように設定してあります。#をとる
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

test.cgiの派ミッションは750です、755でも同じエラーです。

 Re: Perlのシンボリックリンクのことです ( No.7 )
日時: 2012/11/23 15:55
名前: しずくちゃん

とりあえず /usr/local/bin を作って、その中にリンクを作ればいいと思いますが、影響等よくわからないです。
普通はOSのインストール当初からあるような気がします。(私は自分で作った覚えがないから)
ちなみに私のPCだと、/usr/local/bin は root:root所有の755になっています
 Re: Perlのシンボリックリンクのことです ( No.8 )
日時: 2012/11/23 16:23
名前: みかん

しずくちゃん,さん、ありがとうございます。

下記のログから何がわかりますか?
/var/www/html/test.cgiにもtest.cgiを作成してしまいました。
設定は/var/www/cgi-binのほうです。


/etc/httpd/logs/error_logです。

[Fri Nov 23 15:57:51 2012] [error] [client 192.168.72.2] Directory index forbidden by Options directive: /var/www/html/
[Fri Nov 23 15:58:02 2012] [error] [client 192.168.72.2] (8)Exec format error: exec of '/var/www/cgi-bin/test.cgi' failed
[Fri Nov 23 15:58:02 2012] [error] [client 192.168.72.2] Premature end of script headers: test.cgi
[Fri Nov 23 16:00:55 2012] [error] [client 192.168.72.2] script not found or unable to stat: /var/www/html/test.cgi
[Fri Nov 23 16:00:59 2012] [error] [client 192.168.72.2] script not found or unable to stat: /var/www/html/test.cgi
[Fri Nov 23 16:09:25 2012] [error] [client 192.168.72.2] script not found or unable to stat: /var/www/html/test.cgi
[Fri Nov 23 16:09:39 2012] [error] [client 192.168.72.2] (8)Exec format error: exec of '/var/www/cgi-bin/test.cgi' failed
[Fri Nov 23 16:09:39 2012] [error] [client 192.168.72.2] Premature end of script headers: test.cgi
[Fri Nov 23 16:14:20 2012] [error] [client 192.168.72.2] Directory index forbidden by Options directive: /var/www/html/
[Fri Nov 23 16:14:25 2012] [error] [client 192.168.72.2] script not found or unable to stat: /var/www/html/test.cgi
[Fri Nov 23 16:15:51 2012] [error] [client 192.168.72.2] (8)Exec format error: exec of '/var/www/cgi-bin/test.cgi' failed
[Fri Nov 23 16:15:51 2012] [error] [client 192.168.72.2] Premature end of script headers: test.cgi

 Re: Perlのシンボリックリンクのことです ( No.9 )

** 返信者によって削除されました

 Re: Perlのシンボリックリンクのことです ( No.10 )
日時: 2012/11/24 01:04
名前: しずくちゃん

>下記のログから何がわかりますか?
>/var/www/html/test.cgiにもtest.cgiを作成してしまいました。
>設定は/var/www/cgi-binのほうです。


/var/www/cgi-bin/test.cgi にアクセスしたいのであれば、

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
と設定しているわけですから
(ScriptAliasの意味: http://httpd.apache.org/docs/2.2/ja/mod/mod_alias.html#scriptalias )

http://hoge.com/cgi-bin/test.cgi
とアクセスしないとダメですよ。
test.cgiのパーミッションは755か705にしてください。(750では動かないと思います)

Premature end of script headers の問題はtest.cgiの一行目の改行コードの問題かも。
"Premature end of script headers"でネット検索するといろいろ出ています。
(夕飯なのでしばらく失礼します)
 Re: Perlのシンボリックリンクのことです ( No.11 )
日時: 2012/11/23 17:02
名前: stranger
参照: http://ja.528p.com/

selinuxが働いていたら対処する

test.cgiの最初の宣言は
#!/usr/bin/perl
または
#!/usr/local/bin/perl
になっていますか

test.cgiは
windowsで書かれたものですか
CenOSで書かれたものですか

windowsで書かれたものならば
ftpでascii転送して改行コードを変換してください

改行コードの確認の方法
CentOSの端末で
cat -v /var/www/cgi-bin/test.cgi
行末に ^M が表示されたらwindowsの改行のままです
 Re: Perlのシンボリックリンクのことです ( No.12 )
日時: 2012/11/23 17:23
名前: みかん

strangerさ、、お世話になります。

>selinuxが働いていたら対処する
停止してます
>#!/usr/local/bin/perl
宣言は上記です

>test.cgiは
こちらのサイトをwindowsでコピペしました。


windowsの改行のままなのですね。
コピペの後、CR+LFのコードで保存しftpでascii転送でしょうか?
#!/usr/bin/perl
#!/usr/local/bin/perl
print "Content-type: text/html?n?n";
print "<html>?n";
print "<head>?n";
print "<META http-equiv=?"Content-Type?" content=?"text/html; charset=EUC-JP?">";
print "<title>M-%M-FM-%M-9M-%M-HM-%M-ZM-!M-<M-%M-8</title>?n";
print "</head>?n";
print "<body>?n";
print "CGIM-IM-=M-<M-(M-%M-FM-%M-9M-%M-H?n";
print "</body>?n";
print "</html>?n";
 Re: Perlのシンボリックリンクのことです ( No.13 )
日時: 2012/11/23 17:55
名前: みかん

サイト様のtest.cgiをwindowsのメモ帳にコピペしてtest.cgiで保存してftpでascii転送しました。
が、やっぱりMになっていて改行コードが変換されていませんね。
難しい11

[root@mikan /]# cat -v /var/www/cgi-bin/test.cgi
#!/usr/local/bin/perl^M
print "Content-type: text/html?n?n";^M
print "<html>?n";^M
print "<head>?n";^M
print "<META http-equiv=?"Content-Type?" content=?"text/html; charset=EUC-JP?">";^M
print "<title>M-^CeM-^CXM-^CgM-^CyM-^A[M-^CW</title>?n";^M
print "</head>?n";^M
print "<body>?n";^M
print "CGIM-^U?M-^NM-&M-^CeM-^CXM-^Cg?n";^M
print "</body>?n";^M
print "</html>?n";^M
^M
 Re: Perlのシンボリックリンクのことです ( No.14 )
日時: 2012/11/23 18:28
名前: みかん

Mが変わりました、改行コードが変換変換されたようで・・・
/etc/vsftpd/vsftpd.confのファイルはデフォルトでアスキーモードが無効になっているようです。
で、#を外してからftp転送しました。
#ascii_upload_enable=YES→   ascii_upload_enable=YES

#ascii_download_enable=YES→  ascii_download_enable=YES

[root@mikan /]# cat -v /var/www/cgi-bin/test.cgi
#!/usr/local/bin/perl
print "Content-type: text/html?n?n";
print "<html>?n";
print "<head>?n";
print "<META http-equiv=?"Content-Type?" content=?"text/html; charset=EUC-JP?">";
print "<title>M-^CeM-^CXM-^CgM-^CyM-^A[M-^CW</title>?n";
print "</head>?n";
print "<body>?n";
print "CGIM-^U?M-^NM-&M-^CeM-^CXM-^Cg?n";
print "</body>?n";
print "</html>?n";

でもInternal Server Errorのままです、どこの設定かなぁ?!
 Re: Perlのシンボリックリンクのことです ( No.15 )
日時: 2012/11/23 18:29
名前: stranger
参照: http://ja.528p.com/

nkfコマンドでLF(linux)形式に変えてみる
nkfがない場合は yumで先に入れる
--overwriteはファイル名を変えないで上書きするオプション

nkf -Lu --overwrite test.cgi
 Re: Perlのシンボリックリンクのことです ( No.16 )
日時: 2012/11/23 19:07
名前: みかん

お世話になります。

さっそくやってみました。
nkf -Lu --overwrite /var/www/cgi-bin/test.cgi

しかし、ここなんですけどhttp://karenn.blogdns.com/cgi-bin/test.cgi

Internal Server Errorとでます。



 Re: Perlのシンボリックリンクのことです ( No.17 )
日時: 2012/11/23 21:58
名前: stranger
参照: http://ja.528p.com/

apacheのerror_logに変化がありませんか
 Re: Perlのシンボリックリンクのことです ( No.18 )
日時: 2012/11/23 22:05
名前: 管理者

まずは、strangerさんが書かれた通り「error_log」を確認してみて下さい。

次に、以下を実行して正しく表示できますか?

# cd /var/www/cgi-bin/
# perl test.cgi


この他、パーミッションの件ですがディレクトリも参照権・実行権はありますよね?
 Re: Perlのシンボリックリンクのことです ( No.19 )
日時: 2012/11/23 22:29
名前: stranger
参照: http://ja.528p.com/

#!/usr/local/bin/perl
print "Content-type: text/html?n?n";
print "<html>?n";
print "<head>?n";
print "<META http-equiv=?"Content-Type?" content=?"text/html; charset=EUC-JP?">";
print "<title>testpage</title>?n";
print "</head>?n";
print "<body>?n";
print "CGI-TEST?n";
print "</body>?n";
print "</html>?n";

のように文字化けしている部分を適当な英文字表記にして保存し、asciiアップロード
パーミッションを変えて test.cgiにアクセスし
error_logを確かめる
 Re: Perlのシンボリックリンクのことです ( No.20 )
日時: 2012/11/24 01:16
名前: しずくちゃん

やはりerror_logに何かないか見た方がいいです。
Internal Server Errorだけじゃ可能性がありすぎて分かりません。
 Re: Perlのシンボリックリンクのことです ( No.21 )
日時: 2012/11/24 04:27
名前: みかん

stranger さんへ

apacheのerror_logです、とちゅうからですが・・
8)Exec format error: exec of ってなんでしょう?

[Fri Nov 23 19:11:53 2012] [error] [client 192.168.72.2] mod_mime_magic: can't read `/var/www/cgi-bin/test.cgi', referer: http://kajuhome.com/cgi-bin/patio/patio.cgi?mode=view&no=2050
[Fri Nov 23 19:11:53 2012] [error] [client 192.168.72.2] (13)Permission denied: exec of '/var/www/cgi-bin/test.cgi' failed, referer: http://kajuhome.com/cgi-bin/patio/patio.cgi?mode=view&no=2050
[Fri Nov 23 19:11:53 2012] [error] [client 192.168.72.2] Premature end of script headers: test.cgi, referer: http://kajuhome.com/cgi-bin/patio/patio.cgi?mode=view&no=2050
[Fri Nov 23 19:27:52 2012] [error] [client 192.168.72.2] (8)Exec format error: exec of '/var/www/cgi-bin/test.cgi' failed
[Fri Nov 23 19:27:52 2012] [error] [client 192.168.72.2] Premature end of script headers: test.cgi
[Fri Nov 23 19:30:14 2012] [error] [client 192.168.72.2] (8)Exec format error: exec of '/var/www/cgi-bin/test.cgi' failed, referer: http://kajuhome.com/cgi-bin/patio/patio.cgi?mode=view&no=2050&p=1
[Fri Nov 23 19:30:14 2012] [error] [client 192.168.72.2] Premature end of script headers: test.cgi, referer: http://kajuhome.com/cgi-bin/patio/patio.cgi?mode=view&no=2050&p=1
[Fri Nov 23 19:31:49 2012] [error] [client xx.xx.xx.xx] (8)Exec format error: exec of '/var/www/cgi-bin/test.cgi' failed
[Fri Nov 23 19:31:49 2012] [error] [client xx.xx.xx.xx] Premature end of script headers: test.cgi
[Fri Nov 23 19:42:19 2012] [notice] caught SIGTERM, shutting down
[Sat Nov 24 03:28:53 2012] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sat Nov 24 03:28:53 2012] [notice] Digest: generating secret for digest authentication ...
[Sat Nov 24 03:28:53 2012] [notice] Digest: done
[Sat Nov 24 03:28:53 2012] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
[Sat Nov 24 03:30:39 2012] [error] [client xx.xx.xx.xx] File does not exist: /var/www/html/robots.txt
[Sat Nov 24 03:30:40 2012] [error] [client xx.xx.xx.xx] File does not exist: /var/www/html/xoops
[Sat Nov 24 03:41:21 2012] [error] [client xx.xx.xx.xx] (8)Exec format error: exec of '/var/www/cgi-bin/test.cgi' failed
[Sat Nov 24 03:41:21 2012] [error] [client xx.xx.xx.xx] Premature end of script headers: test.cgi
~

apacheの設定は下記です
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

<Directory "/var/www/cgi-bin/">
AllowOverride All
Options ExecCGI
Order allow,deny
Allow from all

AddHandler cgi-script .cgi .pl

</Directory>
 Re: Perlのシンボリックリンクのことです ( No.22 )
日時: 2012/11/24 04:34
名前: みかん

管理者様へ

# cd /var/www/cgi-bin/
# perl test.cgi

と、やっても何もでません、やはり設定がおかしい??

>ディレクトリも参照権・実行権はありますよね?
cgi-binでしょうか? すみません分からなくて、パーミッションは755です。


drwxr-xr-x 2 root root 4096 11月 23 19:26 cgi-bin
 Re: Perlのシンボリックリンクのことです ( No.23 )
日時: 2012/11/24 07:53
名前: 管理者

>> ディレクトリも参照権・実行権はありますよね?
> cgi-binでしょうか? すみません分からなくて、パーミッションは755です。


失礼いたしました。以下の実行結果でパーミションは755ですか?

# ls -ld /var/www/cgi-bin
 Re: Perlのシンボリックリンクのことです ( No.24 )
日時: 2012/11/24 08:22
名前: stranger
参照: http://ja.528p.com/

perlの実体が /usr/bin/perlなら

test.cgiの先頭行を
#!/usr/bin/perl --
にしてみる
-- をつけることで改行コードの問題を回避
それでうまくいくなら
perlのパスの問題か改行コードの問題

どうしてもだめなら
linuxマシンでtest.cgiを記述してみる

httpd.confの設定は デフォルトの

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

で動くはず
ScriptAliasでは全てのファイルをスクリプトとして実行します

ファイルが混在するなら

Alias /cgi-bin/ "/var/www/cgi-bin/"

<Directory "/var/www/cgi-bin">
AllowOverride All
Options ExecCGI
AddHandler cgi-script .cgi .pl
Order allow,deny
Allow from all
</Directory>

Aliasの場合は
Options ExecCGIとAddHandlerの設定でファイルを指定
 Re: Perlのシンボリックリンクのことです ( No.25 )
日時: 2012/11/24 12:00
名前: しずくちゃん

># cd /var/www/cgi-bin/
># perl test.cgi
>
>と、やっても何もでません、やはり設定がおかしい??


何もでないのは不思議ですよね。予想したように出ない場合でも、
普通、エラーメッセージ的なものは出ますよね。
(プロンプトのシャープ(#)も貼り付けたかキー入力してしまったとかなら何も出ないけど・・・
ちなみに、最初の行のシャープは実際は半角のシャープです、入力部分じゃないので関係ないですけど…)

追記:
# cd /var/www/cgi-bin/
# /usr/bin/perl test.cgi
でも何も出ないですか?

だらだら質問してすみませんが、/var/www/cgi-bin/test.cgiの最初の行を
#!/usr/local/bin/perl
から
#!/usr/bin/perl
に変更しても同じエラーがでますか?

>(8)Exec format error: exec of ...
というエラーを再現しようと自分のサーバーでいろいろやっていますが出てきません。
改行コードをCR+LFにしただけでは違うエラーになります。なんなのかしら(w
これからお出かけなので私のレスは遅れます。。
 Re: Perlのシンボリックリンクのことです ( No.26 )
日時: 2012/11/24 12:43
名前: みかん

管理者さま

>以下の実行結果でパーミションは755ですか?
下記なので755です。

drwxr-xr-x 2 root root 4096 11月 24 06:19 /var/www/cgi-bin
 Re: Perlのシンボリックリンクのことです ( No.27 )
日時: 2012/11/24 13:04
名前: みかん

stranger さんへ

>perlの実体が /usr/bin/perlなら
ここの管理者さまの「試験用cgiスクリプト」を使わせていただいていますので
#!/usr/local/bin/perl -- でやってみましたがやはり「Internal Server Error」でした。

管理者さまの「試験用cgiスクリプト」
vi /var/www/html/test.cgi
#!/usr/local/bin/perl
print "Content-type: text/html?n?n";
     ・
     ・
 

試験用cgiスクリプト」をTeraPadにコーピーし文字改行コードをLF
文字コードをEUCでやっFFFTPにてアスキューモードにて転送も同じエラーになります。
バイナリモードでも同じエラーです。

>どうしてもだめならlinuxマシンでtest.cgiを記述してみる
linuxのコンソールにて直接に試験用cgiスクリプト書いて動作確認をするということですか?
すみません、よく分かりませんでした。
 Re: Perlのシンボリックリンクのことです ( No.28 )
日時: 2012/11/24 13:16
名前: みかん

しずくちゃん 、さんへ

># cd /var/www/cgi-bin/
># /usr/bin/perl test.cgi
>でも何も出ないですか?

はい、まったく何もでないのです。

[root@mikan cgi-bin]# /usr/bin/perl test.cgi
何も出ませんでした

>#!/usr/bin/perl
>に変更しても同じエラーがでますか?


下記でやってみましたがエラーになりました。
#!/usr/bin/perl -- 
 Re: Perlのシンボリックリンクのことです ( No.29 )
日時: 2012/11/24 13:49
名前: stranger
参照: http://ja.528p.com/

/usr/bin/perl test.cgi

先頭行の #!/usr/local/bin/perlを無視し
(改行コードも影響しない)
perlのprintコマンドを実行するだけ


Content-type: text/html

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP"><title>テストページ</title>
</head>
<body>
CGI表示テスト
</body>
</html>

のように表示されるはず

なにも表示されないなら、test.cgi自体がおかしいと思う
 Re: Perlのシンボリックリンクのことです ( No.30 )
日時: 2012/11/24 14:50
名前: みかん

stranger さんへ

>perlのprintコマンドを実行するだけ
やり方がわからないので今調べいますので、すみません。

それから、
今回のエラーと関係ないかもわからないでですがちょと気になったので
教えてください(検索したもよく分かりませんでした)

/usr/local/bin/で下記のように中身が出ました。

[root@mikan bin]# ls -la
合計 12
drwxr-xr-x 2 root root 4096 11月 23 15:38 .
drwxr-xr-x 11 root root 4096 11月 23 16:08 ..
lrwxrwxrwx 1 root root 13 11月 23 15:38 perl -> /usr/bin/perl


下記のように「perl -> /usr/bin/per」の状態でエンターキーを押すと「ビジー状態です」と出ます
これっておかしいような気がするのですが・・・

[root@mikan bin]# perl -> /usr/bin/perl
-bash: /usr/local/bin/perl: テキストファイルがビジー状態です


そもそもの始まりは「シンボリックリンク設定」で

# ln -s /usr/bin/perl /usr/local/bin/perlとやっても「/usr/local/bin/perl」にならず

localの中を見ますとbinが入っておらず手動にて作成したものです。


 Re: Perlのシンボリックリンクのことです ( No.31 )
日時: 2012/11/24 16:49
名前: しずくちゃん

>[root@mikan bin]# perl -> /usr/bin/perl
>-bash: /usr/local/bin/perl: テキストファイルがビジー状態です


これって何をやりたいのか意味がわかりません。過去の私の説明が悪かったのだと思います。
変なエラーが出ても当然です。(これでは、perlを起動して何かしているコマンドですよ)

>そもそもの始まりは「シンボリックリンク設定」で
>
># ln -s /usr/bin/perl /usr/local/bin/perlとやっても「/usr/local/bin/perl」にならず
>
>localの中を見ますとbinが入っておらず手動にて作成したものです。
>


そもそもリンクを作るのは、perlの本体が /usr/bin/perl にあるときに、/usr/local/bin/perl
でもperlへアクセスできるようにするためです。つまりスクリプトの最初の行で
#!/usr/local/bin/perl
でも
#!/usr/bin/perl
でもPerlのスクリプトが動くようにするためです。
リンクが無ければ、#!/usr/local/bin/perl が使えないだけで、
普通は #!/usr/bin/perl は使えるはずなんですよね。(perlの本体が /usr/bin/perlに在るなら)
 Re: Perlのシンボリックリンクのことです ( No.32 )
日時: 2012/11/24 17:10
名前: しずくちゃん

# perl -v
または
# /usr/bin/perl -v
または
# /usr/local/bin/perl -v
と3種類コンソールから打って、Perlのバージョン等が表示されますか?
 Re: Perlのシンボリックリンクのことです ( No.33 )
日時: 2012/11/24 17:43
名前: stranger
参照: http://ja.528p.com/

[root@mikan bin]# ls -la
合計 12
drwxr-xr-x 2 root root 4096 11月 23 15:38 .
drwxr-xr-x 11 root root 4096 11月 23 16:08 ..
lrwxrwxrwx 1 root root 13 11月 23 15:38 perl -> /usr/bin/perl

perl -> /usr/bin/perl は/usr/bin/perlへのシンボリックリンクですよと表示しています

端末で
cd /var/www/cgi-bin
ls
/usr/bin/perl test.cgi
を実効の意味
/var/www/cgi-binへ移動して
lsでtest.cgiが存在するか確認して
perlでtest.cgiを実行するという意味です

test.cgiの中身は perlのprintでhtml文を生成するだけ

ブラウザでアクセスした場合はtest.cgiを実行して生成されたhtmlファイルを読み込んで
<body>
CGI表示テスト
</body>
bodyで囲まれた CGI表示テスト と表示するだけです
 Re: Perlのシンボリックリンクのことです ( No.34 )
日時: 2012/11/24 17:46
名前: みかん

しずくちゃん 、さんお世話になります。

>これって何をやりたいのか意味がわかりません
>過去の私の説明が悪かったのだと思います。

ご迷惑ばかりおかけしております、最近linuxに関心を持って始めたばかりの初心者です
こちらこそほんとうにご迷惑をおかけして申し訳ない次第です。


>リンクが無ければ、#!/usr/local/bin/perl が使えないだけで、
ここは納得しております。

>(perlの本体が /usr/bin/perlに在るなら)
ftpで見ましたらbinの中にperlがありました。
[root@mikan bin]#ls -laだとはみ出て下が表示できません


>と3種類コンソールから打って、Perlのバージョン等が表示されますか?

いいえ、何も下記のように出ませんでした。
[root@karenn usr]# perl -v
[root@karenn usr]# /usr/bin/perl -v
[root@karenn usr]# /usr/local/bin/perl -v
 Re: Perlのシンボリックリンクのことです ( No.35 )
日時: 2012/11/24 18:18
名前: しずくちゃん

>いいえ、何も下記のように出ませんでした。
>[root@karenn usr]# perl -v
>[root@karenn usr]# /usr/bin/perl -v
>[root@karenn usr]# /usr/local/bin/perl -v


不思議ですよね。どうしてそうなるのか私には分かりません。
(rootだから見えないということもないだろうし・・・)

perlは普通にyumで入れてるわけですよね?(自分でコンパイルしたとかじゃない)

# yum list installed | grep 'perl'

でズラズラとリストが出てくると思いますが、その中に
perl.i686(64bit版だと.の後ろが違うかも)
はありますでしょうか?
 Re: Perlのシンボリックリンクのことです ( No.36 )
日時: 2012/11/24 18:26
名前: みかん

strangerさん、ありがとうございます。

シンボリックリンクとcgiの実効の意味が分かってきました。

それから、下記を実行するコマンド記述がわかりません、

>/usr/bin/perl test.cgi
>先頭行の #!/usr/local/bin/perlを無視し改行コードも影響しない)
>perlのprintコマンドを実行するだけ


これだと何も表示がないですし・・
[root@mikan cgi-bin]# perl print /usr/bin/perl test.cgi

すみません、付き合いきれませんね(汗)
 Re: Perlのシンボリックリンクのことです ( No.37 )
日時: 2012/11/24 18:30
名前: みかん

perl.i686はありませんでした。

[root@mikan cgi-bin]# yum list installed | grep 'perl'

perl.i386 4:5.8.8-38.el5_8 installed
perl-Archive-Tar.noarch 1:1.39.1-1.el5_5.2 installed
perl-Compress-Zlib.i386 1.42-1.fc6 installed
perl-Digest-HMAC.noarch 1.01-15 installed
perl-Digest-SHA1.i386 2.11-1.2.1 installed
perl-HTML-Parser.i386 3.55-1.fc6 installed
perl-HTML-Tagset.noarch 3.10-2.1.1 installed
perl-IO-Socket-INET6.noarch 2.51-2.fc6 installed
perl-IO-Socket-SSL.noarch 1.01-1.fc6 installed
perl-IO-Zlib.noarch 1.04-4.2.1 installed
perl-NKF.i386 2.07-1.1.fc6 installed
perl-Net-DNS.i386 0.59-3.el5 installed
perl-Net-IP.noarch 1.25-2.fc6 installed
perl-Net-SSLeay.i386 1.30-4.fc6 installed
perl-NetAddr-IP.i386 4.027-5.el5_6 installed
perl-Socket6.i386 0.19-3.fc6 installed
perl-String-CRC32.i386 1.4-2.fc6 installed
perl-URI.noarch 1.35-3 installed
perl-libwww-perl.noarch 5.805-1.1.1 installed
 Re: Perlのシンボリックリンクのことです ( No.38 )
日時: 2012/11/24 18:47
名前: しずくちゃん

>perl.i686はありませんでした。

perl.i386でもOKなはずです。
ますます分からなくなりました(w
 Re: Perlのシンボリックリンクのことです ( No.39 )
日時: 2012/11/24 19:26
名前: stranger
参照: http://ja.528p.com/

No33で説明した通り

想定
/var/www/cgi-bin/test.cgiが存在する

CentOSの端末で(CentOSにログインして)

cd /var/www/cgi-bin
ls
/usr/bin/perl test.cgi

test.cgiをよく見る
printが行の先頭に記述されていますよね
画面に文字を表示させるためのperlの関数です
print以降の文字列を画面に表示します
(printコマンドと書いたのが間違いでしたね、perlのprint関数と書くべきでした)

 Re: Perlのシンボリックリンクのことです ( No.40 )
日時: 2012/11/24 19:27
名前: みかん

皆様に。

もう一度、最初からcentosのインストールをしてみたらどうでしょうね?
どこかがおかしくなってしまった?

意味ないですか?
 Re: Perlのシンボリックリンクのことです ( No.41 )
日時: 2012/11/24 19:41
名前: stranger
参照: http://ja.528p.com/

どこもおかしくはないと思う
CentOS 5.8でしょうから
perlのrpmパッケージはi386でOK
CentOS 5.8で i686のパッケージがあるのは
opensslなど一部のパッケージのみ
ほとんどが i386パッケージです

test.cgiを
windowsからアップデートするのでなく
CentOSで作成してみる
viエディタが使いにくいならnanoエディタを使ってみる
(たぶんUTF-8で保存されるので charsetの部分をUTF-8に変更)
そのくらいしてみたら
 Re: Perlのシンボリックリンクのことです ( No.42 )
日時: 2012/11/24 19:53
名前: みかん

stranger、さんへ

手順1
CentOSのviにコピーしましcharsetの部分をUTF-8に変更。

#!/usr/local/bin/perl
print "Content-type: text/html?n?n";
print "<html>?n";
print "<head>?n";
print "<META http-equiv=?"Content-Type?" content=?"text/html; charset=UTF-8?">";
print "<title>テストページ</title>?n";
print "</head>?n";
print "<body>?n";
print "CGI表示テスト?n";
print "</body>?n";
print "</html>?n";


手順2
chmod 750 /var/www/cgi-bin/test.cgi
chown apache:apache /var/www/cgi-bin/test.cgi

ブラウザで見るとやっぱりエラーでした。

 Re: Perlのシンボリックリンクのことです ( No.43 )
日時: 2012/11/24 21:11
名前: しずくちゃん

私はPuttyでサーバーへ接続して、viを使ってテキストをペイストしますが、
ここの掲示板のスクリプトをコピー&ペイストすると、なぜだか知りませんが、
円マーク(?)が逆スラッシュにならないです。

# cat test.cgi
とかやって、コンソール上の表示で(目視で)逆スラッシュになってるか確認した方がいいです。
(見た目円マークだったら逆スラッシュに直さないとだめです)
掲示板に貼り付けるとどちらも円マークになるので区別がつきません。
いちおうご注意を、という感じです。

16進ダンプするとこんな感じです
0000000 23 21 2f 75 73 72 2f 6c 6f 63 61 6c 2f 62 69 6e
# ! / u s r / l o c a l / b i n
0000020 2f 70 65 72 6c 0a 70 72 69 6e 74 20 22 43 6f 6e
/ p e r l ?n p r i n t " C o n
0000040 74 65 6e 74 2d 74 79 70 65 3a 20 74 65 78 74 2f
t e n t - t y p e : t e x t /
0000060 68 74 6d 6c c2 a5 6e c2 a5 6e 22 3b 0a 70 72 69
h t m l 302 245 n 302 245 n " ; ?n p r i
0000100 6e 74 20 22 3c 68 74 6d 6c 3e c2 a5 6e 22 3b 0a
n t " < h t m l > 302 245 n " ; ?n
0000120 70 72 69 6e 74 20 22 3c 68 65 61 64 3e c2 a5 6e
p r i n t " < h e a d > 302 245 n

追記:
今調べたら、(16進で)c2 a5 になってる部分はUTF-8の円マークのコードのようです。
私の環境が特別なだけかもしれないので、ご参考までに。
 Re: Perlのシンボリックリンクのことです ( No.44 )
日時: 2012/11/25 10:39
名前: stranger
参照: http://ja.528p.com/

No.42 の表示をそのままCentOSのクライアントで張り付けると
perl test.cgiを実行した場合

Bareword found where operator expected at test.cgi line 5, near ""<META http-equiv=?"Content"
(Missing operator before Content?)
syntax error at test.cgi line 5, near ""<META http-equiv=?"Content"
Unrecognized character ?xC2 in column 40 at test.cgi line 5.

のようなエラーを出します
0xC2 は U+00A5 YEN SIGN でキーボードの円マークで入力され
windowsで表示される 円マークとは別物と思われる

perlはデフォルトでパスが通っているので
test.cgiを作成したディレクトリでそのまま
perl test.cgi
を実行して html文が表示できるようになってから
apacheのディレクトリに移動して、必要な設定をすれば良いです

perl test.cgiに失敗したら apacheで表示できないと思う
 Re: Perlのシンボリックリンクのことです ( No.45 )
日時: 2012/11/25 10:43
名前: しずくちゃん

なんかの理由でperlが動かないという感じですけど、以下をやってみてください。

[root@xxxxxxx ~]# cd /var/www/cgi-bin/
で /var/www/cgi-bin/へ移動

[root@xxxxxxx cgi-bin]# echo "print ?"hoge?n?";" > test2.cgi
で test2.cgi というスクリプト作成(print文しかないです。?は逆スラッシュ)

[root@xxxxxxx cgi-bin]# cat test2.cgi
で中身の確認
print "hoge?n";
のように表示されればOKです。(?は逆スラッシュ)

[root@xxxxxxx cgi-bin]# perl test2.cgi
でtest2.cgiを実行

hoge
と表示されればOKです。


>もう一度、最初からcentosのインストールをしてみたらどうでしょうね?
>どこかがおかしくなってしまった?
>
>意味ないですか?


面倒でなければインストールし直した方がいいかもです。
(上書きじゃなくて全部消してインストール)
ただここまで追求しているから、後学のために、不具合の原因だけでも知りたいですが・・・

5.x系のバージョンは5.8で終わってるような感じ(たぶん)なので、
スペック的に問題がなければ、CentOS 6.3 かなんかの6.xの最新版を入れた方がいいと思います。

OSをインストールしたら、まず最初に yum update でパッケージすべてを最新版にしてから
作業を始めた方がいいです。インストール直後が最新とは限りません。

ここのサイトはEUC-JPで解説されている部分もあるので、デフォルトのUTF-8でシステムの
文字コードを使う場合には注意と言うか、配慮が必要です。

以上は私の意見でして、人によって違うかもです(w
 Re: Perlのシンボリックリンクのことです ( No.46 )
日時: 2012/11/25 11:19
名前: みかん

しずくちゃんさん、
stranger さん、

test.cgiが表示できました。

ここなんですけど
http://karenn.blogdns.com/cgi-bin/test.cgi


原因はわかりません、もう一度centOSをインストールしてみました。
まったく同じようにインストールし同じように設定をしたのですが最初はなにかおかしいところがあったのでしょう??
それが再インストールで直ったのだと思います。

手間取った「シンボリックリンク設定」も一回で下記のようになりました。
# which perl
/usr/local/bin/perl


test.cgiもftpから転送することもなくviで記述してアクセス権設定したら
/htmlおよび/cgi-binのどちらからも[CGI表示テスト]表示できました。

これまで長い時間をお付き合いいただき感謝の念に堪えません、ほんとうにありがとうございました。
ご教示いただきましたことをこれから役に立てていき無駄にはいたしません。

クローズはあと少しこのままにいたします。
 Re: Perlのシンボリックリンクのことです ( No.47 )
日時: 2012/11/25 11:33
名前: しずくちゃん

解決ということで、おめでとうございます。
ただ原因を知りたかったですね。。。

しつこいですが6.xを入れた方が先がありそうです。

余計なお世話ですが、削除系のコマンドを打つときには注意するといいです。
気づかずに、いろいろ消してしまうときがありますから。
それでは、お元気で・・・
 Re: Perlのシンボリックリンクのことです ( No.48 )
日時: 2012/11/25 14:04
名前: 管理者

しずくちゃん、さんが仰っているように、今後の勉強の為にも最新のCentOSを導入されることをお勧めいたします。
サーバのロケールもデフォルトのままのUTF-8が良いでしょう。

文字コードの扱いさえ気をつければ、EUCやUTFでの問題は特に既視する必要はありません。
未だにフリーで公開されているCGIなどはEUCが多いですが、単純にUTF-8で保存しなおせば大抵のものは稼働しますからね。
 Re: Perlのシンボリックリンクのことです ( No.49 )
日時: 2012/11/25 18:01
名前: みかん

しずくちゃん、さんへ
管理者さまへ

ほんとうに貴重なお時間を使ってしまい反省いたしております、ありがとうございました。
正直、レスが長くなってしまってこの先どうしようかと思っておりました。

>最新のCentOSを導入されることを・・・・
そうなんです、CentoOS6.XX入れたいのですがスペックがたりないのです。
メモリー256MBなのです(古いpcですから)
5.8以降のサポート切れになったらどうしょうかと思っています。

>OSをインストールしたら、まず最初に yum update でパッケージすべてを最新版にしてから
>作業を始めた方がいいです。インストール直後が最新とは限りません。

なるほど、また新しいことを知りました、ありがとうございます。

>文字コードの扱いさえ気をつければ、EUCやUTFでの問題は特に既視する必要はありません
こんど新たに始めるときがありましたらUTF-8で構築してみます。

お世話になりました。

■ その他

ページ先頭へ


Copyright(©)2004-2018 First home server construction. All Right Reserved.