68user's page 掲示板

No. 1〜364> Next  [最新発言に戻る] [過去ログ一覧]
No. 1 # ほきいぬ 1998/10/22 (木) 06:49
おはようです。
自作の掲示板ですか?スゴイですね。

.htaccessを見させてもらいました。
htmlやhtmでもSSIが実行できるようになっているみたいですが、
どこかに「サーバの負担が大きくなるから止めた方が良い」みたいな
ことが書いてありました。
#いちいちチェックするからでしょうか?
あまり気にしなくて良いものなんでしょうか?

#どんな風に表示されるのかな、ワクワク^^

No. 2 # 68user 1998/10/22 (木) 12:50
いえ、自作ではなく
    http://www2e.biglobe.ne.jp/%7es-hasei/wwwboard.htm
のやつです。他のサイトで設置を頼まれたのですが、
念のためこちらで動作チェックをしてます。ですから、

> #どんな風に表示されるのかな、ワクワク^^

いたって普通です(^^;


> どこかに「サーバの負担が大きくなるから止めた方が良い」みたいな
> ことが書いてありました。

まぁたしかに全ての*.htmlに検索かけてしまうんで、
貧弱なマシンでは .shtmlにした方がいいんでしょうね。

でも、このサーバはCPUが6個、メモリ1Gというふざけた
マシンなんで(笑)、負荷についてはあんまり考えてません。

それより問題なのはセキュリティでしょうけど、
もしコマンド実行されてもnobody権限だし、
まぁいいか、という投げやりな姿勢です。


あと、BBS設置した理由に、
    UNIXの部屋を作ってから質問やツッコミが2つしか
    来てないので、非常にさみしい。
というのがあります(^^;

だって結構アクセスしてもらってるのに、リアクションが
ないとさみしいなぁ…と、モニタの向こうの人に向かって言って
みたりして。

No. 3 # cal [E-mail] 1998/10/22 (木) 14:35
こんにちは
http://www.sega.co.jp/music/bbs/
http://www.sega.co.jp/cinema/bbs/
http://www.sega.co.jp/gamesoft/bbs/
一応ご参考までに。
(掲示板の趣旨とは違いますので消して下さってけっこうです。)

No. 4 # 竹内@竹内靖工務店です [URL] 1998/10/23 (金) 12:17
はじめまして何時も「unixコマンド」を拝見して勉強させて頂いております。
出来れば「逆引き」メニューなど作っていただければ有り難いのですが?
あつかましい事を申しました(^^;今後ともよろしく御願いしますm(_ _)m

No. 5 # 68user 1998/10/23 (金) 20:38
どもども>竹内@竹内靖工務店さん

えっと、逆引きメニューというのは「機能→コマンド名」
という意味でしょうか?

それともコマンド名をひっくり返して(muleならelum)
並べることですか?(違うか(^^;)

No. 6 # 68user 1998/10/23 (金) 20:39
その3つだけでいいですか?>calさん
1週間以内に落としますが、それより先に削除されてたらゴメン。

No. 7 # R-Nouveau! 1998/10/24 (土) 04:26
はじめまして、素人です。(-_-;
LINUXというのはUNIXの中のひとつというような事を聞いたのですが、同時にわりと独自性の強いものとも聞きました。アプリケーションの互換が無くなるほどの差があるのでしょうか?
(改行無しテストも兼ねる(^-^;)

No. 8 # 68user 1998/10/24 (土) 09:03
はじめまして、R-Nouveau!さん。かっこいい名前ですね。

> アプリケーションの互換が無くなるほどの差があるのでしょうか?

互換性という言葉を出すなら、何と互換性が高いか、という
ことを考えなくてはなりませんね。

まずUNIXにはBSD系とSystemV系があります。
前者はFreeBSD、NetBSD、BSDI、SunOS4(昔のSunOS)、
後者はSolaris、HP-UX、AIXなどほとんど商用OSです。

で、LinuxはBSD系とSysV系のいいとこ取りです。
# 悪く言えばどっちつかずですけど。
というわけで、LinuxのコマンドはSysV系、BSD系、
Linuxオリジナル、の3つが混ざってます。


別の観点から見ると…

OS開発者とは別の人が作っているコマンド(例えば
muleとかnetscape、procmail、nkf、perl、apache、
tcsh、sendmailなど他にもたくさん)は、動作・
オプションに違いはありません。

その作成者はどの環境でも同じように動くことを望んでいる
のですから、当然といえば当然です。

上と同じ理由で、GNUが開発/配布しているコマンド
(bash、flex、gcc、fingerなど)も互換性は高いです。

また昔からあるコマンド(lsとかcat)も、結構共通点があります。

んが、OS開発者が自ら作っているコマンド、つまりOSに深く
関わるコマンド(ppp、pkg_add、natd、ps、cron、mount、
ktraceなど)はかなり違います。

それから、ソースレベルでの互換性という点では、
インクルードファイルやライブラリの有無/仕様の違い/
などが原因で、少し大きめのプログラムだと、一発で
コンパイルできないことも多いです。

でも、わかっている人がソースやMakefileをいじると
大抵の場合なんとかなります。
# わかってない人がいじってもどうにもならない。

ですから、FreeBSDではportsやpackage、Linuxでは
(よく知りませんが)ディストリビューションごとに
rpmとかを用意して、わかってない人でも一発で
インストールできるようにしてるわけです。

…というふうに、「アプリケーションの互換性」と
曖昧な聞き方をされると、こんなに長くなってしまう
のでした(笑)

No. 9 # cal 1998/10/25 (日) 04:17
よろしくお願いします。&ありがとうございます。

No. 10 # ほきいぬ 1998/10/25 (日) 23:20
こんばんわ。賑わってますね^^
もう既に付いていけないくらいの話題になってます(汗)

そうですか、6気筒1万ccのマシンなんですか。
そんな良いマシン、前の仕事でも使った事なかったなあ。

error.cgi、参考にさせてもらいます。
でも、いつ反映できるかは謎ですが(笑)

No. 11 # お肉 [URL] 1998/10/26 (月) 12:49
RefererなのかReferrerなのか、いづれ決着をつけましょう・・・・・・・・・

って、ほさいぬさんが言ってました。

No. 12 # ROL [E-mail] 1998/10/27 (火) 01:30
お招きにあずかり、参上致し…あ、あれ?誰もよんでないって?
こりゃまた、失礼しました〜〜、って年代モノのギャグはどっかにやっといて、と。

取り敢えず、某所でここのCGIが必要になりそうなんで頂いていきます(笑)
問題が発生すればレポート出しますんで、その時には宜しくお願いしますね。
まぁ、仕事もあるんで、すぐに設置できる状態ではなさそうなんだけど…

No. 13 # ROL [E-mail] 1998/10/28 (水) 00:24
g2を見てみる…いきなり一行目でつまずく(笑)
>#!/usr/local/bin/perl -w
の-wってなんでせう?何かのオプションかなぁ…まぁいいや
まさか1行目からつまずくとは思わんかったけど(笑)


>push(@INC,"/home/usr4/a5/i/a5i050/public_html/cgi-bin/");
>push(@INC,"/home/95s/j5306050/bbs");
またつまずく(爆)
push?perlってpush使えるのか?
でもpop無い様な…、いいやこれも、次いこう次。

>$nocgi = 1;
ん〜、なんかのフラグにしてんのかな、だとしたらなんなのでせうか?
例のごとく次へ

>require 'timelocal.pl';
>require 'environment.pl';
ライブラリか、timelocal.plの方はどっかのサーバーにあるだろうから適当にDLしてくればいいか。
ほんとにいいんでしょうか>お師さん
問題はenvironment.plのほう。
同じようにDLしてみる…やばい、これは結構書き直しがいりそう…
時間もかかりそうなので、こいつに関してはまた後日。

>$proxy = 'http://www.cs.gunma-u.ac.jp:8080/';
こいつはプロキシのアドレスですな。
まぁ適当なプロキシサーバー見つけてきて代入すればいいですよね。

>$base_dir = "$home/test00"; 以下3行
コメントがあるので分かりやすい…
が、$homeが問題。
environment.plに記述があるので、そこから書き換えないとだめですねぇ

>$erase_span = 2;
変数の名前から想像するに…過去ログを残す日にちかな?
2って事は3日分残るって事でいいんでしょうか。

ってことで、g2理解するのにはまだまだ時間がかかりそうです。
68user師匠、ここまでの解説を御教授くださいませ。

No. 14 # 68user 1998/10/28 (水) 03:04
>cal殿
ログは保護しました

>肉殿
JavaScriptって全てreferrerなんですか? うーん、納得いかん。

>ROL殿

-wはperlにwarningを吐かせるオプションですな。

requireってのは、ファイルをインクルードする命令です。
だから、「require 'environment.pl';」の変わりに、
environment.plの内容をそのまま貼っておいてもいいです。

で、requireする場合、どのディレクトリからファイルを
探すかを決めるために、perlは@INCを参照するわけです。

ちなみに
    localtime(&timelocal(0,0,0,$day,$mon,$year)-60*60*24);
で&timelocalを使うためだけにrequireしてます。
# timelocalはlocaltimeの逆変換をする関数です。

$nocgi は environment.pl でチェックしてる変数です。
うちのCGIはnobody権限でないと動かないようにしてる
んですが、g2はCGIじゃないので自分の権限で動かす必要が
あります。ですからそのチェックをすり抜けるための
変数です。とっぱらってください。

environment.plで使ってるのは、$nkf、$home、$httpdownだけ
だと思うんで、上のところ全部削除して、
    $home = "/home/rol";
    $nkf = "/usr/local/bin/nkf";
    $httpdown = "/home/rol/bin/httpdown";
とでも書いておけばいいでしょう。

timelocal.plはperlについてくると思うんですが、
なければあげますので言ってください。

あと
    if ( -f "$log_dir/$date.tgz" ){
        system("mkdir -p $main_dir/");
        print "extract $log_dir/$date.tgz\n";
        system("$tar zxf $log_dir/$date.tgz -C $main_dir");
    }
これは、既にその日作ったアーカイブがあれば展開してます。
デバッグ時に一度落としたファイルを何度も落とすのは
時間の無駄ですから。

> 変数の名前から想像するに…過去ログを残す日にちかな?

そのとおりです。

> 2って事は3日分残るって事でいいんでしょうか。

あい。変なプログラムですね(笑)

No. 15 # 68user 1998/10/28 (水) 03:33
まぁ簡単なプログラムだから、原理を理解したら
自分でスクラッチから書き起こすのもいいと思います。要は

1. 1_index.shtmlをGET
2. 1_index.shtmlからリンクされている*_ALL.shtmlをGET
3. 次のvolをGET(GETできなかったらおしまい)
4. tar zxvf 1998-xx-xx.tgz *.shtml(アーカイブを作成)
5. その日のリンクを作成

してるだけです。例えば5なんかは、SSIを使って
現在置いてある全てのアーカイブをリアルタイムで
リストアップしてもいいですし。

No. 16 # ROL [E-mail] 1998/10/29 (木) 00:40
昨日のおさらい
(申し訳ないですが、しばらくお付き合い頂けると助かります)

-wオプション
なるほど。もし、このオプションをとった場合、どういう不都合が考えられるのでしょう?
まぁこのスクリプトもある程度理解できるぐらいの知識はあるつもりなんですが
Perlの仕様じたいは詳しくないので教えてください。

push
なるほど。requireでインクルードしてくるファイルが2つあるのでpushも二つある訳ですな。
では、前のpushと後のpushとが、それぞれどちらのrequireに対応するんでしょうか?
やっぱり先のpushがenvironment.pl、後のpushがtimelocal.plですか?

timelocal.pl
お手数をおかけして申し訳ないですか、下さい(笑)

environment.pl
ん〜、3つの代数ぐらいなら確かにスクリプト本体に組み込んじゃった方が早いですね。
そこは適当に書き換えときます…が、ここで新たな問題が発生。
$homeはディレクトリなんで分かりやすいんですけど、
$nkfこれが問題。これはファイルだと言うとこまでは理解できるんですが(サブルーチン内でオープンしてますから)
このファイルってなんなんでしょう?
ただのテンポラリとして使用しているんでしょうか?
後で出てくるサブルーチンをみても理解できないです(T_T)
$httpdown…そもそもHTTPDOWNが何をするアプリケーションなのかが理解できてません(笑)

    if ( -f "$log_dir/$date.tgz" ){
      system("mkdir -p $main_dir/");
      print "extract $log_dir/$date.tgz\n";
      system("$tar zxf $log_dir/$date.tgz -C $main_dir");
     }
つまり、このスクリプトでは、ダウンロードしたファイルを圧縮している訳ですよね。
ちゅうことはtarが必要な訳なんですが、UNIX自身をほとんど触った事の無い私には
正直言って手に余る部分です。
ってことで、この部分は全面的に改良して、非圧縮でやるとこを目標としときます。

で、本日のお勉強 get_today_time
ここでの問題点は二つ。
1つはライブラリですが、これはライブラリがあれば解決できるので、正確には問題にならない。
2つめ…2000年問題!!!
これ…独力でナントでもなるわ(笑)
localtime()でとってきた$yearが98以下の時には
$year+=1900;
ではなく
$year+=2000;
にしちゃえば、百年間は大丈夫だからねぇ。
もっとも根本的な解決にはなってないが、それはシステムが対応せんとどうしようもないもんね。
このあたりUNIXの仕様は今後変わる予定ってのはあるんでしょうか?

あぁ、やっぱりラクダ本買わないとだめだな…

No. 17 # ROL [E-mail] 1998/10/29 (木) 00:55
訂正
ocaltime()でとってきた$yearが98以下の時には>ocaltime()でとってきた$yearが98未満の時には
謹んで訂正致します。m(__)m

No. 18 # 68user 1998/10/29 (木) 02:55
> ってことで、この部分は全面的に改良して、非圧縮でやるとこを
> 目標としときます。

ん〜、圧縮しないと1MB近くになりますよ。

> なるほど。requireでインクルードしてくるファイルが2つあるので
> pushも二つある訳ですな。

ちゃいます。timelocalはシステム標準のディレクトリ
(/usr/local/lib/perl5/とか/usr/share/perl/など)に
あるので、そのままrequireするだけでOKです。

pushが2つあるのは、このCGIをwww.cs.gunma-u.ac.jpと
www.cc.gunma-u.ac.jpのどちらでも動作させるためのものです。
# まぁあれは僕の環境に合わせるための記述なので、
# 深く考えなくてもいいです。

> timelocal.pl

というわけで、サーバがUNIXならまずそこに置いてあると
思うのですが、一応 http://X68000.startshop.co.jp/~68user/tmp/timelocal.pl
に置いておきます。

> nkfこれが問題。

nkfはコマンドです。まず
    http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#nkf
を読んで、nkfの機能を知ってください。

で、DOSで
    A:\>type hogehoge | more
などとパイプを使ったことあります? これは
more < hogehogeと等価ですよね(多分…DOSは忘れた)。
それと同じで、
    % nkf -e < hogehoge

    % cat hogehoge | nkf -e (UNIXのcat=DOSのtype)
と同じです。

つまり、落としたファイルはSJISなので、nkfを使って
EUCに変換しているわけです。
# ところで、open(IN,"hoge|")とかopen(OUT,"|hoge")
# という意味はわかりますか?

httpdownについてはまた後で書きます。とりあえず、
UNIXで実際にhttpdownを動かしてみるのが一番わかりやすい
ことは確かです。

それからtarですけど、
    tar zxf hoge.tgz = lha e hoge.lzh
    tar zcf hoge.tgz *.shtml = lha a hoge.lzh
という説明ではダメでしょうか。一応
    http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#tar
も読んでください。


> 2つめ…2000年問題!!!

ふふ…、いまだに2000年問題が残ってたら、強者揃いの
UNIXハッカー連中がよってたかって直しにかかるでしょう。

localtimeが返す年は西暦-1900です。2000年なら100を返します。
なんで-1900かっていうと、やはり昔は2000年問題が残っていたので、
それとの整合性を取るためでしょうね。

あと一部のUNIXには2038年問題があります。1970年1月1日からの
経過秒数が、2038年あたりでlongでは表現できなくなるので。

> あぁ、やっぱりラクダ本買わないとだめだな…

別に質問するなって言ってるわけじゃないですけど
(僕がお願いしたんだし)、-wなどマニュアルを見れば
載っていることは手元のラクダ本を調べた方が早いですよ。
僕に聞くと1日かかることも、ラクダ本があれば数分で
片付きます。

あと、過去ログ閲覧用スクリプトも設置する必要がありますが、
そこには
    s|$&|<a href="$toppage_url">$link_message</a>|;
    s|\Q$&\E|$tmp|;
    if ( m|<a href=.*?noteky_base\.cgi.*?>(.*?)</a>| ){
などが出て来ます。

$&、\Q〜\E、.*?など、ラクダ本がないとかなり困ることに
なると思いますので、購入されることをお勧めします。

一応perl5のマニュアルは
    http://www.bekkoame.or.jp/~syunji/perl/man/index.html
にありますが、最初は本で読む方がいいんじゃないかと
思います。

No. 19 # ROL [E-mail] 1998/10/29 (木) 19:39
昨日のおさらい…
>ん〜、圧縮しないと1MB近くになりますよ。
BIGのサーバーレンタルは50MBもらえるので
容量的には問題ないですね、というか、画像なしでどうやってこの容量をうめるかが問題だな(笑)

>nkf
了解しました。
今までそういった文字コードの変換には「jcode.pl」を使ってたんですよ。
このコマンドがあれば「jcode.pl」いらないな。
そのわりにはCGIの本にはこれで文字コードを変換するようになってるんだけど、
なぜそんなことが必要なんだろう?
nkfって特殊なコマンドなんでしょうか?

># ところで、open(IN,"hoge|")とかopen(OUT,"|hoge")
># という意味はわかりますか?
「パイプ」とか「リダイレクションパイプ」ですよね。
一応本読んでますけど、自分が作るCGIでは使った事ないんですよ。<へぼプログラマー
この例だと、ファイルハンドルINやOUTにパイプを結び付けているってとこまではわかります。
open(OUT…)の場合、今後ファイルハンドルになにか出力すると、hogeにそのデータがわたされる…であってますか?

>tar
説明が非常にわかりやすいです(笑)
ただ、こういったプログラムをレンタルサーバー上で動かしてもいいのかなと思っちゃたりするんですけど…
いいのかな?>サポートに連絡してみよう。

>ふふ…、いまだに2000年問題が残ってたら、強者揃いの
>UNIXハッカー連中がよってたかって直しにかかるでしょう。
ぎゃぁぁぁぁぁ!
めっちゃ恥ずかしい…(笑)
そうなってたのかぁ、勉強になるなぁ(笑)<UNIXについての知識の少なさを露呈してますな(爆)

>購入されることをお勧めします。
今日は忙しくて本屋に行く暇もなかったので、明日買ってきます。

ってわけで、今日はここまで。
仕事が忙しいの…(涙)

No. 20 # 68user 1998/10/30 (金) 00:36
> BIGのサーバーレンタルは50MBもらえるので

まぁ今のところ他に使い道がないなら圧縮しないのも
いいでしょう。

> そのわりにはCGIの本にはこれで文字コードを変換するように
> なってるんだけど、なぜそんなことが必要なんだろう?

nkfはただのUNIXコマンドなので、CGIの本の範疇を越えている
ということでjcode.plを使っているんでしょうね。

僕はnkfの方が慣れてるのと、nkf使った方が多分速いから
使ってるだけですので、代わりにjcode.pl使ってもいいですよ。

> サポートに連絡してみよう。

どちらかと言えば(あくまでも「どちらかと言えば」ですけど)
CPUパワー喰うので、嫌がるところは嫌がるでしょう。
んが、僕は
    「CGIはperlの中で完結しなければならないということは
        ない。UNIXのコマンド使って何が悪い」
という人なので、僕的には完全にOKです。

> 「パイプ」とか「リダイレクションパイプ」ですよね。

です。openの最初や最後に|を付けると、コマンドとして
解釈されてそのコマンドが実行されるわけです。

No. 21 # ROL [E-mail] 1998/11/04 (水) 00:04
BIGのサーバーどうやらnkf使わせてもらえないみたい。
しかも実験の結果、「system」もだめみたいです。
あかん、結構書き直しですな…(苦笑)

No. 22 # 68user 1998/11/04 (水) 02:56
> しかも実験の結果、「system」もだめみたいです。

え〜そんなことは…。もしsystemがダメならperlからは
子プロセス生成できないってことですよ。CGIとして動かすなら
    #!/path-of-perl
    $|=1; # これ大事。
    print "Content-type: text/plain\n\n";
    system("/bin/ls");
でうまくいくはずです。

> BIGのサーバーどうやらnkf使わせてもらえないみたい。

じゃあソース持ってってコンパイルしませう(70%本気)。

No. 23 # ミー [E-mail] 1998/11/25 (水) 20:43
はじめまして。ミーという者です。

FreeBSDについてちょっと質問があるんですが、
私のパソコンでpppとやって、termでモデムとお話をしようとすると、
そこのところが御亡くなりになります。
あまり良く分からないので詳しく状況を書けないのですが、
考えられる原因を教えていただきたく思いまして、書きました。
よろしくお願いします。

No. 24 # 68user 1998/11/26 (木) 00:03
ども、68userです。

僕もよく知らないんですが、
    ppp ON X68000> term
    Working in interactive mode
    Entering terminal mode.
    Type `~?' for help.
となったら、C-cもC-zも効かなくなるんですけど、
    「そこのところが御亡くなりになります」
というのは、このことでしょうか?

「Type `~?' for help.」とある通りに、「~?」とタイプすると、
簡単なヘルプが表示されます。そこにも書いてありますが、
term modeを抜けるには「~.」と打ちます。packet modeに
戻るには、「~p」です。

で、
    ppp ON X68000> term
    Working in interactive mode
    Entering terminal mode.
    Type `~?' for help.
    at(とタイプする。ここは表示されない)
    OK(と表示されたら、少なくともモデムは認識されているはず)
    atdt電話番号(とタイプする。ここは表示されない)
    CONNECT …
とするらしいです。僕の環境ではこれでモデムが電話をかけて
くれるんですが、手動でユーザ認証させる方法を知らないので、
ここまでしかわかりません。

あとは、環境(アナログモデム/ISDN)、ログの内容(/var/log/ppp.log)、
/etc/ppp/ppp.conf、/etc/ppp/ppp.linkupの内容などがわからないと
なんとも言えないと思います。

No. 25 # ミー 1998/11/26 (木) 11:04
>あとは、環境(アナログモデム/ISDN)、ログの内容
>(/var/log/ppp.log)、
>/etc/ppp/ppp.conf、/etc/ppp/ppp.linkupの内容などがわからな
>いとなんとも言えないと思います。
そうでしたね。すみません。
ですが、ppp.confは、サンプルをデバイス部分だけかえているんですよ。
ppp ON mee>term
Working in interactive mode
Entering terminal mode.
Type"~?"for help

は出ます。
この時点で何も打てなくなります。
でないだけかと思って
at [Enter]
と打ってみても反応しません。
とりあえず、もう一回自分で調べてみます。
ありがとうございました。

No. 26 # ミー 1998/11/26 (木) 12:29
やってみると、
~.
~?
は実行できました。~?は文字が化けていましたが...
ただ、at
は反応しません。モデムってカーネルの再構築必要なんでしたっけ?

No. 27 # 68user 1998/11/26 (木) 17:12
モデムは、sioデバイスで認識されます。なお、PCのシリアルポートも
sio?で認識されます。僕の場合は、dmesgで
    sio0 at 0x3f8-0x3ff irq 4 on isa
    sio0: type 16550A
    sio1 at 0x2f8-0x2ff irq 3 on isa
    sio1: type 16550A
となっていますが、sio0がシリアルポート、sio1がモデムです。
この場合、/etc/ppp/ppp.confには
    set device /dev/cuaa1
と書けばいいです。

PCによってはシリアルポートが2つ付いてる場合がありますが、
デフォルトのカーネルコンフィグは
    device sio0 at isa? port "IO_COM1" tty irq 4 vector siointr
    device sio1 at isa? port "IO_COM2" tty irq 3 vector siointr
    device sio2 at isa? disable port "IO_COM3" tty irq 5 vector siointr
    device sio3 at isa? disable port "IO_COM4" tty irq 9 vector siointr
となっているので、モデムが認識されません。
disableを削ってカーネルの再構築をするか、ブート時に
    boot: -cv
で、sio2をenableにするといいでしょう。

# PCのBIOS設定で、シリアルポートを殺すこともできます。
# 僕のマシンはシリアルポートが2個なのですが、BIOSで
# 1つ殺してあります。

pppのtermモードとは別に、cuで調べることもできます。
モデムが認識されてるなら、
    % cu -l cuaa1
    Connected.
    at(と入力)
    OK
    atdt電話番号(と入力)
    CONNECT 9600/ARQ/V34/LAPM/V42BIS
で、モデムが電話をかけてくれます。

    % cu -l cuaa0
    % cu -l cuaa2
などとして、モデムが認識されているか確認してみてください。

もしsio?のいずれもモデムを認識していなかったら、PnPの問題ですかねぇ。
モデムカードの型番を元に、http://www.jp.freebsd.org/で調べてみると
いいと思います。

No. 28 # ミー 1998/11/26 (木) 18:35
ありがとうございました。
試してみると
sio1

type 16550A
とでないで、たしか開けなかったと思います。
(sio0はちゃんと16550Aでした。)
さっそく試してみます。

No. 29 # ミー@超初心者 1998/11/26 (木) 18:43
あの....非常に言いにくいのですが、
実はフロッピーディスクの使い方を知りません。
ひぃぃぃぃ。本当に素人なんです。
あの....フロッピーの使い方をある程度教えてもらえませんか?
(もちろんFreeBSDでです。さすがに、Winでは使えます。)
あ〜、恥ずかしかった...

No. 30 # 68user 1998/11/27 (金) 02:46
http://www.jp.freebsd.org/~yuki/FreeBSD/search.html
から、「QandA」を対象に「フロッピー」をキーワードに検索すると
情報が得られますよ。

MS-DOSフォーマットのフロッピーならここ。
http://www.jp.FreeBSD.ORG/%7Eryuchi/QandA/HTML/640.html

ufs(UNIX方式のフォーマット)のフロッピーならここ。
http://www.jp.FreeBSD.ORG/%7Eryuchi/QandA/HTML/350.html

まずはQandAで探してみる癖を付けると、効率良く探しものが
できると思います。

あと、一応僕もQandA projectに参加してますので「ここが
わかりにくい」など意見を言ってくだされば、できるだけ
反映するように努力します。

No. 31 # みー 1998/11/28 (土) 19:18
なるほど。
フロッピーが使えました。
あの検索を使えばいいんですか。
ありがとうございました。
モデムは認識してくれないようだから
ひとまず休憩としようと思っています。
つぎはgccです。
GNU GCCでしたっけ?これだとWin32のが作れるんですよね。
検索してみました。
良く分かっていないんですがね

No. 32 # 68user [URL] 1998/11/30 (月) 18:18
ちょうどFreeBSD-users-jpで同じ質問が流れてました。
# 上の名前のリンクから辿れます。

結論としては、
    FreeBSDのGCCを使ってWin32アプリを作れないことはないけど、
    普通はやらない。Win用のGCCを使うか、Visual C++を使った方が簡単。
ってところでしょうか。

No. 33 # HARUKO 1998/12/03 (木) 11:20
初めて利用させていただきます。よろしくお願いします。

passwdコマンドを実行すると、ユーザーが存在しないという
メッセージが返ってきて、パスワードを変更することができません。
passwd: user-name dose not exist
/etc/passwdにもユーザはいるし、fingerでも確認できます。
passwdコマンドが壊れているのでしょうか?

No. 34 # 68user 1998/12/04 (金) 01:55
ども、初めまして。

OSはFreeBSDですか? だったら/etc/master.passwdが本当の
パスワードファイルなので、そちらをまず確認されてはいかがでしょう?

それから、passwd実行時には/etc/pwd.db、/etc/spwd.dbも同時に
参照されると思うので、そちらも壊れていないかチェックした
方がいいかもしれません。といっても、これらはテキスト形式では
ないので、/usr/sbin/pwd_mkdbを使って作成しなおす、という
ことになりますでしょうか。

No. 35 # 68user 1998/12/04 (金) 03:20
追加。rootになって、
    # pwd_mkdb /etc/master.passwd
で、新しい/etc/pwd.dbと/etc/spwd.dbが、
    # pwd_mkdb -p /etc/master.passwd
で、新しい/etc/passwdが作られます。

FreeBSDなら、ですけど。

No. 36 # HARUKO 1998/12/04 (金) 10:16
OSをきちんと明記してませんでした。すみません。
Solaris2.5.1です。

shadowファイルを、encryptして書きなおすという方法が
あるようなんですが、
passwdコマンドの解決にはならないので、
どうしたものかと思っています。

No. 37 # HARUKO 1998/12/04 (金) 10:54
OSをきちんと明記してませんでした。すみません。
Solaris2.5.1です。

shadowファイルを、encryptして書きなおすという方法が
あるようなんですが、
passwdコマンドの解決にはならないので、
どうしたものかと思っています。

No. 38 # 68user 1998/12/04 (金) 19:30
Solarisですかぁ…。僕はSolarisは全然知らないので、
ちょっと お力にはなれないと思います。すみません。

No. 39 # MORI [E-mail] 1998/12/08 (火) 11:10
始めまして。
質問は、はじめてですがいろいろ拝見させていただいています。

そこで質問なのですが、
tarフォーマットのFDをwindowsNT上でMS-DOSフォーマットに
変換する事はできるのでしょうか?
方法や、そのようなソフトなどが有れば教えていただきたいのですが

よろしくお願いします。

No. 40 # 68user 1998/12/10 (木) 01:04
ども、こんにちは。

tarフォーマットのフロッピーは、フォーマットという概念はなく、
データがベタで書かれたものだと思います。

こういうベタで書かれたものは、UNIXなら
    % dd if=/dev/fd0 of=hoge
    % cp /dev/fd0c hoge
    % cat /dev/fd0c > hoge
で取り出せます(ご存知かもしれませんが念のため)。

Win環境でUNIXのブートフロッピーを作る場合などは、rawrite.exeなど
使ってフロッピーにベタで書き込みますが、この逆のことをしてくれる
ツールがあればいいのだと思います。

で、そういうツールはあるか、というと…わかりません(^^;
rawrite.exeに読み出しモードがあるか調べるとか、Winのtarの
マニュアルを調べてみる、とか…。

またまたお役に立てませんでしたね。

No. 41 # 大塚保之 [E-mail] 1998/12/10 (木) 23:35
はじめまして

    UNIXのデータを、Windows95のパソコンで整理することはできないでしょうか?

    私は、印刷会社に勤務して、パソコンのオペレータをしております。
    で、勤め先なのですが、UNIXをOSとする組版機(業務用のワープロですね)
を使って、印刷の版下を編集・制作しています。
    ところが、社内にUNIXの分かる人間が皆無で、これまでに蓄積した膨大なデータを
効率的に管理する方法が分かりません。
    一応、組版機同士はLANで結ばれ、ハードディスクやMOなども、導入されており、
編集の段階では使っているのですが、作成後のデータの管理には、役に立っていないよう
です。
    このため、編集後のデータはフロッピーディスクに保存して、手書きの台帳で管理して
います。
    すでに、何千枚ものフロッピーが、保管されているのですが、未だに、月百枚ペースで
3.5インチのFDが増え続けています。

    何とかしたいと思うのですが、残念ながら、私もUNIXは全く素人です。

  で、思い立ったのですが、UNIXのデータが書き込まれたFDを、ウィンドウズの
パソコンで読み込み、ハードディスクに保存する方法はないものでしょうか?
    とりあえず、FDの読み書きと、ハードディスクへの転送ができれば良いのです。
    ネットワークの構築も、プリンタの接続もいりません。
    原始的な使用法とは思いますが、それだけでも大助かりです。
    まことに恐れ入ります、どなたか糸口だけでもご教示下さい。
    よろしく、お願いいたします。

No. 42 # ROL 1998/12/11 (金) 00:06
ども、ごぶさたです。
遂に胃カメラ飲むとこまでいってしまったROLです。
いや、きいてはいたけど苦しいもんですね、あれは…(涙)

さてさて、例のスクリプトの件ですが、
telnetで調べた結果サーバー側にnkfとtarはあることが判明。
サーバーの管理者から使用許可をいただきました。
あとはhttpdownなんですが、きちんとインストールするのであれば
使用してかまわないとのことでしたので、
httpdownをインストールして、スクリプトはそのまま使う方向にかえました。
というか、openで他のサーバーのファイルを開こうとするとエラーを起こすみたいなんですけど
httpdownを使ってるのって、これのからみなんでしょうか?

No. 43 # 68user 1998/12/11 (金) 00:17
1. 「組版機同士はLANで結ばれ」ということで、そのLANにWinマシンを繋げて、
        FTPでファイル転送する(ほんとはファイルサーバでデータを共有できれば
        いいんでしょうけど)。
2. 「ハードディスクやMOなども導入されており」ということで、UNIXで作ったMOを
        Winマシンで読む。
3. 「ハードディスクやMOなども導入されており」ということで、(UNIX上から)
        MOに編集後のデータを保存しておく。

あたりでしょうか…。

1なら、ケーブル繋げてWinマシンにIPアドレスとネットマスク設定して、(もし必要なら)
DNSサーバのIPアドレス入力するだけでOKかと思います。

2だとUNIXで作ったMOのフォーマットがufs(UNIXフォーマット)か、DOSフォーマットか、
あるいはそれ以外か、というところで引っかかるかもしれませんね。

3がお手軽かと思うんですが、ちょっと文面からはわかりませんが、MOやHDDでなく
フロッピーで保存しなければならない事情があるんでしょうね。


> すでに、何千枚ものフロッピーが、保管されているのですが、未だに、月百枚ペースで
> 3.5インチのFDが増え続けています。

うーん、それは大変ですねぇ(^^; 数千枚のFDをコピーするのは嫌だなぁ。

でも本当に困っておられるなら、ソフト屋やネットワーク屋に金を払って、
UNIXとWinマシンでデータを共有できるようにするとか、UNIXあるいはWin上での
台帳管理ソフトを作ってもらう、ってのをお勧めしますよ。

# ↑不況を知らない学生の発想かも。社会に出ると上司に
# 「そんなものに金は出せん。君がなんとかしろ!」
# とか言われるのでしょうか(^^;

No. 44 # 68user 1998/12/11 (金) 00:31
> というか、openで他のサーバーのファイルを開こうとするとエラーを
> 起こすみたいなんですけどhttpdownを使ってるのって、これのからみなんでしょうか?

えっと、ちょっと状況がよくわかりませんが、
とりあえずhttpdownの使い方を説明します。

level 1 (1段階リンクをたどる)
httpproxy http://proxy.hogehoge.com:8080/ (proxyを使うなら)
reportlevel 2 (なくてもいいです)
start http://www2.sega.co.jp/bbs/t/test/1_index.html (落としたいURL)

という内容のhttpdown.cnfというファイル(ファイル名はなんでもいいですが)を
作って、コマンドラインから
    % httpdown httpdown.cnf
とすると、カレントディレクトリ以下に www2.sega.co.jp/bbs/t/test/1_index.html
が作成されます。それに相当することをg2で行っているのが、

sub download {
    open(OUT,">$base_dir/sega2.def");
    print OUT "level 1\n";
    print OUT "httpproxy $proxy\n";
    print OUT "reportlevel 2\n";
    print OUT "start http://www2.sega.co.jp/bbs/t/test/$_[0]\n";
    close(OUT);
    system("$httpdown $base_dir/sega2.def > /dev/null");
}

openで読めるのは、そのサーバ上にあるファイルだけですから、
こうやって一度ファイルを落とした後にopenして読み込むわけです。


その前に、httpdownのコンパイルは終りましたか?
http://www.mechatronics.mech.tohoku.ac.jp/~kumagai/bins/kuma/httpdown-3.13.tar.gz
を落して、UNIX上で、
    % gzip -dc httpdown-3.13.tar.gz | tar tvf -
でアーカイブの一覧が見られます。
    % gzip -dc httpdown-3.13.tar.gz | tar xvf -
で展開です。そしたらhttpdown313というディレクトリが出来ているはずなので、
    % cd httpdown313
    % make
とすると、コンパイルが始まって、そのディレクトリにhttpdownというコマンドができます。

もしコンパイル中にエラーで止まってしまったらMakefileを修正すればいいでしょう。
# その場合、uname -aの結果とmakeした結果全てを見せてください。


> 遂に胃カメラ飲むとこまでいってしまったROLです。

会社に入るとやっぱりストレス溜るんでしょうか…
お大事に…

No. 45 # ROL [E-mail] 1998/12/11 (金) 00:59
makeの結果こういうメッセージが出ました。
エラーですね
--------
gcc -c http.cc
gcc -c parse.cc
gcc -c flist.cc
gcc -c httpdown.cc
gcc -c url.cc
gcc -c ftp.cc
gcc -c makedef.cc
gcc -c match.cc
gcc http.o parse.o flist.o httpdown.o url.o ftp.o makedef.o match.o -o httpdow
n -lresolv
ld: cannot open -lresolv: No such file or directory
make: *** [httpdown] Error 1
------------

でMakefileの内容です
----------
# makefile for httpdown

# please use c++ compiler
CC = gcc

#
# linker library options
#
# default(SunOS 4.1.1-JL 1 sun4c)
LIBS= -lresolv

# SunOS 5.5 Generic sun4c sparc
# LIBS= -lnsl -lsocket -lresolv

# SunOS 4.1.4 2 sun4m
# LIBS= -lresolv -l44bsd

# AIX
# LIBS=

# Linux
# LIBS=

# HP-UX
# LIBS=

# if some errors with 'gethostname' occured, try to comment out
# next line.
# GETHOSTNAME = -DNEED_GETHOSTNAME

# if debugging (for core dump analysis)
# DEBUG = -g

# compile option
COPT = $(GETHOSTNAME) $(DEBUG)

OBJS = http.o parse.o flist.o httpdown.o url.o ftp.o makedef.o match.o

httpdown: $(OBJS)
    $(CC) $(COPT) $(OBJS) -o httpdown $(LIBS)

urlget: urlget.o url.o ftp.o http.o
    $(CC) $(COPT) urlget.o url.o ftp.o http.o -o urlget $(LIBS)

http.o: http.cc http.h url.h
    $(CC) $(COPT) -c http.cc

ftp.o: ftp.cc ftp.h url.h
    $(CC) $(COPT) -c ftp.cc

url.o: url.cc url.h
    $(CC) $(COPT) -c url.cc

parse.o: parse.cc httpdown.h
    $(CC) $(COPT) -c parse.cc

flist.o: flist.cc http.h httpdown.h
    $(CC) $(COPT) -c flist.cc

makedef.o: makedef.cc
    $(CC) $(COPT) -c makedef.cc

httpdown.o: httpdown.cc httpdown.h http.h url.h ftp.h
    $(CC) $(COPT) -c httpdown.cc

urlget.o: urlget.cc
    $(CC) $(COPT) -c urlget.cc

match.o: match.cc match.h
    $(CC) $(COPT) -c match.cc

----------
ここまでくるとワシには何がなんやらさっぱり(笑)

No. 46 # 68user 1998/12/11 (金) 01:15
Makefileの
    LIBS= -lresolv

    LIBS=
に変更して もっかいmakeしてください。


> ここまでくるとワシには何がなんやらさっぱり(笑)

C言語はソースコードをコンパイルするとともに、既に
コンパイル済の部品(=ライブラリ)を組み合わせて(=リンクして)
バイナリを作成するんです。

そのコンパイル済の部品の名前が、OSごとに少しずつ違う
わけです。例えば -lresolv は /usr/lib/libresolv.aが
あることを期待しているんですが、ROLさんとこのサーバには
そのファイルがなかったのでエラーになったわけっすね。

No. 47 # ROL [E-mail] 1998/12/13 (日) 03:00
>openで読めるのは、そのサーバ上にあるファイルだけですから、
>こうやって一度ファイルを落とした後にopenして読み込むわけです。
あ、やっぱり。
openって他のサーバーのファイルは開けないのか。
おかげで、httpdownの役割というか重要性も理解できました。

あとは各ディレクトリの設定をやり直すだけで取りあえず動くはず…
でも、この脱力感はなんでしょうね?
過去ログをとるスクリプトを理解することが目的になってしまってるような気がする。
っていうか、あそこの現状を見るに、過去ログそのものの
存在の意義を見出せなくなってきている自分に気がついた…

No. 48 # 東郷貴之 1998/12/13 (日) 07:38
お師さん、こんにちは。
「その他」での書きこみを見て、ふと気がつくと…
何故か手元にFreeBSD 2.2.Jの箱が…
と、いうわけで、性懲りも無くまた手をだしてしまい
ました。まあ、ゆっくりとやっていきますです。
で、さっそく質問ですが…(^^;
Xの画面(解像度)の事なんですが、僕の設定では
1280*1024でちょうどXの画面がディスプレイのワクに
ばちっとはまるようになっているのですが、解像度を
変えると(800*600等)画面がディスプレイのワクから
はみでてしまいます。ただ、カーソルを画面のワクの
ほうへ動かせばスクロールするので使用するのには
別に問題はありませんが、「解像度が変わっても
ディスプレイのワクにばちっとはまんねーかなぁ」
とふと思ったので、ちょっとお聞きしたかっただけです。
お師さんの画面ではそういう問題はありませんでしたか?

No. 49 # 東郷貴之 1998/12/13 (日) 07:46
あ…2.2.6Jだった。6を落としてしまった。
失礼しました。
それでは。

No. 50 # 68user 1998/12/13 (日) 14:56
> 解像度を変えると(800*600等)

これは、Ctrl-Alt-`+'などで解像度を変更した場合ですか?
もしそうなら、ルートウィンドウサイズはそのままで、画面の
一部分を拡大しているだけなので、無理なんじゃないかなぁ。
あるいはウィンドウマネージャの再起動でなんとかなるかも
しれませんが…。

後から試してみます。

> あ…2.2.6Jだった。6を落としてしまった。

高級なパッケージをお持ちで(笑)


> でも、この脱力感はなんでしょうね?

興味のないことを無理にやってても つらいだけなのは
十分理解できますので、やめちゃってもいいですよ。
こんなの義務でも何でもないんだし。

どーでもいいことやってても、それはただの時間の浪費です。
どうなさるかは おまかせします。

No. 51 # 東郷貴之 1998/12/14 (月) 05:03
なるへそ。なんとなくわかった(ような)気がします。

>これは、Ctrl-Alt-`+'などで解像度を変更した場合ですか?

そうです。だって、設定ファイル(でしたっけ)等の
いじりかたがまだよくわからないので、お手軽にでき
る方法しかやってませんのですよ。
でも後は自分でなんとかなると思います。
(でもいつになることやら。過去ログのリジェクトログ
付きの文を無理やり見る方法を教えてもらった時は
教えてもらってからできるまで○ヵ月かかってたしなぁ…
あ、やべっ!また怒られちゃう(^^;)
ご教授どうもでした。

No. 52 # ROL [E-mail] 1998/12/15 (火) 00:27
>どーでもいいことやってても、それはただの時間の浪費です。
>どうなさるかは おまかせします。
ん〜、取りあえずスクリプトが動くようになるまで、
がんばってみるつもりです。
ただ、スクリプトがマトモに動いたからといって、
ログをとるかどうかはそのときの気分次第っていうことで(笑)
だってすでに目的と手段が入れ代わってるんだもん(爆)

No. 53 # 68user 1998/12/15 (火) 02:44
> だってすでに目的と手段が入れ代わってるんだもん(爆)

A4集計を始めた理由
    1. httpクライアントが書けたから。
    2. POST形式のデータ送信方法がわかったから。
    3. こんなことができるんだぞ〜と自慢したかったから。
最初から動機が不純でした(笑)

No. 54 # ぱかぽこ 1998/12/18 (金) 16:27
UNIXでの日本語環境のことしりたいです!

No. 55 # ROL [E-mail] 1998/12/19 (土) 18:59
どもども、ROLっす。
g2のその後ですが、スクリプト自身は動いてるようなんですが
test-logディレクトリに1998-12-19.tgzと
testbbs-log.htmlの2ファイルはできてます。
でも、できてるだけ。
容量がそれぞれ1kと0K。
どうやらhttpdownでうまく落とせてない模様。
おっかしいなぁ???
プロキシがおかしいのかな???
プロキシってどこのでも問題ないですよね?

No. 56 # 68user 1998/12/21 (月) 03:46
    $base_dir = "$home/test00"; # 作業用ディレクトリ
が存在しないのではないでしょうか。別のディレクトリ名に
していただいてもOKです。
    $home/test00/sega2.def
にhttpdown用の設定ファイルを作って、httpdownは
    $home/test00/www2.sega.co.jp
    $home/test00/www2.sega.co.jp/bbs
    $home/test00/www2.sega.co.jp/bbs/t
    $home/test00/www2.sega.co.jp/bbs/t/test
と再帰的にディレクトリを掘っていきます。

ぱかぽこさん:
> UNIXでの日本語環境のことしりたいです!

「UNIXでの日本語環境」と言っても
    ・FreeBSDかLinuxか、あるいは その他のUNIX系OSか、
    ・Linuxなら、どのディストリビューションか
などで結構違いますので、これだけではなんとも…

No. 57 # 東郷貴之 1998/12/23 (水) 05:21
User Agent統計を見て…
HI-UXは、僕です(^^;。
なんでも日立のHI…なのかどうかは知りませんが、
とにかく日立が関係してるようです。
そんだけしか知らない…(汗)
また、ブラウザのchimeraも僕です(たぶん)
なんかいろいろ試したかったもんで。
いや、だからなんだってわけじゃあないんですが。

No. 58 # ROL [E-mail] 1998/12/29 (火) 00:56
&init_work; # ディレクトリ作成 & tarball展開
exit;
としてテストを実行してみたところ、サーバーからエラーがかえってきています。
その状態では確かにtest00はできてます。
なので&init_work;の後半部分
if ( -f "$log_dir/$date.tgz" ){
    system("mkdir -p $main_dir/");
# print "extract $log_dir/$date.tgz\n";
# system("$tar zxf $log_dir/$date.tgz -C $main_dir");
        }
が問題なんでしょうね…多分。
で、ここの
if ( -f "$log_dir/$date.tgz" ){
の-fが何なのかが全然分かってないので、手がつけられないんですが…

No. 59 # 68user 1998/12/31 (木) 18:02
> とにかく日立が関係してるようです。

どうもです。早速更新しました。

> が問題なんでしょうね…多分。

事前に ~/test00 と ~/public_html/test-log をmkdirして
おけば大丈夫だとは思うんですが、どうでしょう。

> の-fが何なのかが全然分かってないので

本買いましょ〜。

ファイルが存在するかどうかのチェックです。/hoge/file
というファイルが存在すれば、-f "/hoge/file" は真に
なります。

# 他には
# -f ファイルがあるか
# -d ディレクトリがあるか
# -r 読み込み権限があるか
# てな感じです。あと20個くらいはあったはず。

    既にその日のアーカイブが存在する
→少し前にg2を実行した
→いちいち全部落とすのは時間がかかる
→事前に展開しておけば、時間の節約

というわけで、動作チェックをしている場合は
    # if ( -f "$main_dir/$1" ){ next; }
の行のコメントをはずすと、既にあるファイルは落とさなく
なるはずです。


今日の分をもちまして過去ログ作成は終了しますので、
あとはROLさんにまかせたっ。ではではでは。

No. 60 # ROL [E-mail] 1999/01/06 (水) 12:55
すんません、お師さん。原因はそれじゃないみたいです。
ちょこちょこかえて、「$base_dir/www2.sega.co.jp/bbs/t/test/」ディレクトリが出来るとこまでは確認しましたが、
「test00」内に「sega2.def」と「sega2.def~」が出来てます。
で、$base_dir/www2.sega.co.jp/bbs/t/test/内に何もダウンロードされてません。
「sega2.def」の中身を見ると
「reportlevel 2
start http://www2.sega.co.jp/bbs/t/test/1_index.shtml
>following lines are automatically generated by httpdown
E http://www2.sega.co.jp/bbs/t/test/1_index.shtml
ってなってます。
これはつまりHTTPDOWNが巧く働いてないって事ですよね?
これはなんでなのかわかんないっす。
もういいかげん、いやになられたとは思いますが、すみませんが
ご教授くださいませ。

No. 61 # 68user 1999/01/06 (水) 17:51
sega2.defの内容を
    level 1
    start http://www2.sega.co.jp/bbs/t/test/1_index.shtml
にして試してみてください。
# コマンドラインから % httpdown sega2.def

それでもダメなら
    level 1
    httpproxy http://hoge.fuga:8080/
    start http://www2.sega.co.jp/bbs/t/test/1_index.shtml
と、適切なproxyを設定してやるとどうなりますか?

No. 62 # ROL [E-mail] 1999/01/06 (水) 18:46
追加
それぞれ出来たsega.defの内容です。
sega2.def~
「level 1
httpproxy http://www.cs.gunma-u.ac.jp:8080/
reportlevel 2
start http://www2.sega.co.jp/bbs/t/test/1_index.shtml

sega2.def
「level 1
httpproxy http://www.cs.gunma-u.ac.jp:8080/
reportlevel 2
start http://www2.sega.co.jp/bbs/t/test/1_index.shtml
>following lines are automatically generated by httpdown
E http://www2.sega.co.jp/bbs/t/test/1_index.shtml
実はproxyを2、3変えて実験してみたんですが、
同じ内容しか出来ないのでオリジナルの
g2の「httpproxy http://www.cs.gunma-u.ac.jp:8080/」に
してみた結果がこれです。
やっぱり、CGIを動かすサーバーのPROXYを設定したほうがよいのでしょうか?HTTPDOWNには…?

No. 63 # 68user 1999/01/06 (水) 19:55
えっと、www.cs.gunma-uのproxyには、外部の人は接続できないはずです。
いつも使っているproxyを設定してください。

もしサーバ上から
    % telnet www.sega.co.jp 80
    GET / HTTP/1.0(リターン)
    (もいっかいリターン)
として、HTMLが出力されるならproxyは必要ないはずですが、
もしダメなら適切なproxyを設定する必要があります
(外部のポート80宛のパケットは通さない設定なのでしょう)

No. 64 # ROL [E-mail] 1999/01/07 (木) 18:05
    % telnet www.sega.co.jp 80
   GET / HTTP/1.0(リターン)
   (もいっかいリターン)
実行したらHTMLが出力されました!!!
ってことで、変数の定義の所の $proxy =以下と
&download内の
        print OUT "level 1\n";
        print OUT "httpproxy $proxy\n";
の2行を削除して、やってみます!!!

No. 65 # ケースケ [URL] 1999/01/07 (木) 21:55
はじめまして。
えっと、学校の端末でzipを解凍することはできないんですか?
そもそもunixではzipはだめなのですか?
おしえてください

No. 66 # 68user 1999/01/08 (金) 03:04
ROLさん:
    print OUT "level 1\n";
は削らない方がいいでしょう。これはリンクを1段階たどる、ということを
表しています。

ケースケさん:
UNIXでZIPを扱えるアーカイバにはunzipというのがあります。
# ZIP形式は普段使わないのでよくわかりませんが、
# unzipは展開専用、zipは圧縮専用かなぁ?

これはflute.cs.gunma-u.ac.jpで、ってことですよね?
どうやらインストールされてないようですから、管理者にお願いしたり
ソースからコンパイルする方がいいんでしょうけど、それがめんどくさいなら
    ( find / -name unzip >/dev/tty ) >& /dev/null
などで探せます。数分待てばいくつか表示されるので、お好きな
ものを使うといいでしょう。

No. 67 # ROL [E-mail] 1999/01/10 (日) 23:30
やっと…、やっとDLまではこぎつけました、はぁ長かった…
まぁまだまだ問題は山済み状態なんですが、一番大きな山はこえたのだと思ってます。

で、残された、私ではなんともならない問題…
そう、自動化です。
以前、某氏から触りの部分だけ、聞いたはずなんですか
さっぱり忘れてます。
なので、どういうファイル名のファイルか、
そしてそのファイルの中身でどういう指事をすれば
任意のCGIを任意の時間に自動的に動かすことができるのか…
これを御教授ください。

No. 68 # 68user 1999/01/11 (月) 01:04
まずは
    http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#crontab
をどうぞ。

~/.crontabにいつどんなプログラムを実行するか書いてください。
毎日6時30分に実行するなら、
    30 6 * * * command
です。g2をどこに置いたかは知りませんが、ホームディレクトリからの
ディレクトリ相対指定で動くはずです。例えば
    30 6 * * * bbs/g2
など。わからなければ
    30 6 * * * /home/user/bbs/g2
とフルパスで書いてください。

~/.crontabに書いたら、
    % crontab ~/.crontab
で登録されます。
    % crontab -l
として
    30 6 * * * bbs/g2
と表示されればOKです。

しかしその前にきちんと動くかどうか、簡単なテストをしてください。
    #!/usr/local/bin/perl
    print "test OK!\n";
というスクリプトを書いて、chmod +x して、そのとき22:55なら
数分後、例えば23:00に実行されるようにしてください。~/.crontabに
    0 23 * * * script
と書いて、
    % crontab ~/.crontab
とします。
    % crontab -l
    0 23 * * * script
となれば登録は正常に行われています。で、23:00になったら、test OK!
という内容のメールが送られてきたらいいわけです。

crontabについて さらに詳しいことは
    http://www.jp.freebsd.org/cgi-bin/yoyaku/mroff.cgi?sect=5&bgcolor=%23ffffff&cmd=&lc=1&subdir=man&dir=jpman-2.2.8%2Fman&subdir=man&man=crontab
をどうぞ。

わからなければまた聞いてください。

> 任意のCGIを任意の時間に自動的に動かすことができるのか…

細かいことですが、webサーバ経由で実行されるプログラムを
CGIと言います(ほんとは、その仕組み自体がCGIなんですけど)。

今回はwebサーバは関与しませんから、プログラムとか
スクリプトと言った方がいいですね。

No. 69 # ROL [E-mail] 1999/01/11 (月) 16:07
お師さん、いつもすみませんです。
お教えいただいた crontab とその説明ってFreeBSDのですよね。
BIGのサーバーは Linux 2.0.36で動いてるようで
まず「~/.crontab」って名前でファイルがおけなかったので
適当に名前を変えて、% crontab script
を実行してみましたが
「bash: /usr/bin/crontab: Permission denied」っていわれて、ダメです。
んで、「whitch crontab」で crontabコマンドを探すと
「whitch: command not found」っていわれちゃいます。
どないしたらよいのでしょうか?

あぁ、もうまったく手が出ない世界にアシを突っ込んでるな…

No. 70 # 68user 1999/01/11 (月) 18:02
    僕の場合.crontabというファイル名にしているだけで、
他のファイル名でも全く構いません。

> 「whitch crontab」で crontabコマンドを探すと

whichですよね。whitchじゃなくて。

> bash: /usr/bin/crontab: Permission denied

ん〜、とりあえず、
    % ls -l `where crontab` (「'」ではなく「`」で囲んでください)

    % ls -l `which crontab`
の結果を教えてください。あと、
    % id
の結果も。もしかしたらbigではcronは使えないように
なってるのかもしれません。その場合は、管理者に
お願いするしかないです。

No. 71 # ROL@胃潰瘍で仕事中に何やってんだおまえ…(笑) [E-mail] 1999/01/11 (月) 18:10
え、それぞれの結果です
ls -l `where crontab`
bash: where: command not found
total 1
lrwxrwxrwx 1 root root 22 Oct 30 16:29 ftp -> /home/ftp/pub/usr8
/rol/
drwxr-xr-x 5 rol users8 1024 Jan 10 18:08 html/

ls -l `which crontab`
/bin/ls: which:: No such file or directory
/bin/ls: no: No such file or directory
/bin/ls: crontab: No such file or directory
/bin/ls: in: No such file or directory
/bin/ls: (/bin:/usr/bin:/usr/local/bin:/usr/X11/bin:/usr/andrew/bin:/usr/openwin
/bin:/usr/games:.): No such file or directory

id
uid=14127(rol) gid=107(users8) groups=107(users8)

てな所ですが、どうなるでしょ?

No. 72 # 68user 1999/01/11 (月) 18:34
もいっかい。
    % ls -l /usr/bin/crontab
でお願いします。

No. 73 # ROL [E-mail] 1999/01/11 (月) 18:43
ls -l /usr/bin/crontab
-rwx------ 1 root bin 9008 Aug 24 1997 /usr/bin/crontab*

って結果です。
ってこれって、オーナーしか動かせないって事…(涙)

No. 74 # 68user 1999/01/11 (月) 19:30
その通りです。管理者にお願いしてみましょう。その結果ダメだと
言われたら残念ながらcronは不可、ということになります。
# ソース持ってってコンパイルとか…したいですか?

No. 75 # ROL [E-mail] 1999/01/12 (火) 15:29
だ、だめです、お師さん
>自動起動系のものはサーバーの保守の関係上、
>いかなる理由があろうとも一切禁止です。
だそうです(涙)

MacでAppleScriptで毎日サーバーにTelnet接続して
スクリプト起動させるようにする…しかないか?
(出来るかどうかは解らんけど…)

No. 76 # 68user 1999/01/13 (水) 02:13
うーん、仕方がないと言えば仕方がないですね。管理者が
そういう方針を取ることは理解できます。

結局は6:30に起動するプロセスがあれば、その中で
g2を実行すればいいわけです。内部にきっかけとなる
プロセスを用意することができないなら、外部から
呼ぶという手もあります。AppleScriptも一つの手ですね。

他には
・6:30に自動的にbigの中のあるwebを取得するように
    して、その中でCGIを動かしておく。そのCGIの中で
    g2を実行(CGIは普通nobody権限で動くので、そこら
    へんに問題あり)。
・6:30に自動的にbigにメールを送る。.forwardに
    メールが届くとあるプログラムが起動するように
    しておいて、現在時刻が6:30付近ならg2を実行
とかとか。

No. 77 # mm [URL] 1999/01/15 (金) 21:43
こちらでは、はじめまして。
「ネットワークプログラミングの基礎知識」を読ませて頂きました。
で、本題の方は、向こうで話題にしてしまったので(^^;
ちょっとズレた質問で申し訳ないのですが、「inetdの役割」で
「UNIXでは現在実行中のプログラムのことをプロセスといいます」
という定義がありますよね。
この「プロセス」というものがもう一つよく分からないのです
(inetdの説明上では理解できるんですが…)。

「実行中」というのは、1つのプロセスのプログラムがexecで
切り替わった場合も、プロセスとしては同じだという意味で
受け取っていいのでしょうか?
また、プロセスというのは、カーネルがスケジュールに従って
実行時間を割り当てる単位と考えてもいいのでしょうか?

それから、UNIXではプロセスを生成できるのはforkだけだと聞きますが、
forkって親プロセスのメモリイメージとレジスタを丸ごとコピーする
んですよね。この場合、子プロセスが直ぐにexecでプログラムを切り替えても、
メモリ上には親プロセスのコピーがそのまま残るんでしょうか?
(execで切り替わったプログラムが終了しても、子プロセスがまだ
実行を続けるかも知れないので、こんなコピーの残骸で一杯になりそうな
気がするのです…)

それと、マルチプロセスと関連のありそうな言葉として、タスク、スレッド、
コンカレント、コルーチンなどとの相違も教えて頂ければうれしいです。
スレッドは、プロセス内プロセスみたいなもの…?
コルーチンは、Windowsの3.1以前のアプリケーションみたいなもの…?

なんか、ネットワークとぜんぜん関係ないなぁ…すいませんです(^^;

No. 78 # 68user 1999/01/16 (土) 07:41
mmさん、はじめまして(とか言ってみたりして(笑))

> execで切り替わった場合も、
> プロセスとしては同じだという意味で
> 受け取っていいのでしょうか?

#!/usr/local/bin/perl
if ( $pid = fork ){
    print "子プロセスは$pidです。\n";
    sleep 2;
    system("ps aux|grep $ENV{USER}|grep perl");
    print "\n";
    sleep 4;
    system("ps aux|grep $ENV{USER}|grep -E '(perl|sleep)'");
    wait;
} else {
    sleep 4;
    exec("sleep 5");
}
# fork、ps、子プロセスがexec(sleep)、psという順番で動くように、
# ところどころにsleepを入れてます。

を実行したところ、
    子プロセスは714です。
    zxr400 713 0.8 1.6 712 988 p2 S+ 7:25AM 0:00.02 perl fork (perl5.00404)
    zxr400 714 0.0 1.5 648 956 p2 S+ 7:25AM 0:00.00 perl fork (perl5.00404)

    zxr400 713 0.0 1.5 712 944 p2 S+ 7:25AM 0:00.02 perl fork (perl5.00404)
    zxr400 714 0.0 0.1 172 60 p2 S+ 7:25AM 0:00.00 sleep 5
となります。プロセス番号714の子プロセスが、exec sleep 5しても
やはりプロセス番号は714のまま、ということだと思います。

> また、プロセスというのは、カーネルがスケジュールに従って
> 実行時間を割り当てる単位と考えてもいいのでしょうか?

僕もそういうふうに理解しています。

> execで切り替わったプログラムが終了しても、子プロセスがまだ
> 実行を続けるかも知れないので、こんなコピーの残骸で一杯になりそうな
> 気がするのです…

execが戻ってくるのはexecに失敗したときだけで、execの実行に成功すると
絶対に戻って来ません。だから元のプロセスのイメージを保持しておく
必要はないですから、OSが掃除してくれるんじゃないでしょうか。

> タスク、スレッド、コンカレント、コルーチン

うーん、僕もよく知らないんですが…。スレッドに関しては、

> スレッドは、プロセス内プロセスみたいなもの…?

でいいのかなぁ。

Javaではスレッドを使うことでプロセスの中で並列実行ができます
よね。一方「マルチスレッド版echoサーバ」というのは、ただ単に
「並列処理ができるよ」くらいの意味ですが、別にスレッドを
使っているわけではなく、forkで実現しています。
また、FreeBSDではスレッドへの対応が進み、スレッドセーフな
OSになりつつあるようです。

というわけで、「スレッド」という言葉はどの環境を指して
使うかで結構意味に違いがあるんじゃないかと思うんですが…。

あと、「タスク」はUNIXの用語でしたっけ。多分Winの用語かな
と思うんですが、結局ここらへんはプロセスと呼ぶかタスクと
呼ぶかの違い、単純に呼称の違いではないかと思ってるんですが…。

コンカレント・コルーチンは初めて聞きました(^^;

No. 79 # mm 1999/01/16 (土) 18:51
68user さん、どもです(笑い)

>となります。プロセス番号714の子プロセスが、exec sleep 5しても
>やはりプロセス番号は714のまま、ということだと思います。

そそ、そんなイメージでした(^^;
先のpsの時点と後のpsの時点では実行されているプログラムはちゃうけど、
プロセスとしては同じなんだという意味ですね。

>僕もそういうふうに理解しています。

安心しました(^o^;ゞ

>Javaではスレッドを使うことでプロセスの中で並列実行ができますよね。

そのヘンがプロセスとスレッドとの違いかなと思っていたのです。

>というわけで、「スレッド」という言葉はどの環境を指して
>使うかで結構意味に違いがあるんじゃないかと思うんですが…。

このヘンの用語は仰る通りだと思います。
で、一応UNIXでのことを伺ったつもりだったのですが、書いてませんでしたね(^^;

私にとっては、「スレッド」という言葉は少なくともコンピュータの分野では
Javaで始めて聞いたような気もするんで(スレッドタイプの掲示板というのも
ありますが…(^^;)、一応Javaのスレッドを想定していたのですが、
>一方「マルチスレッド版echoサーバ」というのは、ただ単に
>「並列処理ができるよ」くらいの意味ですが、別にスレッドを
>使っているわけではなく、forkで実現しています。
>また、FreeBSDではスレッドへの対応が進み、スレッドセーフな
>OSになりつつあるようです。
ということは、一般的にはもっと広い意味がありそうですね。

>あと、「タスク」はUNIXの用語でしたっけ。多分Winの用語かな
>と思うんですが、結局ここらへんはプロセスと呼ぶかタスクと
>呼ぶかの違い、単純に呼称の違いではないかと思ってるんですが…。

あっ、UNIXでは「タスク」は使わないんですね。
確かに岩波の情報科学辞典なんかでも、「プロセス=タスク」としています。
ただ、「タスク」はWinの用語(その場合の意味は?)だけでなく、
もっと古くから使われているようで、その頃、「マルチタスク」と
「マルチプロセス」とは違うんだよ、というような話を
聞いたような気もしたもので…(^^;

>コンカレント・コルーチンは初めて聞きました(^^;
concurrent は、どうも並行という一般的な意味みたいです。
concurrent Pascalとかconcurrent CP/M なんてのを聞いたことが
あったのですが、どのように並行してたのかは知りませんです。
(この並行と多重(multi)の違いもよく分からない(^^;)

coroutinは、原始的な並行プロセスかな…
確か、各ルーチンごとに専用のスタックを持って、自分の処理が
一段落すると、レジスタなどの環境をスタックにpushして、
別のルーチンを呼ぶ。
別のルーチンも自分のスタックから環境をpopして処理を行い、
これが一段落すると、また環境をスタックにpushして元のルーチンや
別のルーチンを呼ぶ、ということを繰り返して並列処理を
実現するものだったと思います。
で、どれかのルーチンがCPUを独占してしまうと、
もう並行プロセスにならないってものなのです。


>execが戻ってくるのはexecに失敗したときだけで、execの実行に成功すると
>絶対に戻って来ません。だから元のプロセスのイメージを保持しておく
>必要はないですから、OSが掃除してくれるんじゃないでしょうか。

ありゃ…すいません、完全に誤解してました(^o^;ゞ
execは戻らないんですね(MS-DOSとごっちゃにしてたかな?)
実は、シェルが一旦forkしてからexecするのも疑問だったのです。

No. 80 # mm 1999/01/17 (日) 13:59
ちょっと間違いです(^^;
>execは戻らないんですね(MS-DOSとごっちゃにしてたかな?)
MS-DOS でも exec は戻りませんでした。
(いずれにしても、単一プロセスのMS-DOSの感覚が
なかなか抜けないみたいです…(^^;)

No. 81 # 涙… [E-mail] 1999/01/18 (月) 00:24
AppleScript対応したtelnetソフトがないぃぃぃぃ…
ってわけで、ここ1週間ほど、朝6時頃おきて、サーバーに繋いで
コマンド打ち込んで…をくり返す毎日でございます。

ブラウザ上からCGI直接指定して、うまく動かせるようにできんかな…
だったら、毎朝自動的に立ち上げてほっぽっときゃいいし(笑)

No. 82 # ROL [E-mail] 1999/01/18 (月) 00:25
下、ワシの発言です。
つい、名前のとこに「タイトル」を入れてしまった(笑)

No. 83 # ROL [E-mail] 1999/01/20 (水) 12:31
tarでファイルを一つにまとめて出来るファイル(% tar xf〜で指定)を直接いじって大丈夫でしょうか?
ファイルの書き換えが面倒なので「% tar xf〜」で複数のファイルを一つにまとめ、一括して特定の文字列を置換したあと、
元に戻す…ってのをやりたいんですけど?

No. 84 # ROL [E-mail] 1999/01/20 (水) 14:36
すんません、お師さん。
下の質問は無視ぶっこいてください。
実験の結果、だめな事が立証できましたわ。

No. 85 # 68user 1999/01/20 (水) 15:56
file1 file2を
    % tar cf file.tar file1 file2
でfile.tarにアーカイブして、file.tar自体をいじる、ってことですか?

tarファイルはヘッダが付いてますので、一般的には無理です。
が、絶対不可能ってことはないんじゃないかなぁ。
エディタなどでは無理でしょうし、aをbに変換、なんてのは
ヘッダを書き換えてしまう可能性があるのでダメでしょうが、
hogehogehogehogeをfugafugafugafugaに変換、ってのは
たぶんできるんじゃないでしょうか。

とはいえ
opendir(DIR,".");
@files = grep(/file\d/,readdir(DIR));
closedir(DIR);

foreach $file (@files){
    open(IN,$file);
    @buf = <IN>;
    close(IN);
    open(OUT,">$file");
    foreach (@buf){
        s/a/b/g;
        print OUT $_;
    }
    close(OUT);
}
なんてやる方をお勧めします(バックアップを忘れずに)。

# perlにファイル自体を書き換えるオプションがあったかな?

No. 86 # mm 1999/01/21 (木) 03:26
># perlにファイル自体を書き換えるオプションがあったかな?
    perl -pi.bak -e "s/a/b/g;" file[0-9]
では?

No. 87 # 68user 1999/01/21 (木) 05:12
> perl -pi.bak -e "s/a/b/g;" file[0-9]

うーん、簡単ですねぇ。ちなみに僕は最近までオプションは -wと-e
しか知りませんでした。でも最近-cを覚えました(^^;

分厚いマニュアルをめくってオプション調べるより自分で書いた方が
早いんで、なかなか覚えられないんですが、長い目で見るとさっさと
オプション覚えた方がいいんでしょうけどね…。

# 一番悪いのは、青ラクダ本の目次。「オプション一覧」とか
# 「スイッチ一覧」なんて項がない。どこに書いてあるかと
# 言えば「コマンドインタプリタとの協調」。毎回オプション解説を
# 探すのに苦労してます。…ま、言い訳ですな(^^;

> ブラウザ上からCGI直接指定して、うまく動かせるようにできんかな…

CGIはnobody権限で動きますので、CGI経由で作られるファイルは
全て所有者がnobodyとなります。ファイル消せなくなってあわてない
ように(笑)

No. 88 # mm 1999/01/21 (木) 21:29
># 一番悪いのは、青ラクダ本の目次。

青いラクダは、確かに読みづらいですよね。
私の場合、普段は「日本語 perl texinfo バージョン 4.0.19.2」のプレーンテキ
スト版をオンラインマニュアルとしてを使ってます。高尾直弥さんという方の訳
ですが、リファレンス部分は赤いラクダとほぼ同内容だと思います。

ただ、今使ってるものはいろいろイジってて配布条件(GNU)上問題があるのと、
手元にオリジナルが見当たらないので、ちょっと探してみましたが、根性がない
ので↓のようなHTML版しか見つけられませんでした(^^;
    http://www.cec.co.jp/usr/hasegawa/Docs/perl-jman/index.html
でも、どこかに必ずオリジナルのtexinfo やプレーンテキスト版もあると思いま
す(^o^;ゞ

WindowsのヘルプやHTMLよりも、やっぱりエディタで正規表現検索が可能な普通の
テキストが使い易い…

No. 89 # mm 1999/01/21 (木) 22:15
日本語 perl texinfo の1頁ものがありました。
http://main.ipc.fukushima-u.ac.jp/fdai/man/perl.html
テキスト版の前後を<pre></pre>で括っただけなので、ブラウザではちょっとヘンになりますが、
直ぐにテキストに戻せると思います。

No. 90 # 68user 1999/01/24 (日) 00:21
どうもです。早速GETさせていただきました。
これでちょっとは賢くなれる…かな?(^^;

No. 91 # SRM2 1999/01/27 (水) 01:30
はじめまして(^^;
Perl関係で質問なのですが良いでしょうか。
Perlのみで画像(画像ファイル)の生成って出来ないんでしょうか?
いろいろ書けるほど情報が集まってないので、簡単ですがこれで。
よろしくおねがいします。

No. 92 # 68user 1999/01/27 (水) 02:36
はじめまして、SRM2さん(笑)

うっとこの
    http://X68000.startshop.co.jp/~68user/cgi-bin/view-count.cgi?log=sum0+sum1+sum2+sum3
は、flyというプログラムを利用していますが、perl単体で
ということなら、GD.pmというライブラリを使うといいでしょう。
    http://www.genome.wi.mit.edu/pub/software/WWW/GD.html
をどうぞ。英語ですが使い方は簡単にわかるはずです。

No. 93 # 山口 1999/01/27 (水) 18:38
はじめまして、山口といいます。
いきなりの質問で失礼ですが、.forwardの中にメールアドレスを書くと、届いたメールはその書き込んだメールアドレス当てに転送されますが、その時もとのメールアドレスでもみれるようにするにはどうすれば良いでしょうか。
    要するに転送する時に自分のところにオリジナルは置いておいて、そのコピーを転送するというぅような形にしたのですが。
    どなたかアドバイスを下さい。

No. 94 # M.Masuda [E-mail] 1999/01/27 (水) 21:59
はじめまして 68userさん M.Masudaです。

いや〜こちらのページにはじめてよらせていただきましたが
ずいぶんと勉強になります。

先ほど、CGIスクリプト関連をDOWNしたのでこれからおいおい
解析して勉強させていただきます。

にしても、PerlだけでなくUNIXやプロトコル・ネットワーク
関連の情報量には驚くばかりです。
これからも、宜しくお願いします。

ところで本題ですが。

自分で実験してみればいいのでしょうが、ファイルロックの
アルゴリズムには、一般的にflockを採用している物や、ロッ
クファイルを作成してスクリプト自身がロックを管理してい
る物が有りますが、今までの68userさんの経験上どういう手
法が一番効果が高いでしょうか。

あと、下の山口さんの質問は私も興味ありです(笑)
本屋さんでオライリーのsendmailかmailの本でも買って勉強
すればいいのでしょうが、それだけのためにはオライリーシ
リーズは高すぎる!!!
ここでうなずいた方は、沢山いるはず(爆笑)

#68userさんはレスの書込みの時間が遅い(早い?)ですが何
#をしてる方なのでしょうか?

そろそろ中級に足のかかってきた私ですが、宜しく御教授下
さい。

No. 95 # 68user 1999/01/27 (水) 23:27
はじめまして>山口さん、M.Masudaさん

山口さんのユーザ名がhoge、転送したいところがfoo@bar.com
だとしたら、.forwardに
    \hoge,foo@bar.com
と書けばいいです。カンマで区切ることで、複数の転送先を
指定できますから。しかし
    hoge,foo@bar.com
と書いてしまうと、hoge宛に(つまり自分自身)転送されますが、
再度 .forwardが参照されて、またhogeに送ろうとして…という
ふうに、無限ループに陥ります。

つまり、「\」を付けると「.forward を参照するな」という意味に
なりますので、無限ループが防げるわけです。

# ただ「\」を付けなくても、大抵のメールサーバだと数回ループ
# したら止まるでしょうし、最近のsendmailは賢いので一度もループ
# しないかもしれません。でも、念のため \ を付けておいた方が
# いいでしょう。


> 今までの68userさんの経験上どういう手法が一番効果が高いでしょうか。

特に詳しいわけではないんですが、選択肢としては
    1.flock
    2.mkdir
    3.シンボリックリンク
あたりでしょうか。うちのカウンタは3ですし、このBBSは2です。
flockはNFS環境では動かないところもある(動くところもある)
ということで、使ったことは一度もありません。

ただ2も3も、たま〜にロックが残ったままになることはあるんですよね。
でもOSレベルでは完璧に排他処理はできているはずです。
ですから、webサーバがシグナルを送って、CGIのプロセスを止めたとき
にロックが残るのではないかと思うんですが、本当にそうなのか、
どういう状況で起こるのか、などの検証はできていません。

完璧な方法があれば僕も知りたいです(^^;

> #68userさんはレスの書込みの時間が遅い(早い?)ですが何
> #をしてる方なのでしょうか?

ははは、生活リズムが不規則な ただの学生です(^^;

No. 96 # M.Masuda [E-mail] 1999/01/28 (木) 04:19
どうもありがレスとうございます。
.forwardの設定早速指定してみます。

>完璧な方法があれば僕も知りたいです(^^;
そうですか、まだ「これ!」ってセオリーは無いんですね(^^ゞ
今、flyを使ったカウンターを作ってるんですが、残ってしまった
ロックファイルを削除する方法を考えてみます。

今までCUIはDOSしか触った事が無いのでUNIXのTABや矢印キーには
非常に驚き、非常によく作られたUNIXのシステムに感心しています。
おかげでキータッチがだいぶ早くなりました。(^_^)V

この掲示板のタイトルに有る「UNIX,CGI,ネットワークの...」
は、今の私が求めているばかりで、ここは情報の宝庫です。

学生という事は、私よりだいぶ若いのにかなりの知識を持って
いるようで恥ずかしいばかりですが、ぜひまた何かあったら教
えて下さい。m(_ _)m
宜しくお願いします。

No. 97 # M.Masuda [E-mail] 1999/01/28 (木) 04:21
訂正
誤:どうもありがレスとうございます。
正:どうもレスありがとうございます。
(^^ゞ

No. 98 # 山口 1999/01/28 (木) 15:01
68userさんご回答ありがとうございます。
68userさんの言う通りにやってみたところ、
¥hoge,foo@bar.comのhogeにはメールが残らず、
すべてfooに転送されてしまいました。
何が行けないのでしょうか?
hogeの前は「エンマーク」でいいのですよね。

No. 99 # 68user 1999/01/28 (木) 23:30
僕が現時点で一番いいと思う方法は、シンボリックリンク自身に
プロセス番号の情報を埋め込み、もしリンク作成できなかったら
リンク先を調べて、さらに「/proc/プロセス番号」が存在するか
どうかチェックする、ってのです。もし/proc/プロセス番号 が
あれば、本当に実行中なわけですが、存在しなければ誤って
ロック情報だけが残ってしまったわけで。

また、
    $SIG{HUP}=$SIG{INT}=$SIG{QUIT}=\&finish;
    sub finish{
        ロックファイルを削除;exit;
    }
などと書くことで、誰か(WWWサーバなど)にシグナルを送られて
プロセスを止められた場合にも、ロックファイルの後始末だけは
行って終了できます。

ただ、うちのカウンタはいろいろ試しているんですが、いまいち…です。
# CGIの場合、排他処理の失敗自体がたまにしか起きないので、
# 動作チェックしにくいですよね。

例えばこんな感じ。

BEGIN { &lock_on; }
END { &lock_off; }

sub lock_on {
    $SIG{TERM}=$SIG{INT}=$SIG{HUP}=$SIG{QUIT}=\&lock_off;
    my $lock_flg = 0;
LOOP:
    foreach ( 1..3 ){
        foreach ( 1..5 ){
            $lock_flg = symlink("$$",$lockfile);
            if ( $lock_flg ){ last LOOP; }
            sleep 1;
        }
        if ( ! $lock_flg ){
            if ( ! -f "/proc/".readlink($lockfile) ){ # なぜかロックファイルが残ってた
                各種整合性のチェック;
                unlink($lockfile);
            }
        }
    }
    if ( ! $lock_flg ){
        print "ロックファイルを作成できませんでした。\n";
        exit;
    }
}

sub lock_off {
    unlink($lockfile);
    その他の後始末;
    exit;
}

> そうですか、まだ「これ!」ってセオリーは無いんですね(^^ゞ

たぶんセオリーはあるんでしょうけど、僕が知らないだけです(^^;


> hogeの前は「エンマーク」でいいのですよね。

全角の「¥」ではないですよ。半角の「\」です。
エンマークかバックスラッシュかは、表示される環境によります。

No. 100 # M.Masuda [E-mail] 1999/01/29 (金) 15:52
>たぶんセオリーはあるんでしょうけど、僕が知らないだけです(^^;
いやいや、これだけ知ってれば十分じゃ....この概念は私的でした
ね(^^ゞ

私のプログラミングは、BASICから入ってるのでいまだに構文の書
き方は、BASIC風です。(^^;
しかも、Perlもフリーで配布しているCGIを解析して構文の記述を
勉強したりしてるので、Perl4やそれ以前の頃からプログラミング
している人から比べたら、恥ずかしくって自分のプログラムなんて
公開できない。(T_T)

まだまだ奥が深いPerlは、これだけを勉強して立派なPerl使いにな
りたいんだけど、仕事柄これだけをやってるわけにいかないのが辛
いところです。(^^;

今同時進行で勉強してるのが、Perl,JavaScript,DHTNL,ネットワーク
関連、最近勉強を始めたDHTMLは、IEとネスケの互換性の無さにあき
れています、ページを2重化したくないので同じページ内でIE・ネス
ケそれぞれ3と4のバージョンで無難に表示させるのにてこずってま
す。(^^;

ところで以下の構文がまだよく分からないので、教えて下さい(T_T)
【1】
$SIG{HUP}=$SIG{INT}=$SIG{QUIT}=\&finish;
↑何をしているのか解からない(恥)
シグナルハンドラをいじっているのは解かるんだけど、
hoge=foo=fuge=booの '=' の使い方の意味と、\&finishの'\'がリファ
レンスを指す事は解かるんだけど、なぜ'\'そうするのかが解からない
【2】
my $lock_flg = 0; ←localとmyの使い分けがまだ理解できない

アー恥ずかしかった。(^^ゞ


この使い方は勉強になりました。
>$lock_flg = symlink("$$",$lockfile);
>if ( $lock_flg ){ last LOOP; }
こんなに簡単に書けるんですね!φ(._.)

># CGIの場合、排他処理の失敗自体がたまにしか起きないので、
># 動作チェックしにくいですよね。
早いマシンより、遅いマシンに負荷が集中する時にエラーが出やす
いんでしょうね。

ちなみに私の試験方法は、同じページ上に同じカウンタのURLを沢山
書いて、ブラウザのキャッシュを無効にしてリロードです。
#本当にこれでいいのか解からないけど、他に手段を知らない(^^ゞ

ではまた。

No. 101 # 68user 1999/01/29 (金) 17:23
>> $SIG{HUP}=$SIG{INT}=$SIG{QUIT}=\&finish;
    $a=$b=$c=100;
    print "$a,$b,$c\n";
の結果は100,100,100となります。つまり$a=100;$b=100;$c=100;と
等価なわけですね。そもそもperlの(Cもそうですが)代入文自体は
値を持っています。
    print $a=100;
の結果は100です。また=(イコール)演算子は右から順に
評価されますので、
    $a=$b=$c=100;

    $a=($b=($c=100));
と等価です。というわけで、
    $a=($b=($c=100));
        ↓$cに100を代入
    $a=($b=100);
        ↓$bに100を代入
    $a=100;
という流れになっているはずです(たぶん)。

シグナルハンドラですが、perl4なら $SIG{HUP}="finish"
ですけど、この書き方では 関数finishが別ファイルにあった
場合(それをrequireやuseで使っている場合)は呼べません。
というわけで、\&finishと書くわけです…と青ラクダ本に
書いてありました(^^;

あとlocalとmyは
    local $local=1;
    my $my=2;
    &f;
    sub f {
        local $local=3;
        my $my=4;
        print "f: \$local=$local\n";
        print "f: \$my=$my\n";
        &g;
    }
    sub g {
        print "g: \$local=$local\n";
        print "g: \$my=$my\n";
    }
実行結果:
    f: $local=3
    f: $my=4
    g: $local=3
    g: $my=2
ということでどうでしょう?

> IEとネスケの互換性の無さにあきれています

DHTMLはわかりませんが、Javascriptを使っていて、
Winでは動くのだろうけど FreeBSD+NetscapeNavigatorでは
エラーが出まくるようなページが たくさんあるので、
こんな変なものには絶対手を付けまいと誓いました(笑)

というわけで僕はJavascript、DHTMLに関しては全くの素人です(^^;

No. 102 # M.Masuda [URL] 1999/01/29 (金) 21:21
詳しい解説ありがとうございます。

いまいちおバカな頭で理解できないけど、
local と my の違いは、

サブルーチンからさらにサブルーチンに呼ばれた時に。
local = 前のルーチンの値を保持する。
my = 最初のサブルーチンを呼ばれた時(定義した時)の値を示す。
と、解釈していいのかなぁ?

もしそうなら、具体的に使う時は再帰呼び出しの様な使い方を
した時に違いが出る。ということでしょうか?
それならmainルーチンから普通にサブルーチンを呼び出した時
(初期化ルーチンの様な)さらにルーチンを呼び出さなければ、
同じ結果ですね。

#localやmyで指定されたサブルーチン内の変数に当てられた分の
#メモリは、そのルーチンが終了すれば開放されるのだろうか?

>$a=$b=$c=100; は理解できました。
やっぱBASICが最初だと、Perlの構文は簡単に記述できるけど、
理解に時間がかかる!、単におバカなだけだったりして((((^^;

>というわけで、\&finishと書くわけです…と青ラクダ本に
何ページに載ってます?
よく言う青ラクダ本は持ってますが、あんまり読んでると眠く
なるので、必要な部分だけ拾い読みしてます。(^^;
#にしてもラクダ本って、何が何処に書いてあるのか解かりづら
#い...、しかもたまに書いてある英語のジョークが、真剣に読む
#と腰を砕くし....(; ;)

私は、恥ずかしいけど請け負いでホームページ製作をしてるんで
すが、製作作業と勉強に掛る時間が同じ位です。(>_<)

>こんな変なものには絶対手を付けまいと誓いました(笑)
すいませんこんな変なもの作ってます(爆)

Javascriptは、クライアント側のプログラムなんで、アクセス環
境で動いたり動かなかったりなので、大手サイトやアメリカのH
サイトで使用している物を、見ながら使ってます。
これは無断コピーの意味ではなく、「沢山のアクセスのあるサイ
トで使われているコードはエラーが少ないだろう」を前提にして
ます。もちろんそのまま使うのではなくコマンドの使われかたを
流用するだけだけど。

一応ネスケとIEは、3と4のバージョンで動作確認しながら作
ってますが、他のOSは環境が無いのでどうにもならないし..。

私のページも、68userさんの環境からアクセスすると、最悪かも
しれない。(^^ゞ

暇なら来た時BBSに書込みでもしていって下さい。

No. 103 # mm 1999/01/30 (土) 02:43
ちょっと横ヤリです(^o^;ゞ
local も my も、その宣言位置から、これを囲む最も内側のブロックの最後までが有
効範囲であるという点は同じです。ただし、この「ブロックの最後まで」というのが、
localの場合が時系列的に判断されるのに対して、my はスクリプトの見た目上のブロッ
クの階層構造で判断されます。
つまり、my は、C言語などと同じで、ブロックの異なる階層に同じ名前の変数が my
で宣言されている場合、その変数が現れた位置の最も内側のブロックで宣言されたも
のが参照されます(ブロックスコープ)。
これに対して、local は、LISPなどと同じで(これはちょっと?)、系列や階層が異
なるブロックに同じ名前の変数が local で宣言されている場合、プログラムの実行に
伴って、この実行のステップがどのブロック内にあるか(また、どのブロック内から
呼び出されたか)ということによって有効範囲が判断され、既に有効範囲を外れたも
のを除いて、現在有効である最も最近宣言されたものが参照されます(動的スコープ)。

なお、自分自身を呼ぶだけの単純な再帰呼び出しでは、myもlocalも変わりないと思い
ます(たぶん)。
ただ、perl4の解説では、localをループ内で使うと、ループのたびにスタックが消費
されると書いてあったのですが、perl5ではこの説明がなくなってました。なんでかな
ぁ…?

a=b+c などは、一般のプログラム言語では文(代入文)となりますが、Cやperlなどで
は単なる式となります( = は b+c の値を返すだけの演算子で、副作用としてこの値
を a に代入します)。で、どちらの場合も = の右側には式が書けるので、Cやperlな
どの場合にのみ x=(a=b+c) というような記述が可能になります。また、= は右結合の
演算子なので、68userさんの仰るように ( ) が不要になります。

No. 104 # 68user 1999/01/30 (土) 06:07
手元の青ラクダ本では、6.2.1 シグナル(P.389)に書いてありました。

あとmmさん、どうもです。

ああ、もうちょい長く書きたいけれど、風邪がつらいです。
時期が時期だけにインフルエンザかなぁ…。発熱・頭痛・
体の節々の痛み・せき、などなどフルコースです。

というわけで、今日はこの辺で…。

No. 105 # mm 1999/01/30 (土) 06:32
あっ、おだいじに>68user さん

…のいぬ間に、ちょっと訂正(^^;
副作用という用語は、単純な代入式では使わないようです。
また、「= は b+c の値を返す」と書きましたが、正確には a に代入した値を返すようです。
つまり、a と b+c の型が違う場合は、a の型になるそうです。

No. 106 # M.Masuda [E-mail] 1999/01/30 (土) 14:49
う〜ん....
やばい!あたまが...
ばくはつしそうぅ...

Perlだけでも、CぢゃなくてBASICから入ったので混乱してるのに、
やれJavaScriptだ、DHTMLだと私の頭はいま、知恵熱で300度位です。(笑)
もう少し時間を掛けて、勉強してみます。(>_<)

mmさんありがとう。
#名前が似てますねぇ(^_^)V
ここの常連さんは、レベルが非常に高いのでお勉強には最適です。
言い訳だけど、青ラクダ本はホント辞書の様なので、初心者には
何かの事をさせたい時に、それがどこに書いてあるのか探すのが
一苦労です。(国外のジョークはそれを理解するのにエネルギーが
必要なので、訳者に削除して欲しいと思うのは私だけ?)

やっぱ一度、全部を時間を掛けて読破しないと.....
う〜ん時間が無い...
誰か一日を30時間にするライブラリ知りませんか?(爆)

ちょっと忙しくなってきたのでしばらく来ないかもしれないけど
しばらくしたら、またわからない所教えて下さい。>ALL
それでは。

68userさんお大事に!

No. 107 # M.Masuda [E-mail] 1999/01/30 (土) 21:38
ちょっと変な質問ですが、解かれば教えて下さい。

IE2(win)とApache/1.2.6なんですが。
サーバーネームは、www.web.domain.co.jp バーチャルでは、
www.damain.co.jpです。
サーバーの設定は、バーチャルをメインのwebとして使用していま
す。つまり一つのIPで2つのwebを運営してます。

なにが起こるかというと、IE3,IE4,ネスケ3,ネスケ4で、
www.domain.co.jpにアクセスすると、コンテンツ内容は正常に
www.domain.co.jpで設定した内容を返すのですが、IE2のアクセス
の時だけ www.web.domain.co.jpに指定した内容を返します。

関係無いかもしれないですけど、hostコマンドで、2つのネームを
叩くと同じIPを返します。
今度は、そのIPを調べるとwww.web.domain.co.jpを返します。

ネーム解決は、ドメイン名→ネームサーバーにIPを問い合わす→
TCPの通信はそのIPで行なう。(解釈が違ってたらごめんなさい)
この際に、もしかしてIE2は単純にIPの指すサーバーにリクエスト
を発行してドキュメントを取得する。
推測ですがこういう手順なら納得いきます。

現にIPをhostコマンドで調べると、www.web.domain.co.jp を返し
ます。
でもそんなことあるのでしょうか、もしそうならIE2はバーチャル
サーバーのドキュメントを参照できない事になります。
サーバーの設定がが悪いのか、IEが悪いのか、それともネーム解決
が悪いのか私には解かりません。(^^ゞ

もしこの現象が解かれば教えて下さい。
サーバー設定が原因でありませんように...アーメン(^^)

No. 108 # mm 1999/01/30 (土) 23:16
>IE2のアクセスの時だけ www.web.domain.co.jpに指定した内容を返します。

私は、Apacheはよく知らないので、68userさんの方が専門だと思いますが…(^^;
寝込んでらっしゃるかも知れないので…、とりあえず、
↓の「さらなる改善点・バーチャルホストに対応」が参考になるんじゃないでしょうか。
http://X68000.startshop.co.jp/~68user/net/http-5.html

原因は、IE2 だけが Host: ヘッダを送ってないということかな…?
Apacheにとっては、ブラウザがwww.web.domain.co.jp と www.damain.co.jp の
どちらで接続して来たかの区別はないハズです。ただ、ブラウザから送られて来る
HTTPヘッダが
Host: www.web.domain.co.jp
Host: www.damain.co.jp
のどちらになっているかで、送り返すページを区別しているのだと思います。
IE2が使えるのなら、一度送信ヘッダを調べてみてはいかがでしょう。
↓で環境変数を調べて、HTTP_HOST がちゃんと設定されているかどうかを見てみて下さい。
http://X68000.startshop.co.jp/~68user/Cgi-room/printenv.cgi


それから、my と local の件ですが、perl5 しか使わないというのであれば、
local は忘れてもいいんじゃないでしょうか( local は古いバージョンとの
互換性のために残ってるだけだと思います)。

↓でブロックスコープの基本が理解できるんじゃないかなぁ…?
Algol系の言語(Pascal,C,awk,perl,Java,JavaScript..)の有効範囲の基礎に
なると思います(たぶん(^^;)。

$a = 0;
{ my $a = 1;
        { my $a =2;
                { my $a = 3; print "$a\n"; }
                print "$a\n";
        }
        print "$a\n";
        { my $a = 666; print "$a\n"; }
        print "$a\n";
}
print "$a\n";

↓実行結果です(なお、この場合は、myをlocalに替えても同じです)。
3
2
1
666
1
0

>やっぱ一度、全部を時間を掛けて読破しないと.....

えっ? 私は、全然読破してませんです(^^;
参照用と、項目別にその部分だけを読んでます。


>#名前が似てますねぇ(^_^)V

すいません、面倒なんでイニシャルの mm にしてしまってます(^^;


★再度訂正(^^;
LISPが動的スコープと書きましたが、Common Lisp は動的はありませんでした。
でも、確か動的スコープの Lisp もあるハズです(^o^;ゞ

No. 109 # mm 1999/01/30 (土) 23:56
★再再訂正(^^;;;
JavaScript の var って、ブロックスコープじゃないんですね。
試してみたら、単に関数内でローカルなだけでした(^^;
それと、awk も、仮引数リストの変数が関数内でローカルなだけで、
これも関係ありませんでした(^^;;

マジメな話に慣れてないので、訂正が多くってスミマセンですm(_o_)m

No. 110 # 68user 1999/02/01 (月) 00:47
どもども。なんとか熱も下がったのですが、もうちょい安静にしときます。

> あとlocalとmyは
> (snip!)
> ということでどうでしょう?

実は言葉でうまく説明することができなかったので、
サンプルソースでごまかしたというのはナイショです(笑)

M.Masudaさんからメールをいただきましたが(500エラーで
書き込みできなかったそうで)やはり

>> IE2はバーチャルサーバーのドキュメントを参照できない事になります。

ということのようですね。

メールからの引用ですが、
> 「もうIE2なんて使ってる人いないよ」と言っても、それを実現して
> くれなきゃ困るなんて言われるんで、とほほ状態です....。

社会とは理不尽なところですね(^^;

ところでM.Masudaさんのwebですが、奥深くまで入っていったわけ
ではないですけど、FreeBSD2.2.7+NC4.04で、Javascriptのエラーはでませんでした。

> 私のページも、68userさんの環境からアクセスすると、最悪かも
> しれない。(^^ゞ

というわけでご安心を。まぁ もしエラーになったとしても、minorityの
宿命ということであきらめてます。
# 別にわざとエラー起こしているわけではないですし。

No. 111 # M.Masuda [E-mail] 1999/02/01 (月) 15:36
500エラーで書けなかった内容です。
======================================
どうもありがとう。影の68userさん(^^)/

ブロック...そう今日読んでたとこに有りました。
ああいった使い方は、Cとかに多いみたいですね。
なんかPerlて、底無し沼の様に奥が深くって、ちょっとビビッてま
す。(笑)
個人的には、プログラミング好きなんでいろいろ試したいし、構文
の柔軟さは、すごくうれしい!\(^O^)/

だけど、ホント誰かrequireできる、一日を30時間いや48時間くら
いにするルーチン書いてくれないかな(笑)
【86.9%本気】←どっかで見たなぁ


Webで使うCGIでする事なんて割と簡単なので、今のレベルで良いか
もしれないけど、この業界で生き残るにはちゃんと勉強せねば!
と、最近つくづく感じてます。
#最終的にはDBとの絡みが有るだろうし


IEの件はちょっと情報が入ったのですが、やはりだめブラウザのレ
ッテルが張られているようですね。
まだ確認は取ってないですが、IE2はどうもバーチャルが見れない
バグがあるらしいです。(未確認なので信用しないように!)

サーバーを管理している人と連絡をとって、いくつか対応策を思案
中です。
「もうIE2なんて使ってる人いないよ」と言っても、それを実現して
くれなきゃ困るなんて言われるんで、とほほ状態です....。


JavaScriptも結構面白いんだけど、環境によってブラウザの対応レ
ベルが違うので、バージョンが違うとエラーが出たりはよくありま
すね。
そろそろインターネット界も仕様をもっと統一してくれると、私み
たいにこの世界で生きている人もやりやすいんだけどなぁ。
ブラウザ毎のルーチンって具合で、各ブラウザに合わせたスクリプ
トを作ってると、たまに暴れたくなります。(^^ゞ

でもこういう場所があって、私みたいな人間にはとても助かります。

なんか愚痴っぽくなってしまいましたがご勘弁を!(^^)/
====================================================
なんで500エラーが出たんでしょうか?

>というわけでご安心を。まぁ もしエラーになったとしても、minorityの
>宿命ということであきらめてます。

私のページは、右側の部分(個人的な内容)でスクリプトを多用しています。
特にMusicとFavoriteのなかの部分で使ってますが、くだらないから見る
価値ないかも?(^^ゞ

>原因は、IE2 だけが Host: ヘッダを送ってないということかな…?
通信パケットを見たら、全くそのとおりでした。
IE2のバカ!

でもこれで、私の範疇では無い事が解かりましたので一安心です。
でわまた。

No. 112 # mm 1999/02/02 (火) 00:57
@68userさん
>500エラーで 書き込みできなかったそうで

あれま…そんなことが…

>サンプルソースでごまかしたというのはナイショです(笑)

ワタシの文章も分かりにくいとは思いますが、実は最初に書いた初版は
もっとひどくて、自分で読んでもワケ分からんモノでした(^^;
(一応、アレは改定第2版(^^;)

JavaScript は、私も、IE/NN間の相違に加えてバージョン間の違いも多いので、
自分でちょっと使うとき以外は、あまり深入りしないようにしてます。
でも、M.Masudaさんの場合は、そんな悠長なコトも言ってられないのかな(^^;


@M.Masudaさん
>>原因は、IE2 だけが Host: ヘッダを送ってないということかな…?
>通信パケットを見たら、全くそのとおりでした。

やはりそうでしたか…
いや、もしそうだとすると、IE2ではバーチャルホストにアクセスできない
ことになるので、まさかそんなことが?…って思ってたんです(^^;

>ブロック...そう今日読んでたとこに有りました。
>ああいった使い方は、Cとかに多いみたいですね。

うーん、あまり積極的に使うことはないような気はしますが…?
せいぜいループカウンタくらいかなぁ…、
カウンタは慣習的に i を使うので、不要な衝突を避けるために便利かな…とは思います。
perl の場合は、foreach $i (LIST) の $i がループ内でローカルになりますね。
C++ の for( int i = 0; ... でも、ループの直ぐ外のブロック内にローカルなので、
こういう場合には有用かもしれません。
ただ、Pascalは、Cとかと異なり、関数や手続きを入れ子にできるんで、
親のローカル変数との衝突を避けるために、もっと積極的に利用してるかも知れません。

No. 113 # 68user 1999/02/02 (火) 02:20
>> 500エラーで 書き込みできなかったそうで
> あれま…そんなことが…

ログを見ると、ここのwwwboard.cgiは最近2ヵ月で20回くらい
500エラーが起こってます。ここは無改造なのですが、ロック用
ディレクトリが残ってしまうと500エラーになってしまうので、
はやいとこ改造せねばいかんなと思いつつ…めんどくさいし〜。
# ログがどんどん増えていくのもなんとかしないと。

> perl の場合は、foreach $i (LIST) の $i がループ内でローカルになりますね。

それは
    foreach my $i (LIST)
とかの場合では?と思いつつ試してみたところ…
    foreach $i (LIST)
でも $i はローカル変数扱いなんですねぇ。知らなかったっす。

No. 114 # M.Masuda [E-mail] 1999/02/02 (火) 15:25
> 500エラーが起こってます。ここは無改造なのですが、ロック用
> ディレクトリが残ってしまうと500エラーになってしまうので、
他のスクリプトで、ロックファイルのタイムスタンプを調べて、
10分以上前なら削除、てな方法がありましたよ。

># ログがどんどん増えていくのもなんとかしないと。
レスキューさん所みたくページ表示行数を決めて、[次ページ]
なんてしたら?
#言うだけは簡単なんだよな〜(^^;

>でも $i はローカル変数扱いなんですねぇ。知らなかったっす。
自分もさっき実験してはじめて知りました。(*_*)


>JavaScript は、私も、IE/NN間の相違に加えてバージョン間の違いも多いので、
>自分でちょっと使うとき以外は、あまり深入りしないようにしてます。
>でも、M.Masudaさんの場合は、そんな悠長なコトも言ってられないのかな(^^;
本来ちゃんとした手続をすればある程度、エラーを減らしたり出来るらしいですが
、私もそこまで出来てませんし今のところクライアントにはわざといろいろと難し
い説明で逃げ回ってます。(^^ゞ
#でもDHTMLのスタイルシートやレイヤーの方がもっとたちが悪いですよ(互換性で)

厳密な処理を必要とする部分はCGIを利用して、それ以外の処理をJavaScript等に
行なわせる。といったところでしょうか。

ところでmmさんて何者?(^^ゞ
>ワタシの文章も分かりにくいとは思いますが、実は最初に書いた初版は
>もっとひどくて、自分で読んでもワケ分からんモノでした(^^;
>(一応、アレは改定第2版(^^;)
何か執筆していらっしゃるんですか?

No. 115 # 68user 1999/02/03 (水) 00:02
BBSに関しては、本気でちゃんとしたシステム作るつもりは
ないんで、まぁ…こんなもんで(笑)

# 引用の色変えはmmさんとこのBBSのマネ(^^;

あとは何かありますかねぇ…。タグの自動補完とか二度書き禁止とか…
うーん、いまいちそそる機能がない。

No. 116 # 68user 1999/02/03 (水) 00:14
もいっちょテスト!

No. 117 # 68user 1999/02/03 (水) 00:19
ああやっぱりやだなぁ。
メッセージ数はいつでも変更可能にしたいなぁ。

…よく考えずにいじると後悔するという、いい例でした(^^;

No. 118 # mm 1999/02/03 (水) 02:15
>68user さん
>はやいとこ改造せねばいかんなと思いつつ…めんどくさいし〜。
ワタシも、flockに書き換えるつもりで、ロック部分をコメントアウトしたんですが、
未だにそのままになってます…(^o^;ゞ

> foreach $i (LIST)
>でも $i はローカル変数扱いなんですねぇ。知らなかったっす。
こちらは、C++の場合もループ内ローカルだと思い込んでて、
perlの場合と並べて書いてたんですが、調べてみると違ってたので、
ちょっとヘンな文章になってしまいました(^^;


>M.Masuda さん
>他のスクリプトで、ロックファイルのタイムスタンプを調べて、
>10分以上前なら削除、てな方法がありましたよ。
とほほさんのコードも
    ($mtime) = (stat("lock/wwwboard.loc"))[9];
    if ($mtime < time() - 600) {
        rmdir("lock/wwwboard.loc");
    }
となっていて、10分以上前なら削除されるハズなんだけど、
利いてないのかな?

>本来ちゃんとした手続をすればある程度、エラーを減らしたり出来るらしいですが
>、私もそこまで出来てませんし今のところクライアントにはわざといろいろと難し
>い説明で逃げ回ってます。(^^ゞ
ウチの場合は、手元にNN4とIE3しかないってのが一番問題になるようです。
でも、NN2,3やIE2,4があっても、やっぱり面倒そうではありますね(^^;

>#でもDHTMLのスタイルシートやレイヤーの方がもっとたちが悪いですよ(互換性で)
そのヘンは、もはや別物って気がします(^o^;ゞ
もっとも、ウチでも簡単なスタイルシートは使ってますが…

>何か執筆していらっしゃるんですか?
ん? 「第何版」ってのは、単なる冗談です(^o^;ゞ
ワタシは、単なるパソコン好きの素人にすぎません(^^;


>68user さん
># 引用の色変えはmmさんとこのBBSのマネ(^^;
ウチのも、他所のマネです(^^;;;
でも、おかげで、空行を入れずに済みます。

>あとは何かありますかねぇ…。タグの自動補完とか二度書き禁止とか…
>うーん、いまいちそそる機能がない。
タグの補完は、前にちょっと考えたことがありますが、面倒ですよね。
<TABLE>タグの<TR>とかが入れ子にならないし、引用符の中で ">" を使われると、
正規表現でのタグの切り出しができないし…

No. 119 # 68user 1999/02/04 (木) 05:22
> <TABLE>タグの<TR>とかが入れ子にならないし
おろ、TABLEまで何とかしようという魂胆で? 志が高いですね(笑)

僕が昔に書いたのは http://X68000.startshop.co.jp/~68user/tmp/tag.txt
です。今考えると、element(って言うのかな?)とか全く考えて
ないんで、ヘボヘボですね。

うーん、でも真面目に実装したら、
    TABLE-TAG := <TABLE> TR-TAG </TABLE>
    TR-TAG := <TR> [TD-TAG] [</TR>]
    TD-TAG := <TD> <chars> [</TD>]
なんてBNF式に定義して、それに基づいてparseさせなきゃダメなのかしら。

# 昔 yaccとlexで組もうとした事があるけど、エラーから回復させる事が
# できずに(=文法エラーにぶつかると止まってしまう)挫折しました(^^;

No. 120 # M.Masuda 1999/02/04 (木) 14:26
ちょっと質問!です。
すいませんシェルコマンドのmailって有りますよね。
#みんな使ってます?

私が聞いたmailコマンドの使い方ですが、
=================
mail "送信先のメールアドレス" <ENTER>
Subject: "メールタイトル" <ENTER>
メール本文、etc.
最後に"."ピリオドのみで終了。
=================
ここまでを、聞きました。
#OSによっては違うかもしれないけど。

http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#sendmail
を見ると、sendmailとほぼ同じ操作ですよね。
シェルの場合、sendmailとmailコマンドの違いは、自動的にSubject:等
の文字がエコーされる事ぐらいなのですか?

CGIで直接メールを出す場合、レスキューさんのWebFromを参考にすると
sendmailに直接書込んでいますが、CGIで直接sendmailに書込みした場合
のエラーメッセージを取得したい時は、sendmail実行時にどんなオプシ
ョンを付ければいいんでしょうか?

前にsendmailに実際に転送された手順を表示する様なオプションが
ある事を聞いたのですが忘れました。(^^ゞ
#man sendmailで調べたら -N dns ってのが怪しいのですが意味が
#よく解からん。(ToT)
##前から思っていたけど、英語圏で生まれていたらもっと詳しくなっ
##ていたろうな。だってマニュアルって英語だもん(^^ゞ

No. 121 # mm 1999/02/04 (木) 22:45
>おろ、TABLEまで何とかしようという魂胆で? 志が高いですね(笑)
いや、入れ子構造だと決め付けて、作ってみてから気が付きました(^^;

>僕が昔に書いたのは http://X68000.startshop.co.jp/~68user/tmp/tag.txt
おお、ちゃんと < や > の対応もチェックしてあるんだぁ…
なるほど、スタックを使うので、入れ子にならない例外的な処理も
やりやすそうですね。
ウチのは、再帰を使ったので、スタックを直接操作できないんです(^^;
以前「とほほ」さんとこに書き込んだんですが、一応
http://www2s.biglobe.ne.jp/~cru/library/junk/tag.txt に置いときます。
例示した文字列では、</hr>の処理が 68user さんのとは違ってます。

># 昔 yaccとlexで組もうとした事があるけど、エラーから回復させる事が
># できずに(=文法エラーにぶつかると止まってしまう)挫折しました(^^;
yacc は私も挫折しました…ただし、68user さんよりはもっと手前でですが(^^;

ところで、HTMLみたいなものも、yaccで解析できるんでしょうか?
BNFで定義できれば問題ないのかな…?
lexの方を独自の切り出しルーチンに替えればいいのかな…?

No. 122 # クーロンで苦労!? 1999/02/05 (金) 22:14
crontabコマンドについて質問させてください。
あるプログラムAをcrontabで自動起動させたいのですが、
そのプログラムAはCシェルでしか動きません。
そこでcrontabで呼出すシェルスクリプトBを作成し、Bの先頭で
Cシェルを指定し、次に必要な環境変数を設定し、
次にAを実行するようにしたのですが、
うまくいきませんでした。
Bにenvをいれて、環境変数を出力するようにしたら、
path等がshのデフォルトのままでした。
ちなみにAはオラクルに接続しSQL処理をおこないます。
どなたかご存知の方がいらっしゃいましたら、お知恵をお貸しください。

No. 123 # 68user 1999/02/06 (土) 23:56
> http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#sendmail
> を見ると、sendmailとほぼ同じ操作ですよね。
うーん、mailコマンドっていうのはメーラーなんですよ。メールも
読めるし返事も書ける。低機能ながら立派なメーラーです。一方、
sendmailというのはSMTPサーバ兼(低レベルなら)SMTPクライアントって
感じでしょうか。
# しかし上のリンク先の「SMTPポートに繋げてメールを送る方法」って
# のは大嘘ですね。誰だ、こんなの書いたのは。…俺か(^^;

> CGIで直接sendmailに書込みした場合のエラーメッセージを取得したい時は、
宛先がなかった場合などに返ってくるメールを指して「エラーメッセージ」と
言ってらっしゃるなら、
    http://www2e.biglobe.ne.jp/%7es-hasei/cgi-bin/wwwlng.cgi?print+99020031.txt
など。

> #man sendmailで調べたら -N dns ってのが怪しいのですが意味が
> #よく解からん。(ToT)
-Nは-N failure,successなどと指定できます。manを読むときは、
日本語マニュアルを使って楽をしましょう。
    http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=sendmail&dir=jpman-3.0.0%2Fman


> あるプログラムAをcrontabで自動起動させたいのですが、
> そのプログラムAはCシェルでしか動きません。
状況がよくわかりませんが、プログラムAがCシェルスクリプトなら
プログラムAの1行目に
    #!/bin/csh -f
などと書いてあるでしょうから、crontabにプログラムAのスクリプト名を
フルパスで書いておけばいいです。PATHは、プログラムAの先頭で
    set path=(/bin /usr/local/bin /usr/sbin ....)
と書いてもいいですし、crontabの設定ファイルの先頭に
    PATH=/bin:/usr/local/bin:/usr/sbin:...
と書いてもいいです。例えば
    PATH=/bin:/usr/local/bin:/usr/sbin:...
    0 * * * * /home/user/bin/hogehoge
とか。

No. 124 # 68user 1999/02/07 (日) 01:01
> yacc は私も挫折しました…ただし、68user さんよりはもっと手前でですが(^
こっちも挫折は早かったですよ〜。
    http://X68000.startshop.co.jp/~68user/tmp/html.l
    http://X68000.startshop.co.jp/~68user/tmp/html.y
うーん、短いなぁ。今見ると、どこがどういう意味なのかさっぱり(笑)

No. 125 # M.Masuda 1999/02/07 (日) 01:42
どうもありがとう68userさん。(^^)/

> > CGIで直接sendmailに書込みした場合のエラーメッセージを取得したい時は、
> 宛先がなかった場合などに返ってくるメールを指して「エラーメッセージ」と
> 言ってらっしゃるなら、
>  http://www2e.biglobe.ne.jp/%7es-hasei/cgi-bin/wwwlng.cgi?print+99020031.txt
> など。
直接行ってみたら、なんとよく行くページの中。
ここの所忙しく、あまり見に行って無かったらなんとリアルタイムな!
灯台下暗しとは、この事?

> -Nは-N failure,successなどと指定できます。manを読むときは、
> 日本語マニュアルを使って楽をしましょう。
>  http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=sendmail&dir=jpman-3.0.0%2Fman
こんな便利があるとは!なんともうれしい限りです。(^^ゞ
でもうちの環境ではLinuxなので適当に、コンバート?しながら見てみます。

だけど、また暫く睡眠時間が少なくなりそう....(T_T)

ちなみですが。
http://X68000.startshop.co.jp/~68user/Cgi-room/printenv.cgi
で書いてあるなかで REMOTE_PORT を、「ポート番号とは全く関係なくて、httpdをforkした回数じ
ゃないかなぁと思ったらこれも違うみたい。よくわからん。」と書いてありましたが、そのまんま
です。(^^)

つまりクライアント側が、webサーバーの80ポートにアクセスする際に使用する、クライアント側の
ポートの番号です。
私の使用しているパケットモニターで確認しました。
クライアント側アプリケーションが、通信の際にソケットを生成するとその時に自動的に割り当て
られるみたいです、アプリの処理方法はそれぞれでなんでしょうが、通信セッション(っていうのかな)
が終わる毎にクライアント側のポートが変わりました。
#まじめに勉強した訳でなくパケットモニターでの通信内容をみて書いてます。(^^ゞ

No. 126 # mm 1999/02/07 (日) 20:44
>http://X68000.startshop.co.jp/~68user/tmp/html.l
>http://X68000.startshop.co.jp/~68user/tmp/html.y
ありがとうございます。なんとなく雰囲気はわかるような気がします(^o^;ゞ

ただ、lexでは"<BODY>"とかをトークンとして扱ってますよね。
こういう方法で <BODY GBCOLOR="#ffffff"> のような属性を持ったものも
扱えるのでしょうか?
よくは分かってないんですが、lexではトークンを正規表現で切り出しますよね。
だから、<>内をまとめて切り出すのは難しいような気がするのです。
それとも、<>内はまた別のルールでトークンに切り分けるのかな…?

No. 127 # 68user 1999/02/08 (月) 01:09
> REMOTE_PORT
どうもです。これを設置したのは去年の6月ですから、その当時はよく
わかってなかったようですね。ちなみに当時は、
    「サーバ側はポート80で待っているが、一旦コネクションが確立されると、
        次のクライアントのために一刻も早くポート80を開けなければならないので、
        新しいポートが(CGIに)割り当てられる。CGI側はそのポートを通じて
        クライアントと通信しなければならない」
のではないかなぁ…と思っていた記憶があるような ないような。

> でもうちの環境ではLinuxなので適当に、コンバート?しながら見てみます。
いや〜、おそらくLinuxにもjmanはありますよ。僕はLinux知らないけど、
ないはずがないと思います。


> ただ、lexでは"<BODY>"とかをトークンとして扱ってますよね。
どうなんでしょう? 僕は挫折した人間なのでよくわかりませんが(^^;
weblintなどもperlでやってるんで、HTMLチェッカはyacc&lex向きじゃ
ないのかもしれませんね。

No. 128 # mm 1999/02/08 (月) 03:11
>weblintなどもperlでやってるんで、HTMLチェッカはyacc&lex向きじゃ
>ないのかもしれませんね。
なるほどー
文脈自由文法とかがちゃんと分かってないので、まだ?なんですが…(^^;

Cで言語処理系のプログラムを書く機会があったら、またちゃんと勉強しようと
思いつつ、そのままになってるんですが、Windowsなんかを使ってるとどんどん
遠ざかって行くような気がします(^^;;;


日本語マニュアルもありがとうございました。
とりあえず、ウチのサーバーのmanの出力は読みやすくはなったのですが、
やっぱ日本語だと助かります(^^;

No. 129 # クーロンで苦労!? 1999/02/08 (月) 09:14
68userさんへ
ありがとうございます。
参考にさせて頂き、もうちょっとやってみます。

No. 130 # M.Masuda 1999/02/12 (金) 15:54
こんにちは。

CGI実行中のバッファのフラッシュについてなんですが。

具体的には、あるサーバーのログ20Mb以上を圧縮して取り出すのに、

CGIで圧縮ファイルを生成→生成されたファイルをDownLoadする。

というCGIで、全ての処理にかなり時間が掛るのと、ブラウザの
TimeOutをさける為に、処理過程を画面に出力しながら処理を続け
る動作のスクリプトです。

$|=1でバッファのフラッシュを指定できますよね。
確かに、シェル上で直接実行すると動作の確認が出来ましたが、
ブラウザ上から実行すると、スクリプトが全て終わってからでない
と画面に出力されません。

他で聞いたところによるとサーバー(Apacheです)が、CGIの処理が
終わらないとダメみたいです。

ただ、その際STDOUTをクローズすると出力されると言っていたので
、実験しましたがダメでした。
#close後は出力されない

また、ある程度の出力(環境で違うらしい)が溜まるとWebサーバー
がバッファをフラッシュするとも書いてありましたが(未確認)、
無駄な出力をさせたくありません。

なにか、いい方法は無いでしょうか?


>いや〜、おそらくLinuxにもjmanはありますよ。僕はLinux知らないけど、
>ないはずがないと思います。
見つけたんですが、ローカルコンソール(本体)上でxの仮想コンソール?
からなら表示できるんですが、telnetで指定するとmanを表示している?
lessが2バイト文字に対応してないみたいで、読めません。(; ;)
jmanってコマンドですよね、それも無いです。(T_T)
#そもそもtelnet上のmanで日本語表示はダメなんでしょうか?
#ちなみにtelnetは Tra Termを使ってます。

>> REMOTE_PORT
いやーパケットモニターで生の通信内容見てると、結構勉強になります
セキュリティーとかいろんな事の考え方も変わりますね。

No. 131 # 68user 1999/02/12 (金) 17:07
つまり、処理結果を小だしに表示させてタイムアウトを防ぎたいわけですね。
http://www2e.biglobe.ne.jp/%7es-hasei/cgi-bin/wwwlng.cgi などはそのように
できていますね。僕も前に疑問に思って質問したのですが、結局ローカルでは
うまくいきませんでした。

で、そういう場合はnphスクリプトを試してみてはいかがでしょうか。とほほさんの
webに解説があったはずです。

> #close後は出力されない
そうですね。closeするとコネクションは切れます。


> lessが2バイト文字に対応してないみたいで、読めません。(; ;)
FreeBSDではjlessというのがあり、環境変数でLESSCHARSETなどを
設定する必要があります。Linuxもそういうのはないですか?

> jmanってコマンドですよね、それも無いです。(T_T)
んー、そのサーバを誰が管理しているのか知りませんが、
ただ単にインストールしてないだけ、ってことはありませんか?

誰かLinux使いの方いません?(^^;

No. 132 # masuda@excel-net.co.jp 1999/02/13 (土) 00:26
>http://www2e.biglobe.ne.jp/%7es-hasei/cgi-bin/wwwlng.cgi など
>はそのようにできていますね。僕も前に疑問に思って質問したのです
>が、結局ローカルでは うまくいきませんでした。
これって見てみたんですが、わかりませんでした。(T_T)
#この行だけ見て、暫く解析してたり発言をみていたので時間食って
#しまった!

>で、そういう場合はnphスクリプトを試してみてはいかがでしょうか。
>とほほさんのwebに解説があったはずです。
この行を、後で見直して思い出しました。
これって解説ページを後で試そうとブックマークに入れっぱなしでし
た。
後日試してみます。
#誰かホントに1日を30時間に....(エーかげんにしなさい!?)

>> lessが2バイト文字に対応してないみたいで、読めません。(; ;)
> FreeBSDではjlessというのがあり、環境変数でLESSCHARSETなどを
> 設定する必要があります。Linuxもそういうのはないですか?
j*シリーズは私の探したところ見つかりませんでした。(; ;)x2
#どうもJフレンドリーなのはFreeBSDの方が上手みたいですね。
でも日本語マニュアル

>んー、そのサーバを誰が管理しているのか知りませんが
だれも管理してなかったりして。(^^ゞ
セキュリティーのため詳しくは書けませんが、非常に恐いサーバで
す。
#いろ〜んな意味で。

>ただ単にインストールしてないだけ、ってことはありませんか?
そうかもしれないけど、仮にパッケージには入っていてもインスト
ールしてまでは弄れないだろうなぁ。
試験環境として自由に触らせてもらってはいるけど、これ以上私に
は言えない...。

でもここ、
http://www.jp.freebsd.org/man-jp/search.html
よく出来てるんで、利用させてもらいます。
どうもです。(^_^)V

No. 133 # ABCDEFG 1999/02/13 (土) 18:17
こん**は

>>j*シリーズは私の探したところ見つかりませんでした。(; ;)x2
こちらかと
http://www.linux.or.jp/jman/

LANGがja_JP.ujisなら
/hoge/man/ja_JP.ujis以下検索しますよーん

No. 134 # 1999/02/13 (土) 20:11
どうもです、68userさん。(^^ゞ

>で、そういう場合はnphスクリプトを試してみてはいかがでしょうか。
>とほほさんのwebに解説があったはずです。
やってみました。おかげで思うとおりの結果が得られました。
ありがとうございました。
これで忘れられてたブックマークもうかばれるでしょう。笑

ちょっと試験でいろいろやってみましたが、これってhttpサーバーが
リクエストに対して(GETやHEAD等)を判断して返す処理と同じ事を、
CGI側で行なうって事なんですね。
と言う事は、Apacheでサポートしていない(と思う)DELETEとかOPTIONS
を指定するとnphのCGIでいろんな事出来そうですね。
#でもちゃんとセキュリティーを考えないと恐いけど(^^ゞ


ありがとうございます。>ABCDEFGさん。
>>j*シリーズは私の探したところ見つかりませんでした。(; ;)x2
よく探したら有りました!
#なんて探しかたの悪いやっちゃ(^^ゞ

http://www.linux.or.jp/jman/
これってうれしすぎる!!!

そのついでといっちゃなんですが、その環境を使えるようにする方法を
教えては頂けないでしょうか。
#調子よすぎかな!?(^^ゞ

つまり、自分の環境でj*環境を使う方法です。
最初からの設定で、シェルはbashを使っています。
環境ファイルは ~/.bashrcデスよねぇ。
ここにどんな記述をすればいいのか教えてくれるとうれしいです!

今の設定はこうなっています。
$ more ~/.bashrc
# .bashrc

# User specific aliases and functions
# Japanese environment setting.

if [ $TERM = "kterm" ] || [ $TERM = "kon" ]; then
      LANG="ja_JP.ujis"
else
      LANG="C"
fi

export LANG

alias ls='ls -F --color=yes'

# Source global definitions
if [ -f /etc/bashrc ]; then
                . /etc/bashrc
fi

↑ここまでです。
シェルはあんまり勉強してないので、人に教わったlsのalias行を
追加したぐらいで、構文の意味はぜんぜん分かりません。
#多分jmanpath=hogehogeとかやるんでしょうね。

日本語のマニュアルが使えれば今までの苦労も少しは....(^_^)V

No. 135 # M.Masuda 1999/02/13 (土) 23:51
すいません、今度は名前の書き忘れだ〜
下の書込みは私です。
m(_ _)m

No. 136 # M.Masuda 1999/02/14 (日) 00:17
すいませんも一つ質問です。
/var/log/messagesに、
sun last message repeated 3 times
というメッセージが5分置きくらいに出力されるんですが、
これって何か分かります?
#質問2でした。(^^ゞ

No. 137 # 68user 1999/02/14 (日) 02:26
>>で、そういう場合はnphスクリプトを試してみてはいかがでしょうか。
> やってみました。おかげで思うとおりの結果が得られました。
おお、そうですか。僕はnphは一度も試したことはなかったりするんですが…(^^;

> sun last message repeated 3 times
普通に英語を読めば「前回と同じメッセージが3回出力された」ということで、
/var/logl/messagesのその前の行を見ればいいと思います。
# と、ずっと思ってたんだけど違うかな?

No. 138 # てんぽられす 1999/02/14 (日) 03:58
わたくしUNIX初心者も初心者というかwin95ユーザでありまして
プロバにtelnetで繋いでUNIX気分を味わっているもんでございます。
まったくwin95とは違いまして「こんぴゅーたをさわっている」って
いう気分を満喫している(だけ)ところでございます。

コマンドがいろいろ載っていて、たのしゅうございます。
これからも続けてくださいましね。たよりにしております。であ。

No. 139 # ABCDEFG 1999/02/14 (日) 16:52
ネコミでの書き込みがなんかおかしい とほほ
ブラウザかえようかな
68user(X68K?)さんはふだん何つかってます?

>M.Masudaさん
.profileか.bashrcに
export MANPATH=/hoge/man:$MANPATH
export JLESSCHARSET=japanese
hogeはman-pages-ja-0.4.tar.gz をinstallした所です
おそらくman less groffは日本語化されてるんじゃないかなー
man manで日本語表示出来なければ管理者に頼むしかなさそう(笑)

No. 140 # 68user 1999/02/15 (月) 15:07
> コマンドがいろいろ載っていて、たのしゅうございます。
どもども。「ここがわかりにくい」などのご意見がありましたら
ぜひ教えてください。

> ブラウザかえようかな
> 68user(X68K?)さんはふだん何つかってます?
学校ではNN3.04、家ではNC4.04です。まぁ一長一短ですねぇ。
早くMozilla5でないかな…。

No. 141 # ABCDEFG 1999/02/15 (月) 16:21
>だれも管理してなかったりして。
ありゃ・・そうだったんですか
となるとログのメッセージは・・・

No. 142 # 68user 1999/02/15 (月) 16:49
> となるとログのメッセージは・・・
全ユーザがrootになることができて、みんなでよってたかって管理してるとか(^^;

No. 143 # ABCDEFG 1999/02/15 (月) 17:49
>全ユーザがrootになることができて、みんなでよってたかって管理してるとか(^^;
むむむ・・何かトラブッてそうですね(^^;;;

No. 144 # M.Masuda 1999/02/15 (月) 22:10
どうもです。68userさん、ABCDEFGさん。

あれっ遂にチャットになってしまったか?(^^ゞ

ABCDEFGさんどうもです。
DOSの頃はコンソールと言うか、CUIにはなれずついFDとかのツール類を
使っていましたが、なんとUNIXのしぇるの使いやすい事!

おまけに、DOSの頃はコマンド類の使い勝手が悪くツール同士も相性を
考えて使わないと...。

>>M.Masudaさん
> .profileか.bashrcに
> export MANPATH=/hoge/man:$MANPATH
> export JLESSCHARSET=japanese
> hogeはman-pages-ja-0.4.tar.gz をinstallした所です
> おそらくman less groffは日本語化されてるんじゃないかなー
> man manで日本語表示出来なければ管理者に頼むしかなさそう(笑)

試しました。
あんまり時間が無く全部はやってみてないですが、man manだけは
ちゃんと日本語マニュアルが表示されました。
68userさん、ABCDEFGさんどうもありがとうございました。
#setコマンドでは、LANG=Cとなっているんだけどいいのかなぁ?

>だれも管理してなかったりして。
そうなんです。私が一応rootにはなれるんですが、ここの環境は
前にクラックにあっているサーバーが直ぐ近くに(ネットワーク上)
在るのに、誰もログをチェックしないし、ログインすら月に1度
位なんです。

私は、httpdの再起動をやったりするためにrootになれるんですが、
恐いので一応secureとかmessagesとかを、たまに確認しています。
しかし、私にはUNIXのスキルが無いので何か有っても対処法を知り
ません。(; ;)
最大の防御はイーサーのケーブルを抜くくらいだったりして。(^^ゞ
#でもこのサーバーDHCP立ってるんだよなぁ。

例の sun last message repeated 3 times ですが、
このメッセージのみが5分おき位に続けて出ています。
>普通に英語を読めば「前回と同じメッセージが3回出力された」ということで、
> /var/logl/messagesのその前の行を見ればいいと思います。
本日は12:28〜20:08まで5分おきにあり、現在は止まっています。
だけど、これ以外はさっき言ったdhcpのログ位です。
もしかしてアタック?でもsecureには特にメッセージも出てないん
ですよ。他にはチェックするところがわからなしい...。


ところで、前の話題のFileLockですが、私の入っているメーリングリ
ストでこんな例がありました。いかがなもんでしょうかね?

$file_lock = 'LOCK';
$file_seq = 'SEQ';

open(LOCK, ">> $file_lock") || die;
alarm(60);
flock(LOCK, 2) || die;
if (open(SEQ, $file_seq)) {
        $seq = <SEQ> + 1;
        close(SEQ);
} else {
        $seq = 1;
}
open(SEQ, "> $file_seq.new") || die;
print SEQ $seq;
close(SEQ);
rename("$file_seq.new", $file_seq) || die;
close(LOCK);
alarm(0);

alarmって使った事無いんだけど、この場合目覚まし時計がなると
制御はどうなるのだろう?
サブルーチンとかに飛ばす場合は、シグナルハンドラの罠を仕掛け
とくのですか?
前例のように $SIG{HUP}=$SIG{INT}=$SIG{QUIT}=\&finish; とか。

No. 145 # 68user 1999/02/15 (月) 23:38
> そうなんです。私が一応rootにはなれるんですが
いいじゃないですか。好き勝手にUNIXの勉強ができるし ;-)
その代償として管理してると思えば安いものかと。

> だけど、これ以外はさっき言ったdhcpのログ位です。
ではそのDHCPのメッセージが数回繰り返されたものでしょう。
suでrootになるのを10回連続して繰り返してみてください。
/var/log/messegesには
    Feb 15 23:28:41 host su: user to root on /dev/ttyp1
という行が10行書かれることはなく、
    Feb 15 23:28:41 host su: user to root on /dev/ttyp1
    Feb 15 23:28:53 host last message repeated 9 times
となるはずです。同じメッセージが短時間のうちに連続して
syslog(かな?)に送られた場合は、syslogdが上のように
簡略化したログを残すはずです。

suでrootになるのを10回連続して、次に間違ったパスワードで
suしてみると、最後のsuを実行した瞬間に
    Feb 15 23:28:41 host su: user to root on /dev/ttyp1
    Feb 15 23:28:53 host last message repeated 9 times
    Feb 15 23:28:55 host su: BAD SU user to root on /dev/ttyp1
というログが残ると思います。

ちなみに、リアルタイムでログを監視するにはtail -fが便利です。

> サブルーチンとかに飛ばす場合は、シグナルハンドラの罠を仕掛け
> とくのですか?
alarmの場合はSIGALRMですね。kill -lを実行するとシグナル一覧が
表示されます。man alarmも参考にしてください。

この例ではいまいちalarmの必要性がないような気がするんですが、
何か理由があるのかなぁ。

No. 146 # ABCDEFG 1999/02/16 (火) 02:38
>前にクラックにあっているサーバーが直ぐ近くに
物騒な話ですね。こうなると再インストールしかないです。
近くのサーバーもやられてる可能性が高いような気がします。
とりあえず/etc/inetd.confの不必要なエントリをコメントアウトして
killall -HUP inetd
あと/etc/hosts.allow、/etc/hosts.denyでtcpwrapper
の設定をするのが吉かと
telnetの代わりにsshを使ったほうが心臓に良いです。
たしかtera termを拡張したttsshってやつがあったと思いますが
#もう対策されてたならすみません

No. 147 # 68user 1999/02/16 (火) 07:08
やですね〜。クラックされるのは。

ちょっと前に知り合いのLinuxがクラックされてました。
すぐに気づいて、そのとき作成されたらしいファイルを
消したんですが、数日後また同じようにクラックされて
しまい、とうとうサーバをFreeBSDに代えてしまいましたとさ。

クラック自体より、どこの穴をつかれたのかがわからないのが
一番恐いですね。

No. 148 # M.Masuda 1999/02/16 (火) 15:43
どうもです。
いろいろ助言下さってありがとうございます。

>こうなると再インストールしかないです。
もちろん既に、マシンごと新しくなってます。

>クラック自体より、どこの穴をつかれたのかがわからないのが
>一番恐いですね。
これが一番恐いのだけど、最近リモートIPもごまかしたり、たまにログでリモ
ートのIPがunknownって出る奴が有るのですが、これってどうしてるのでしょ
うか?
#愚問でしたね。こんな公の場で書けるわけないですね。(^^ゞ

>telnetの代わりにsshを使ったほうが心臓に良いです。
>たしかtera termを拡張したttsshってやつがあったと思いますが
すいません未対策です。って言うかsshって知りません。(^^ゞ
セキュリティー対策の物ですか?

messagesの件ありがとうございます、多分LANの中で一台設定不良でネットワ
ークを参照できないマシンが在ったので、そいつのDHCPリクエスト失敗が原因
だと思います。
#そういう事にしておこう。(^_^)V


ところで、皆さんセキュリティーに関してはどう考えてます?

うちのwebサーバーは去年クラックされました。
OSはRedHotの古いバージョン(4.1)で、name,www,smtp,popが実用デーモンで
その他いくつかのデーモンが上がっていましたが、前例と同じように管理者が
居なくて、ほったらかし状態。

ログローテーションもしなかったので、97年5月からのmailログが98Mbも一つ
のファイルで存在してました。
#その当時Apache1.1がインストールされていたので各種デーモン類のバージ
#ョンもかなり古いものだと思います。

ちなみに前のHDの内容は保存してありますが、今の管理者には穴が見つけられ
ず、いつか私が解析してやろうと気持ちだけはあります。(^^ゞ
#時間がないもんで...と言っておこう。

ちなみにそのサーバーをクラックしたクラチャンが
/etc/hosts.allowに開けていったホストIPです。
207.204.247.250
166.93.24.146
209.99.175.1
199.183.24.253
193.164.171.29

199.183.24.253って何処だか分かります?
なんとwww.redhat,comですよ!
#なさけねーな、RedHatも。(; ;)

どうもクラチャンは、RedHatパッケージ関係ではかなりのスキルを持っていた
と思っています。
何処かのアンダーグラウンド系掲示板にでも掲載されているらしく、今でもそ
のサーバーは毎日のようにアタックされています。

もちろん管理者がラッパーやルータ等で2重3重の制限しているので、接続は
されていませんが、前の穴が解からないだけに少し不安です。

webアタックの代表のphf系も独自のCGIでアタックログを取っていますが、こ
れって変なんです。
具体的には、1〜2秒間に3回連続でアクセスして行きますが、アクセスホスト
が毎回違うんです。
なんとなく何処かのパッケージに入っている、スクリプトか何かを実行すると
その中で、ここを攻撃(試験)して、多分その結果をどこかに返すのでしょうね
アクセスのタイミングを見るとそんな感じです。

http://ash.or.jp/~joe/hack/index.htm
このページで起きたイスラエルからの侵入事件を元に、セキュリティー関係の
レポートが載ってます。

ところで/etc/passwdのパーミッションて、root/700にしたら何か問題はあ
りますか?

No. 149 # 68user 1999/02/16 (火) 16:31
> #愚問でしたね。こんな公の場で書けるわけないですね。(^^ゞ
いや、僕は方法を知らないので…(笑)

> セキュリティー対策の物ですか?
telnetはタイプした文字がそのままネットワークを流れますが、
sshは暗号化したデータを送るので、パケットを覗かれても大丈夫なのです。
つまりssh=secureなtelnetです。ちなみにrcpのsecure版なども
一緒についてきます(scp)。

もちろんsshクライアント/sshサーバが必要です。FreeBSDなら
portsで一発インストールできましたが、Linuxにもパッケージが
用意されてるんじゃないでしょうか。

sshをインストールできたら、telnetポートは閉じておきましょう。

> ところで/etc/passwdのパーミッションて、root/700にしたら何か問題は
> ありますか?
ls、finger、whoなどでユーザ名が表示されないことはありませんか?
# OSにもよるでしょうが、/etc/pwd.dbなどが読めればOKかもしれません。

しかし、一般的には/etc/passwdを700にするのは変です。
パスワードエントリを隠したいということなら、shadow passwordを
導入しましょう。Linuxなら/etc/shadowだったかな?
# Linuxはデフォルトでshadow化されていないのが不思議。
# ディストリビューションにもよるのかな?

No. 150 # ABCDEFG 1999/02/17 (水) 15:31
みなさんの話を聞いてるとびびってきました(苦笑)
クラッカーに目つけられると安眠できなさそう
インストールしたらすぐtripwireいれたほうがいいのかな
Red Hatって見つかった穴を公開するらしいですよ
たぶん新しいの買えや(笑)ということなんでしょうけど

>Linuxはデフォルトでshadow化されていないのが不思議。
そう言えばIRIXは最近まで・・・

>IPがunknownって出る奴が有るのですが
これ何なんでしょう 知りたい(爆)

>管理者が居なくて、ほったらかし状態。
仕事やりながら管理するってきびしいと思いますよ

No. 151 # M.Masuda 1999/02/17 (水) 22:57
こん**は。

>>管理者が居なくて、ほったらかし状態。
> 仕事やりながら管理するってきびしいと思いますよ
本来私の管轄では無いので最近本末転倒してますが、他に管理している
人間がいないので、勉強がてらにいろいろな情報を物色しています。
#アー目が痛い!

>>IPがunknownって出る奴が有るのですが
> これ何なんでしょう 知りたい(爆)
ねらわれたサーバーのsecereに、
Feb 8 04:15:36 ns in.fingerd[2730]: refused connect from unknown
こんな風に出ます。
ここ1ヶ月のfingerだけで66回もです。
#最近telnetのアタックは減りましたがいまだにphfアタックは...。

セキュリティー関係と、通信パケットについて詳しく解説指定ページが
ありましたので紹介させていただきます。
http://www.3ware.co.jp/security/index.html
ここで詳しく説明されてます。常時接続の方の参考までに。

このサイトにはLinuxについても詳しく書いてあり、前から疑問だった
起動時の設定ファイル(Winで言うところのAUTOEXEC.BATかな)も分かった
し、ずいぶん勉強になりました。

>Linuxはデフォルトでshadow化されていないのが不思議。
近いうちに実験用サーバーに実装する予定です。
#できるかな〜、その時はまた教えて下さい。(^^ゞ

>sshは暗号化したデータを送るので、パケットを覗かれても大丈夫なのです。
telnetの23はルーターで塞いであるし、LAN内でのアクセスなんであまり必
要性が無いですが、これも時間が出来たら試験的に導入してみたいですね。

No. 152 # ABCDEFG 1999/02/18 (木) 20:50
>Feb 8 04:15:36 ns in.fingerd[2730]: refused connect from unknown
見たことないです。
#といってもアタック(スキャン)自体あまりないから知らないだけ
パケット覗いてみては?
>telnetの23はルーターで塞いであるし
・・・内部犯行・・なんて無いですよね(笑)

No. 153 # M.Masuda 1999/02/19 (金) 00:51
どうもです。ABCDEFGさん。

>・・・内部犯行・・なんて無いですよね(笑)
ははは、それは無いです。

mad.leenux.com ってとこと ugly.bastard.co.uk の2ヶ所から
進入してます。

そのクラチャンですが、ちょいと弄られた前のディスクの中を覗いて見たら、
隠しディレクトリに、いくつかのクラックソフトをお土産においっててくれ
たみたい。(^^ゞ
#俺ホントはこんなことやってる暇無いんだけどなぁ...
#まいっか!

入られてた時、マシンに負荷が掛ってるので、おかしいなって皆で言って、何
度もリブートかけていたんです。

それでも重いので変だと思い、最近作られたファイルを探したところ発見し
ました。

どうもそのマシンで、あちこちのネームサーバーを探してたみたいで、その
履歴が残っていました。

皆さんも気を付けて下さい、自分のマシンだけならフォーマットするとか出
来ますけど、踏み台されちゃ悔しいですからね。(^^ゞ

でわでわ。

No. 154 # ROL 1999/03/02 (火) 00:45
どうもごぶさたしてます>お師さん
で、過去ログその後ですが…すみません、諦めました。

理由その壱
メインでNETに繋がってるのがMacなわけなんですが、
こいつのtelnetアプリケーションがAppleScript等に対応しない物ばかりで
telnetでの自動化は不可能という結論に達しました。
理由その弐
ブラウザからの起動も考えたんですが、CPUをG3化してあるせいなのか、
2台繋いでいるHDDの片方を認識しないまま起動することが多く、
起動するHDDが特定できない、もしくは手動で再起動しないとOSが起動しないことすら
ある状態です。

スクリプト自身はきちんとサーバー上で動いているんですが、
どうにも自動化のメドが立ちません。
いろいろご指導いただいた上になんなんですが、ここで正式に
過去ログ作成を断念したことをお伝えする次第です。

No. 155 # UNIXbeginner 1999/03/05 (金) 17:31
はじめまして。みなさん、UNIX超初心者の者ですがよろしくおねがいします。
実は今年からUNIXを習っているのですが、全然分かりません。特にShellの
プロセスのあたりというか、スタンダードインプット、アウトプット、
エラーとの兼ね合いとか。。????
だれか、教えて頂けるか、良いウエブや本を紹介して頂けませんか?
よろしくお願いします。
メールでもOKです。non100@excite.co.jpです。

No. 156 # 68user 1999/03/07 (日) 00:00
> ここで正式に過去ログ作成を断念したことをお伝えする次第です。

それは残念。過去ログうんぬんより、いままでプログラムを書いたのに
結局うまくいかないとわかったときは がっくりきますね。


> Shellのプロセスのあたりというか、スタンダードインプット、アウトプット、
> エラーとの兼ね合いとか。。????

え〜、もうちょっと範囲をしぼっていただけると答えられるかもしれませんが、
範囲が曖昧なので…(さすがにそのあたりを全部説明するのはつらいです)。

「どこがわからないのか自分でもわからない」という状態なら、
    The UNIX Super Text(上・下) 技術評論社 上下巻それぞれ3500円くらい
がいいんじゃないでしょうか。

古いし(6年くらい前かな)、値段が高い、と評する人もいますが、
僕はお勧めします。ただし買うのは上巻だけでいいと思います。

No. 157 # テツ 1999/03/07 (日) 15:23
はじめまして。

初歩的な質問なのですが、UNIXのコマンドで
現在のディレクトリ以下のファイル(下位ディレクトリ内のファイル含む)の中から
ある特定の拡張子だけ、検索するというコマンドってありますか?

ぜひご教授ください。

No. 158 # 68user 1999/03/07 (日) 21:00
カレントディレクトリ以下から、拡張子が txtというファイルを
探したいなら、
    % find . -name \*.txt
カレントでなく、/hoge以下を探したいなら、
    % find /hoge -name \*.txt
などがあります。locateが使えるなら、
    % locate .txt| grep .txt\$ | grep `pwd`
ってのもアリかも。

# http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#find
# http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#locate

No. 159 # テツ 1999/03/08 (月) 23:32
68userさんありがとうございました。
早速試してみます。
これからもなにかありましたらよろしくお願いします。
ではでは!

No. 160 # サチ 1999/03/10 (水) 12:30
はじめまして。
今回久しぶりにTELNETにログインしたら、
FreeBSD 2.2.7-RELEASE (BASE) #2: Wed Dec 23 11:45:56 JST 1998
というメッセージがでてきました。
超初心者のうえ、久しぶりなので、何がなんだか分かりません
これは、そのままにしておいても大丈夫なものなんでしょうか?

No. 161 # 68user 1999/03/10 (水) 17:39
それは、「このOSはFreeBSDだよ」というただのメッセージです。

ついでに書いておくと、FreeBSD2.2.7Rで、カーネルコンフィグ
ファイルはBASEで、これまで二回カーネルの再構築をして、
最後にカーネルを作り直したのは Dec 23 11:45:56 JST 1999
っつーことです。

さらに蛇足ですが、このメッセージは /etc/motd に
書かれており(ブート時に毎回作り直されるのかな)、
login(1)が /etc/motdを表示します。
# see login(1),motd(5)

No. 162 # サチ 1999/03/10 (水) 19:00
そうなんですか。
安心しました。どうもありがとうございました。

No. 163 # mm 1999/03/10 (水) 22:10
ご無沙汰です(^^;
いま、BSD版 touch 互換?のWin32版 touch をDelphiで
作ってるんですが、BSD版の仕様がよくわからないので、
教えて頂けますでしょうか?

BSD版 touchは、どのような場合に標準入力からファイル名を
読み込むのかがよく分からないのです(BSDじゃないけど、
ウチのHPのサーバーでも、CGIからじゃ確認できないのです…)。
    % echo file | touch -
とすれば、file が現在日時に設定されますよね…?
それ以外に、引数にファイルを指定しなかった場合も
標準入力を読むのでしょうか?
また、たとえば、
    % touch
とした場合に、キー入力待ち状態になるのか、それとも
    % echo file | touch
などとした場合にのみ標準入力を読むのでしょうか?


>最後にカーネルを作り直したのは Dec 23 11:45:56 JST 1999
>っつーことです。

なんか、はじめて訪問して来た客に、家の事情を何から何まで
事細かにおしゃべりするおばーちゃんみたいな…(笑い)

No. 164 # 68user 1999/03/11 (木) 07:45
>  % echo file | touch -
> とすれば、file が現在日時に設定されますよね…?
いえ、そうはなりません。FreeBSDのtouchは、STDINを
全く読んでないようです。
    % touch
    usage: touch [-acfm] [-r file] [-t time] file ...
    % touch -
    % ls -l -
    -rw-r--r-- 1 user user 0 Mar 11 07:40 -
となります。

ちなみに最新のFreeBSDのtouchのソースは
    http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/touch/touch.c?rev=1.8
にあります。大元はここ。
    http://www.freebsd.org/cgi/cvsweb.cgi

> なんか、はじめて訪問して来た客に、家の事情を何から何まで
> 事細かにおしゃべりするおばーちゃんみたいな…(笑い)

いや〜、fjをROMってると、こういうやりとりを見て知識を
得るってことが多いので、暇なときで疲れてなければ
「質問者が求めること+α」を書くようにしてます。

# fjの強者ほど知識はないし、ここを見てる人も少ないので
# 自己満足かもしれませんが。

No. 165 # 68user 1999/03/11 (木) 09:49
追加。SolarisでもFreeBSDと同じ挙動でした。

No. 166 # mm 1999/03/11 (木) 13:20
わー! ごめんなさい、書き方が悪かったです(^^;

おばーちゃんの件は、68userさんのことではなく、
FreeBSDのメッセージのことなんです。
telnetで接続したら、いきなり、「うちはね、これまで2回改築してて、
最後に改築したのは〜で、基礎工事んときには…」みたいな
メッセージが出るんで、これがオシャベリなおばーちゃんみたいだ
っていう意味でした(^^;
ややこしいコト書いてすいませんでしたm(_o_)m

いま、Cソースを頂いてきたので、本編の方は後程…

No. 167 # いわもと 1999/03/11 (木) 18:18
こんにちは。はじめまして。いわもとと申します。
UNIX超初心者の私ですが今回crontabコマンドの
使い方について調べるように仰せつかりました。
それでこちらのHPを参考にさせていただいたのですが
うまくいきませんでした。とりあえずcrontabファイル
(だと思う ユーザ名がファイル名になっていて
中身はHPに書いてあったのと同じようになっていた)
は出来たんですが、そこから先がわからないんです。
どうやっても動いてくれません。
これって私が相当バカなんでしょうか?誰かご存知の方
教えて頂けると幸いです。

No. 168 # M.Masuda 1999/03/11 (木) 20:07
こん**は、いわもとさん。

私も初心者のなので申し訳ないのですが、cronはデーモン(常駐)
プロセスなので設定ファイルを修正したら、変更した設定を再読
込させなければいけないですね。
osが解からないですが、私の環境(Linux)では/etc/rc.d/init.dに
再起動用のスクリプトがありますので、/etc/rc.d/init.d/cron.init
に start、stopとすれば良いのではないでしょうか。
#ぜんぜんはずしてたらごめんなさい。

ところで何処かのページ上のcron設定解説ページを見て
操作したのでしたらそのURLを教えてもらえないでしょうか。
#68Userさん正解をお願いします。(^^ゞ

No. 169 # 68user 1999/03/12 (金) 00:31
hogeというファイルに、
* * * * * /bin/ls
と書いて、crontab hogeとすればcronにデータが登録されます。
この時点で、crontab -l とすると
* * * * * /bin/ls
と表示されればOK。

で、上の記述だと、1分ごとにlsが実行され、その結果が
メールで送られてきます。動作を確認したら、必ず
crontab -rで解除することをお忘れなく。その場合も
うまく解除できたかどうか crontab -lで確認してください。

> cronはデーモン(常駐)プロセスなので設定ファイルを修正したら、
> 変更した設定を再読込させなければいけないですね。
一般的にcronで実行されるのは、管理用のcron(/etc/crontabとか)と、
一般ユーザ用のcron(各ユーザが勝手に登録するもの)がありますが、
FreeBSDの場合は/etc/crontabを書き換えると自動的に反映されます
(1分ごとに書き換えられたかどうかチェックされてる)。

とりあえずOS名と、何をしたらどういうふうに うまくいかないのかを
書くのが解決への早道かと。


> おばーちゃんの件は、68userさんのことではなく、
> FreeBSDのメッセージのことなんです。
あ、なるほろ。了解です。

No. 170 # mm 1999/03/12 (金) 01:33
touch の件、ありがとうございました。
FreeBSDのソースも、助かります。
これは、今後も大いに役に立ちそうです(多謝)

>いえ、そうはなりません。FreeBSDのtouchは、STDINを
>全く読んでないようです。
これは全く意外でした(^^;
ソースも見ましたが、全く読む気はないみたいですね。
うーん…なんでだろう?
ひょっとして、touch *.txt で該当ファイルがなかった場合に
touch に argv[1] が渡らないのかな?…と思ったのですが、
ちゃんと *.txt が渡ってました…(^^;

なぜ、標準入力にこだわるかというと、MS-DOSの場合、
ファイル指定のメタキャラクタに * と ? しか使えないので、
csh風の glob match をサポートした ls コマンドを利用して
    ls *.{c,h} | touch
みたいな使い方をしようと思っていたのです。

とりあえずは、touch - で、ちゃんとファイル - を作成する
ようにしました(笑い)
でも、ファイルを指定しなかった場合は…
もう少し考えてみます(^o^;ゞ

No. 171 # 68user 1999/03/12 (金) 02:21
> ひょっとして、touch *.txt で該当ファイルがなかった場合に
> touch に argv[1] が渡らないのかな?…と思ったのですが、
> ちゃんと *.txt が渡ってました…(^^;
えっと、これはUNIXの話ですか? UNIXの場合はgrobの展開はシェルが
担当します。*.txtがない場合、
    % touch *.txt (touchに限らず全てのコマンド)
    touch: No match.
となりますが、これはシェルがtouchを実行する前に
はじいてます。csh/tcshの場合、シェル変数nonomatchを
設定すると、マッチするファイルがなくてもエラーにならなくなり、
touch に *.txtという文字列がそのまま渡されます。
普通、コマンドラインでnonomatchを設定することはまずないですが。

…と、mmさんなら知ってそうなことを書いてしまった。

> MS-DOSの場合、ファイル指定のメタキャラクタに * と ? しか使えないので
DOSを離れて久しいのですが(使ってたのはHuman68kですけど)、
DOSってgrobの展開は各プログラムの担当ですよね。そういう
ときに便利な関数ってライブラリで用意されてるんでしたっけ。
# char **files;
# files = filelist("a:\dir\a*.txt");
# とか。

さて、FF8をやらねば。

No. 172 # 68user 1999/03/12 (金) 02:37
そうそう、GNUのtouchを参考にするのもいいかも。

http://www.gnu.org/software/software.html
TheFileutilsare:`chgrp',`chmod',`chown',`cp',`dd',`df',`dir',`dircolors',`du',
    `install',`ln',`ls',`mkdir',`mkfifo',`mknod',`mv',`rm',`rmdir',`sync',`touch',and`vdir'.

ちょっと見てみた感じでは、こっちもstdinは見てなさげです。

> これは全く意外でした(^^;
うーん、でもtouchというコマンドの性質から言って、
stdinを読まないのは自然ではないかと思います。

しかしこうして見ると、GNUってすごくたくさんのソフトを
保守してますねぇ。CVSもGNUだったのか。

No. 173 # Asano [E-mail] 1999/03/12 (金) 10:54
はじめまして。Asanoと申します。
私のUNIX歴は1年ぐらいの初心者です。
UNIX Userの雑誌のバックナンバー(1995年12月号)を
探しています。お持ちの方で、譲ってもいいよいう人が
おりましたら、下記アドレスまでご連絡お願いします。
付録のCD−ROMは無くてもかまいません。

よろしくお願い致します。
E-Mail asanonet@po.anoa.or.jp

No. 174 # いわもと 1999/03/12 (金) 13:29
こんにちは。いわもとです。
68Userさん、M.Masudaさん、ありがとうございました。
おかげさまでうまく動かすことが出来ました。
UNIX歴わずか数日の私には本当にありがたい限りです。
今後ともよろしくお願いします。

No. 175 # mm 1999/03/12 (金) 21:14
>えっと、これはUNIXの話ですか?
あっ、すいません、UNIXの話です。
MS-DOSでは、シェルが展開するようなことはなく、
常にそのままコマンドに引数として渡ります。

>…と、mmさんなら知ってそうなことを書いてしまった。
いえいえ、
>これはシェルがtouchを実行する前にはじいてます。
というのは、全く知りませんでした(^^;

昨日、
    for ( i = 0; i < argc; i++ )
        printf("%d: %s<BR>\n",i,argv[i]);
というようなソースをウチのサーバーでccして test.cgi
として、perl CGI内で open(FH,"./test.cgi *.txt 2>&1 |");
という感じで実行してみたら(*.txt は存在しない)、
    0: ./test.cgi<BR>
    1: *.txt<BR>
となったので、以前に「シェルは、マッチしなかった場合に
そのままコマンドに渡す」という話を聞いたことがあるのを
思い出して、あんな風に書いたのです。
(なお、ウチのHPのシェルは、sh のようです(^^;)

ちなみに、この test.cgi をCGIとして実行すると、
    0: wrapper_daigaku
なんてのが返って来ました。daigakuってなんだぁ…?


>DOSってgrobの展開は各プログラムの担当ですよね。
そうですが、MS-DOS流の * や ? は、そのままファイル検索
システムコール(FindFirst)に渡すことで、マッチする
ファイル名を返してくれます(2番目以降はFindNextで順に
呼び出します)。

>そういうときに便利な関数ってライブラリで用意されてるんでしたっけ。
正式に用意されているって話は聞いたことありませんです。
フリーのライブラリを探せばあったのかな…、少なくとも
定番というのもなかったと思います。
ただ、私が昔パソコン通信(PC-VAN)で覗いてたSIG(フォーラム)
では、みんな、ツールのソースをPDSとして公開してたので、
誰かがDOS版findを作ったら、この中のcsh風glob matchの
Cソースを利用して、他の誰かが別のツールを作ったりとかは
してました。

>files = filelist("a:\dir\a*.txt");
これは、上のFindFirstとFindNextを使って簡単に実現できるので、
ライブラリとしてあるかどうかは知りません。
でも、"a:\{dir,f*}\[ab]*.txt"を解釈するようなものは、
何かのソースから取ってきて自由に利用可能でした。

もっとも、MS-DOSの世界では、フリーウエアのソースは
普通未公開だし、NiftyではPDS自体が毛嫌いされてた
みたいだから、こういうことは一般的ではなかったかも知れません。
んな訳で、Win32版でもそういうライブラリがあるのかどうか
知らないし、ましてDelphiのObjectPascalでそういうものが
ある雰囲気もあまりしないので(regexpはあるみたいです)、
今回はgetoptから全部手作りでした(^^;

>そうそう、GNUのtouchを参考にするのもいいかも。
覗いてみます。
FreeBSDのサイトもそうですが、ネット上で古いバージョンも
含めて全部公開されているんですね。やっぱ、こういう風に
ソースに自由にアクセスできるUNIX環境は羨ましいです。

>うーん、でもtouchというコマンドの性質から言って、
>stdinを読まないのは自然ではないかと思います。
何か勘違いしてるのかなぁ(^^;
例えば、ファイル名を引数にとって、そのファイルを処理する
コマンドcommand がある場合に、ls ... | command とか
find ... | command で引数ファイルを渡すのは普通では
ないのでしょうか?
確かに、ls * | cat だと、ファイル名が素通りするだけですね…

No. 176 # M.Masuda 1999/03/12 (金) 22:43
>FreeBSDの場合は/etc/crontabを書き換えると自動的に反映されます
>(1分ごとに書き換えられたかどうかチェックされてる)。
http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#crontab
ここに書いてありましたね。(^^ゞ
すいませんでした。
#確認せずに発言は止めましょうの見本みたいでしたm(_ _)m

ところで、あるアカウントに来たメールをきっかけにスクリプト
やCGIを実行させるってのはどうすれば実現できるのでしょう?
forword辺りに仕掛けをするんでしょうか?

#download.cgiの件は解決しましたでしょうか?

No. 177 # 68user 1999/03/13 (土) 07:46
> 以前に「シェルは、マッチしなかった場合に
> そのままコマンドに渡す」という話を聞いたことがあるのを
> 思い出して、あんな風に書いたのです。
おろ、確かにそうなりますね。以下は全て推測ですが、
shでもcshでもコマンドラインで
    % ls *nonexistent
    ls: No match.
と表示するのはシェルの役目で、このときlsは実行されていないはずです。
しかしperlから、
    open(IN,"ls *nonexistent 2>&1 |"); print <IN>;
とすると、「No match」ではなく、
    ls: *nonexistent: No such file or directory
と表示されます。これはおそらくperlが
    sh -c 'ls *nonexistent 2>&1'
を実行しているからです。shの仕様としては、-cに続いてコマンドを指定すると、
マッチしなかった場合でも、コマンドにワイルドカードをそのまま渡している
ようです。

>>files = filelist("a:\dir\a*.txt");
> これは、上のFindFirstとFindNextを使って簡単に実現できるので、
調べてみたら、Human68kにもfilesとnfilesというライブラリがありました
(機能は同じ)。そういえば昔ファイラーを作ったとき使った記憶があるなぁ…

> ls ... | command とか find ... | command で引数ファイルを渡すのは
> 普通ではないのでしょうか?
ファイルの内容を標準入力から受けるのはよくありますが、
ファイル名を標準入力から受け取るのは普通ではないと思います。
なぜなら、
    % find . -name \*hoge -exec touch {} \;
で簡単に実現できるからです(他にはxargsを使うとか)。

> ところで、あるアカウントに来たメールをきっかけにスクリプト
> やCGIを実行させるってのはどうすれば実現できるのでしょう?
> forword辺りに仕掛けをするんでしょうか?
procmailを使うことが多いようですね。
# http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#procmail

これを見た人が理解できるかどうか知りたいので、詳しくは書きません。
これを読んでわからなかったら、どの辺がわかりにくいか教えてくださいね。

> #download.cgiの件は解決しましたでしょうか?
ただ単にContent-Dispositionというものが使えるものかどうか
知りたかったので、特に困っていたわけではないのです(^^;

> UNIX Userの雑誌のバックナンバー(1995年12月号)を
> 探しています。

ありますけど、お譲りするのはちょっと…(他人のなんで)。
これこれの特集のこの点を知りたいということでしたら、簡単で
いいなら抜粋してここに書いてもいいですが。

No. 178 # M.Masuda 1999/03/13 (土) 18:29
ありがとう68Userさん。\(^^)/

>procmailを使うことが多いようですね。
># http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#procmail
このへんはカキコした後に見て、この辺の解説でできるかなぁと
思っていた所です。

ちょっと試してみましたが、私のしたいことはprocmailを使わなく
ても .forwordに |exec command
で出来そうです。

具体的には、あるアカウントにメールを出すと、現在のサーバー
状況を出力させる様な事をさせたかったのです。
.forwordだけで、procmailを使わずにそのままスクリプトが実行で
きたのでその方向で試してみたいと思います。
その手順では、何か不具合が予想されますか?

>これを見た人が理解できるかどうか知りたいので、詳しくは書きません。
私は、スクリプトで処理しようと思っていたので、procmailの解説
をよく見ていませんでした。(^^;
良く読めば解りますヨ。
環境のない人には全然解らないだろうけど、解説内容を自分で試す
事が出来れば、動作が解るでしょう。

一つ気づいたのですが、超大作のUNIX解説ですが一部だけを印刷し
ようとすると、カット&ペーストしなければならないので、コマン
ド別のページが在るといいかも...
#贅沢言うなって....すいませんm(_ _)m

あとメタキャラの解説なんて在るとうれしいかも

ついでにもう一つ。
正規表現はperlから勉強した(進行形)のですが、シェルとはどのく
らいの違いがあるのでしょうか?

No. 179 # mm 1999/03/13 (土) 21:06
>と表示するのはシェルの役目で、このときlsは実行されていないはずです。
ふむふむ、勉強になりますですm(_o_)m

>shの仕様としては、-cに続いてコマンドを指定すると、マッチしなかった
>場合でも、コマンドにワイルドカードをそのまま渡しているようです。
なるほどー、生でunixに触れないので、このヘンの微妙なところが
よく分からないのです(^^;

>ファイルの内容を標準入力から受けるのはよくありますが、
>ファイル名を標準入力から受け取るのは普通ではないと思います。
そっかぁ…、filterという概念からは逸脱してるかも知れないですね。
確かに、findも-execで済みますし、ls(csh likeな指定)を使いたい
ってのはMS-DOSでの事情でしょうし…

MS-DOS版独自のオプション-S を追加して、その場合だけ標準入力を読む
ことにします。
ありがとうございましたm(_o_)m


ところで、Human68k って、モトローラのチップで動くOSですよね。
X68000でしたっけ?

No. 180 # 68user 1999/03/14 (日) 01:23
> 正規表現は(snip!)シェルとはどのくらいの違いがあるのでしょうか?

シェルの ? や * (これらをglobとかワイルドカードと言います)は
正規表現とは大きく違います。が、機能は限られてるので、覚えるのは簡単です。
    ワイルドカードの ? は正規表現の . に相当 (任意の一文字)
    ワイルドカードの * は正規表現の .* に相当 (任意の文字列)
    ワイルドカードの [ ] は正規表現の [ ] に相当 (任意の文字列)
シェルによって少し違いはありますが(例えば csh では、[^a] は「a以外の1文字」
という意味を持たない。shは [!a] は [^a] と同じ意味)、基本的にこれだけです。

ただし、ワイルドカードはファイル/ディレクトリ名を扱うためのものなので、
    * は、先頭が . で始まるファイルにはマッチしない
        (例えば ls * は、.cshrc などのドットから始まるファイルにはマッチしない)
    ? や * は、パスの区切りである / にはマッチしない
ということになってます。

あと、~ や ~username をホームディレクトリへの置換するのも
一応ワイルドカードの機能らしいです。他には {} があるけど
省略(これはglobというより、ただの文字列処理機能かも)。

> その手順では、何か不具合が予想されますか?
.forwardに書いただけではログ作成や排他処理をやってくれないです。
ですから、ログや排他処理が不必要だったり、そこらへんの処理を
スクリプト側で行っているなら大丈夫じゃないでしょうか。

> コマンド別のページが在るといいかも...
http://X68000.startshop.co.jp/~68user/unix/
ソースを見てみると…検索用FORMが…。
設置しようと思ってるんですが、めんどくさくて進んでません(^^;

> X68000でしたっけ?
X680x0上で動くMS-DOSクローンなOSです。ハドソン謹製(笑)

No. 181 # mm 1999/03/14 (日) 03:03
>X680x0上で動くMS-DOSクローンなOSです。ハドソン謹製(笑)
コンベンショナルメモリ(640KB)の制限がないんで、
TSRが常駐し放題って噂は聞いてました(^^;
しかし、ハドソン製ですか…シャープじゃないんだぁ(驚)

>シェルの ? や * (これらをglobとかワイルドカードと言います)は
>正規表現とは大きく違います。
シェルのglobも、広い意味では、正規表現と言っていいんじゃないで
しょうか。
ドラゴンブックでも、正規表現によるパターン記述の例として、Lexや
AWKと共に、シェルのファイル指定を挙げています。
ただ、一般的には、sed, grep, awk, perl等の正規表現とglobは
区別されるようですんで、表現だけの問題ではありますが…

No. 182 # チワワ大王 1999/03/15 (月) 01:09
セガのシェンムーBBSで、ここを紹介しました。
過去ログが充実しているので、多くの人に知ってもらいたいと
思ったからです。勝手にすみません。以前も勝手に紹介したような。

No. 183 # Asano [E-mail] 1999/03/15 (月) 11:41

UNIX User (1995年12月号)の
特集:UNIXはソースが決め手です。
    PART 1:GNUツールで最新のデバッグ環境を整えよう●向川信一
    PART 2:GDBを活用してデバッグを効率的に●向川信一
の内容を知りたくて、パックナンバーを探していました。
Solaris2.6のマシンですが、デバッグ環境構築のノウハウが
なく、どこから手をつけていいのやら、わからない状況に
あります。簡単な抜粋を書いていただけるだけでも、
助かります。お手数かと思いますが、お願いします。

No. 184 # M.Masuda 1999/03/15 (月) 20:54
シェルってあまり(globって言うんですか)ワイルドカードの種類が
なかったんですね。
やっぱり複雑な事をさせようと思うと、Perlや他の言語で記述する
んですね。

例えば日付が変わったら、cronでwebのアクセスログから自分のペー
ジヘのアクセスを切り出して、その中の特定ページヘのアクセスの件
数をカウントして結果をメールで送る。
なんて複雑な物は、シェルだけでなく何らかのツールや他の言語を使
ったほうが簡単ってことですね。
#実際にシェルスクリプトでやろうとしたがうまく行かず...う〜ん。

>.forwardに書いただけではログ作成や排他処理をやってくれないです。
ログ作成ってのは説明でのリファイルの事ですか?

それと補足質問?ですが、
^hogeは先頭がhogeで始まる。
hoge$行末がhogeで終わる。
でいいんしょうか?
もしそうならPerlの正規表現と同じですね。
#上記が正しいとするとprocmail解説文の hoge$は head_string_hoge
#でも hoge でもマッチしませんか???
#ぜんぜんはずしてるかなぁ(汗)

いろいろ解かってくると、何でも疑問になってきます。(ワクワク)
実験すればいいのでしょうが、他の方のためにも解説してもらえれば
うれしいなっと。(^_^)V
#そんなの解からないのはお前だけなんて言わないで〜(汗)

>> コマンド別のページが在るといいかも...
> http://X68000.startshop.co.jp/~68user/unix/
最近namazuっていう検索エンジンの名前をあちらこちらで聞きます。
これを使ってみたらどうでしょうか。

#最近本業よりシェルいぢってる方が面白くなっている自分が恐い...

No. 185 # 68user 1999/03/16 (火) 00:43
> ログ作成ってのは説明でのリファイルの事ですか?
いえ、ただのログです。例えばこんなの。
    From owner-xxx@xxx Fri Mar 12 01:56:59 1999
        Subject: [xxx 1251] xxx 350 =?ISO-2022-JP?B?GyRCJFgkTkRJMkMbKEI=?=
        Folder: /home/xxx/script/deliv 2321
    From all-request Mon Mar 15 23:18:17 1999
        Subject: [xxx 377] xxx will be rebooted.
        Folder: /usr/sbin/sendmail -oi j5306050@cs.gunma-u.ac.jp 1520
    From all-request Mon Mar 15 23:38:23 1999
        Subject: [xxx 378] Re: xxx will be rebooted.
        Folder: /usr/sbin/sendmail -oi j5306050@cs.gunma-u.ac.jp 1691

> ^hogeは先頭がhogeで始まる。 hoge$行末がhogeで終わる。でいいんしょうか?
あってます。

> procmail解説文の hoge$は head_string_hoge も hoge でもマッチしませんか?
    * ^Subject: hoge$
は、ヘッダに「(行頭)Subject: hoge(行末)」という行があれば
commandに渡されるわけです。ヘッダ名(この場合はSubject)の
前に ^ がありますから。
# 本当は * ^Subject: *hoge$ にしなきゃいけないんだけど

> 最近namazuっていう検索エンジンの名前をあちらこちらで聞きます。
namazuを使うなら、1つ1つのコマンドを別ファイルにしないと
いけない(というか、そうしないと使う意味がない)んですよね〜。んが、
    % quota
    Filesystem usage quota limit timeleft files quota limit timeleft
    /raid 14794 15000 20000 2529 3000 4000
ファイル数の余裕が…ない…(^^;

> 例えば日付が変わったら、cronでwebのアクセスログから自分のペー
> ジヘのアクセスを切り出して、その中の特定ページヘのアクセスの件
> 数をカウントして結果をメールで送る。
これくらいならシェルスクリプトでもできますよ。
日付が変わったら、という部分はcronにまかせるとして、
    #!/bin/csh -f
    set log="/var/log/httpd-access.log"; # ログファイル名
    set yeasterday_log="/tmp/yesterday_log.$$"; # テンポラリファイル
    grep `date -v-1d "+%d/%b/%Y"` $log > $yesterday_log # 前日の日付でgrep
    set top_count = `grep -E 'GET /~$USER/(index.html)? ' $yesterday_log | wc -l`;
    set unix_count = `grep -E 'GET /~$USER/unix/(index-unix.html)? ' $yesterday_log | wc -l`;
    echo "top page $top_count hit."
    echo "unix page $unix_count hit."
    rm $yesterday_log
とか。stdoutへの出力はcronによってメールで送られてきます。
でもまぁ、さらに機能を付け加えていこうと思っているなら、
perlでやっちゃった方がいいんでしょうけど。

> セガのシェンムーBBSで、ここを紹介しました。
どもども。リンク・URL紹介・引用はご自由にどうぞ。

> コンベンショナルメモリ(640KB)の制限がないんで、
> TSRが常駐し放題って噂は聞いてました(^^;
でも12MBの壁があって(アドレスレジスタが24bitだから)、それを
越えるのにはDOSと同じようなことをしてました。まぁ、全盛期には
それが問題になるほどメモリを積めませんでしたが。

> シェルのglobも、広い意味では、正規表現と言っていいんじゃないでしょうか。
ん〜どうなんでしょうね。僕は目的の違い(globはファイルにマッチさせるもの)
と、文法・機能の違いから、別物として説明するようにしてます。
でも同じものと言った方が初心者にわかりやすいなら、それはそれで
いいと思います。

> Solaris2.6のマシンですが、デバッグ環境構築のノウハウがなく、
特集は、gdbのインストールと、gdbの使用法の2本立てですが
どちらがお望みですか? すいませんがお返事は *メール*でお願いします。

No. 186 # mm 1999/03/16 (火) 02:00
>でも12MBの壁があって(アドレスレジスタが24bitだから)、

MS-DOSしか使ってなかった頃の最大実装は8MBだから、
私の場合、壁のうちに入らないなぁ…(^^;


>でも同じものと言った方が初心者にわかりやすいなら、それはそれで
>いいと思います。

私の経験なんですが、昔、正規表現といえばsedやgrep(その頃はawkも
perlも知らなかった)で使うアレのことしかないと思い込んでたことが
あって、誤解を招く文脈で「正規表現」という言葉を使って指摘された
覚えがあるんです。
難しい話でよく理解できなかったために、正確には覚えてないんですが、
文脈自由文法や正規文法とかの話に割り込んで、何か発言をしたのだと
思います(^^;
だから、これらを区別して説明するのはいいと思うのですが、globも
正規表現の一種又はサブセット?だということも含めておいた方が、
初心者の方にも後々のためにはいいんじゃないかなと思ったのです。
とは言うものの、議論するほどの問題ではないので、この話題は以降
無視して頂いて結構です。

No. 187 # M.Masuda 1999/03/16 (火) 20:46
すいません...
>いえ、ただのログです。例えばこんなの。
これなんですが、
>.forwardに書いただけではログ作成や排他処理をやってくれないです。
procmailが勝手にログを作ってくれるのですか?
もしそうなら、それは何処に出力されるのですか?
と言う意味でした。
#日本語ヘタですいません...(^^ゞ

> * ^Subject: hoge$
> は、ヘッダに「(行頭)Subject: hoge(行末)」という行があれば
> commandに渡されるわけです。ヘッダ名(この場合はSubject)の
> 前に ^ がありますから。
> # 本当は * ^Subject: *hoge$ にしなきゃいけないんだけど
あっなるほど、よく見ると間にスペースが...
これは、2つの条件([^hoge]、[hoge$])が指定されているのですね。
(↑ procmailの解説)
#ネスケのデフォルトフォントをMS P明朝にしているのだけど
#半角スペースが分かりづらいしアンダーバーが表示されないし、
#設定変更しようかな...気に入っているんだけど。←独り言


>namazuを使うなら...
そうなんですか。最近よく見かけるのでもしかして、と思ったので
すが。
#「ですよね〜。んが、」の行にはやられた...
#思わず吹き出して周りの白い目が...


>これくらいならシェルスクリプトでもできますよ。
う〜ん、シェル使い。というか、やっとPerlを使えるようになってき
た私には、「さすが」以外言葉が出ない...(((((^^;


>正規表現の一種又はサブセット?だということも含めておいた方が、
>初心者の方にも後々のためにはいいんじゃないかなと思ったのです。
初心者として、ありがたきお言葉。感謝感謝m(_ _)m >mmさん

No. 188 # M.Masuda 1999/03/16 (火) 23:25
自己レスです。
偶然というか出来すぎ?でレスキューさんのページでprocmailの
解説を見つけました。
#しかも一昨日UPばかりの情報。もしかしてここでのやり取りを見
#ていた?!

いやはや、だいぶ変な事を書いてますね(^^ゞ

ログの件は環境変数に、
LOGFILE=$HOME/procmail.log
の様な指定をしたときにprocmailによって作成される。
ですね。

>> # 本当は * ^Subject: *hoge$ にしなきゃいけないんだけど
> あっなるほど、よく見ると間にスペースが...
これは単純にメールのヘッダーの規則で、Subject:とその内容の
間には半角スペースが必要なんですね。

なんてオバカなんでしょう。
大変失礼をいたしました。(^^;

謎が解決しました。

No. 189 # 68user 1999/03/18 (木) 03:14
> ログの件は環境変数に、
> LOGFILE=$HOME/procmail.log
> の様な指定をしたときにprocmailによって作成される。
yes. 環境変数じゃなくてレシピに書くんですけどね。

> これは単純にメールのヘッダーの規則で、Subject:とその内容の
> 間には半角スペースが必要なんですね。
    Subject: hoge(スペース1つ)
    Subject: hoge(スペース2つ)
    Subject:hoge(スペースなし)
のいずれにも対応できるようにするためです。調べてませんが、
どちらもメールヘッダとしてはアリなんじゃないでしょうか。
(RFC821あたりで決まってるかな?)


ところで素朴な疑問ですが、補完って知ってます?>M.Masudaさん(や他の方)
コマンドラインでTABやCtrl-Dを押すやつ。

知らない人が多いなら、軽く解説を書こうかなと思ってるんですが。
入門書でシェルの補完まで触れているのを見たことないんで、
もし補完を知らずに「UNIXのコマンド入力は めんどくさいものだ」
と思う方がいたらヤだなと思いまして。

No. 190 # Blue [E-mail] 1999/03/18 (木) 09:29
初めてメールさせていただきます。

UNIX の bc コマンド/ dc コマンドの使い方を伝授していただけないでしょうか。
あるいは、このコマンドの解説本をご存知でしたら教えていただけないでしょうか。

お願いします。

No. 191 # M.Masuda 1999/03/18 (木) 15:25
先日はどうもでした。(^^ゞ >68Userさん
完成を期待しています。

>>ログの件...
また変な事かいちゃった...(>_<)
#RFCのどこに何がかいてあるかは、何で調べてるんですか?

>ところで素朴な疑問ですが、補完って知ってます?
もしこれが無ければ、あまりシェルを触らなかったでしょう。(^^)
DOSの頃はこれが無かったので、長いコマンドでミスタイプすると
大変でした。
ついでにUPキー'↑'でのヒストリー機能もどうでしょう。
#bashだけ?

変な発見。
bashていうのはshの完全上位互換なんでしょうか?
/bin/をみると、うちの環境では sh -> bash とリンクになってま
した。(デフォルトシェルはbash)#OSはTorbo Linux 2.?
#知らなかった。

それと、パーミッションについてちょっと聞きたいのですが。
#Groupはとりあえず無視。
chmod 700 hoge.cgi の場合、Otherに何も無いので、シェル上
からのみ実行可能。
chmod 705 hoge.cgi の場合、Otherに読込・実行共に有るので
シェル上でもwebから(nobody権限)でも実行可能。
となりますよねぇ。

それでは、701の場合はどうなります?
うちの環境では、webからでは動きません。
Other実行権が有れば(1が立っていれば)webからでも実行できる場
合はsuExecをインストールすれば可能なのでしょうか?

それともう一つ。(^^ゞ
.procmailで
:0
* 条件
コマンド
の「* 条件」行を書かなければ全ての場合に適応される。
で合ってますか?


> UNIX の bc コマンド/ dc コマンドの使い方...
bcならここにありますよぅ〜(浦部くみこ調)
http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#bc

No. 192 # 68user 1999/03/18 (木) 17:54
> #RFCのどこに何がかいてあるかは、何で調べてるんですか?
なんとなくです。僕が興味を持つ範囲は限られてるので、
FTPならRFC959、POP3は1939、SMTPは821、HTTPは1945/2068、
くらいを知っておけば、大抵調べることができます。

> もしこれが無ければ、あまりシェルを触らなかったでしょう。(^^)
あ、ご存知でしたか。

> /bin/をみると、うちの環境では sh -> bash とリンクになってま
Linixはsh->bashらしいですね。ただし現状ではshが使われるのは
スクリプトくらいでしょうから、それなりの互換性があれば問題ない
のでしょう。でもたまにshとbashで挙動の違いが原因で動かない、
なんて話は聞きます。

> それでは、701の場合はどうなります?
普通スクリプトはReadできないと実行できません。バイナリならeXecute
だけでもいいですが。
    #!/hoge
で始まる scriptというスクリプトを、
    script
で実行した場合は、カーネル(かな?)が
    /hoge script
を実行します。
    #!/bin/sh
    sleep 10;
を ./script で実行して、C-zでsuspendしてpsを実行すると、
    322 p2 T 0:00.01 /bin/sh ./script
などとなっているはずです。このとき scriptをReadできないと
エラーになるわけですね。

> の「* 条件」行を書かなければ全ての場合に適応される。
たぶん…。試して見てください(^^;

> UNIX の bc コマンド/ dc コマンドの使い方を伝授していただけないでしょうか。
実はbcやdcはかなり高機能なので、あの解説だけでは不十分かも
しれませんが、どの程度の解説をお望みで?(でも僕はあれ以上の
ことは知りません)

dcは逆ポーランドで記述する計算機です。
    % dc
    2 3 + (2+3の結果をスタックにpush)
    p (スタックの先頭を表示)
    5 (結果は5)
    1 2 + 5 3 - * ( (1+2)*(5-3)の結果をスタックをpush)
    p (スタックの先頭を表示)
    6 (結果は6)
計算式を逆ポーランドに変換すると、括弧の優先順位などを
気にせず、先頭から順番に処理していくことができます。
まぁ、コンピュータ向けの書き方で、人間向きではないですね。

No. 193 # mm 1999/03/18 (木) 18:43
>DOSの頃はこれが無かったので、長いコマンドでミスタイプすると
>大変でした。
DOSでも、TSRを使えば、補完可能でした…
というより、これがなければ、DOSのコマンドラインを使う気には
なりませんでした。
私が使っていたのは、history.com というもので、コマンドライン
上での行編集機能、ヒストリー機能、補完機能、別名機能などが
ありました。

ただ、unix上の補完機能の解説って読んだ覚えがないので、
本家のものがどういう仕様になっていたのか、できれば知りたいです。
DOSの場合、カレントに abc.exe というファイルがあって、
コマンドラインの先頭で a を入力して、補完機能を使うと、
abc というようなコマンド名(.exeがない)の補完が行われます。
でも、unixの場合は、補完は引数ファイルだけだという話を聞いた
ような気もしたりしますんで…(違ったかも知れない(^^;)


>dcは逆ポーランドで記述する計算機です。
少し前までなら、まだ逆ポーランド記法の電卓を使ってる人がいる
って話を聞いたことがあるんですが、もう絶滅したかな…(笑い)
確か、FORTHも逆ポーランドだったような…?

No. 194 # Blue [E-mail] 1999/03/18 (木) 20:03
.>実はbcやdcはかなり高機能なので、あの解説だけでは不十分かも
> しれませんが、どの程度の解説をお望みで?(でも僕はあれ以上の
> ことは知りません)

実行させたいのは、プログラムが出力した(文字列)データを表計算のように
単純な合計や平均の演算を行いたいのです。
入力データは、いくつかの固定のデータ数を一つのグループとして(つまり行に相当)
扱いたいのです。
こんな具合です;

" 10 22 110 20 30 200 5 25 300"
この例では;
    10 22 110 が一行目のデータ
    20 30 200 が二行目
    5 25 300 が三行目
として扱い、
一列目の合計を求める bc コマンド記述を実行すると 35 が求まり、
二列目の平均を求める bc コマンド記述を実行すると 25.6 が返ってくると
いった使い方をしたいのですが。

そして、bcコマンドに実行させる処理内容は、C-shell でデータに合わせて
Generate させようと考えています。
bc コマンドにこんなことを望めますか?コンパイルさせずに演算結果を
取り込みたいというのがこの目的です。

No. 195 # 68user 1999/03/18 (木) 21:42
やはりみなさん知ってますか。僕はUNIXを使い初めて数か月
知りませんでした。僕のまわりでは補完を知らない人が かなりいます。

DOS時代は補完がないのが当り前、と思ってたので、別に面倒だとは
思いませんでした。

> unixの場合は、補完は引数ファイルだけ
cshだと確かにそうですね。tcshは(多分bashも)コマンド/引数共に補完できます。
あと、completeという内部コマンドを使うと、どのコマンドが
どういう引数を要求するのか、という情報を与えることができます。

例えば、cat (Ctrl-D)とすると ファイル/ディレクトリ名の一覧出てきますが、
man (Ctrl-D)ならマニュアルの一覧が出てくると便利ですよね。さらに
    man 3 (Ctrl-D) … マニュアルのセクション3
    telnet (Ctrl-D) … ホスト名
    rmdir (Ctrl-D) … ディレクトリ名
    printenv (Ctrl-D) … 環境変数
    gcc -f(Ctrl-D) … -fで始まる長い長いオプション名
と、状況に応じて補完対象を変えてほしいわけで。

というわけで、例えばこんな感じにするわけです。
    http://X68000.startshop.co.jp/~68user/tmp/.completerc

で、bashでは、tcshのcompleteに相当する機能はないのかなと思ってるんですが、
どなたかご存知ですか?


> " 10 22 110 20 30 200 5 25 300"
bcにこだわる理由がなければ、perlやawkを使った方がいいかもしれませんね。

    #!/usr/local/bin/perl
    $raw = 3; # 一行あたりの項目数
    $raw_num = shift || die; # 平均を得たい項目(1列目なら0)
    $sum = 0;
    @nums = split(/ /,<STDIN>);
    $i = 0;
    while ( defined $nums[$i*$raw+$raw_num] ){
        $sum += $nums[$i*$raw+$raw_num];
        $i++;
    }
    print "$raw_num列目の合計は $sumです。\n";

実行例。
    % echo '10 22 110 20 30 200 5 25 300' | ./b 1
    1列目の合計は 77です。

bcでできるかどうかマニュアルを読んでみたのですが、よくわかりませんでした。

ところでbcで割り算の結果を小数点の精度で得る方法をご存知ですか?
3/4 も 3.0/4.0 も 3.1/4.1 も結果が0になるんですが…。

No. 196 # 68user 1999/03/18 (木) 22:03
> ところでbcで割り算の結果を小数点の精度で得る方法をご存知ですか?
man読んでたら書いてありました。scale=3などとして、有効桁数を
指定すればいいんですね。デフォルトはscale=0だから、小数点以下は
表示されない、と。

あと、ご存知かもしれませんが、bc(GNU bc)の日本語マニュアルは
    http://www.jp.freebsd.org/man-jp/search.html
で見られます。

No. 197 # M.Masuda 1999/03/18 (木) 22:27
>> それでは、701の場合はどうなります?
これは、最近小耳に挟んだ事なのですが、一部のサーバー(Apache1.3環境)
での解説で、パーミッションを701でCGIが動くとの表記が有りました。

調べてみるとsuExecを使用していて、そのサーバー上ではファイルのオ
ーナー権限で動くらしいのです、私の環境ではsuExecは使えないので、
状態が解からなく、疑問に思っていたので前回の質問となりました。
#それなら700でもweb経由のCGIが動くはずですよねぇ。
#これ出来ると、webから自分宛のメールを読んだり出来る。

>322 p2 T 0:00.01 /bin/sh ./script
> などとなっているはずです。このとき scriptをReadできないと
> エラーになるわけですね。
言い方を変えると、スクリプトを実行するためのインタープリタが
そのファイルを読めないといけないと言うことですね。
suExecを使わない普通のCGIは、nobody権限で/bin/shとか /bin/perl
が動くわけですね。

>でもたまにshとbashで挙動の違いが原因で動かない、
> なんて話は聞きます。
これは、頭に入れておかないと。φ(._.)
sh と bashの違いを考慮しないとはまりそう...。
#滅多にそんな場面無いだろうけど。

> の「* 条件」行を書かなければ全ての場合に適応される。
「* 条件」の行を空行にすると、無視されました。
「*」のみだと全てのメールにマッチするようですね。
ちなみに、うちの環境だと .forwordに "| exec /path/procmail"
としなくても、~/ に .procmailを置くだけでprocmailが動きました。
#Turbo Linuxだけなのかなぁ。

>FTPならRFC959、POP3は1939、SMTPは821、HTTPは1945/2068、
RFCのブックマークはとってあったのですが、よく見ると一部だけの
ミラーサーバーでした。
自分でも探してみますが、早いサーバー(アクセスの少ない?)を
知っていたら教えて下さい。m(_ _)m

>DOSでも、TSRを使えば、補完可能でした…
私もいくつかの常駐ソフトを知っていましたが、いずれも不安定な
ものが多く、あまり使っていなかったのが現状でした。(^^ゞ
>mmさん

関係無いけど、HSBというソフトリブートを可能にするNEC98シリーズ
用のソフトは便利でした。
メモリチェックをすっ飛ばしてくれるので、環境の切り替え時にバッチ
組んでメニューで再起動なんてよくやっていました。

No. 198 # 68user 1999/03/18 (木) 23:32
> これは、最近小耳に挟んだ事なのですが、一部のサーバー(Apache1.3環境)
> での解説で、パーミッションを701でCGIが動くとの表記が有りました。
700ではなくて701なら動く、ということはあり得ないはずです。

suExecを組み込んだapacheは、はある時点まではnobodyで動いていて
SSI/CGIを動かす際に そのユーザ権限に変更するはずです。
ですので、そのCGIスクリプトを置いてあるディレクトリ(例えばcgi-bin)
にはotherに対してxビットを立てる必要があるかもしれません。
# でも多分ファイルもディレクトリも700でOKだと思いますけど、
# suExecを使ったことがないのでちょっとわかりません。

> ちなみに、うちの環境だと .forwordに "| exec /path/procmail"
> としなくても、~/ に .procmailを置くだけでprocmailが動きました。
え、ほんとですか? それだとsendmail(mail.local?)が、procmailだけを
特別扱いしてることになるんですが…。

No. 199 # mm 1999/03/18 (木) 23:34
> http://X68000.startshop.co.jp/~68user/tmp/.completerc
ガ〜ン!
やはり、ご本家は、スゴーイ!!

DOSの貧弱な環境を何とかunixに近づけたいと思っていたのですが、
やはり所詮、マネはマネに過ぎなかったみたいですね(^^;
(でも、プリミティブなDOSは、やはり問題外…)


M.Masuda さん
>メモリチェックをすっ飛ばしてくれるので、環境の切り替え時にバッチ
>組んでメニューで再起動なんてよくやっていました。
えー、一体どのような環境を切り替えられたのでしょうか?
キャラクタデバイスやTSRなら、リセットしなくても変更可能だし、
それ以上の環境の切り替えはウチでは必要なかったので、
そういうのは使ったことないです(^^;

No. 200 # mm 1999/03/19 (金) 00:04
>えー、一体どのような環境を切り替えられたのでしょうか?
すいません。ついオンラインで読んで疑問に思って書き込んでしまいましたが、
このボードとは無関係の話題でした(^^;
この質問は、なかったことにして下さいませm(_o_)m
(それに、RAMディスクやディスクキャッシュの構成を変える場合にも、
リセットは必要ですね(^^;)

No. 201 # mm 1999/03/19 (金) 00:04
>えー、一体どのような環境を切り替えられたのでしょうか?
すいません。ついオンラインで読んで疑問に思って書き込んでしまいましたが、
このボードとは無関係の話題でした(^^;
この質問は、なかったことにして下さいませm(_o_)m
(それに、RAMディスクやディスクキャッシュの構成を変える場合にも、
リセットは必要ですね(^^;)

No. 202 # M.Masuda 1999/03/19 (金) 00:29
>700ではなくて701なら動く、ということはあり得ないはずです。
そのとおりです。suExec下ではユーザーの実行権が有効ですね。
#やっぱ日本語の書き方悪いかなぁ。(^^;
私の見たページです。
http://www.parkcity.ne.jp/~chaichan/bin/htmcount.cgi?name=howtocgi

>え、ほんとですか? それだとsendmail(mail.local?)が、procmailだけを
>特別扱いしてることになるんですが…。
今日は時間が無いので、後日試して結果を報告します。


>キャラクタデバイスやTSRなら、リセットしなくても変更可能だし、
最近触ってないし、DOS用マシンはご臨終なので忘れてしましまし
たが。(^^ゞ
ブロックデバイスです。その他ソフト同士の相性も有りました。

当時周りで、コンベンショナルを広げるのが流行っていたので、
必要最低限のデバイスを組込み直して使用してました。
あるマシンは拡張メモリが無かったりしたもんで...(^^;

4M積んだノートでは、620kbのfreeは確保出来たのですがそれで
限界でした。
#あの頃が懐かしいなぁ...(^^ゞ

> http://X68000.startshop.co.jp/~68user/tmp/.completerc
> ガ〜ン!
> やはり、ご本家は、スゴーイ!!
全く同感です。

No. 203 # M.Masuda 1999/03/19 (金) 16:09
結果の報告です。

>え、ほんとですか? それだとsendmail(mail.local?)が、procmailだけを
>特別扱いしてることになるんですが…。

おかしいな、やっぱ .forwardを設置しなくとも.procmailrcだけで
いけてしまいます。
.forwardに転送先のアドレスとかが指定されていると.procmailrc
は評価されないようです。つまり .forwardが無く.procmailrcがある
時にのみ.procmailrcが評価されるようです。

RedHat LinuxとTurbo Linuxの両方とも同じ動作でした。

レスキューさんとこも.forwardへの記述を指示してあったし?
ん〜。

#sendmailの初期設定が違うとか...
#このへんは初心者にはぜんぜん解からん(^^;

ちなみにいろいろ試しているうちに、シェル上でmailを実行して
メールを読み 'd'や 'q'で終了してもメールがスプールに残り
mail終了時に、
Unable to lock mailbox: Permission denied
と言われるようになってしまいました。
ロックファイルにアクセス権が無いって事でしょうが、それが
どこに有るのか解からない。(>_<)
どうすればいいでしょう。とほほ。

No. 204 # いわもと 1999/03/19 (金) 21:05
こんばんは。いわもとと申します。
今日1日散々悩んでいたんですが、crontabコマンドから
シェルファイルを呼び出し、そのシェルファイルの中で
SQL*PLUSを呼び出してPL/SQLプロシージャを実行させようと
していたのですが、TNSサービス名が認識できないと
エラーを返されてしまいました。
直接シェルファイルを実行させるとちゃんとサーバを
認識してプロシージャを実行してくれるのですが、
crontabコマンドから呼び出すとうまく行きません。
tnsnames.oraファイルも正しく入力されていましたし、
まったく原因がつかめません。
どなたかこういうエラーに詳しい方、解決方法を
教えていただけないでしょうか。

No. 205 # M.Masuda 1999/03/19 (金) 21:41
こんばんは岩本さん。
http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#crontab
上のページでcron実行時の注意として、
「なお、crontabで実行されるときには、ほとんどの環境変数が指定
されていないので注意が必要。」と有りますが、試しに簡単なスク
リプトで、実行時に有効になっている環境変数を表示させてみて
必要な変数をスクリプトに追加してみたらどうでしょうか?
多分この辺のような気が...
#またぜんぜん違ったりして。(^^;

No. 206 # 68user 1999/03/20 (土) 07:02
M.Masudaさんへ。
    % grep -i procmail /etc/sendmail.cf
の結果を教えていただけますか。

> crontabコマンドからシェルファイルを呼び出し…
SQL*PLUSなるものも、TNSなるものも知らないので、あくまで一般論
ですが、確かに環境変数が原因であることが多いと思います。

csh/shスクリプトなら、-xや-vオプションを付けることで、
どこで止まっているかわかります。また、
    % env - sh
とすると、環境変数を完全にクリアした状態のshが立ち上がるので、
その状態でスクリプトを動くような状態にしてみてはいかがでしょう。
# ただし、cronでは設定されているはずのPATH、HOME、USERなども
# クリアされてしまいます。

No. 207 # M.Masuda 1999/03/20 (土) 11:55
> % grep -i procmail /etc/sendmail.cf
> の結果を教えていただけますか。
##### @(#)local_procmail.m4 8.6 (Berkeley) 10/20/96 #####
### PROCMAIL Mailer specification ###
##### @(#)procmail.m4 8.6 (Berkeley) 4/30/97 #####
Mprocmail, P=/usr/bin/procmail, F=DFMSPhnu9, S=11/31, R=21/31, T=DNS/RFC822
/X-Unix,
                                A=procmail -Y -m $h $f $u
Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=10/30, R=20/40,
                                A=procmail -Y -a $h -d $u
と出ました。
これは吉か、はたまた大凶か?
出来れば意味を教えて下さい。(^^;

No. 208 # M.Masuda 1999/03/20 (土) 22:52
こちらは RedHatの方です。
Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=10/30, R=20/40,
                    A=procmail -Y -a $h -d $u

それから、WU-FTPDでの/etc/ftpaccessの設定について
もし分かるのならメールで直接聞いてもいいでしょうか。
内容を見てもらいたいのですが、内容的に公開してもいい
ものか分からないもので...。

内容は一般ユーザーへの、ftp接続時でのアクセス制限です。

No. 209 # 68user 1999/03/21 (日) 00:40
へぇぇぇぇ、ほんとにprocmailを特別扱いしてるんですね。

> 出来れば意味を教えて下さい。(^^;
きついことをおっしゃる(笑)

Mで始まる行は、配信エージェントの定義を表します。
P=はプログラムのパス、S=とP=はエンベロープ/ヘッダの書き換え、
10/30、20/40ってのは書き換え規則(どこか別の場所で定義されている)、
F=はこの行の(他の行から参照する際の)設定の名前を決めてるのかな?
それとも他での定義を参照してるのかな?
T=は、メールヘッダに追加される? A=... はわかりません。

sednmail.cfを理解できるほどの知識があるわけではないので
(コウモリ本も持ってない)、こんなもんでご勘弁を(^^;

Slackwareの配布サイトを見てみましたが、やはり標準で
procmailを特別扱いしているようです。Linux界では
普通なのでしょうか(僕からするとちょっと気持ち悪いですが)。

> それから、WU-FTPDでの/etc/ftpaccessの設定について
> もし分かるのならメールで直接聞いてもいいでしょうか。
すいません、wu-ftpdは使ったことがないのです。

No. 210 # ぬいぐるみバンザイ [URL] 1999/03/22 (月) 02:56
はじめまして、こんばんわ。ぬいぐるみバンザイと言います。

CGIについてですが、少し質問があります。
それは、ホームページの更新状況を(自分や他人のサイトも含めて)自動で
(そのCGIを実行すれば)検知するようなものを作りたいor探しているのですが
お心当たりはないでしょうか?

初心者の自分ではソケットを使ってターゲットとなるサイトに接続して、index.htmlあたりの
ファイルの月日を取得できたらいいなと思うのですが、こういうことは可能なのでしょうか?
初心者ゆえ、何をいってんだ?的なところがあるかも知れませんが、よろしくお願いします。m(__)m


ではでは

No. 211 # mm [URL] 1999/03/22 (月) 03:26
自分のサイトならば、上のURLのスクリプトではいかがでしょう…
他人のサイトの場合は、仰るようにソケットを使って HEAD メソッドかな…

M.Masuda さん
>4M積んだノートでは、620kbのfreeは確保出来たのですがそれで
>限界でした。
そう言えば、そんなことが流行ったことも…、でも620はスゴイ…(笑い)

No. 212 # 68user 1999/03/22 (月) 05:47
> それは、ホームページの更新状況を検知するようなもの
mmさんのおっしゃる通り、HTTPのHEADメソッドを使えばいいでしょう。
レスポンスのヘッダ部分から
    Last-Modified: Wed, 20 May 1998 14:59:42 GMT
などという情報が得られます。ただし、(少くともapacheでは)SSIを
使っているページでは、Last-modifiedを返してくれません(例えば
うちのトップページ)。また、Last-Modifiedを返さないサーバもあるでしょう。

ソケットの使い方については
    http://X68000.startshop.co.jp/~68user/net/
が参考になるかもしれません。

> CGIについてですが、少し質問があります。
ただし、CGIとして動作させるのは非現実的かと思います。
なぜなら、いろんなサーバに接続するのはそれなりに時間がかかります。
重い時間帯なら数分待たされることも珍しくありませんので、
その間にCGIのタイムアウトが発生するでしょう。

ですから、コマンドラインから動作させるか、あるいはCGIで動かすとしても、
    - すぐにclose(STDOUT)してコネクション自体を切断
    - その後 更新時刻のチェック
    - チェック結果をHTMLに吐き出す
    - (あなたが)すこし時間が経ったらそのHTMLにアクセス
とした方がいいと思います。

> or探しているのですが
プログラム自体は比較的簡単に作れますから、探せばあるのでしょうが、
残念ながら知りません。ただ、IEやNNにそういう機能が付属しているのでは
ないでしょうか。

No. 213 # takashi 1999/03/23 (火) 17:13
はじめまして。

UNIX初心者なので、いろいろ分からない事があり、
いきなりですが、みなさんに教えて頂きたいことがあります。

シェルスクリプト内にてスーパーユーザーになりあるコマンドを
発行したいのですが、スーパーユーザーになったところで
プロンプトが帰ってきてしまい、以降の処理に行きません。

どの様にすれば、シェルスクリプト内にてスーパーユーザーになって
コマンドを発行できるのでしょうか?

よろしくお願い致します。
できれば、シェルのサンプルを見せていただければと思っております。

No. 214 # M.Masuda 1999/03/23 (火) 18:42
>へぇぇぇぇ、ほんとにprocmailを特別扱いしてるんですね。
ありゃりゃ、ほんとにそうだったんですか、私の勘違いなのかなぁ
なんて思って、「違いますよぉ」なんてレスが返って来るかと思っ
てました。(^^;;;;

一番難しいと言われるsendmailに関しては、既に私の理解を超えてる
ので、今は逃げます...(爆)
将来の、目標としておきます。(^^ゞ

>きついことをおっしゃる(笑)
そんなそんな、コウモリ本もなくてあれだけ理解してればぜんぜん
○では?...。
でも本当にシステムによってかなり設定が違うんですね。
勉強になります。

>すいません、wu-ftpdは使ったことがないのです。
残念です。一応目的の事は達成出来たのですが、その手順での
他の部分への影響が知りたかったのです。
この辺は、いくら1ソフトの設定が出来ても、システムそのものに
詳しくないと、分かりませんからね。

プログラマーの弟は、free630kbと私に自慢してました。(^^ゞ>mmさん
#すいません、違う話題で...>68Userさん

こんにちはtakashiさん
シェルスクリプト内でrootになる?
それってどうやるのですか?
普通suコマンドやpasswdコマンドでは、わざとユーザーに入力要求
を出して、システムを保護するようになっているという話を聞いた
事が有ります。
それに、スクリプト内にrootのパスワードを記述しなければいけな
いのでは?
もしそうなら、それはセキュリティー的に辞めた方がいいと思いま
すよ。
何をしたいのかが分かりませんが、root権限でログイン中以外の時
に、何かをさせたいのであればcrontabなどで実現させるのがいいと
思いますヨ。
#外しているかなぁ(^^ゞ

No. 215 # takashi 1999/03/23 (火) 20:11
M.Masudaさん、ありがとうございます。

Masudaさんと言う通り、セキュリティの問題のあるやり方なので、
他の方法を考えたいと思います。

また、お世話になると思いますが、その時にもよろしくお願い致します。

No. 216 # M.Masuda 1999/03/23 (火) 23:51
>他の方法を考えたいと思います。
どんな事をしたいのかを書くと、きっと有効な情報が得られると
思いますヨ。

またまた、御世話になります。m(_ _)m
シェルスクリプトのif文で、前のコマンドの終了結果を知りたい場
合はどうすればいいのでしょうか?
具体的にはこうです。
/#!usr/bin/sh
vi text.txt
if [ 条件(text.txtを更新したら) ];then
        date>>text.txt
fi

条件のところでの指定法方が解からないのです。(^^ゞ
#すげー初心者ですね←私

No. 217 # ぬいぐるみバンザイ 1999/03/24 (水) 00:38
ありがとうございます。m(__)m>mmさん、68userさん

やっぱり、CGIで全部自動というのは、難しそうですね。
教えて貰ったことを参考に作ってみます。また来ることがあるかも知れませんが
その時はよろしくお願いします。m(__)m


ではでは

No. 218 # 68user 1999/03/24 (水) 01:23
> takasiさん
僕がやるとすれば…

sudoを使う
    特定のユーザに対して、特定の権限(この場合root)で、特定のコマンドだけ
    実行を許可するコマンド。例えば hoge というユーザだけ cat /etc/master.passwd
    を実行できる、と設定すれば、
        % cat /etc/master.passwd
        Password: ***(rootのパスワード)
        (/etc/master.passwdの内容が表示される)
    となります。その後5分間以内(多分設定で変更可能)なら、再度同じコマンドを
    打っても rootのパスワード入力を省けます。

wrapperを使う
    普通スクリプトにはsuidビットを立てられません。でもバイナリなら可能です。
    そこで、Cでwrapperを書き、その中でスクリプトを実行させるようにします。
        % chmod 4755 wrapper
        % chown root wrapper
    としてwrapperを実行すると、root権限でスクリプトが実行されます。

suidperlを使う
    普通スクリプトにはsuidビットを立てられませんが、perlだけは例外です。
        % chmod 4755 perl-script
        % chown root perl-script
    とすれば、root権限でperl-scriptが動きます。

くらいでしょうか。2番目の方法のソースは、よろしければお見せしましょうか?

No. 219 # 68user 1999/03/24 (水) 01:47
ん〜、コマンドの status は $? を見ればいいですけど、
今試してみたところでは、更新してもしなくても、どちらも
0 を返してきました。正常終了は正常終了なので更新の有無は
関係ないのでしょう。

で、この場合は最終更新時刻が更新されたかを調べるとか、
/tmpにコピーして、それを編集させ、元のファイルとdiffする
などするのがいいんじゃないでしょうか。

No. 220 # M.Masuda 1999/03/24 (水) 12:46
>ん〜、コマンドの status は $? を見ればいいですけど、
あれま、やっぱ甘かった!。
viの終了コードで判別しようと思ったんですが...、そうですね
よく考えたら、保存しようがしまいが一応正常終了だから、それ
では判別できませんね。(^^ゞ
わざわざ試してもらってすいません。
#でも「$?」の方法が知らなかった...
#ホント初心者です。(*^_^*)

DOSの場合、終了コードはかなりいい加減だっただった記憶が
有ります。UNIXの各コマンドの場合正確にコードを返してくるの
ですか?、それからどんな時にどんな終了コードが返るかは、man
で調べる以外に基準の様なものはあるのでしょうか?。
#例えば正常終了だと0が返る等

/tmp/の方法でやってみます、もっと単純に出来ないかと思った
のですが。(^^ゞ


>2番目の方法のソースは、よろしければお見せしましょうか?
この方法は、私も非常に興味があります是非お願いします。m(_ _)m

No. 221 # H.SAWA 1999/03/24 (水) 20:07
gettimeofdayについて

No. 222 # H.SAWA 1999/03/24 (水) 20:08
gettimeofday

No. 223 # M.Masuda 1999/03/25 (木) 00:30
>2番目の方法のソースは、よろしければお見せしましょうか?
  この方法は、私も非常に興味があります是非お願いします。
すいません。これって「wrapperを使う」方ですね。
勘違いしてました。

興味があるのは、perlでの方です。
「suidperlを使う」ってのは、やってみましたが動きませんでした。
なぜなんだろう?

No. 224 # 68user 1999/03/25 (木) 17:04
> 「suidperlを使う」ってのは、やってみましたが動きませんでした。
書き方が悪かったですが、普通にperlスクリプトを書いて、
    chown root script;chmod 4755 script
として scriptを実行すれば、scriptがsuidされているかどうかを
perl(/usr/local/bin/perl)が調べくれて、もしsuidされていたら
勝手にsuidperlを実行してくれます。suidperlはrootにsuidされている
プログラムなので、そこで実行権限をscriptのオーナー(この場合はroot)
に変えて実行してくれるわけです。
# perl4はどうなるか知らない。

shやcshはそういうことはしてくれないので、suidスクリプトは
実行者の権限でしか動きません。

ちなみにCで書く方法も簡単で、特定のコマンドをexeclやexecvする
プログラムをCで書いて、コンパイルして、
    chown root program;chmod 4755 program
するだけです。

No. 225 # mm 1999/03/25 (木) 23:55
先日某所で尋ねられた件について、ちょっと分からなかったので、
質問させて下さい。

尋ねられた内容は、C言語に関して、
    if ( NULL != (hp = gethostbyaddr(...)) )
        return hp->h_name;
というコードで関数が返すポインタが指し示す
文字列の実体が何処に確保されているか?
(実際は、これに似たコードで、コンパイラが
警告を出したことが発端なんですが…)

ということなのですが、gethostbyaddr()がポインタで返す
struct hostent の実体については、
>NOTES
>A return value points to static data,
>which is overwritten by any subsequently called functions
>using the same structure.
というのを見つけて、ライブラリ内で1個だけ静的に確保して
いることは分かったのですが、この struct hostent のメンバー
である char *h_name が指す文字列の実体が何処に確保されて
いるのかまでは分からなかったのです。

struct hostent の他のメンバーには char **h_addr_list
なんてのもあるんで、これらがすべて静的領域に確保され
ているとは考え難いと思います。

でも、もしmalloc()などでヒープに確保されるのであれば、
文字列の利用後に free する必要はないのでしょうか?
(必要があれば、どこかに書いてあると思うので、
その必要はないとは思うのですが、だとしたら何故不要なのか
がよく分からないのです。gethostbyaddr()の内部で atexti()
により free() する関数を登録してるとか…?)

それと、unix では、一般にプログラム内部で malloc() などで
確保したメモリをプログラムの終了までに free() を使って
明示的に解放しなかった場合、どうなるのでしょうか?
WindowやMS-DOSでのFARヒープの場合のように、メモリ上に
ゴミとして残るのでしょうか?
それとも、プロセスの終了を見て、システムが自動的に解放
してくれるのでしょうか?

No. 226 # M.Masuda 1999/03/26 (金) 00:00
>「suidperlを使う」ってのは...
やっぱだめです。なんでだろ?

ls -lの結果は
-rwsrwxr-x 1 root 501 342 Mar 25 23:41 su.cgi*
で、

su.cgiの内容は、

#!/usr/bin/suidperl
$|=1;
print "Content-type: text/html\n\n";
print "<html>";
print "<H3>su test</H3>";
print "<pre>\n";

print "#############################\n";

print "<hr>\n";

$_=system("cat /etc/ftpaccess");
print "$_\n";
print system("date>testfile");

print "</pre>";
print "<hr>";
print "</html>";
です。
試しに適当につくってあるので、内容が恥ずかしいんですが
#!/usr/bin/suidperl
の行も最初は普通にperlを指定したんだけどダメなので、
試しに上記の様にしてもやはりだめでした。
rootでコマンドラインから実行するとOKです。
もちろん /etc/ftpaccessは、600のパーミッションです。
う〜ん、わからん。
変なところが在ったら教えて下さい。
#ちなみにperlは日本語パッチが当たってますけど関係有ります?

それからもう一つお願いします。
aliasを使って、あるユーザに来たメールを転送させる設定は
/etc/aliasesに記述しないとだめなんでしょうか?

いつもいつも御世話になりっぱなしで申し訳ないですが、お師匠様
なにとぞ宜しくお願いします。m(_ _)m

No. 227 # 68user 1999/03/26 (金) 00:30
M.Masudaさん
> rootでコマンドラインから実行するとOKです。
一般ユーザでコマンドラインから実行するとどうなります?

> $_=system("cat /etc/ftpaccess");
> print system("date>testfile");
ここらへんがくさいです。httpdのエラーログに、PATHがどうこう、と出て
ませんか? うちは
    #!/usr/local/bin/perl
    print "Content-type: text/plain\n\n";
    open(IN,"/etc/ftepaccess");
    print <IN>;
でOKでした。CGIからでも うまくいきました。
    open(IN,"/bin/cat /etc/ftepaccess |");
だと、
    Insecure $ENV{PATH} while running setuid at ./a line 4.
とエラーになりました。あと、perl4ではsuidスクリプトは動かない
ようです。

> aliasを使って、あるユーザに来たメールを転送させる設定は
> /etc/aliasesに記述しないとだめなんでしょうか?
質問の意図がよくわかりません。どこか別のところに書きたいのでしょうか?

mmさん
> それとも、プロセスの終了を見て、システムが自動的に解放
> してくれるのでしょうか?
はい、勝手にfreeしてくれます。gethostbyaddrの件は少し調べてから…。

No. 228 # ROL 1999/03/26 (金) 00:51
LinuxWorldでredhatを入手して一週間!
ついにLinux起動いたしました(笑)
さぁ、次はインターネットに接続だ。

しかし、ここの話題についていけるようになるのに、どれだけの時間がかかるやら…(笑)

No. 229 # M.Masuda 1999/03/26 (金) 01:33
なぜじゃ〜どうしてじゃ〜←狭間かんぺい調(爆)
>一般ユーザで...

これもだめです。68Userさんが前に書いたとおりアクセス件が無いと
怒られます。
Insecure $ENV{PATH} while running setuid at ./su.cgi line 13.
と出ました。

>httpdのエラーログに、PATHがどうこう、と...
アパッチのerror_logは、だんまりです。(>_<)

>ここらへんがくさいです。
これも68Userさんと同じコードで試しました、がダメ。

ひとつ不思議を見つけました。
perl -c とすると、Args must match #! line at su.cgi line 1.
と出ます。

んっ!

とここまで書いて、他の事をいろいろ調べたらどうもこれが
前に疑問だった、suExecの機能のようです。
http://japache.infoscience.co.jp/japanese/manual/suexec.html
ってことは、68Userさんの環境はsuExecが実装された環境のようで
すね。
#今夜はずっとこの問題で格闘していたのでつかれた....ふげっ!

aliasの件は、ダミーユーザー(ログオンしない)宛のメールを管理
者に転送するという意味です。
#やってみれば分かりますね...(^^;
.bashrc等の設定ファイルに記述するのは、普通コマンドのailas
なのですか?

#なんかドッとつかれた....(T_T)

No. 230 # 68user 1999/03/26 (金) 02:20
うちでは #!/usr/local/bin/suidperl でも動きました。

> perl -c とすると、Args must match #! line at su.cgi line 1. と出ます。
suidスクリプトの実行時には、perlに渡す引数と
suidperlに渡す引数が同じでなくてはいけません。
# …と、青ラクダ本に書いてありました。

> これも68Userさんと同じコードで試しました、がダメ。
/usr/bin/perl は perl5 ですか?

FreeBSDの場合、FreeBSD 3.0R から /usr/bin/perl が perl5 に
なったのですが(それまではperl4)、その /usr/bin/perl は
suidperl が起動しないようになっていると聞きます。Linuxでも
OSの方針で、suidperlを実行しないようにコンパイルされている
のかもしれません。

> 68Userさんの環境はsuExecが実装された環境のようですね。
いえ、うちにはSuExecは入れてません。

何か問題が発生すると原因を切りわけていく必要があります。
httpdが原因かもしれないので、CGI経由で実行するより
コマンドラインで実行すべきかと思います。


> aliasの件は、ダミーユーザー(ログオンしない)宛のメールを管理
> 者に転送するという意味です。
ん〜、まだちょっと意味がわかりかねます。

> .bashrc等の設定ファイルに記述するのは、普通コマンドのailas
> なのですか?
そうです。コマンドの alias と /etc/aliases は全く別物です。

ROLさん
> ついにLinux起動いたしました(笑)
FreeBSDじゃないんですねぇ(^^;

> しかし、ここの話題についていけるようになるのに、どれだけの時間がかかるやら…(笑)
やる気があればすぐですよん。

No. 231 # 68user 1999/03/26 (金) 03:12
え〜、FreeBSDでは、gethostby* は libc に入ってますので、
gethostbyaddr のソースは
    http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostnamadr.c?rev=1.10.2.1
ここらへんです。/etc/hostsなどを見て、見付からなかったらDNS引きに
いきますが、それを担当するのは
    http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostnamadr.c?rev=1.10.2.1

    struct hostent * _gethostbydnsname(addr, len, af)
あたりでしょうか。で、そこらへんの絡みで、
    static struct hostent * gethostanswer(answer, anslen, qname, qtype)
が呼ばれますが、そこで
    host.h_aliases = host_aliases;
    host.h_addr_list = h_addr_ptrs;
といったことをしています。で、host_aliases や h_addr_ptrs は
gethostnamaddr.cの先頭で
    static char *h_addr_ptrs[MAXADDRS + 1];
    static struct hostent host;
    static char *host_aliases[MAXALIASES];
    static char hostbuf[8*1024];
などと定義されいます。ちなみに
    #define MAXALIASES 35
    #define MAXADDRS 35
です。

> これらがすべて静的領域に確保されているとは考え難いと思います。
というわけで、全て static で宣言されているようですね。当然ですが
    if (hap >= &h_addr_ptrs[MAXADDRS-1]) {
        if (!toobig++)
            dprintf("Too many addresses (%d)\n",MAXADDRS);
エラーチェックもしています。

> 先日某所で尋ねられた件について、ちょっと分からなかったので、
> 質問させて下さい。
もしよろしければ、その話題が出たのはどこなのか教えていただけますか?
こういう楽しい話題が出るところに参加したいもので。

No. 232 # 68user 1999/03/26 (金) 13:03
> いきますが、それを担当するのは
>  http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostnamadr.c?rev=1.10.2.1
失礼、
    http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostbydns.c?rev=1.23
こっちでした。

でも、char **である host_aliases や h_addr_ptrs が指している
char * な領域ってのはどこかな? よく読んでませんが、
    static char hostbuf[8*1024];
っぽいですね。

No. 233 # mm 1999/03/26 (金) 22:06
>はい、勝手にfreeしてくれます。
なるほどー!
freeしなかったリスクは、ユーザーだけが引き受けて、
他人に迷惑を掛けるおそれはない訳ですね。

マルチユーザーのメモリ管理をちゃんと勉強しないといけないなぁ…


>え〜、FreeBSDでは、gethostby* は libc に入ってますので、
>gethostbyaddr のソースは
あっ、すいません。先に教えて頂いたときに、いろいろあるなー
と感心してたのですが、ライブラリのソースがあることまでは、
考えが及びませんでした(^^;;;
MS-DOSでも、入手可能な場合はありますが、有償だったり…
うーん、やはり羨ましい世界だぁ…

ともかく、詳細な解説ありがとうございましたm(_ _)m

>というわけで、全て static で宣言されているようですね。
ガ〜ン!
こういうコーディングもありなのかぁ…
16bitアドレス(MS-DOSのnearポインタ)でアクセスできる
最大64KBのデータ領域に慣れてしまうと、8KBもの静的領域
ってのが発想しづらい…(^^;

>char * な領域ってのはどこかな? よく読んでませんが、
> static char hostbuf[8*1024];
>っぽいですね。
ですね。hostbufのh_nameの後に順に書き並べて、このアドレスを
h_aliases[]にストアしてるみたいです。


>もしよろしければ、その話題が出たのはどこなのか教えていただけますか?
残念ながらプログラミング関連のボードではないので、
ご期待には沿えないかもしれません(^^;
それと、一応隠しボードなので、ここには書けないです。
でも、リンクを逆に辿って来るのはOKって言ってたので、
向こうからこっちにリンクを張っておきますんで、
覗いてみて下さい(笑い)

No. 234 # M.Masuda 1999/03/27 (土) 16:35
ふぅ、この前はつかれてたのでなかば強制的に自分なりの解答と
してしまいましたが、引き続き調べてみました。
#くっそー、グヤジイ!!!(怒笑)

>/usr/bin/perl は perl5 ですか?
This is perl, version 5.004と(TurboLinix)
This is perl, version 5.004_04 built for i386-linux(RedHat)です。

> perl -c とすると、Args must match #! line at su.cgi line 1.
コマンドラインでいくつかのパターンを試しましたが、ラクダ本のP644では
>あなたが指定したものは、あなたが考えたようには解釈されない可能性がある。
という意味らしいです。
#このシステムではサポートされないという意味なのかなぁ。

だけどrootのコマンドラインからでは全く問題無く動きます。

ちなみに、一般権限でコマンド上の実行は、スクリプトの内容通り
cat /etc/ftpaccess でエラー終了します。
その際のメッセージです。
Insecure $ENV{PATH} while running setuid at ./su.cgi line 15.
#当然の結果ですよね。

> suidスクリプトの実行時には、perlに渡す引数と
> suidperlに渡す引数が同じでなくてはいけません。
「青ラクダ本に書いて...」すいませんページ教えてくれません
か。m(_ _)m

>何か問題が発生すると原因を切りわけていく必要があります。
> httpdが原因かもしれないので、CGI経由で実行するより
> コマンドラインで実行すべきかと思います。
コマンドラインでは、68Userさんの言う通りの結果だったので
やはりhttpdの方なんでしょうか。


>そうです。コマンドの alias と /etc/aliases は全く別物です。
アッそうか!
完全に勘違いしていました。(>_<)

で、/etc/aliasesを修正し newaliasを実行したのですが...
反映されませんでした。

FreeBSDだと、/etc/aliasesを修正して、newalisasを実行するだけで
反映されるのでしょうか?

現在英語マニュアルと格闘中です。
ちなみにnewalias事項の際に、以下のようなメッセージが出ます。
Couldn't open /usr/lib/aliases.text for input!
#どうも/usr/lib/aliases.textが開けないと言っているらしい。

#英語圏で生まれていれば、こんな苦労は無かったのに(; ;)

No. 235 # M.Masuda 1999/03/27 (土) 16:37
追加ですが。
> perl -c とすると、Args must match #! line at su.cgi line 1.
これは、スクリプトのパーミッションを4755とした時にでます。
0755にすると出ません。
なにか関係があるのでしょうか?

No. 236 # 68user 1999/03/27 (土) 20:45
> ちなみに、一般権限でコマンド上の実行は、スクリプトの内容通り
> cat /etc/ftpaccess でエラー終了します。
    #!/usr/local/bin/perl
    $ENV{PATH}='';
    open(IN,"/etc/ftpaccess");
    print <IN>;
ではどうですか? これでダメなら、suidperlは使えない設定になっている
んじゃないでしょうか。

> すいませんページ教えてくれませんか。
    > ラクダ本のP644では
    >>あなたが指定したものは、あなたが考えたようには解釈されない可能性がある。
    > という意味らしいです。
の6行下に書いてあります(^^; M.Masudaさんが見てるのは違うメッセージの
説明ですよね。

> FreeBSDだと、/etc/aliasesを修正して、newalisasを実行するだけで
> 反映されるのでしょうか?
はい、そうです。

> ちなみにnewalias事項の際に、以下のようなメッセージが出ます。
> Couldn't open /usr/lib/aliases.text for input!
FreeBSDでは /usr/lib/aliases.txt というファイルはないので
ちょっとわかりません。newaliases(1)、aliases(5)あたりに書いて
ありませんか?

バイト行くんで、この辺で。では〜。

No. 237 # M.Masuda 1999/03/28 (日) 00:25
バイトお疲れ様でした。

いや〜ハマリまくりです。(^^;
結果から言えば動きました。ありがとうございました。
#68Userさんの助言が無ければ、解明する前に諦めていました。

実験で分かった事です。
いくつかの要因が有りました、私のスクリプトがおかしかったの
ですが一番まずかったのは、一番最初に68Userさんの提示されたコー
ドの通りで動かなかったので、試験スクリプトはsystem()や`コマンド`
としていたのがいけなかったです。

つまり68Userさんのいうとおり、suidビットを立てると、あくまで
perlが行う操作(openとか)はsuid権限で動きますが、forkされた
プロセスでは、再びnobodyに戻ってしまう事です。
てっきりsuidの権限が継承されると思ってました。
#ちなみに $ENV{PATH}='';は削除しても動きました。

以下は試験に使用したスクリプトです。
生成されたファイルのオーナーを見てfork時の権限が分かりました。
#!/usr/local/bin/perl -w

$|=1;
print "Content-type: text/html\n\n";
print "<html><H3>suid</H3><pre>";

print "<hr>\n";

#$ENV{PATH}='';
open(IN,"./himitu.txt") || die "error:$!";
print <IN>;
close(IN);


open(OUT,">./make_open") || die "error:OUT $!";
print OUT "Open Command\n" ;
close(OUT);


if (!system("ls>make_system")) { print "Not Exec System $!\n"; }
print "Next Step OK!\n";

print "<hr>\n";
print "Script END\n";

print "</pre></hr></html>\n";


それと検証不足かも知れませんが、perlスクリプト内でsystemコマ
ンドを使うと、スクリプトが終了します。
上記の例でいうと、最後の方のprintが実行されません。
ファイルオーナーを、nobodyの時webから実行すると最後まで表示され
たので、もしかしたらセキュリティー面での仕様かも知れません。
#エラー位出してくれればいいのに。

それからどういう訳か、perlスクリプト内で closeとするとSTDOUT
までcloseしてくれちゃいます。#これってバグ?
おかげで勝手にスクリプトが終了するので、これが分かるまで苦労
しました。
#closeにハンドル名をちゃんと指定するとOKでした。

とりあえずこんなとこまで分かりました。
設定は面倒ですが、これでやりたかった事に見通しが出てきました。
ありがとうございます。

>の6行下に書いてあります(^^; M.Masudaさんが見てるのは違うメッセージの
> 説明ですよね。
お恥ずかしいばかりです。(>_<)


aliasesの方は、どこの解説も68Userさんと同じ説明でした。
他のパッケージのサーバーで試してみます。

PS
メール見てもらえましたか?

PS2
私の隠しブックマーク見ましたね(^^;

No. 238 # 68user 1999/03/28 (日) 09:03
> メール見てもらえましたか?
(僕にとっては)内容的に問題ないので、メールの続きはこちらでやります。

> その前に、田中 健という人物をご存知ですか?
> http://www.club.kyutech.ac.jp/~hermit/
いやぁ、知らないです。イントラネット内(インターネットとは繋がって
いない)で うちのページをコピーして社員向けに公開してもいいか、という
メールは頂いたことがありますけど、それとは多分違う人だと思います。

ま、別にいいですけどね。どうせ間違いだらけ/役に立たないコンテンツ
なので気にしません。おもしろいものを教えてくださって どうも
ありがとうございました(笑)

> forkされたプロセスでは、再びnobodyに戻ってしまう事です。
ん〜どうかなぁ? もしそうだとすると suidperl 内では、system や `` などで
サブプロセスを(所有者権限で)使えないことになりますが、だとしたら suidperl
の意味は半減しますよね。今 実行環境がないので、後からもう少し調べてみます。

> 私の隠しブックマーク見ましたね(^^;
ははは、見たかもしれません。

カウンタのあるページは referer 取ってますので、ご注意を>All
たまに、どんな風に紹介されてるか見に行ったりします。一度referer
たどって行ったらボロクソにけなされてて、喜んでそこの人にメール
書いたこともあります。
# だって、「いいページだ」と書かれるより、「ひどいページだ」と
# 書いてある方がうれしいから。悔しいので、ページを よりよいものに
# しよう、という気が起こりますよね。

このBBSは referer 取ってませんでしたが、mmさんに
> 向こうからこっちにリンクを張っておきますんで、
> 覗いてみて下さい(笑い)
と言われたので、昨日から取り始めました(^^; でも、それらしいものが
見付からないなぁ。

> あっ、すいません。先に教えて頂いたときに、いろいろあるなー
> と感心してたのですが、ライブラリのソースがあることまでは、
> 考えが及びませんでした(^^;;;
まぁ僕はローカルにソースを展開しているので、grep 一発で探せますが、
ネット上で公開されてても探すのはつらいですね。

No. 239 # 68user 1999/03/29 (月) 13:46
> forkされたプロセスでは、再びnobodyに戻ってしまう事です。
やはりうちではそうはなりませんでした。
    #!/usr/local/bin/perl
    $|=1;
    $ENV{PATH}="";
    print "Content-type: text/plain\n\n";
    open(IN,"/bin/cat /etc/master.passwd");
    print <IN>;
    if ( fork ){
        system("/usr/bin/id");
    } else {
        system("/usr/bin/id");
    }
というスクリプトをowner=root、permission=4755にして、コマンドライン、
httpd 経由両方で動くことを確認しました。600な/etc/master.passwdの
中身は表示されましたし、idの結果は
    uid=65534(nobody) euid=0(root)
となりました。forkしても実効ユーザはrootのままでした(まぁ system を
実行するってことは、fork/execしてるわけですが)。

なお、PATHをクリアしないと
    Insecure $ENV{PATH} while running setuid at ./hoge.cgi line xx.
となりました。

あ、ファイルを作成してみるのを忘れてた。もしかしたらそのとき作成した
ファイルのオーナーは実効ユーザIDでなく、実ユーザIDが使われるのかも
しれません。

No. 240 # M.Masuda 1999/03/29 (月) 15:19
えぇぇぇぇぇぇぇぇ!!!!!!???????
なんでぇ???
#すいません無駄な行を書いてしましました。(^^ゞ

なんか、うちの環境system関数が変です。
suidを立てずに、普通に755のパーミッションです。

#!/usr/bin/perl
print "Content-type: text/plain\n\n";

print "Script Start\n";

if(system("")){
                print "Done..\n";
}else{
                print "NG! \n";
}

#system("ls -l 2>&1");

print "End Script\n";

2つめのsystem関数(system("ls -l 2>&1")の部分)を、コメントア
ウトした時としない時の結果の結果を教えてくれませんか?

うちの環境では、2つ目のsystemを有効にすると、サーバーエラー
になります。
コマンドラインから実行すると、正常なんですが...。
#なぜ????

No. 241 # 68user 1999/03/29 (月) 15:39
うちでも同じです。print文がバッファリングされた
状態でsystemの結果が先に表示されてるのでしょう。
先頭で $|=1 とすればいいでしょう。

httpdがログ(/var/log/httpd-error.logなど)に
    [Mon Mar 29 15:32:06 1999] [error] malformed header from script. Bad header=total 1406:
と吐いてくれるはずです。

No. 242 # M.Masuda 1999/03/29 (月) 15:59
>先頭で $|=1 とすればいいでしょう。
なるほど、これ($|=1)も関係あったんですね。
う〜ん、もっと詳しく検証せねば。

もうちょっと探ってみます。

No. 243 # 68user 1999/03/29 (月) 16:11
一般的には、以下のの方法でデバッグすると、大抵の場合解決すると思います。
    #!/usr/local/bin/perl
    $|=1;
    print "Content-type: text/plain\n\n";
    open(EXEC,"| .$ENV{PATH_INFO} 2>&1");
    while (<STDIN>){
        print EXEC;
    }
という内容の wrapper.cgi を作ってください。hoge.cgiの動作チェックをしたいなら
    /~user/cgi-bin/wrapper.cgi/hoge.cgi

    /~user/cgi-bin/wrapper.cgi/hoge.cgi?data

などというURLで実行してください。そしたら、
    - $|=1を付けないと Content-type より ls の結果が先に出力されてること
    - system や open(COMMAND,"command |") の中で
            cat: /etc/master.passwd: Permission denied
        などのエラーが起こっていること

がわかるでしょう。一連の環境変数(QUERY_STRINGなど)は引き継がれますし、
POSTの場合のデータの受け渡しもできます。

というわけで、CGIが動かなかったら、まずはこれでチェックして
みてください。

あと
> もしかしたらそのとき作成したファイルのオーナーは実効ユーザIDでなく、
> 実ユーザIDが使われるのかもしれません。
は、suidなperlスクリプト中で新規ファイルを作成した場合は
perlスクリプト所有者権限で動きました。つまり
    uid=65534(nobody) euid=0(root)
の場合、新規ファイルのオーナーはrootになりました。

No. 244 # M.Masuda 1999/03/29 (月) 18:09
大変お騒がせしている、M.Masudadです。
こんどこそやっと解決マークがつけられそうです。(^^ゞ

>なんか、うちの環境system関数が変です。
この件に関しては、原因はsystem関数実行時に、指定コマンドの
パスが通って無いのが原因と判明しました。
フルパス指定するとsystem関数はちゃんと動きました。
今までsystemでコマンドを使ったサーバーのnobodyにはたまたま
コマンドのパスが通っていただけみたいですね。
#いままでぜんぜん気が付かなかった....。
#なんか一人で大騒ぎしてますね。←私(>_<)

まとめるとsuidスクリプトを、実行したい権限のオーナーにして
chmod 4755 を設定。
$|=1; でバッファリングを止めて、systemで使うコマンドはフルパ
スで指定するか、パスをあらかじめ指定しておく。

closeはどうですか?、ファイルハンドルを指定しなくとも最後に
openしたハンドルのみクローズされると、思っていたのですが。
suidな時、STDOUTまでクローズされませんか?

$|=1; は、保険と考えて全てのperlスクリプトに入れた方が、悩む
回数が減りそうですね。
やはりperlもosと密接に関係しているのが改めて分かりました。
こういうケースは、UNIXのシステムを十分理解していないとデバック
しきれなかったかも知れないですね。

http://www.excel-net.co.jp/~masuda/su/
にある su.cgi に試験スクリプトを置きました。
これで見ると、だいぶ嘘ついてましたね。(^^ゞ
今までの件が判明しました。

実験に付き合ってもらってすいませんでした。
wrapper.cgiもありがとうございます。
非常に勉強になりました。m(_ _)m

ところで、wrapper.cgiでのurl指定方法のwrapper.cgi/hoge.cgi
は、知ってはいたのですがどういう動作になるのですか?

># だって、「いいページだ」と書かれるより、「ひどいページだ」と
># 書いてある方がうれしいから。悔しいので、ページを よりよいものに
># しよう、という気が起こりますよね。
いや〜こういう前向きな考え方をできる人って、今時なかなかいな
いですよ。
#68UserさんってもしかしてA型?

No. 245 # 68user 1999/03/29 (月) 20:44
> ファイルハンドルを指定しなくとも最後に openしたハンドルのみ
> クローズされると、思っていたのですが。suidな時、STDOUTまで
> クローズされませんか?
suidかどうか/httpd経由かコマンドラインか に関わらず、STDOUTが
クローズされました。そもそもcloseってファイルハンドルを省略
すべきでないし、仮に省略した場合はselectで指定されたファイル
ハンドル(デフォルトはSTDOUT)がクローズされるんじゃないですかね?
# perl4、perl5.004で試しました。

> ところで、wrapper.cgiでのurl指定方法のwrapper.cgi/hoge.cgi
> は、知ってはいたのですがどういう動作になるのですか?
print文を埋め込んで試してみませう ;-)

No. 246 # M.Masuda 1999/03/29 (月) 23:01
>suidな時、STDOUTまでクローズされませんか?
ホントだぁ...これまた私の勘違い。
いままで作ったスクリプトを見直したら、ちゃんとやってました。
意識していたわけではなく、性格的な問題?からそうしていたの
ですが、これって案外重要だったのですね。
この件でのスクリプトでの試験では、安易にそうしていただけでし
た。#お恥ずかしい。(*^_^*;;;

closeのみだとSTDOUTまでクローズされ、結果スクリプトが終了して
しまうのですね。

>パスが通って無いのが原因と判明しました。
よく考えたら、スクリプト内で$ENV{PATH}=''としてるのに、何を
言ってるんでしょう私は。(; ;)
でもなんで、$ENV{PATH}=''としなければいけないのでしょうか。
新たな疑問!
#まるで小学生のガキが、なぜなぜ攻撃してるみたいですが..(^^ゞ
#最近、私を含め周りにUNIX信者が増えている模様です。
#だって面白いんだもん。

>print文を埋め込んで試してみませう ;-)
すいません、オバカでよく分からないのですが具体的にどうすれば
私にも理解できるでしょうか。
↑完全に開きなおってるかもしれない(^_^)V

これだけいろいろ御世話になっているので、何かお礼がしたいとこ
ろですが、なにか出来る事が有れば言って下さい。
と、いっても何が出来るわけでは無いし....でも気持ちだけは有り
ます。(本気度=120%)

No. 247 # 68user 1999/03/30 (火) 04:14
> すいません、オバカでよく分からないのですが具体的にどうすれば
> 私にも理解できるでしょうか。
何を知りたいのかわからないので、全部は説明したくないです(結構な量になるので)。
何を知りたいのでしょうか? できれば
    open(EXEC,"| .$ENV{PATH_INFO} 2>&1");
というのを書いたのだから、「とりあえずPATH_INFOの値を見てみる」
くらいは試してください。

> でもなんで、$ENV{PATH}=''としなければいけないのでしょうか。
一言で言えば「汚れている」からです。消す必要はなくて、PATHを
再設定すればよかったですね。長くなるので青ラクダ本 P.409 参照。

別に質問するなってわけじゃないですけど、自分で調べる努力は必要です。
それでもわからなかったらどんどん質問すればいいですけど、その際でも
極限まで発生条件を切り詰めた上で、
    「何がわからないか」「どのような状況で調べたのか」
などを書かないと、結局 回答者側が苦労するハメになります。

No. 248 # M.Masuda 1999/03/30 (火) 18:31
よかったやっと見れるようになった。(^^ゞ

う〜んすいませんです。
>> すいません、オバカでよく分からないのですが具体的にどうすれば
>> 私にも理解できるでしょうか。
> 何を知りたいのかわからないので、全部は説明したくないです(結構な量になるので)。

>「print文を埋め込んで試してみませう ;-)」
この意味そのものが分からなかったのです。m(_ _)m

この文がどういう意味で書いたのか、何を言いたかったのか、
と言う意味で、単純に私の日本語理解度が足りないための質問でした。

> 何を知りたいのでしょうか? できれば
>  open(EXEC,"| .$ENV{PATH_INFO} 2>&1");
>「とりあえずPATH_INFOの値を見てみる」
> くらいは試してください。

setコマンドで環境変数を見てみましたが PATH_INFOは設定されてい
ませんでした。

私なりに理解できた部分は open(EXEC,"| .$ENV{PATH_INFO} 2>&1");
.$ENV{PATH_INFO} の実行結果の標準&エラーを、openして標準入力
から読込み、表示させているという事位ですが。

前に使い方を、教えてもらい(wrapper.cgi/script.cgi)このような
URL指定でscriptcgiを実行すると、コマンドラインでの結果の様な表示に
なりました。


まず最初に、wrapper.cgi/script.cgi この様な指定をすると(URLで)
httpdはどういう事を行うのでしょうか?
予想1:
$ENV{PATH_INFO}には、コマンドでの引数に当たるものが代入される?

予想2:
最初に出現したwrapper.cgiの引数に、script.cgiを与えて実行する?

$ENV{PATH_INFO}この環境変数自体が、いつどのように設定されるのかが
解からないので、動作の結果から推測だけですが....
スクリプトやコマンドの実行時に、コマンドラインでの引数を指定する
のと同じような動作になるのでしょうか?

仮に上記の予想が合っているとして、「print文を埋め込んで試してみませう ;-)」
この文は、どこにprint文を入れろと言っているのかが、解からなかったのです。

私にとってまだ頭の中では、wrapper.cgi/script.cgiの様な指定方法は、
掲示板等では話題としては知っていましたが、具体的な内容まではまだ
未解析でした、すいませんです。

No. 249 # 68user 1999/03/31 (水) 00:00
> よかったやっと見れるようになった。(^^ゞ
サーバの定期メンテがあって、落ちてたようです。

そもそもの
> ところで、wrapper.cgiでのurl指定方法のwrapper.cgi/hoge.cgi
> は、知ってはいたのですがどういう動作になるのですか?
からは、「何をわかっていて、何がわからないのか」が伝わって
こないのですよ。

> 私なりに理解できた部分は open(EXEC,"| .$ENV{PATH_INFO} 2>&1");
> .$ENV{PATH_INFO} の実行結果の標準&エラーを、openして標準入力
> から読込み、表示させているという事位ですが
でしょ? こちらもそれくらいはわかっているだろう、とは思うわけで、
一体何を説明すればいいのかわからんのです。ですが、例えば
    「PATH_INFOというのはいつどこで誰が設定してくれるのか」
という質問なら答えられるわけです。

wrapper.cgi/hoge.cgi にアクセスすると、
    ・apache が PATH_INFO に /hoge.cgi を設定する
    ・apache が wrapper.cgiを実行する
です。それだけ。

別に特別な動作をするわけでなく、wrapper.cgi?hoge.cgi と
似たようなものだと思ってください。?を/に変えると
QUERY_STRINGでなくPATH_INFOに値が入る、っていうくらいです。

という解説でいいですか? どうもそういうことを聞きたいんじゃ
ないような気もするんですが、聞きたいことと違っていたら
「何が知りたいか」を書いてください。

No. 250 # M.Masuda 1999/03/31 (水) 15:12
>そもそもの
大変申し訳有りませんでした。
言葉が足りませんでしたね。

今までの流れから、「print文を埋め込んで試してみませう」
の所に何らかの意味合いが有ると思い、その意味合いを聴く為
あのような表現となりました。

それとは別に、最近の私の書込みも自分の中での疑問が次々に
解けていく快感に、つい調子に乗ってしまいフリートークBB
Sの様な書込みをしてしまったことを、少々反省しています。

今回の場合は、解からないところ(自分の中での疑問点だった複
数箇所)が、同時に提示されたので私もどう理解を進めていけば
いいのかが解かりませんでした。

>極限まで発生条件を切り詰めた上で
そうですね、これはデバックやコーディングの上で大事な事で
すね。
自分で解決する努力がすこし足りなかったですね。
というより本業の作業の間に行っている事なので、手抜きして
いたのは事実ですね、反省してます。

>「何が知りたいか」を書いてください。
そうですね、デバック用に教えて下さったwrapper.cgiのコード
の中には、解からない事が沢山ありますが、本来はオライリーの
動物シリーズを揃えて自分で調べればすむ事かも知れませんが、

>wrapper.cgi/hoge.cgi にアクセスすると、
> ・apache が PATH_INFO に /hoge.cgi を設定する
> ・apache が wrapper.cgiを実行する
という機能が何の目的でapacheに実装されているのか?
デバック目的だけの機能では無いだろうし、本来の目的は何だろ
う、というのがあります。

それから、基本的な動作を完全に理解しているわけでは無いので、
open(EXEC,"| .$ENV{PATH_INFO} での .$ENV{PATH_INFO}の記述が
よく分かりません。
open(HANDLER,"shellcommand")とした時は""で囲まれた部分は、
シェルでの動作と、全く同じと考えていいのでしょうか。

そうするとPerlだと変数を結合するためのピリオドが、シェルの
場合頭にピリオドが付くと何を表すのか。
ちなみにecho `.$ENV{PATH}` としましたが、
./home/masuda/.bashrc{PATH}
と返り意味が分かりません。
と、こんなところです。

いろいろ他にもありますが、これから書込みの際は十分吟味した後
に書込みしたいと思います。
今後もよろしくお願いいたします。

No. 251 # 68user 1999/04/01 (木) 20:52
> デバック目的だけの機能では無いだろうし、本来の目的は何だろう
「なぜその機能があるのか」と考えるのは、「C言語にはなぜ構造体があるのか」
というのと同じで、結局想像するしかないと思います。

でも、なぜ僕が wrapper.cgi?file=hoge.cgi(A) でなく wrapper.cgi/hoge.cgi(B)
という引数の取り方をしたのかは説明できます。

hoge.cgiが ?data=content などと、GET方式でデータを取得する
CGIだった場合、(A)より(B)の方が hoge.cgiに与える影響が少なく、
さらに wrapper.cgi 自体のコードも短くなるからです。

あと推測するに、ユーザにCGIであることを意識させない、という
のもあるでしょう。例えばcgiwrapは
    /cgi-bin/cgiwrap/~username/hoge.cgi
というURLでアクセスすることで、所有者権限でCGIを実行できます。
    /cgi-bin/cgiwrap?user=username&cgi=hoge.cgi
だったとしたら…思いつく限りではSave Asでファイルをセーブした際、
全てのCGIプログラムはcgiwrapというファイル名で保存されるでしょう。

ついでに言えばディレクトリのような階層構造を、素直な形で表現できます。
例えば http://www.freebsd.org/cgi/cvsweb.cgi など。

> そうするとPerlだと変数を結合するためのピリオドが、シェルの
> 場合頭にピリオドが付くと何を表すのか。
そういう場合にprint文で値を表示してみてほしいわけです。例えば
    > open(EXEC,"| .$ENV{PATH_INFO} 2>&1");
の前に
    print "PATH_INFO = $ENV{PATH_INFO}\n";
と書いたとすれば、$ENV{PATH_INFO} eq "/hoge.cgi"であることが
わかるでしょう。ならば、".$ENV{PATH_INFO}" eq "./hoge.cgi" と
なります(これに確信がもてなければ print ".$ENV{PATH_INFO}\n";
を挿入してください)。で、「./hoge.cgi」とは何かと言うと、カレント
ディレクトリにある hoge.cgi というスクリプトを実行しているだけですね。

No. 252 # M.Masuda 1999/04/01 (木) 23:53
なるほど、やっと理解できました。
68Userさんがわからないと言っていた事や、自分の勘違いが。

理解したと思っていた事が、全然理解できていなかったのですね。
やはり他の仕事の片手間のように勉強しているのと、基礎からしっか
り勉強している人にはかないませんネ。

ちょっとプログラミングに深入りしすぎたかも知れません、web上で
よく見かけるプログラム程度なら書けるかもしれませんが、システム
や応用した機能みたいな部分(少なくとも私から見ると)は、ちゃんと
勉強しないと難しすぎます。

最近、業界では有名(らしい)なプログラマー人とファイルロックの
事で話しをする機会がありましたが、私とは基礎概念が違いました。

もう少し、時間をかけて基礎的な部分から修行したいと思います。
wrapper.cgi、ありがとうございました。

No. 253 # Tetsu [E-mail] 1999/04/07 (水) 15:31
    UNIXは初心者です、ここで質問して良いかもわかりませんが、よろしければお教え下さい。
OSはだいぶ古いSONY製のNEWS−OSというのを使用しています。相当古いマシンなので、また
UNIXなのでちょっと恐くてさわれないのですが、基本的なコマンドは少し勉強しました。

  前置きが長くなってしまいましたが・・・ハードディスクの空き容量を調べたいと思うのですが、どの
ようなコマンドを使えば良いのかよくわかりませんでした。どうぞ、お教え下さい。そういうコマンドとか
は無いのでしょうか?

No. 254 # 68user 1999/04/07 (水) 17:58
NEWS-OSはよく知りませんが、df -kで
    Filesystem 1K-blocks Used Avail Capacity Mounted on
    /dev/sd0s1a 118959 25837 83606 24% /
などという表示が出るんじゃないでしょうか。これだと
118M中 25M(全体の24%)を使用中ってことです。

No. 255 # チャパ王 1999/04/09 (金) 19:20
はじめまして。他にはないCGIスクリプトばかりで大変助かっています。
それでですが、.htaccessで
<files browser.log>
deny from all
</files>
<files referer.log>
deny from all
</files>
    :
    :
というような設定がありますが、
<files *.log>
deny from all
</files>
<files *.dat>
deny from all
</files>
とやるだけで全ての***.log、***.datファイルが見れなくなります。
どうぞお試しくださいませ。(知ってたらごめんなさい。(汗))

No. 256 # R-N 1999/04/11 (日) 02:30
ども、おひさしぶりです。
お元気でしょうか? 私は相変わらずです。(^_^;
何度もここで色々聞こうと思っては思いとどまり何とか自分で解決してきたんですが、
とうとういきずまりました...。
データのチェックで
foreach $line (@lines) {
($a,$b,$c,$d) = split(/\,/,$line);
if ($d ne '') { $dd++; }
}
とした時の @line の値(?)が
22,,55,
23,1,25,
というような時、$dd に+1されてしまいます。
本当は何か値が入っていたら+1したいのです。
なんとなく「22,,55,(改行)」となっていて $d ne '' で改行が判断できないからかなと思うのですが...。
そんなモノなんでしょうか?
$d ne '' ではないなら式はどうなるのでしょう?

なんか解りにくくてすみません。
説明下手なんですが...そこを何とか...。(-_-;

No. 257 # 68user 1999/04/11 (日) 07:11
> とやるだけで全ての***.log、***.datファイルが見れなくなります。
どうもです。本当は *.log というファイルだけではなく、
/~j5306050/log/ 以下を見られないようにしたいんです。
    <directory /home/95s/j5306050/public_html/log/>
        deny from all
    </directory>
とか
    <location /~j5306050/log/>
        deny from all
    </location>
などと書いても、
    500 Internal Server Error
    The server encountered an internal error or misconfiguration and
    was unable to complete your request.
になっちゃうんで、仕方なくああいう風にしました。
これって書き方間違ってるんでしょうか?

あと、試しているうちに、
    <files browser.log>
        deny from all
    </files>
と書いても、/~j5306050/log/browser.log は見ることができるのに気がつきました。
ずっと誰かに見られてたかも…(^^;
    <files log/browser.log>
だとうまくいきましたけど。

> というような時、$dd に+1されてしまいます。
おそらく$lineの最後に改行コードが付いているからだと思いますので、
    foreach $line (@lines) {
        chop $line;
とするか、
    if ( $d =~ m/\d/) { $dd++; }
と、$dに数字が入っているかどうかを調べてはどうでしょう。ちょっと変ですけど、
    if ( $d ne "\n" ) { $dd++; }
もアリかも。

No. 258 # R-N 1999/04/12 (月) 05:14
なるほど(?)、ありがとうございます!
Perl の専門書を買わないと駄目ですね...、コマンド(?)が全然解らない...。
唯一理解できたのが、
if ( $d ne "\n" ) { $dd++; }
ですが...、そっか!
改行コードって \n でしたね...、普段使ってるのにすっかり忘れてました...。
また勉強してきます!!

No. 259 # M.Masuda 1999/04/12 (月) 12:52
68Userさん、皆さんこんにちは。
横やりですが...

>/~j5306050/log/ 以下を見られないようにしたいんです。
www.cs.gunma-u.ac.jp は Apache1.2.6ですよね。
<Directory>ディレクティブは.htaccess では使えません。
この場合<Limit>を使ってこんな感じでできると思います。

##### .htaccess内 ######
<Limit POST GET>
order deny,allow
deny from all
allow from HOSTNAME
</Limit>
### .htaccess 終了####

外してたらごめんなさい。

No. 260 # 68user 1999/04/12 (月) 17:02
> <Directory>ディレクティブは.htaccess では使えません。
なるほどなるほど、確かにdirectoryやlocationは、server configだけ
でしか使えないみたいですね。それは知りませんでした。というわけで、
    <files log/*>
        deny from all
    </files>
にしました。public_html/log/.htaccessに deny from allと書いても
いいんでしょうけど、設定ファイルが分散するのが嫌だったので
一つにまとめました。

> Perl の専門書を買わないと駄目ですね...、コマンド(?)が全然解らない...。
前にROLさんにも同じような事を書きましたが、はっきり言って 本を買わずに
プログラミング言語を理解しようとするのは時間の無駄です。数千円の金を
惜しむあまり、結果的に数十/数百時間の貴重な時間を無駄にしています。

手元に本があれば数分でわかるのに、BBSで丸1日かけて質問するのは
とても非効率的ですよね。

悪いことは言いませんから、早く本を買いましょう。オンライン版がいいなら
    http://www.cec.co.jp/usr/hasegawa/Docs/perl-jman/index.html
    ftp://ftp.mei.co.jp/free/others/Languages/perl/perl5/perl5.000/perljref-5.000.0.tar.gz

No. 261 # M.Masuda 1999/04/13 (火) 19:59
すいませんまたまた教えて欲しいのです。
下のスクリプトでおかしい所は無いでしょうか。

#!/usr/bin/perl -w

use Net::Ping;
print "Content-type: text/plain\n\n";

$hostname = 'pingコマンドの返らないホスト';
print "Checking $hostname\n";
if (pingecho($hostname,$timeout)){print "Echo on\n"}
else{print "Echo off\n"}

$hostname = 'pingの返るホスト';
print "Checking $hostname\n";
if (pingecho($hostname,$timeout)){print "Echo on\n"}
else{print "Echo off\n"}
exit;
リャマ本のP531でのNet::Pingを試しているのですが、
上記の試験結果は両方ともEcho offです。
もちろんホストの指定の間違いもありません。

初めて use コマンドを使うので、何か他に間違いがあるのかと
use行をコメントアウトしたり、他のコマンドを使ってみましたが
(use Cwdの結果は正常に表示)原因が不明です。
最初このコマンドを知らずに、自分で`ping -c1`とararmを使って
コーディングしましたが、シグナルを受け取った後の制御がうまく
できずにリャマ本を調べていたら、「なんだこんな便利なものがあ
るじゃないの!」と思い使ってみましたがこれもまたうまく行かず
原因が分かりません。

Net/Ping.pmも存在しますが、その記述内容は私には高度すぎて
全然分からずお手上げ状態です。

どうかご教授よろしくお願いします。

No. 262 # M.Masuda 1999/04/13 (火) 20:02
下には書き忘れましたが、$timeout=2;も指定してあります。

No. 263 # 68user 1999/04/13 (火) 23:59
リャマ本って、「プログラミングPerl改訂版」ですよね?
ラクダ本じゃなくてリャマ本が正式名(というか通称)なんですか?
それとも「ラクダ本=旧版」「リャマ本=新版」?

何も試さずに書きますが、リャマ本にも書いてある通り、pingechoは
「TCPのechoプロトコル」を使って ホストが生きているかどうか調べます。
が、少くともFreeBSDのデフォルトでは echoポートは閉じられていますので、
一般的に「echoが通る=生きている」とは言えないでしょう。

echoプロトコルってのは
    http://X68000.startshop.co.jp/~68user/net/echo-1.html
です。だから、telnet hostname echoでお話しできたら、pingechoでも
正しい答えが返ってくるはずです。

No. 264 # 68user 1999/04/14 (水) 00:08
追加。これまた何も試さずに書きますが、さらっとNet.Pmを見た限りでは
適切な引数を渡せば ICMPのecho も使えるようです。これを使えば
/sbin/ping と同じ挙動をさせられると思います。

No. 265 # 68user 1999/04/14 (水) 01:38
> さらっとNet.Pmを見た限りでは
Net/Ping.Pm の間違いですね。で、ちーと試してみました。結論から言うと、
    use Net::Ping;
    $p = Net::Ping->new("icmp",$timeout);
    $p->ping($hostname);
ですかね。でも、root権限が必要です。Ping.Pm の
    croak("icmp ping requires root privilege") if $>;
を外せば、一般ユーザ権限でもいけるかも(試してません)。

No. 266 # M.Masuda 1999/04/14 (水) 14:34
>リャマ本って、「プログラミングPerl改訂版」ですよね?
すいません誤解を招くような書き方をして(^^;
そうです「プログラミングPerl改訂版」を指しています。
他でそのような表現があったので、安易に使ってしまいましたが
>ラクダ本じゃなくてリャマ本が正式名(というか通称)なんですか?
私も正式には不明です。
#ラウンジで聞いてみようかな...

> croak("icmp ping requires root privilege") if $>;
> を外せば、一般ユーザ権限でもいけるかも(試してません)。
そうですか、確かに icmp ping requires root privilege
と言われました。
suidや、Ping.pmを編集する事まではしたくないのです。

やはり「なんだこんな便利なものがあるじゃないの!」の認識は
ちょっと甘かった様ですね。

一発での`ping -c1 $hostname`とararmの方法はわかりますので、CGI単体
で行おうとせず他の方法を組み合わせて試してみます。

ちなみにあのスクリプトの目的は、普通のサーバーではなくダイアルアップ
サーバー?(プロバイダーでユーザーの電話回線経由の接続を受け取るヤツです)
が生きてるかどうか、つまり一般的にいうPPPxxx.domain.ne.jpとかが
接続状態かどうかを調べるツールを作ろうとして、そのための動作確認
用の試験スクリプトでした。

>http://X68000.startshop.co.jp/~68user/net/echo-1.html
これからの課題なので勉強します。

それから、ちょっと違うとは思いますがBASICの場合でいう割り込み処理から
復帰する際のリジュームコマンドの様な事はできないのでしょうか。
つまりラベル等で復帰先の指定をするという事です。
最初がBASICだったものでこういう表現しかできませんが、68Userさんがその
辺(BASIC)詳しくなければ無視してください。

ありがとうございました。

No. 267 # 68user 1999/04/14 (水) 23:38
> 一般ユーザ権限でもいけるかも(試してません)。
/sbin/ping もsuidされてるので、ICMPをしゃべるにはroot権限が
必要なんじゃないでしょうか。だから多分コメントアウトしても
ダメだと思います(未確認ですけど)。

> つまりラベル等で復帰先の指定をするという事です。
んー、gotoとかですか? Perlでは、ほとんどgoto文を使う必要は
ないと思うのですが。他の方法で代用できませんか?
# alarmのシグナルハンドラからの復帰先を指定したいとか?

No. 268 # M.Masuda 1999/04/15 (木) 15:31
>/sbin/ping もsuidされてるので
本当ですね。今まで気づかず使っていたみたいです...
#mount等がそうなのは分かりますが。ICMPをしゃべる事自体
#root権限が必要なのだろうか?無駄なトラフィックを避ける為?

> alarmのシグナルハンドラからの復帰先を指定したいとか?
はい、まったくそのとおりです。
#やっぱ表現力足りないみたい>自分
gotoは68Userさんと同じ理由で使うつもりは有りません。

ラクダ本でのalarmの解説が、私にとっては不十分なので上記の
方法があるのかさえ分かりません。
#シェルスクリプトでも同様の方法があるのでしょうか?

またこういう処理をする時に定石の様なものは有りますでしょうか。
あれば簡単でも教えてもらえれば助かります。

No. 269 # 68user 1999/04/16 (金) 03:05
> またこういう処理をする時に定石の様なものは有りますでしょうか。
定石かどうかはわかりませんが、
    sub alarm_handler {
        # ここに処理がきたということは、2秒以内にpingが終了しなかったということ
        # なので子プロセスを殺す。
        kill 1,$child_pid;
        $flg = 0;
    }
    $SIG{ALRM}=\&alarm_handler;
    $flg = 1;
    if ( $child_pid = fork ){ # 親
        alarm 2; # 2秒後にalarmセット
        wait;  # 子プロセスの終了を待つ
        alarm 0; # 2秒以内に終ったら、alarm解除
    } else {  # 子
        exec "ping -c 1 host";
    }
    if ( $flg == 1 ){ ping成功 }

とか。本来はもっと賢い方法があるのかもしれませんね。
子プロセスの始末まで考えなくていいなら、
    sub alarm_handler { $flg = 0; }
    $flg = 1;
    if ( fork ){
        alarm 2; sleep 4;
    } else {
        exec "ping -c 1 host";
    }
    if ( $flg == 1 ){ ping成功 }
でもいいかも。

No. 270 # M.Masuda 1999/04/16 (金) 15:31
サンプルまで書いてもらってありがとうございます。
自分で書いたスクリプトも、ほとんど同じような事をして、
さらに引数で秒数を指定できる様にしてあります。
#もっともこんなスマートには書いてないですが(^^;

>子プロセスの始末まで考えなくていいなら、
自分のスクリプトではこの部分の処理まではしていません。
試験時にスクリプト実行後(シェル、web経由)にpsで確認しても
プロセスが残る事はなかったので。
シェルやアパッチがこの辺の処理はやってくれると思っています。
#そう思いたいってのが本音。

スマートなスクリプトの為の勉強になりました。
いつもありがとうございます。

No. 271 # ono hirosi [E-mail] 1999/04/16 (金) 16:37
初めまして。
HTTPについてのページを読ませていただきました。
telnetでHTTPに接続できるとは思いもよりませんでした。
そこで、質問があるのですが、cookieを送信するときは、
どのようにすればよいのでしょうか?おしえてください。

No. 272 # 68user 1999/04/17 (土) 12:27
> cookieを送信するときは どのようにすればよいのでしょうか?
送信するだけなら、
    Cookie: hoge=fuga
などとします。
    % telnet www.cs.gunma-u.ac.jp 80
    GET /~j5306050/cgi-bin/printenv.cgi HTTP/1.0
    host: www.cs.gunma-u.ac.jp
    Cookie: hoge=fuga
てな感じ。そしたら printenv.cgi の中では
    $ENV{HTTP_COOKIE} eq 'hoge=fuga'
となります。

> 試験時にスクリプト実行後(シェル、web経由)にpsで確認しても
> プロセスが残る事はなかったので。
たしかに、親プロセスが死ぬ(終了も含む)と子プロセスには
SIGTERM(だったかな?)が送られますので、普通は特に後始末を
する必要はないです。

もちろん子プロセスがシグナルをブロックしていたら
その限りではありませんけど。

No. 273 # ono hirosi 1999/04/19 (月) 10:06
どうもありがとうございました。
netscapeはちょっと重いので、簡易ブラウザーを作ってみようかと
考えています。

No. 274 # 3年@群大情報 1999/04/21 (水) 13:55
端末のネットスケープで日本語入力をしたいのですが
いつもemacsで書いてカットアンドペーストをしています。
ダイレクトに入力することはできないのですか?

No. 275 # 68user 1999/04/21 (水) 17:17
kinput2を立ち上げて、NN/NC上のテキスト入力エリアで、
Shift+Spaceで変換モードONだったような気がします。

kinput2 は .xsessionの中で起動すると楽です。

No. 276 # R-N [URL] 1999/04/24 (土) 03:05
ども、こんばんわ。
今、初めて1から CGI を書いているのですが、
そこでちょっと質問が...。

JPERL でチェックした所、問題なく動いた(様に思う)のですが、
アップロードしてパーミッションを変更しても、お約束の
「Internal Server Error」がでます。

68user さんはエラーチェックなどはどうやってますか?

No. 277 # 68user 1999/04/24 (土) 07:03
> 68user さんはエラーチェックなどはどうやってますか?
    1. サーバのログ(/var/log/httpd-error.logなど)を見る。
    2. コマンドラインで実行。
    3. 思い当ったところをいろいろ変えてみる。
            3-1. 環境変数(PATHなど)
            3-2. スクリプトの文字コード(EUC or SJIS)
            3-3. 実行権限(nobody権限で動くかどうか)
    4. http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1999-03-26
                68user 1999/03/29(月) 16:11
                一般的には、以下のの方法でデバッグすると、大抵の場合解決すると思います。
         で説明したスクリプトをかまして実行。
    5. 怪しいところから順にコメントアウト。もし動いたら、直前にコメントアウトした
         部分がおかしい。

てな感じでしょうか。実際にやったことがあるのは1〜3くらいです。


あとさ gunma-u の方、質問して回答をもらったら、それに対する
返事くらい書いてね。「わかりました」「やってみたけどうまく
いきませんでした」くらいでいいから。それが最低限の礼儀だと
思います。それが嫌なら trouble@cs.gunma-u.ac.jp に質問して下さい。
# 別に gunma-u に限ったことではないけどね。

No. 278 # 68user 1999/04/24 (土) 07:12
当然のことですが、念のため補足を。
> それが嫌なら trouble@cs.gunma-u.ac.jp に質問して下さい。
trouble宛なら返事出さなくていい、ってわけじゃないです。

No. 279 # R-N 1999/04/26 (月) 02:02
はい、わかりました。
「ありがとうございます、うまくいきました」と書けば良かったですね。
本を見ながら初めて頭から書いたので多分色々不都合やら効率が悪い所やら
あるんでしょうが、これから一個一個潰していきます。
でわ、また御礼か泣きつきに来ます。(^_^;
毎度毎度、ありがとうございます。

No. 280 # 氷聖 1999/04/26 (月) 15:32
はじめまして,こんにちは.
つい1週間ほど前にFreeBSDに手を出した者です.
さっぱり解らないので色々と探してここにたどり着きました.
”UNIXのお部屋”は大変参考になりますね.すごく重宝します.
また何か解らないことがあったらこちらに伺おうと思っているので
その時は何卒よろしくお願いします.

No. 281 # 68user 1999/04/26 (月) 23:03
どもども。今後ともよろしくです。

表現がわかりにくい/構成が悪い部分があったら教えて下さいね。
どうも肥大化しすぎて、どこをどうすれば利用しやすくなるのか
わからなくなってしまいましたので。

No. 282 # R-N 1999/04/30 (金) 00:35
たぶん完成しました。(^_^;
http://www.raidway.ne.jp/~nouveau/dc/sh/
に置く、race.htmlとrrr.cgiです。(cgiはrrr.txtにしておいてあります)
どんなもんでしょう?
wrapperが非常に役に立ちました、ありがとうございます。

ところでハッシュというものは一時的にでも並べ替えは出来ないんですね。
代入した数値順での並べ替えでずっと詰まってました...。

No. 283 # 68user 1999/04/30 (金) 01:20
> http://www.raidway.ne.jp/~nouveau/dc/sh/
> に置く、race.htmlとrrr.cgiです。(cgiはrrr.txtにしておいてあります)

では拝見…と思ったら not found。
どこにあるんでせう?

> 代入した数値順での並べ替えでずっと詰まってました...。
毎回ソートする必要がありますね。解決されたようですが、
一応書いておくと、キーを数字順でソートしたいなら
    foreach ( sort {$a<=>$b} keys %hash ){ print "$_ $hash{$_}\n"; }
値を数字順でソートなら
    foreach ( sort {$hash{$a} <=> $hash{$b}} keys %hash ){ print "$_ $hash{$_}\n"; }
文字としてソートなら <=> ではなく cmp、などなど。

No. 284 # R-N 1999/04/30 (金) 01:59
すみません、置く前に書いたんで...。
設置にも手間取ってたりしました、何故かエラーが...。

ハッシュの件は解決しなかったので処理が終わったら
別の変数に代入しちゃいました。
この辺はかなり無駄がありそうですし、エラーがあるなら
この周辺でしょう...。
むぅ、foreach ( sort〜ですか...、組み込めるかな...。(-_-;
お手数おかけしました。

No. 285 # 68user 1999/04/30 (金) 02:03
あ、見れた。で、気づいた事。

    - $monが0月〜11月になっちゃいませんか。

うーん、これくらいかなぁ。後はどーでもいいというか、些細な事というか、
好みの問題というか。

    - EOF は End Of File の略なので、EOTが適当…なんでしたっけ?
        (EOT=End Of Textのつもり)。
    - if ($... <10) { $... = "0..." } の羅列より、
            $now = sprintf("%4d/%02d/%02d ...",$year+1900,$mon+1,$mday,...)
        の方がすっきりするかも。

全体的に特に問題はないんじゃないでしょうか。

No. 286 # 68user 1999/04/30 (金) 02:16
後は
> ($dtm,$soft,$point,$reho) = split(/\,/, $data[0]);
($dtm,$soft,$point,$reho) = split(/,/, $data[0]);
> $temp = $now."\,".$FORM{'soft'}."\,".$FORM{'point'}."\,".$ureho."\n";
$temp = "$now,$FORM{'soft'},$FORM{'point'},$ureho\n";

くらいかなぁ。ほんとに細かいことですけど。

それからこれは根本的な問題ですが、FORMから渡される値をチェックして
ないので、変なのを入れられる可能性がありますね。旧SEGA BBSのように。

渡された値が適切かどうかを調べるのは(僕は)必須だと思います。

No. 287 # R-N 1999/04/30 (金) 03:46
あ、3月だ...、全然気付きませんでした。(-_-;
変な書き方してますね私、指摘されると自分でも思う...。
sprintfは便利ですね。でもなんで%02dの時だけ『0』が...。
私の持ってる本も%02dだけ0が付いてる...。

> FORMから渡される値をチェック...
とりあえず$ENV{'HTTP_REFERER'}のチェックを入れてみます。
って、コレだと投票できないブラウザがあったか...。<SSとか

全部の値をチェックするんだったら投票フォーム部分も組み込んだ方が
楽そうだし、そうしようかな...。<いづれ(^_^;

勉強になりました!

>変なのを入れられる可能性がありますね。旧SEGA BBSのように。
ギクッ!

No. 288 # 1111 1999/04/30 (金) 16:07
111111

No. 289 # 1111 1999/04/30 (金) 16:07
2222222

No. 290 # M.Masuda 1999/04/30 (金) 23:26
こんばんは。

Perlのreaddirでの現象でお聞きしたいのですが。
普通、以下の様な記述で@filesには、ディレクトリ内のファイル&
ディレクトリが入りますが、この配列の中に返される文字列の中に
複数のバイナリが混じるというのは、ディレクトリエントリが壊れ
ているのでしょうか。

opendir(DIR, "./");
@files = readdir(DIR);
closedir(DIR);

特にヌル(\x00)が多量に含まれます。
さらにこの状態のディレクトリを、他のディレクトリにコピー
した時に症状が引き継がれるのは、壊れていると仮定すると
親ディレクトリからの影響が出ているのでしょうか。

またこの症状が出るのは、nfs等で共有しているディレクトリです。
何か分かる事が有りましたら、よろしくお願いします。
ちなみに以下のスクリプトでは問題無く表示されます。
#!/usr/local/bin/perl
$|=1;
print "Content-type: text/plain\n\n";
$_ = system("ls -l ./ 2>&1");
print "$_\n";

No. 291 # 68user 1999/05/01 (土) 07:48
> でもなんで%02dの時だけ『0』が...。
要は桁合わせですな。
Ex. printf("%d,%4d,%04d\n",10,10,10);

> この配列の中に返される文字列の中に複数のバイナリが混じるというのは、
> ディレクトリエントリが壊れているのでしょうか。
うーん、どうなんでしょうねぇ。漢字のファイル名ってこともありますし、
バイナリが混じっているだけで壊れているとは言い切れないです。

> 特にヌル(\x00)が多量に含まれます。
ファイル名にヌルってありだったかなぁ…?

具体的な出力結果を見てみないことには、なんとも言いがたいです。

No. 292 # くにろぅ [E-mail] 1999/05/01 (土) 08:37
あ、しょうもないことかも知れませんが
emiclock の costumes で
Transparent dress (一番下のコスチューム)
を、どうやったら拝めるのでしょうか?

No. 293 # M.Masuda 1999/05/01 (土) 16:05
>漢字のファイル名
これは無いです。

本によると「システムによって保守されるディレクトリ構造の内容」
とあります。という事からエントリが壊れているのかと思った訳です。

しかし、意図的に壊してみることまではさすがにできないので、
困ってしまいました。

もう少し調べてみます。ありがとうございました。

No. 294 # 68user 1999/05/01 (土) 18:09
> Transparent dress (一番下のコスチューム)
> を、どうやったら拝めるのでしょうか?

あはははは。誰もが一度は思った疑問ですね。
僕も知らなかったんで調べてみました。

    1. 30分チャイムを鳴らす設定にする。
    2. alarmを....年............に.....。
    3. 30分チャイムが鳴るまで待つ(0分or30分)
    4. Costumesに…なんとアレが!

ちなみにオリジナルのMac版のドキュメントには以下の記述がありますなぁ。

> < ひとりごと >
> ある日、もとそふと探検隊は某秘境の洞窟の壁に書かれた落書きを発見した。 
> 壁には、「1958年10月24日06時33分」と落書きされていた。これ
> が、いったい何を意味するのかはわからない。
> 洞窟は、さらに奥へと続いていた。仲間と30分に待ち合わせることにして、
> チャイムをセットし、隊長はさらに奥へと進んだ。
> 30分を知らせるチャイムが鳴った。そのとき、隊長の顔は、笑顔に変わって
> いた。ついに秘宝を発見したのだ。


…で見れますか?

うちのemiclockは30分チャイムがなぜか選べないようになってるんですが…
なんでだろ。というわけでソースを1行書き換えて見てしまいました(^^;

No. 295 # 岩本 1999/05/10 (月) 18:40
大変お久しぶりです。岩本です。
とは言っても覚えている人はいないでしょうけどね(笑)

実はUNIXでお伺いしたいことがあります。
crontabでシェルを動かしたいのですがうまくいきません。
以前Masudaさんに「実行時に有効になっている環境変数を
表示させてみて・・・」のアドバイスを頂き、その通りやって
見たところ、確かに環境変数がほとんど指定されていませんでした。
そこで環境変数をスクリプト内で追加設定させたいのですが
どうすればよいのでしょうか。ちなみにスクリプトに
envやsetenvを使って自ユーザログオン時の環境変数を
設定させてみたところ結局実行時に変数は変わってませんでした。

OSはソラリス2.5、マシンはsun7の300です。
ご存知の方、お詳しい方がいらっしゃいましたら
よろしくお願いいたします。

No. 296 # 68user 1999/05/12 (水) 00:43
> そこで環境変数をスクリプト内で追加設定させたいのですが
> どうすればよいのでしょうか。
動かしたいものがshスクリプトなら、先頭付近に
    export HOGE=fuga
書くとか。cshスクリプトなら
    setenv HOGE fuga
てな感じでしょうか。

No. 297 # 岩本 1999/05/14 (金) 19:09
68userさん、ありがとうございました。
無事問題が解決しました。
今後ともよろしくお願いします。

No. 298 # REMAHL 1999/05/16 (日) 01:56
ども、はじめまして。パソコンスクランブルの方でこのページ
をターゲットにしてしまったREMAHLと申します。EUCとリンクフリー
という条件が重なったため、あちらの掲示板にてソースが化ける
例として取り上げさせていただきました。この度は大変失礼しました。

それからスクリプト2、3頂きました。CGI勉強中なので研究材料
として使わせていただきます。これからもよろしくお願いします。

No. 299 # 68user 1999/05/16 (日) 07:47
どもども。ああいう場合に他サイトを例に出すのは
僕もよくやることなので、お気になさらぬよう。

No. 300 # REMAHL 1999/05/17 (月) 23:46
>どもども。ああいう場合に他サイトを例に出すのは
>僕もよくやることなので、お気になさらぬよう。

お気遣い、有り難うございます。

つい最近CGIを始めたばかりなので「CGIの小部屋」は
私のような素人には非常に参考になります。今は人様の
作られたスクリプトを改造している程度なので、まだまだ
分からないことだらけです。もし分からなければこの掲示板で
質問を、と思っていますので、その時はよろしくお願いします。

No. 301 # pz [E-mail] 1999/05/18 (火) 17:48
始めまして。
掲示板を発見したので、感謝の言葉でもと思い書き込みました。
仕事中に壁にぶつかるといつもこのサイトをみて解決の手助けにしてます。
とても助かってます。
これからも宜しくお願いします。





No. 302 # しょいち [E-mail] 1999/05/18 (火) 20:33
こんにちは。
ためになる、きれいでわかりやすいページなので大変よろこんでいます。
(色使いなんかも目に優しくていいですね、コードなんかを白バックで
読むのなんて耐えられませんです ^_^;)
がんばって勉強させていただきます。
これからもがんばってください。

最高にクールです

No. 303 # 68user 1999/05/20 (木) 23:07
お褒めいただき、ありがとうございます>しょいちさん、pzさん

ただ、ここの記述がわかりにくいとか、このコマンドの
この機能が解説されていないなど、悪いところも書いて
いただけると なおうれしく思います。何かお気づきに
なりましたら、また書き込んでください。

No. 304 # hoppy 1999/05/27 (木) 19:59
はじめました、bsdのコマンドマニュアルとして重宝させてもらって
ます。ところで hello worldと一行書いてccでコンパイルしたら
a.outができましたが
./a.out と入力しないと動きません。
単純にa.outと入力して動かすにはどうしたらよいのですか?

No. 305 # 68user 1999/05/27 (木) 20:43
PATH に . を加えれば、カレントディレクトリのプログラムが実行されます。
しかし、セキュリティ上お勧めしません(共用のマシンなら特に)。例えば
    set path = ( . /bin /usr/bin /usr/local/bin )
とすれば a.out だけでも動きます。しかし、誰かが /tmp/ls に
    #!/bin/sh
    rm -rf ~
という内容のプログラムを置いていた場合、あなたが
    cd /tmp; ls
としただけで、あなたのホームディレクトリ以下のファイルは
全て消えます。

ですから、PATHには . は含めない方が賢明です。どうしてもというなら、
    set path = ( /bin /usr/bin /usr/local/bin . )
などと、最後に付け加えましょう(でもお勧めはしません)。

タイプがめんどくさいという理由なら、シェルの補完(Ctrl-DとかTAB)を
有効に使う方がいいと思います。

No. 306 # hoppy 1999/05/27 (木) 21:10
さっそくの解答thanksです
とりあえずset pathの最後に.を追加致します。
シェルの補完はよくわからないので、もう少ししたら
やってみます(^^ゞ

No. 307 # M.Masuda 1999/05/27 (木) 23:54
お久しぶりです。(^^;

やっぱ68Userさんは、プログラマー志望だったのですね。
#当り前と言えば当り前なのかもしれないですが...

ところで、BSDIというOSを知っていますか?
実はうちの環境にソレが入ったのですが、BSD系らしく作法が
少々異なっています。

なにか、知っていたら教えてください。
Linux系(SystmV系?)との操作上の違う所とか注意点とか。
#やっと日本語manを入れて少し分かりはじめたのにまた振り出し...

もちろん漠然と聞いているので、思い付いたような事でいいです。

hoppyさんへ
>シェルの補完はよくわからないので、
コマンドを途中までタイプして、タブキーを押すとうれしい事が
起こりますヨ!

No. 308 # 68user 1999/05/28 (金) 01:47
> やっぱ68Userさんは、プログラマー志望だったのですね。
いや、プログラマというわけでは…。どちらかと言えば、
プログラムを書けるSEかなぁ。

> ところで、BSDIというOSを知っていますか?
名前は知ってますが、使ったことはないです。
# 多分OS名はBSD/OSじゃないですかね。BSDIは会社名。
## ちなみに BSDIのBSDとFreeBSDのBSDは、意味が違います。
### ってことはどーでもいいですね(^^;

> Linux系(SystmV系?)との操作上の違う所とか注意点とか。
うーん、ps の引数の違いくらいしかわからないなぁ
    (Linuxのpsって、BSDともSysVとも少し違ったんだっけ?)。
あとはカーネルが /vmunix か(SysV)、/kernel か(BSD) とか…(ほんとか?)

あと、FreeBSDもLinuxもGNUのソフトをたくさん使ってますが、
BSD/OSがそこらへんを独自に作ってるなら、結構そこらへんで
はまるかもしれません。
# http://www.gnu.org/software/software.html のfileutils、shellutils、
# diffutils、GNUtarあたり。

あと、パッケージ管理(pkg_add/pkgadd)とかユーザ管理(adduser/useradd)
なんてのは各UNIXごとにバラバラなんで、ご注意を。

No. 309 # M.Masuda 1999/05/28 (金) 14:51
どもです(^^;
>プログラムを書けるSEかなぁ。
なるほど、志が高い(^^;

ただ、私の周りにはちょっと偏屈な技術者が多く、人間性は信じら
れない人がおおいです。初心者を馬鹿にしきった口振りや態度など、
誰でも始めは初心者で、識者からの教えられかたでその人間がどの
ように覚えてゆくかが決まると思うのですが...

たとえば、とほほさんとは何度かメールのやり取りをしてますが、
プログラマーな人なのに、おおらかな人間性を感じました。

68Userさんは、くれぐれもそうならない様に期待します。
#これは本心です、いやみじゃ無いので誤解なさらぬように。

> # 多分OS名はBSD/OSじゃないですかね。BSDIは会社名。
> ## ちなみに BSDIのBSDとFreeBSDのBSDは、意味が違います。
> あと、FreeBSDもLinuxもGNUのソフトをたくさん使ってますが、
> BSD/OSがそこらへんを独自に作ってるなら、結構そこらへんで
> はまるかもしれません。
> # http://www.gnu.org/software/software.html のfileutils、shellutils、
> # diffutils、GNUtarあたり。
> あと、パッケージ管理(pkg_add/pkgadd)とかユーザ管理(adduser/useradd)
> なんてのは各UNIXごとにバラバラなんで、ご注意を。
ありがとうございます、ぜんぜんOKです。
こういう事を知りたかったのです。(^^)/

最初に触れたUNIXがLinuxなので、その他のOSやその作法について
はまだまだなんです。
#変更後まだ数日しか経ってないもので。

ただ私は、プログラマー志望では無いので余り深みにはまらぬよう
に慎重にしないと、ついつい...(^^;

ちなみにBSDIは、「Berkeley Software Design Inc」の略だそうです。
プロバイダの商用OSとしてかなり普及していると聞きました。
しかし、私が借りた無料レンタルWebスペースのOSは Linuxでした。

No. 310 # M.Masuda 1999/05/28 (金) 14:53
>プログラマーな人なのに
ここ、訂正します。
これじゃ、偏見ですね。(^^;
プログラマー方すいませんでした。

No. 311 # mm 1999/05/29 (土) 22:48
とほほさんとこの話題が出てますね(笑い)
そのとほほさんのラウンジの質問を見ていて思い出したのですが、
(質問自体は、ホームぺージの作成には関係なさそう…)
statが返す構造体のmodeの上位7ビットはどのような意味がある
のでしょうか?
上位3ビットは、
    0x8000 ブロックデバイス
    0x4000 ディレクトリ
    0x2000 キャラクタデバイス
であることは分かったのですが、下位の
    0x1000
    0x0800
    0x0400
    0x0200
が分からないのです。
検索で探しても、ビットの意味まで記述した記事が見つけられなくて…(^^;

ところで、perlのCGIで、
    (stat(STDOUT))[2]&0x2000
    (stat(STDOUT))[2]&0x8000
を調べて見ると、下の方が真となって、ブロックデバイスと
出たのですが(STDINも同じ)、これってウチのWebサーバーが
CGIの標準出力を一旦ファイルにリダイレクトしている
ということなのでしょうか?

No. 312 # mm 1999/05/30 (日) 05:24
あれから、ls のソースを調べればいいと考えたのですが、
その中で、S_IFDIR とかを #defined した stat.h を探すのに
手間取ってしまいました。
(やはり、grep一発でカタが付く環境が羨ましい…(^^;)

それはともかく、各ビットが意味を持つ訳ではなく、
0xF000 type of file mask
でマスクした値が以下の意味を持つようです。

0x1000 named pipe (fifo) FIFO
0x2000 character special キャラクタ型スペシャルファイル
0x4000 directory ディレクトリ
0x6000 block special ブロック型スペシャルファイル
0x8000 regular 通常ファイル
0xA000 symbolic link シンボリックリンクファイル
0xC000 socket ソケットファイル
0xE000 whiteout
0x0200 save swapped text even after use

ところで、最後の2つは何なんでしょうか?

No. 313 # 68user 1999/05/30 (日) 09:11
> ただ、私の周りにはちょっと偏屈な技術者が多く、人間性は信じら
> れない人がおおいです。
ん〜、まぁ初心者の程度にもよるかと。僕の場合、自分で調べようと
しない人、一度聞いたことを覚えようとしない(メモを取らない)人には、
教えたくないですね。

もちろん、
> 初心者を馬鹿にしきった口振りや態度
がよろしくないのは当然ですが、教えをられる側の程度にも
よるのではないかと思います。

> たとえば、とほほさんとは何度かメールのやり取りをしてますが、
> プログラマーな人なのに、おおらかな人間性を感じました。
いや〜僕はあんなに心が広くないので(^^;

ちなみに僕は他人に(直接面と向かって)教えてると、だんだん
不機嫌になってきますので、あまり教えないようにしてます(笑)。

No. 314 # 68user 1999/05/30 (日) 09:13
> その中で、S_IFDIR とかを #defined した stat.h を探すのに
> 手間取ってしまいました。
stat(2)を見るのが一番早いんじゃないでしょうか。

> 0x0200 save swapped text even after use
sticky bitです。chmod 1755、chmod u+t などとすればこのビットを立てられます。

以下、知ってたらごめんなさいな説明。

昔のUNIXでは仮想記憶はなく、実メモリと HDD上のスワップ領域の
2本立てでした。で、sticky ビットが立っているファイル(実行ファイル?)
のテキスト領域は、実行後もスワップ領域に保持され、再実行する際は
高速に実行できるようになっていました。つまり頻繁に使うプログラムの
stickyを立てておけば高速に実行が可能だったわけです。

しかし、現在のコンピュータはキャッシュや仮想領域が進化したので、
stickyビットの重要性はなくなりました。FreeBSDではファイルに
対する stickyビットは無視されています。
# ここらへんは、正しいことを書いているかどうか自信がありません。

一方ディレクトリに対する stickyはちゃんと意味があって、
誰でもその下にファイルを作成することはできるけど、削除する際は
ファイルのオーナーしか削除できないという意味があります。
/tmp がいい例ですね。
    % ls -ld /tmp
    drwxrwxrwt 18 bin bin 1536 May 30 07:57 /tmp/

> 0xE000 whiteout
うーん、ローカルの全ファイルに対して、このビットが立ってるか
どうか調べてみたんですが、1つもありませんでした。なんでしょうね?

> 下の方が真となって、ブロックデバイスと
> 出たのですが(STDINも同じ)
僕のまわりのFreeBSD/Solarisでは、STDIN/STDOUTともに、普通の状態だと
キャラクタデバイス(ttyですな)、ファイルにリダイレクトするとregular、
パイプならFIFOになりました。CGI上で実行すると、IN/OUTともFIFOでした。
# http://X68000.startshop.co.jp/~68user/tmp/mode.txt
# http://X68000.startshop.co.jp/~68user/tmp/mode.cgi

> これってウチのWebサーバーがCGIの標準出力を一旦ファイルに
> リダイレクトしているということなのでしょうか?
mmさんのところってHPですから(でしたよね?)、実装の違いがあるの
かもしれないので、僕の知識では何とも言いがたいです。

No. 315 # mm 1999/05/30 (日) 17:42
>stat(2)を見るのが一番早いんじゃないでしょうか。
あっ、すいません、以前教えて頂いた、
    http://www.jp.freebsd.org/man-jp/search.html
で、stat を検索すると、
    マニュアルがみつかりませんでした。"stat.[1-9n]"
という警告が出たんで、こっちは諦めてたのですが、
ウチのサーバーの man にはありました…(^^;
ただし、ビットの意味までは書いてないです…×

ところで、この stat(2) の (2) とかの数字は、どういう
意味なのでしょうか?
以前から少し気にはなってたんですが、ついつい放ったらかし
にしてました…(^o^;ゞ


>sticky bitです。chmod 1755、chmod u+t などとすれば
>このビットを立てられます。
あっ、sticky bitと聞いて思い出しました(^^;
swapの話や/tempの例も読んでたのですが、
昨日は連想が全く働きませんでした…すいませんですm(__)m
>以下、知ってたらごめんなさいな説明。
とんでもないです。知らない可能性の方が高いので、
お手数でなければ、ぜひ今後ともよろしくお願いしますm(_~_)m

>どうか調べてみたんですが、1つもありませんでした。なんでしょうね?
ls のソースを見てると、S_IFDIRに'/'、S_IFSOCKに'='という感じで、
S_IFWHTには、'%'を付けてるので、何か意味があるんでしょうね。

とにかく、下位9ビットの上の3ビットは
01000 sticky bit
02000 SGID
04000 SUID
ということで、8進で書いたら、UIDとかとの関連で思い出しました(^^;
(modeはやはり8進の方が分かり易い…)


>CGI上で実行すると、IN/OUTともFIFOでした。
私もそれを期待してたのですが…
それはともかく、先にウチで実行したCGIはマスクが
間違ってたので、mode.cgi を実行してみました。
環境は、HP-UX Netscape-Enterprise/2.01b です。
# http://www2s.biglobe.ne.jp/~cru/test/mode.cgi
1100000 000000000
is SOCKET

1100000 000000000
is SOCKET

ウッソー?
なんで、ソケット??
実は、nph-cgiで実行されてて、WWWサーバーの代わりに
ラッパーがヘッダを付加してるとか???


ちなみに、Windows95での実行結果です。
C>perl mode.cgi
0010000 000000000
is CHAR_DEV
0010000 000000000
is CHAR_DEV

C>perl mode.cgi < file1 >file2
C>cat file1 | perl mode.cgi | more
1000000 110110110
is REG_FILE
1000000 110110110
is REG_FILE

ついでに、Win95 のJava WWWサーバーでの実行結果
0001000 000000000
is FIFO
0001000 000000000
is FIFO
あれ? is REG_FILE を予想したのですが…??

No. 316 # 68user 1999/05/31 (月) 02:36
>  http://www.jp.freebsd.org/man-jp/search.html
> マニュアルがみつかりませんでした。"stat.[1-9n]"
> という警告が出たんで、こっちは諦めてたのですが、
このページ、日本語版がなければ英語版を表示してくれればいいのに。
改善要求出しておきます。

> ところで、この stat(2) の (2) とかの数字は、どういう意味なのでしょうか?
セクション番号です。
http://X68000.startshop.co.jp/~68user/unix/pickup?man

結構OSによって違っていて、SunOSなんかだと、1B,1C,1Fなどがあったり、
またあるOSではシステムコールだけど、別のOSではライブラリという
ものもあるので、セクション番号はあまり絶対的なものではありません。

各セクションの詳しい説明は、man 1 intro とか man 2 intorでわかります。

> S_IFWHTには、'%'を付けてるので、何か意味があるんでしょうね。
どうやら、unionファイルシステムというものに関係があるようですね。
でも役割などはよくわかりません。
http://home.jp.freebsd.org/cgi-bin/namazu.cgi?key=whiteout&dbname=users-jp
http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/miscfs/union/Attic/libc.fts.c?rev=1.1.1.1
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&cmd=&man=mount_union&dir=jpman-3.2.0%2Fman

> C>cat file1 | perl mode.cgi | more
> is REG_FILE
> is REG_FILE
DOSのパイプは、一度ファイルに落としてから再度そのファイルを
リダイレクトして実現しているんでしたっけ。

No. 317 # 信和 [E-mail] 1999/05/31 (月) 19:04
会社でホームページを開設するんですが,サーバを管理してほしいとの事なんです。
NTTから直接らしいんですが、ネットワーク用なんです。
回線はOCNエコノミーです。
具体的にどんな本を読んで勉強すればいいか教えてください。
具体的に教えていただけると、本当に感謝です。
勉強しますんで是非アドバイスを下さい。
お願いします

No. 318 # 68user 1999/05/31 (月) 20:05
あーうー、あなたが現在どれだけの知識を持っているか、どんな
OSを使うのかがわからないので、なんとも答えにくいです。
# それに、僕はその分野の良書を知らないので…。

サーバおっ立てるなら、とりあえず DNS/WWW/SMTP/POP くらいを
勉強すればいいでしょう。書店に行けば
    「FreeBSD(Linux)で始めるインターネットサーバ」(この書名はあくまでも例です)
などという本が結構置いてあると思うので、数冊買って読んでみては
いかがでしょう。ドメイン登録が必要なら、JPNICへの手続きの
方法が書いてあるものを買うといいかも。

とまぁ非常に簡単なアドバイスしか言えませんが…。

No. 319 # mm 1999/05/31 (月) 21:30
>セクション番号です。
ありゃ〜! すいません、詳細な説明があったのですね(^o^;ゞ
ついでに質問してしまったもので、ロクに調べてませんでしたm(__)m
>セクション番号はあまり絶対的なものではありません。
なるほど、分かりました。

>このページ、日本語版がなければ英語版を表示してくれればいいのに。
>改善要求出しておきます。
そういえば、検索フォームに
>日本語はセクション 1,5,6,7,8 のみです(無いものもあります)。
とありました。
セクションの意味が分かってなかったので、ぜんぜん気にしてなかったです(^^;
それと、日本語で見つからなければ、言語で英語を選んで探せばいいと
思って今見に行ったら、なぜか英語が選択できなくなってた…なぜだろう??

>DOSのパイプは、一度ファイルに落としてから再度そのファイルを
>リダイレクトして実現しているんでしたっけ。
本来のDOSではその通りです。
パイプの使用中にディレクトリエントリを取ると、ファイルが見えます(笑い)
Win95のDOS窓でも同じみたいです。
ただし、Win95のWin32では、プロセス間通信としてのパイプを
サポートしてるようなので、Win32のperlで、
    open(FH,"| cat");
    &get((stat(FH))[2]);
を実行すると、Javaの場合と同じ is FIFO になりました。

No. 320 # Netboy 1999/06/04 (金) 17:45
68userさん,
大昔のSEGA PC-BBSでピンボケ発言をしていた
Netboyです.

'にくぽんBBS'の掲示を見て,お邪魔しました.
お肉さんは会社の研修で,今月はネットできないそうです.

SEGA PC-BBSの過去ログの件なんですが,私がサーバーと
回線を用意しますので,そちらで公開を継続していただく
ことは可能でしょうか?

T1以上の回線上のサーバーを新しく仕込む予定です.
68userさんにアカウントを発行して,68userさん用のHP領域を
差し上げますので(ログ展開用と合わせて2G程度),
そちらで当面の間,公開を続けていただきたいのです.

'当面の間'とは,具体的には,来夏くらいまでです.
その後のことは,やってみてからご相談したいと思います.

勝手なお願いですが,よろしくお考えいただけますよう,
お願い申しあげます.

- - - - - - - - - - - - - - - -
お肉さんの過去ログ置き場である私の自宅サーバー
(ODN;64kbps常接;Linux)なら,とりあえずすぐに使えます.
ログを移設したりする用途であれば,すぐにでも
アカウントを発行できます.ただし,遅〜いボロサーバー
ですけど.

No. 321 # 68user 1999/06/04 (金) 21:09
こんにちは、Netboyさん。

> お肉さんは会社の研修で,今月はネットできないそうです
のようですね。書き込んだ後に知りました(^^;

> T1以上の回線上のサーバーを新しく仕込む予定です.
> 68userさんにアカウントを発行して,68userさん用のHP領域を
> 差し上げますので(ログ展開用と合わせて2G程度),
え〜、T1って1.5Mbpsですよね(違いましたっけ)。
2Gと言えば2GBですよね(そりゃそうだ)。結構な容量です。

しかし、それだけのリソースを僕に貸し与えることによって、
Netboyさんにメリットが発生することは全くないように思える
のですが、なぜそういうお申し出をされるのでしょうか?
# 失礼な質問かもしれませんが、素朴な疑問です。

> '当面の間'とは,具体的には,来夏くらいまでです.
これは2000年の夏、ということでしょうか。

僕が持っているログは、1997/4〜1998/4のもので、現在は
更新していません。よって、一度設置してしまえば保守する
必要はないので、HDDがクラッシュでもしない限り、永遠に
存続させられると思います。

容量は向こうに書いたように、ログ自体が100M、namazuの
インデックスが300MB超(400MBいくかも)です。

過去ログ自体、懐古主義以外のなにものでもありません。アクセス
自体もそんな頻繁にあるわけでなく、たまに現BBSで「ここで昔のが
見られるよ」という発言があったときに、アクセスが増えるくらいです。
# http://X68000.startshop.co.jp/~68user/cgi-bin/view-count.cgi?log=day4

昔を懐かしむためだけに、何も新しいものを生み出さない
コンテンツのために、T1の回線と数百MBの容量を僕に与えて
いいのでしょうか? 今一度お考えください。

なお、別に断っているわけではありません。こちらがお受けした後に
Netboyさんが「こんなはずでは…」と思われるのは避けたいので、
現状を御理解いただいているのか確認したいわけです。
# もちろん「やっぱりやめます」ということになっても、全く構いません。

No. 322 # Netboy 1999/06/05 (土) 02:13
68userさん,
ご質問いただき,ありがとうございます.

>しかし、それだけのリソースを僕に貸し与えることによって、
>Netboyさんにメリットが発生することは全くないように思える
>のですが、なぜそういうお申し出をされるのでしょうか?

お申し入れをした理由は次のようなものです.

1.SEGA PC-BBSのファンであること
2.ログの保存と公開について68userさんの
    活動に関心を持っていたこと
3.Web掲示板CGIにちょっとした機能を付け加える計画を
    進めていて,このような'ログの置き場所・公開方法の問題'を
    ある程度解決したいと考えていること

さらに,たまたま私がお手伝いしているPCパーツショップさん
のサーバーを任されていて,偶然予備のWebサーバーが空いている
のです.このサーバーはFreeBSDです.

>一度設置してしまえば保守する
>必要はないので、HDDがクラッシュでもしない限り、永遠に
>存続させられると思います。

もっとアクセス量があるのかと思っていました.それなら
帯域幅を圧迫しないと思いますので,特に期限は無しで
構いません.アクセス量があると,来年のサーバー設置
料金が上がってしまうので難しいところです.

領域の余った部分はお好きに使っていただいて構いません.
Telnetごしに普通の感じで触れるようにします.

詳細はメールでご質問にお答えできますし,ご説明したい
ことがらもいくつかあります.
メールを差し上げて構いませんでしょうか?

(長文で失礼しました)

No. 323 # Netboy 1999/06/05 (土) 02:33
追加して補足します.
予定しているサーバーは,群馬の両毛インターネットさんという
業者さんのところにある,上流が東京インターネット系6Mbps
(又はODN系1.5Mbps)のサーバーです.

商用サーバーですが,営業内容とは関係ない,お得意様ユーザーさん
のHPやパーツのドライバ類,データシート,掲示板などを収容する
予定のものです.よってコンテンツはすべてコピーフリーになります.

ただし,メインWebサーバーがコケたときは,こちらを復旧機材に
徴用されますので停止します.オマケにこの業者の米NIC用2nd-NS
サーバーと兼用になっていて,Webトラフィックがあまりに重くなると
怒られてしまいます.

No. 324 # 68user 1999/06/05 (土) 07:49
> お申し入れをした理由は次のようなものです.
なるほど、概ね理解しました。では、
    ・僕もNetboyさんも、一切の義務/責任を負わない
    ・アカウントの存続、容量などは、Netboyさんの一存にお任せする
ということなら、お申し出をお受けしたいと思います。

> もっとアクセス量があるのかと思っていました
ちなみに5月のアクセス数(ヒット数: httpd-access.logをgrep|wc -l
したもの)は10000弱です。全文検索を付ければもう少し増えるかも
しれませんが、倍増とか3倍増などということはありえないと思います。

> メールを差し上げて構いませんでしょうか?
はい、よろしくお願いします。

> 群馬の両毛インターネット
takauji.or.jp でしたっけ? ところで、なんでtakujiなのかしら。

No. 325 # Netboy 1999/06/05 (土) 18:04
>・僕もNetboyさんも、一切の義務/責任を負わない
>・アカウントの存続、容量などは、Netboyさんの一存にお任せする
>ということなら、お申し出をお受けしたいと思います。

ありがとうございます.
上記の条件は了解いたしました.


>ところで、なんでtakujiなのかしら。

さぁ...(笑)
企業向けのryomonet.co.jpというのもあります.

では,メールをこれから送りますので.

No. 326 # 68user 1999/06/16 (水) 23:36
え〜、トップページにも書きましたように、
    http://X68000.startshop.co.jp/~68user/index.html
にリンクを張っていらっしゃる方は
    http://X68000.startshop.co.jp/~68user/
に、
    http://X68000.startshop.co.jp/~68user/unix/index-unix.html
にリンクを張っていらっしゃる方は
    http://X68000.startshop.co.jp/~68user/unix/
に修正していただくようお願いします。

/~j5306050/index.html や /~j5306050/unix/index-unix.html を指してるリンクは
全部修正したつもりです。

なんでかと言うと、webを作り始めたときは index.html を省略できることを
知らなかったんですが(^^;、やっぱりURLは短い方がいいよなと思って
変えてみました。めんどくさいことさせてすいませんが、ぜひご協力を。

あと、(やっと)UNIXのとこに検索フォーム付けました。

No. 327 # Manabu Takayama [E-mail] 1999/06/18 (金) 00:17
このサイトを Infoseek で見付けてしまった、高山と申します。
68user さん、はじめまして(笑)。

このサイトには、HTTP クライアントや、POP3 クライアントの作り方
など、他にはあまり無い情報があって、hacker 志望(実力は全然で
すが)な僕には、かなり為になります。

これからも、たまに見に来ようと思いますので、頑張ってください。
では。

# www-links Project 。もっと人手が欲しい〜。
# 特に、三平さんの収集した URL の整理とか、相当キツそう(涙)。

No. 328 # ウスターソース 1999/06/18 (金) 13:12
余談ですが、HTTPのソースを見たい時はブラウザに
view-source:http://abc.hogehoge.com/
とかするとソースウインドウが開きます(笑)

既に知ってますかね、でもCGIだと色つけとかすれば
便利そうです、作ってみようかな・・・

No. 329 # 1999/06/18 (金) 17:13
<a href="http://abc.hogehoge.com/">http://abc.hogehoge.com/

No. 330 # gxh [E-mail] 1999/06/18 (金) 17:16
x−mate3.0をしている人、おしえてください。
メールを待ってます。

No. 331 # gxh [E-mail] 1999/06/18 (金) 17:18
x−mate3.0をしている人、おしえてください。
メールを待ってます。

No. 332 # 68user 1999/06/19 (土) 07:13
> 68user さん、はじめまして(笑)。
どうも(^^;

> hacker 志望(実力は全然ですが)な僕には、かなり為になります。
いや〜、ほんとは「カーネルの読み方」とか「デバイスドライバの作り方」とか
書きたいんですけど、実力がないのであれが精一杯…。
高山さんはとっても若いので、今のうちに勉強して立派なハッカーになってください。

> # www-links Project 。もっと人手が欲しい〜。
担当の部分が進んでなくてすいません。システムができないことには
メンバの協力も得られませんから、早く仕上げなくてはと思っているんですが。
URLの整理くらいなら、www-links-workで手伝ってくれる人を募集しては
どうでしょう。

> view-source:http://abc.hogehoge.com/
これは知りませんでした。というか、この手のはいろいろあることは
知ってるんですが(about:とか)、細かい部分は全く知りません。

# ところでウスターソースさんって、どこかで見かけた記憶があるんですが(失礼)、
# SEGA? それとも、とほほBBSかな。

No. 333 # 栗原 [E-mail] 1999/06/22 (火) 18:36
始めまして。
ちょっと悩んでいるので教えていただきたいのですが、
日本語(漢字使用可)のtalk,write,phoneを探しているのですが
ご存知ですか。お分かりになれば教えていただきたいのですが。

No. 334 # 68user 1999/06/23 (水) 00:25
okphoneはどうでしょう。
    ftp://ftp.win.or.jp/pub/network/okphone/
ただし、クライアントだけが日本語に対応すればいいのか、それともサーバの
対応も必要なのかはわかりません。あと、talk/writeはわかりませんです。
# ICQを使うってのは?

No. 335 # ぱおぱお 1999/06/24 (木) 09:27
はじめまして。

REF HAT5.2をインストールしていろいろテストしているのですが、
PCの場所移動のためにIPアドレス等を変更したいのですが、
どのファイルを直せば良いのでしょうか?
Xが使えれば簡単に直せるようですが、ディスプレイが悪いのか、
設定が悪いのかわかりませんが、まともに画面が見れなくなってしまうので、
Xでの設定は出来ないんです。(こっちを直せという意見もありますが・・・)
詳しく説明しているページを紹介してくださってもかまいません。
どうかご教授ください。

No. 336 # ぱおぱお 1999/06/24 (木) 09:28
RED HATの打ち間違えです(^^

No. 337 # 68user 1999/06/24 (木) 18:44
Linuxは知りませんが、一般的に/etcの下なの確かでしょうね。
/etc/sysconfig/ の下とかにないですか。
    grep 133.8.3 /etc/{*,*/*,*/*/*}
などとして、どこで設定しているのか調べてみてはどうですか。
# 133.8.3 は現在のIPアドレスね。/etc/hostsや/etc/resolv.conf、
# デフォルトゲートウェイの修正も忘れずに。

No. 338 # 初心者 1999/06/30 (水) 00:09
UNIXプロセスの終了について質問したいと思います。
普通はkill プロセスIDという方法で終了できるのですが、
なぜかうちのsolarisは終了できません。
そのやり方を以下のように再現します。
g10410@iclab[1]/home/g10410>ps -ef | grep java
    g10410 19018 19011 0 14:41:16 pts/8 0:00 grep java
    g10410 17832 1 0 5月28 ? 0:03 /usr/java/bin/java -classpath /usr/dt/appconfig/hotjava/classes:/usr/dt/appconf
g10410@iclab[2]/home/g10410>kill -KILL 17832
g10410@iclab[2]/home/g10410>
g10410@iclab[3]/home/g10410>ps -ef | grep java
    g10410 19026 19011 0 14:41:53 pts/8 0:00 grep java
    g10410 17832 1 0 5月28 ? 0:03 /usr/java/bin/java -classpath /usr/dt/appconfig/hotjava/classes:/usr/dt/appconf
最後の一行のように、なぜか終了できませんでした。
そもそも
/usr/java/bin/java -classpath /usr/dt/appconfig/hotjava/classes:/usr/dt/appconf
なんで動いたままになってるのかわかりませんので、どうか御教授下さい。
サーバーの負荷が重いから停止させてくれと、文句を言われているので、
なんとか終了したいものです。

No. 339 # 68user 1999/06/30 (水) 16:26
ゾンビプロセスや、ディスク入出力待ちのまま固まってる
プロセスは殺せません。
> 文句を言われているので、なんとか終了したいものです。
え〜、リブート…とか(^^;

No. 340 # 日本語表示 1999/07/01 (木) 13:34
はじめまして。
インストール後に表示言語設定を
コマンドを使って変更する事は可能なのでしょうか?

ちなみにインストール時に設定したのは英語と日本語の
混在で、変更したいのは日本語表示です。

No. 341 # うに 1999/07/01 (木) 16:01
ネットワークプログラミングの基礎知識について
すごくわかりやすかったです。
ありがとうございました。

No. 342 # 日本語表示 1999/07/01 (木) 16:41
何とか自力でできました。
これからも度々来させてもらいますので
その時はよろしくお願いいたします。

No. 343 # ABC 1999/07/02 (金) 12:29
はじめまして。超初心者です。
xvの説明のところに
「Xの起動時に背景に好きな壁紙を貼りたい場合は.xsessionに
    % xv -root -quit file.jpg
    などと書いておけばよい。」
とありますが、.xsessionが見つかりません。
どこにあるにでしょうか。

No. 344 # 68user 1999/07/02 (金) 14:53
.xsession がなければ .xinitrc でいいです。具体的には xdmで
Xを起動しているなら .xsession 、startxやxinitでXを起動しているなら
.xinitrcです。

No. 345 # 再び日本語表示 1999/07/02 (金) 15:34
はじめまして。

私も日本語表示で困ってます。
Solaris2.6にTeraTermを使ってコーディングを行っているのですが、
日本語が文字化けしてしまいます。
LANGはjapanese、TeraTermの設定はEUCに設定してあります。
このほかに注意する個所がありましたら教えてください。
ちなみに他の人は同じ設定で文字化けしてないようです。

No. 346 # 68user 1999/07/02 (金) 16:14
> LANGはjapanese
化ける化けないに関してはLANGはあまり関係ないです(と思います)。

症状がよくわからんのですが、日本語が書かれたファイルをcat
するだけで化けますか。cat hoge|nkf -eでEUCに変換すると
どうなりますか。

補足。
> .xsession がなければ .xinitrc でいいです。
どちらもホームディレクトリに置けばいいです。どちらもなかったら
    http://X68000.startshop.co.jp/~68user/unix/config.html#%7E%2F%2Exsession
のような内容のファイルを作成しておきましょう。

No. 347 # ユニ男 1999/07/02 (金) 16:21
再び日本語表示 さんへ

設定を保存しましたか?
設定し直した後に
        setup→save setup
で設定を保存します。
一回終了してもう一度立ちあげると直ると思います。

No. 348 # 再び日本語表示 1999/07/02 (金) 16:25
cat hogeでは、日本語は表示されます。
問題はviで日本語入力した際、文字化けしてまうことです。
(説明不足でした。すみません)
OSのエラーコメントなどは、正常に日本語で表示されます。

No. 349 # ユニ男 1999/07/02 (金) 16:28
いい忘れました。設定するのはtera termの方です。

ついでにこちらの方から質問があります。
OSをインストールしたのですが、root直下に.Xdefaultsが
できません。インストールに失敗したのでしょうか?

それからVXVAをインストールしたのですが’本マシンではVxVAを起動することはできません。’というメッセージがでて起動しません。
バージョンも対応osにも問題ありません。よろしくお願いします。

No. 350 # 再び日本語表示 1999/07/02 (金) 16:32
>ユニ男 さん
TeraTermの設定を保存し、再び起動してみましたが、
まだ文字化けするようです。

No. 351 # ユニ男 1999/07/02 (金) 17:03
>再び日本語表示さん

Telnetではどうですか?

No. 352 # 再び日本語入力 1999/07/02 (金) 17:09
Telnetも同じ症状です。
設定を日本語EUC、SJISのどちらにしても
日本語の入力は文字化けします。
うーん・・・なぜなんだろう???
正常に動いている人の.profileを見ても
環境変数は同じなんですけどねぇ。

No. 353 # 68user 1999/07/02 (金) 17:28
> 問題はviで日本語入力した際、文字化けしてまうことです。
じゃあTeraTermの問題ではないですね。そのviは日本語を通しますか?
手元のSolarisには、
    /usr/xpg4/bin/vi
    /usr/bin/vi
    /bin/vi
    /usr/ucb/vi
がありますし、それに加えてelvisもあります。少なくとも/bin/viは
    setenv LANG ja
しないと化けてました。

他の方はviを使っていても化けないのなら、その人の環境でwhich viして
どのviを起動しているか、環境変数はどうなっているかを調べてはどうでしょう。

> OSをインストールしたのですが、root直下に.Xdefaultsが
> できません。インストールに失敗したのでしょうか?
OSと言ってもいろいろありますけど、普通インストール直後には
.login、.cshrc、.profile、.mailrc、.rhosts くらいしかできない
はずだと思います。
# /usr/share/skel あたりに置いてあるやるがコピーされるわけです。

> それからVXVAをインストールしたのですが
VXVAとは何か知らないので、残念ながらお役に立てそうにありません。

No. 354 # ユニ男 1999/07/02 (金) 17:38
>再び日本語表示さん

Telnetではどうですか?

No. 355 # 再び日本語入力 1999/07/02 (金) 17:44
viは日本語を通します。
which viでは、私も正常に表示される環境も
/usr/bin/viを使用しています。
LANG=ja export LANG
とし、envでちゃんと格納されているのを確認しました。
TeraTermの設定も確認させてもらいましたが、
やっぱり同じです。表示されない理由がわかりませんが、
もうすこしあがいてみます(苦笑)

No. 356 # ユニ男 1999/07/03 (土) 03:11
>68user さんへ
返答ありがとうございました。
.XdefaultsはべつのCDからインストールすることがわかりました.
それからVXVAとはVXVMというディスクのミラー化(ROOTいかのファイルを全て万が一のために同じものをバックアップとしてさくせいする)するためのソフトのユーザーインターフェイスのことです。
とりあえずこれは再インストールすることになりました.

>再び日本語表示さんへ
そうゆうことになると私もお手上げです.
力不足の私をお許しください・・・


No. 357 # ユニ男 1999/07/05 (月) 10:09
こんにちは。
X ウィンドウシステムというのは
OSとは別個にインストールするものなのでしょうか?
もしそうだとすればどこから手に入れれば良いのでしょうか。
よろしくお願いします。

No. 358 # 68user 1999/07/05 (月) 18:30
OSはなんでしょうか。UNIX系OSならば、よほど変なOSでない限り
Xも一緒に付いてきますので、何も入ってないとしたらインストール時に
選んでないだけだと思うのですが。

No. 359 # ユニ男 1999/07/06 (火) 00:23
>68user
OSはUX/4800です。
結局ほかのサーバーからコピーしてきました。
でも変ですね。インストール時にディレクトリ
も指定したんですけど・・・。

No. 360 # ユニ男 1999/07/06 (火) 00:25
>68user ’さん’
呼びつけで送ってしまいました。ごめんなさい。
よろしくお願いします.

No. 361 # ABC 1999/07/06 (火) 12:41
.xinitrcもないのですが・・・

No. 362 # 日本語入力解決 1999/07/06 (火) 15:51
日本語入力ができるようになりました。
原因は stty istrip なるものが.profileに記述されてたことです。
自分で書いたものでないので、気づかなかったのですが、
これは入力文字を 7 ビットにストリップする処理でした。
相談に乗ってくださった68userさん、ユニ男さん、ありがとうございました。また何か合った際はよろしくお願いします。

No. 363 # 68user 1999/07/06 (火) 23:07
> 原因は stty istrip なるものが.profileに記述されてたことです。
stty istrip だと、catは通っても vi は化けるのですか。
勉強になりました。
# こちらのSolarisでは再現できませんでしたが

> OSはUX/4800です。
HP-UX か HI-UX ですよね。どっちも使ったことがないのですが、
> .xinitrcもないのですが・・・
.xinitrc も .Xdefaults も .Xresources も、最初は存在しないもの
じゃないかと。

xinit/startxを実行すると、最初に ~/.xinitrc を探し、それがなければ
サイト標準の設定として /usr/X11R6/lib/X11/xinit/xinitrc (FreeBSDの場合)
を実行します。ですので、ユーザごとにカスタマイズしたい場合は、その
ファイルを ~/.xinitrc にコピーして、いろいろ設定するものだと思います。
# see man xinit

No. 364 # ABC 1999/07/07 (水) 12:44
相談に乗って頂きありがとうございました。
(結局わからずじまいなのですが・・・)
今度はもう少し勉強してから質問したいと思います。
では、またいつかお世話になると思いますので、
その時まで・・・

No. 1〜364> Next  [最新発言に戻る] [過去ログ一覧]