68user's page 掲示板

Prev< No. 871〜900> Next  [最新発言に戻る] [過去ログ一覧]
No. 871 # 砒(ひ) 2000/05/16 (火) 01:07:12
> grep -v /member/ filename

あ〜〜〜〜できましたわぁ〜〜感謝感激
よく読んでなかったですね…
ありがとうございましたー

No. 872 # 入海 2000/05/19 (金) 18:35:37
はじめまして。

「他では役に立たないスクリプト&ファイル」のうち、
nslookup.cgiは、他の方のものと比べ複数入力が可能な点でいいなと思い、
何とかこちらの環境でも使えるように試行錯誤したのですが、
結果表示の際に「ホスト名」「IPアドレス」と表示されるべき部分が、
うまく表示できません(ナカグロ=黒点になる→文字化け?)。
実質的な実りの部分は全然問題ないのですが。

ソース中、put_data のサブルチに渡している引数だと思いますが、
$desc のローカル変数部分の文字化けが絡むのでしょうか。
Windowsの環境でメモ帳などでつくるため、nkfのオプションは -s に
しました。nkfより遅いと言われる jcode.pl も試しましたが不発でした。

あるいはやり方(書き方)が間違っているのでしょうか、
何かアドバイスをいただければ幸いです。

No. 873 # 68user 2000/05/20 (土) 23:29:19
> 結果表示の際に「ホスト名」「IPアドレス」と表示されるべき
> 部分が、うまく表示できません
余計な部分をどんどんコメントアウトしていって、
実質 print "ホスト名\nIPアドレス" だけのスクリプトに
しても化けますか?

またヘッダを
    Content-type: text/html; charset=Shift_JIS
    Content-type: text/html; charset=ISO-2022-JP
などと出力して、ブラウザに明示的に文字コードを伝えても
ダメですか? それでもダメならソースそのものを見せて下さい。
# どこかにそのまま置いてもらえると、文字コードなどが
# わかるので調べやすいです。

> $desc のローカル変数部分の文字化けが絡むのでしょうか。
ということはないと思います。

> Windowsの環境でメモ帳などでつくるため、nkfのオプションは
> -s にしました。
nkf は、CGI の出力を JIS にするために使っているだけです。
    ・スクリプトを SJIS にして、出力も SJIS
    ・スクリプトを EUC にして、出力も EUC
などという場合は、nkf は不要です。

No. 874 # yuji 2000/05/21 (日) 12:33:32
はじめまして、yujiといいます。
たびたび参考にさせていただいています。(^^)
アクセス状況チェックでは、1時間おきに更新されていますが、
これは、どのようにして定期的にプログラムを
実行させているのでしょうか?
サーバー上では、cronが利用できると思うのですが、
プロバイダのほうで提供されてたりするのでしょうか。
それとも他のサーバー上で実行されているのでしょうか。

あと、linux上でPerlを書いているのですが、
LANカードとPPP接続を行った場合に、gethostbyname,
inet_ntoa(inet_aton())のどちらを使ってもLANカードの
アドレスが取得されてしまうのですが、
PPP接続のアドレスを取得する方法というのは、なにか
ありますでしょうか?
ifconfigでpppの部分だけ切り出そうかとも思ったのですが、
exec('ifconfig'');
の出力をどうやって拾うのかがわかりません。(^^;
なにかアドバイスなどありましたら、どうぞよろしくお願いします。

No. 875 # 68user 2000/05/21 (日) 14:34:37
> アクセス状況チェックでは、1時間おきに更新されていますが、
cron でやってます。
    http://X68000.startshop.co.jp/~68user/cgi-bin/view-script.cgi/.crontab
のようなファイルを
    % crontab ~/.crontab
として設定します。

> LANカードのアドレスが取得されてしまうのですが、
外部にソケットで接続して、getsockname で取得できるませんか?
(試してません)

> exec('ifconfig'');
Linux の ifconfig がどういう出力をするのかわからないのですが、
    open(IN,"ifconfig |");
    while (<IN>){
        if ( m/ppp.*(\d+\.\d+\.\d+\.\d+\)/ ){
            $ip = $1;
        }
    }
    close(IN);
という感じでしょうか。

No. 876 # yuji 2000/05/22 (月) 03:21:49
お返事、どうもです。(^^)
そうなんですか。>cron
ちなみに、cronは、
どこのプロバイダでも利用できるものなんでしょうか?
telnetができるところなどに限定されるんでしょうか。
>%crontab ~/.crontab

外部に接続すると、そのソケットのアドレスは、
グローバルなIPアドレスでないと困りますから、
それをgetsocknameで取得するということですよね。
ばっちりでした。(^^)

Linuxのifconfigは、
(略 lo eth0など)
ppp0 Link encap:Point-to-Point Protocol
                    inet addr:*.*.* P-t-P:*.*.*.*
(略)
のようなカタチでして、水平タブなどを取り除いて、
.*?の最小マッチングを試してみたところ、取得できました。
外部コマンドの出力は、パイプを利用して取得すると。(メモメモ)

長くなってすいません。(^^;
今後とも、どうぞよろしくお願いします。

No. 877 # 68user 2000/05/22 (月) 05:02:11
> ちなみに、cronは、どこのプロバイダでも利用できるものなんでしょうか?
普通の UNIX なら、おそらく使えます。ただし、
    http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=73
のように、cron を使えないようにしているプロバイダもあります。なお、
    http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=74
では、ソースをコンパイルすれば使えるかのような発言をしてますが、
ソースをコンパイルしても無理です。
# /var/cron をいじるために、root の権限で suid を
# 立てなければいけないので。

> telnetができるところなどに限定されるんでしょうか。
そう思って下さい。crontab コマンド自体が使えるなら CGI や
~/.forward 経由でできるかもしれませんが、管理者に断らず
勝手にやるのはお勧めしません。

# CGI が nobody 権限で動いているサーバなら、nobody 権限で
# cron のデータが設定されるわけで。

No. 878 # hiroko amada [E-mail] 2000/05/22 (月) 14:45:03
unixで、sqlファイルを開き、中のコードを見れる状態にしただけでは、
書きこみモードにしない限り、
SQL文の書きこみ、変更はできないようになっているのでしょうか?

No. 879 # goto [E-mail] 2000/05/23 (火) 09:19:44
HP-UX9.06の内蔵HD(/ディスク)がfsckに引っ掛かってしまい、
立ち上がらない現象が発生しています。
ついては、CD-ROMからブートして上記HDをfsckに掛ける必要があるかと
思われますが。
そこで、実際にどのメディアを使い、どのような操作をすべきか
教えて下さい!

No. 880 # 入海 2000/05/23 (火) 18:29:49
> ブラウザに明示的に文字コードを伝えても
> ダメですか? それでもダメならソースそのものを見せて下さい。
> # どこかにそのまま置いてもらえると、文字コードなどが
> # わかるので調べやすいです。
ヘッダ対策はしてたのですが。
ご迷惑をおかけしますが、ソースをアップしてみましたので、
ご覧いただけますか。
http://www.hatsumei.psiweb.com/IPconvert_3.cgi.txt

> nkf は、CGI の出力を JIS にするために使っているだけです。
>  ・スクリプトを SJIS にして、出力も SJIS
>  ・スクリプトを EUC にして、出力も EUC
> などという場合は、nkf は不要です。
知識不足でお恥ずかしいです。勉強になりました。

No. 881 # 入海 2000/05/23 (火) 18:33:26
すいません。アドレス間違えました。
正 → http://www.hatsumei.ab.psiweb.com/IPconvert_3.cgi.txt

No. 882 # 68user 2000/05/23 (火) 21:58:14
http://www.wakusei.ne.jp/twn/lng/red/wwwlng.cgi?show+200005/00050026.txt
と同じですかね。SJIS の全角空白の2バイト目が
@ のコードと同じなので、
        print "  $desc = $after<br>\n";
で化けているんでしょう。例えば、SJIS で
    @a=(1,2,3);
    print " a";
とすると、@a と書いてないのに 1 2 3 と表示されるはずです。

対策としては、スクリプトを EUC にするか、
    print '  '; # 全角空白2つ
    print "$desc = $after<br>\n";
がお手軽でしょうか。

> HP-UX9.06の内蔵HD(/ディスク)がfsckに引っ掛かってしまい、
> SQL文の書きこみ、変更はできないようになっているのでしょうか?
HP-UX も SQL も使ったことがないので わからないです。

No. 883 # 入海 2000/05/24 (水) 16:49:05
68user様。
やはり文字化けでしたか、ありがとうございました。
SJIS での一部の漢字と @ の文字化けは知ってましたが、
全角空白2つでも化けるとは知りませんでした。

教えていただいた「対策」もいいと思いましたが、
  print " \ $desc = $after<br>\n";
と、全角空白の一つ目と二つ目の間に、
エスケープ用にメタキャラクタ \ を置いてみると
ソース的にすっきりするかなと思い、
やってみたらこれでうまく表示されました。

いやぁ、とほほさんのところも覗いてきましたが、
漢字コードひとつとっても、奥深いですね。
ほんとにお世話になりました。ありがとうございました。

No. 884 # 68user 2000/05/24 (水) 20:14:00
別に全角空白が2個だからまずいわけではなく、
    \x81 @ $ d e s c
となるので、@$desc という配列 (シンボリックリファレンス)
を表示しようとしているのでしょうから、
> 全角空白の一つ目と二つ目の間に、エスケープ用に
> メタキャラクタ \ を置いてみると
で本当にうまくいくのか疑問です。確かでしょうか?
それとも jperl だからうまくいく、ということでしょうか。

なお、FreeBSD+perl5.00503 では
    $desc = 'abc';
    print " \ $desc\n";
ではダメでした。

No. 885 # 入海 2000/05/25 (木) 12:22:06
> で本当にうまくいくのか疑問です。確かでしょうか?
再度確認しましたら、文字化けはしていないのですが、
インデント、つまり空白2文字分の字下げはうまくいっていませんでした。
その分が、つめられて行頭に配置されます。

> それとも jperl だからうまくいく、ということでしょうか。
ローカルでなく、プロバイダの Appacheサーバ上ではありますが。

でも、疑問が。
>  print '  '; # 全角空白2つ
>  print "$desc = $after<br>\n";
これでやってみましたが、syntax errorを返してきました。
上の2行目が next token ??? なのだそうです。
エンジンで検索してみましたが、意味がわかりませんでした。
セミコロンは打ってるし・・・。

No. 886 # ヘルツォーカー [URL] [E-mail] 2000/05/26 (金) 13:14:20
はじめまして。
ヘルツォークで検索したら、貴サイトにたどりつきました。

最近私はヘルツォークツヴァイのようなゲームを
自作してみようという主旨のサイトをつくりました。
まだ内容はないのですが、よかったら見て下さい。

トップページから最強の敵を創造る会へどうぞ。

メイリングリストも参加募集中です。
プログラミング好きの方でツヴァイ好きの方、
共にヘルツォークの続編(みたいなもの)を作りませんか。

No. 887 # 68user 2000/05/27 (土) 23:52:32
> インデント、つまり空白2文字分の字下げはうまくいっていませんでした。
半角空白になってませんか?

> これでやってみましたが、syntax errorを返してきました。
> 上の2行目が next token ??? なのだそうです。
タイプミスだと思いますが、直らなければ再度
どこかに置いて、見せて下さい。

> 最近私はヘルツォークツヴァイのようなゲームを
> 自作してみようという主旨のサイトをつくりました。
ゲームをやらないのでよくわかりませんが、最強の
思考ルーチンを作ろう的なページですか。いろんな
思考ルーチン同士を戦わせると面白そうですね。

昔 I/O でそういう記事があったっけなぁ。

No. 888 # yuji 2000/05/29 (月) 01:03:24
どうも、yujiです。(^^)
今、いろいろなサーバーにアクセスして、
HTMLファイルをダウンロードするというプログラムを作成しているのですが、その中にダウンしていると思われるサーバーなどが
ありますと、そこで処理が中断されてしまいます。
そこで、タイムアウト処理のようなものを実装して、
ある程度経過してもダウンロードできないようなら、
次のURLに進むようにしたいと考えています。
こういった場合、どのようにして、
タイムアウト処理を実装したらよいのでしょうか?
forkなどで子プロセスを作成するのでしょうか。
アドバイスなどありましたら、どうぞよろしくお願いします。(^^)

No. 889 # 68user 2000/05/29 (月) 05:19:17
fork するなら、子プロセスで
    $SIG{ALRM} = \&timed_out;
    sub timed_out {
        die 'TIMED OUT';
    }
    alarm(10);
    while (<SOCKET>){
        print $_;
    }
    alarm(0);
などとすればいいでしょう。また、die したくなければ
    $SIG{ALRM} = \&timed_out;
    sub timed_out {
        die 'TIMED OUT';
    }
    eval {
        alarm(10);
        $buf=<SOCKET>;
        alarm(0);
    }
    if ( $@ =~ /TIMED OUT/ ){
        タイムアウトになった
    }
と eval で囲めばよいです。

4引数 select を使う方法もありますが、gethostbyname や
connect で時間がかかると対応できません。
# connect はノンブロッキング IO を使う方法がある。

並行して gethostbyname するにはどうしたらいいのかなぁ?

No. 890 # yuji 2000/05/29 (月) 13:49:39
すばやいお返事とサンプルコード、
ありがとうございます。
$SIG{ALRM}とevalを用いることで、
うまくできました。(^^)
DNSサーバーエラーなどで、
connectで時間がかかる場合があるということで、
connectと<SOCKET>の部分をalarmで
囲むカタチで利用させていただきました。
connectの部分については、
最初にIO::SocketのTimeoutを指定してみたのですが、
うまくいきませんでしたので。(^^;
$SIG{ALRM}=\&timed_out;の\は大切なのですね。
意味合いについて、調べてみたいと思います。
今後とも、よろしくお願いします。(^^)

No. 891 # 入海 2000/06/02 (金) 13:15:22
68user様、遅ればせながら、
>> インデント、つまり空白2文字分の字下げはうまくいっていませんでした。
> 半角空白になってませんか?
どうやら、そのようでした。
ただ、ウインドウズ環境のテキストエディタでは、
全角空白というのが打ちにくいように思いました。
半角空白二つならべて、それで同じかなんて思ってました。
私の知識不足なのかもしれませんが。

ちなみに、下のように書いて、やっとインデントができました。

        print ' '."$desc = $after<br>\n";

No. 892 # 68user 2000/06/03 (土) 18:14:21
> 半角空白二つならべて、それで同じかなんて思ってました。
半角空白を2つ並べてもブラウザに反映されないのは、
perl とは全く関係なくて、出力しているのが HTML だからです。
HTML 的に言えば &nbsp; で空白を表現する方がいいでしょう。

わかっておられるかもしれませんが、念のため。

No. 893 # yuji 2000/06/04 (日) 04:01:52
どうも、yujiです。(^^)
Web上でアカウント発行がいろいろなところで行われていますが、
いたずら防止などもあり、入力したメールアドレスに、
登録内容の確認のメールを送って、再度返信してもらうなど
さまざまな方法がありますが、こういったプログラムは、
どのような仕組みになっているのでしょうか?
かなり漠然とした質問で申し訳ないですが、(^^;
なにかご存知でしたら、どうぞよろしくお願いします。

No. 894 # 68user 2000/06/04 (日) 05:45:40
0. メールが返ってきたらメール処理プログラムが実行されるよう、
    ~/.forward で設定しておく
1. CGI でメールアドレスを入力してもらう。
   適当なファイルにメールアドレスを記録して、メール送信
   この時点で CGI プログラムは終了。
2. 訪問者がメールを受け取り、再度返送
3. メールが届き、~/.forward で設定したプログラムが実行される
   記録しておいたメールアドレスと照合して、正しければ OK。

…てな感じでしょうか。

No. 895 # yuji 2000/06/05 (月) 01:11:43
またまたすばやいお返事、どうもです。(^^)

なるほど。>0,1,2,3
~/.forwardについては、初耳でして、勉強になります。

あと、メールのヘッダやフッタに自動的に広告などをいれている
メールを見かけますが、ああいうものは、
どういったカタチで実現しているんでしょうか?
CGIなどを使って、というカタチでしょうか。

No. 896 # CZ 2000/06/05 (月) 01:18:34
こんばんは。某ラウンジで何度かお世話になりました。

さて、さっそく質問なのですが、ファイルマウントについて教えてください。サーバを一台まるごと借りたはいいのですが、なかなかUNIXが理解できずにいます。

/etc/fstabの中身は一部次のようになっています。

/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /var ext2 defaults 1 2
/dev/hda3 swap swap defaults 0 0

この/dev/hda2を/homeにし、/varは/dev/hda1内に移したいのですが、果たしてできるのでしょうか。ハードディスクのフォーマットなどをしないで行ないたいのですが。/varを一瞬でも消せればいいのですが、/varの中は常駐プログラムなどが収まっているので無理なように思えます。回線経由ですので、telnetなどは起動したままでなければいけません。

ちなみにOSはTurboLinux Server 1.0Jです。何かいいアイディアや参考になるウェブサイト・本があればご教示ください。情報が足りなければご指摘ください。

No. 897 # 68user 2000/06/05 (月) 03:37:00
> この/dev/hda2を/homeにし、/varは/dev/hda1内に移したいのですが、
> 果たしてできるのでしょうか。
できなくはないでしょうが、かなり怖い作業ですね。
特にリモートでの作業になってしまう、というのが。

    1. cd /var
    2. シングルユーザモードに移行
    3. 不必要なプロセスを全て殺す
    4. /etc/fstab から /var のエントリを削除
    5. mkdir /newvar
    6. cd /var; tar zcvf - . | (cd /newvar; tar zxvfp -)
    7. mv /var /oldvar
    8. mv /newvar /var
    9. システムをリブート

かなぁ。7 から 8 の間で、/var 以下のファイルをオープンしようと
するプロセスがあれば、その動作は失敗します。また、(おそらく)
最初に /var 以下のオープンしているプロセスは、7 を行っても
引続き /oldvar 以下のファイルをオープンし続けているので、
最後にリブートが必要です。

/home については、上の作業をした後、

    A. シングルユーザモードに移行
    B. /etc/fstab に /dev/hda2 /home ext2 なエントリを追加
    C. /dev/hda2 を /newhome としてマウント
    D. rm -rf /newhome/* (フォーマット。newfs を使った方がよいけど)
    E. cd /home; tar zcvf - . | (cd /newhome; tar zxvfp -)
    F. mv /home /oldhome
    G. リブート
    H. rm -rf /oldhome

でしょうか。

僕は Linux を触ったことがないので、コマンド名やオプションが
Linux でも通用するかどうかはわかりません。事前に十分シミュ
レーションしてから行って下さい。できれば Linux-users-jp や
fj などで、
    「…という作業手順でいのでしょうか?」
と質問した方がよいと思います。
# もし「それではうまくいかない」「こうすれば簡単だ」という回答を
# もらったら、僕にも教えて下さい :-)

なお、上記の通りにやってうまくいくかどうかは保証できません。


> あと、メールのヘッダやフッタに自動的に広告などをいれている
> メールを見かけますが、ああいうものは、
> どういったカタチで実現しているんでしょうか?
> CGIなどを使って、というカタチでしょうか。
CGI は web の仕組みであって、メールとは全く関係ありません。
# web 上でボタンを押すとそういうメールが送られる、
# というなら関係ありますけど。

確か、そういう機能を持ったメーリングリストプログラムが
あったように思いますし、常に一箇所からしかメールが発信
されないなら、その部分でヘッダやフッタを追加してもいいです。

No. 898 # 68user 2000/06/05 (月) 03:43:52
> 7. mv /var /oldvar
おっと。マウント中のマウントポイントは mv できないかも
(FreeBSD ではそうでした)。

一度 /dev/hd2 を umount すればいいですが、もし device busy
などと怒られたら、umount -f で強制アンマウントできます。
本当は fstat や fuser で、/var 以下のファイルを使用している
プロセスを調べて、それを殺してから umount するのが筋ですけど。

No. 899 # yuji 2000/06/05 (月) 13:27:56
いつもお返事、ありがとうございます。(^^)
表現が悪かったですね。>CGI(^^;
おっしゃるように、この場合は、必ずしもWWWサーバーと
やりとりするわけではないですから。

perlやCによるプログラム
でヘッダやフッターを処理したメールを、SMTPサーバーで
送信しているのか、それともSMTPサーバーのどこかで、
ヘッダやフッターを設定できるのかな、と思いまして。

今のところは、他の場所で使う予定はないですので、
自分で付加するプログラムを実験してみようと思っています。
下のメーリングリスト関連のリンク集を参考に、
いろいろなメーリングリストの特徴を勉強してみようと思います。(^^)
http://yamanoya.ecs.cst.nihon-u.ac.jp/patio/ml/makeml/mllinks.html

No. 900 # CZ 2000/06/05 (月) 21:19:42
お返事ありがとうございます。

早速Linuxのメーリングリストに入る準備をしましたが、業務用に使っているわけではないし、物は試しと思って一発勝負をかけてみました。

% /usr/local/apache/bin/apachectl stop
% fuser -k -m /dev/hda2
| /etc/fstab から /var のエントリを削除

ここで`umount /var`としたら'device busy'が出たので、深く考えずに再度`fuser -k -m /dev/hda2`としたら見事telnetが死にました。そこで
% umount -f /var
% mv /newvar /var
% reboot
この作業を管理会社の方にお願いしました。

| /etc/fstab に /home 追加
% mkdir /newhome
% mount /dev/hda2 /newhome
% rm -rf /newhome/*
% cd /home; tar zcvf - . | (cd /newhome; tar zxvfp -)
ここで何かエラーが出たのですが、読み飛ばし。
% mv /home /oldhome
% reboot

再起動したらさっきのエラーが原因らしく/newhomeの中が空で、かつ/homeができていなかったので、

% cp -a /oldhome/* /newhome
% mkdir /home
% reboot

再起動中に混乱してきました。(そういえばさっきの/newhomeはどうなるんだ? `mkdir /home`は不要だったか?)

% mount
(あ、ちゃんと/dev/hda2 on /home type ext2 (rw)になってる。)
% ls /home
(中身もある。ひょっとして成功か?)

というわけで、成功しました。(あるいは成功したように見えています。)一つ間違えば追加料金を払って再設定してもらうところでした。今までもこんな具合に、システムをほとんど理解しないまま手探りで運用してきました。もっとしっかり身に着けようと、本などを買って勉強してはいるのですが。

ただ、/newhomeと/homeが両方存在しています。/newhomeは消しても構わないと判断できるでしょうか。

Prev< No. 871〜900> Next  [最新発言に戻る] [過去ログ一覧]