68user's page 掲示板

Prev< No. 99〜199> Next  [最新発言に戻る] [過去ログ一覧]
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なら、リセットしなくても変更可能だし、
それ以上の環境の切り替えはウチでは必要なかったので、
そういうのは使ったことないです(^^;

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