おはようです。 自作の掲示板ですか?スゴイですね。 .htaccessを見させてもらいました。 htmlやhtmでもSSIが実行できるようになっているみたいですが、 どこかに「サーバの負担が大きくなるから止めた方が良い」みたいな ことが書いてありました。 #いちいちチェックするからでしょうか? あまり気にしなくて良いものなんでしょうか? #どんな風に表示されるのかな、ワクワク^^ |
いえ、自作ではなく http://www2e.biglobe.ne.jp/%7es-hasei/wwwboard.htm のやつです。他のサイトで設置を頼まれたのですが、 念のためこちらで動作チェックをしてます。ですから、 > #どんな風に表示されるのかな、ワクワク^^ いたって普通です(^^; > どこかに「サーバの負担が大きくなるから止めた方が良い」みたいな > ことが書いてありました。 まぁたしかに全ての*.htmlに検索かけてしまうんで、 貧弱なマシンでは .shtmlにした方がいいんでしょうね。 でも、このサーバはCPUが6個、メモリ1Gというふざけた マシンなんで(笑)、負荷についてはあんまり考えてません。 それより問題なのはセキュリティでしょうけど、 もしコマンド実行されてもnobody権限だし、 まぁいいか、という投げやりな姿勢です。 あと、BBS設置した理由に、 UNIXの部屋を作ってから質問やツッコミが2つしか 来てないので、非常にさみしい。 というのがあります(^^; だって結構アクセスしてもらってるのに、リアクションが ないとさみしいなぁ…と、モニタの向こうの人に向かって言って みたりして。 |
こんにちは http://www.sega.co.jp/music/bbs/ http://www.sega.co.jp/cinema/bbs/ http://www.sega.co.jp/gamesoft/bbs/ 一応ご参考までに。 (掲示板の趣旨とは違いますので消して下さってけっこうです。) |
はじめまして何時も「unixコマンド」を拝見して勉強させて頂いております。 出来れば「逆引き」メニューなど作っていただければ有り難いのですが? あつかましい事を申しました(^^;今後ともよろしく御願いしますm(_ _)m |
どもども>竹内@竹内靖工務店さん えっと、逆引きメニューというのは「機能→コマンド名」 という意味でしょうか? それともコマンド名をひっくり返して(muleならelum) 並べることですか?(違うか(^^;) |
その3つだけでいいですか?>calさん 1週間以内に落としますが、それより先に削除されてたらゴメン。 |
はじめまして、素人です。(-_-; LINUXというのはUNIXの中のひとつというような事を聞いたのですが、同時にわりと独自性の強いものとも聞きました。アプリケーションの互換が無くなるほどの差があるのでしょうか? (改行無しテストも兼ねる(^-^;) |
はじめまして、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とかを用意して、わかってない人でも一発で インストールできるようにしてるわけです。 …というふうに、「アプリケーションの互換性」と 曖昧な聞き方をされると、こんなに長くなってしまう のでした(笑) |
よろしくお願いします。&ありがとうございます。 |
こんばんわ。賑わってますね^^ もう既に付いていけないくらいの話題になってます(汗) そうですか、6気筒1万ccのマシンなんですか。 そんな良いマシン、前の仕事でも使った事なかったなあ。 error.cgi、参考にさせてもらいます。 でも、いつ反映できるかは謎ですが(笑) |
RefererなのかReferrerなのか、いづれ決着をつけましょう・・・・・・・・・ って、ほさいぬさんが言ってました。 |
お招きにあずかり、参上致し…あ、あれ?誰もよんでないって? こりゃまた、失礼しました〜〜、って年代モノのギャグはどっかにやっといて、と。 取り敢えず、某所でここのCGIが必要になりそうなんで頂いていきます(笑) 問題が発生すればレポート出しますんで、その時には宜しくお願いしますね。 まぁ、仕事もあるんで、すぐに設置できる状態ではなさそうなんだけど… |
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師匠、ここまでの解説を御教授くださいませ。 |
>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日分残るって事でいいんでしょうか。 あい。変なプログラムですね(笑) |
まぁ簡単なプログラムだから、原理を理解したら 自分でスクラッチから書き起こすのもいいと思います。要は 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を使って 現在置いてある全てのアーカイブをリアルタイムで リストアップしてもいいですし。 |
昨日のおさらい (申し訳ないですが、しばらくお付き合い頂けると助かります) -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の仕様は今後変わる予定ってのはあるんでしょうか? あぁ、やっぱりラクダ本買わないとだめだな… |
訂正 ocaltime()でとってきた$yearが98以下の時には>ocaltime()でとってきた$yearが98未満の時には 謹んで訂正致します。m(__)m |
> ってことで、この部分は全面的に改良して、非圧縮でやるとこを > 目標としときます。 ん〜、圧縮しないと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 にありますが、最初は本で読む方がいいんじゃないかと 思います。 |
昨日のおさらい… >ん〜、圧縮しないと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についての知識の少なさを露呈してますな(爆) >購入されることをお勧めします。 今日は忙しくて本屋に行く暇もなかったので、明日買ってきます。 ってわけで、今日はここまで。 仕事が忙しいの…(涙) |
> BIGのサーバーレンタルは50MBもらえるので まぁ今のところ他に使い道がないなら圧縮しないのも いいでしょう。 > そのわりにはCGIの本にはこれで文字コードを変換するように > なってるんだけど、なぜそんなことが必要なんだろう? nkfはただのUNIXコマンドなので、CGIの本の範疇を越えている ということでjcode.plを使っているんでしょうね。 僕はnkfの方が慣れてるのと、nkf使った方が多分速いから 使ってるだけですので、代わりにjcode.pl使ってもいいですよ。 > サポートに連絡してみよう。 どちらかと言えば(あくまでも「どちらかと言えば」ですけど) CPUパワー喰うので、嫌がるところは嫌がるでしょう。 んが、僕は 「CGIはperlの中で完結しなければならないということは ない。UNIXのコマンド使って何が悪い」 という人なので、僕的には完全にOKです。 > 「パイプ」とか「リダイレクションパイプ」ですよね。 です。openの最初や最後に|を付けると、コマンドとして 解釈されてそのコマンドが実行されるわけです。 |
BIGのサーバーどうやらnkf使わせてもらえないみたい。 しかも実験の結果、「system」もだめみたいです。 あかん、結構書き直しですな…(苦笑) |
> しかも実験の結果、「system」もだめみたいです。 え〜そんなことは…。もしsystemがダメならperlからは 子プロセス生成できないってことですよ。CGIとして動かすなら #!/path-of-perl $|=1; # これ大事。 print "Content-type: text/plain\n\n"; system("/bin/ls"); でうまくいくはずです。 > BIGのサーバーどうやらnkf使わせてもらえないみたい。 じゃあソース持ってってコンパイルしませう(70%本気)。 |
はじめまして。ミーという者です。 FreeBSDについてちょっと質問があるんですが、 私のパソコンでpppとやって、termでモデムとお話をしようとすると、 そこのところが御亡くなりになります。 あまり良く分からないので詳しく状況を書けないのですが、 考えられる原因を教えていただきたく思いまして、書きました。 よろしくお願いします。 |
ども、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の内容などがわからないと なんとも言えないと思います。 |
>あとは、環境(アナログモデム/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] と打ってみても反応しません。 とりあえず、もう一回自分で調べてみます。 ありがとうございました。 |
やってみると、 ~. ~? は実行できました。~?は文字が化けていましたが... ただ、at は反応しません。モデムってカーネルの再構築必要なんでしたっけ? |
モデムは、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/で調べてみると いいと思います。 |
ありがとうございました。 試してみると sio1 が type 16550A とでないで、たしか開けなかったと思います。 (sio0はちゃんと16550Aでした。) さっそく試してみます。 |
あの....非常に言いにくいのですが、 実はフロッピーディスクの使い方を知りません。 ひぃぃぃぃ。本当に素人なんです。 あの....フロッピーの使い方をある程度教えてもらえませんか? (もちろんFreeBSDでです。さすがに、Winでは使えます。) あ〜、恥ずかしかった... |
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に参加してますので「ここが わかりにくい」など意見を言ってくだされば、できるだけ 反映するように努力します。 |
なるほど。 フロッピーが使えました。 あの検索を使えばいいんですか。 ありがとうございました。 モデムは認識してくれないようだから ひとまず休憩としようと思っています。 つぎはgccです。 GNU GCCでしたっけ?これだとWin32のが作れるんですよね。 検索してみました。 良く分かっていないんですがね |
ちょうどFreeBSD-users-jpで同じ質問が流れてました。 # 上の名前のリンクから辿れます。 結論としては、 FreeBSDのGCCを使ってWin32アプリを作れないことはないけど、 普通はやらない。Win用のGCCを使うか、Visual C++を使った方が簡単。 ってところでしょうか。 |
初めて利用させていただきます。よろしくお願いします。 passwdコマンドを実行すると、ユーザーが存在しないという メッセージが返ってきて、パスワードを変更することができません。 passwd: user-name dose not exist /etc/passwdにもユーザはいるし、fingerでも確認できます。 passwdコマンドが壊れているのでしょうか? |
ども、初めまして。 OSはFreeBSDですか? だったら/etc/master.passwdが本当の パスワードファイルなので、そちらをまず確認されてはいかがでしょう? それから、passwd実行時には/etc/pwd.db、/etc/spwd.dbも同時に 参照されると思うので、そちらも壊れていないかチェックした 方がいいかもしれません。といっても、これらはテキスト形式では ないので、/usr/sbin/pwd_mkdbを使って作成しなおす、という ことになりますでしょうか。 |
追加。rootになって、 # pwd_mkdb /etc/master.passwd で、新しい/etc/pwd.dbと/etc/spwd.dbが、 # pwd_mkdb -p /etc/master.passwd で、新しい/etc/passwdが作られます。 FreeBSDなら、ですけど。 |
OSをきちんと明記してませんでした。すみません。 Solaris2.5.1です。 shadowファイルを、encryptして書きなおすという方法が あるようなんですが、 passwdコマンドの解決にはならないので、 どうしたものかと思っています。 |
OSをきちんと明記してませんでした。すみません。 Solaris2.5.1です。 shadowファイルを、encryptして書きなおすという方法が あるようなんですが、 passwdコマンドの解決にはならないので、 どうしたものかと思っています。 |
Solarisですかぁ…。僕はSolarisは全然知らないので、 ちょっと お力にはなれないと思います。すみません。 |
始めまして。 質問は、はじめてですがいろいろ拝見させていただいています。 そこで質問なのですが、 tarフォーマットのFDをwindowsNT上でMS-DOSフォーマットに 変換する事はできるのでしょうか? 方法や、そのようなソフトなどが有れば教えていただきたいのですが よろしくお願いします。 |
ども、こんにちは。 tarフォーマットのフロッピーは、フォーマットという概念はなく、 データがベタで書かれたものだと思います。 こういうベタで書かれたものは、UNIXなら % dd if=/dev/fd0 of=hoge % cp /dev/fd0c hoge % cat /dev/fd0c > hoge で取り出せます(ご存知かもしれませんが念のため)。 Win環境でUNIXのブートフロッピーを作る場合などは、rawrite.exeなど 使ってフロッピーにベタで書き込みますが、この逆のことをしてくれる ツールがあればいいのだと思います。 で、そういうツールはあるか、というと…わかりません(^^; rawrite.exeに読み出しモードがあるか調べるとか、Winのtarの マニュアルを調べてみる、とか…。 またまたお役に立てませんでしたね。 |
はじめまして UNIXのデータを、Windows95のパソコンで整理することはできないでしょうか? 私は、印刷会社に勤務して、パソコンのオペレータをしております。 で、勤め先なのですが、UNIXをOSとする組版機(業務用のワープロですね) を使って、印刷の版下を編集・制作しています。 ところが、社内にUNIXの分かる人間が皆無で、これまでに蓄積した膨大なデータを 効率的に管理する方法が分かりません。 一応、組版機同士はLANで結ばれ、ハードディスクやMOなども、導入されており、 編集の段階では使っているのですが、作成後のデータの管理には、役に立っていないよう です。 このため、編集後のデータはフロッピーディスクに保存して、手書きの台帳で管理して います。 すでに、何千枚ものフロッピーが、保管されているのですが、未だに、月百枚ペースで 3.5インチのFDが増え続けています。 何とかしたいと思うのですが、残念ながら、私もUNIXは全く素人です。 で、思い立ったのですが、UNIXのデータが書き込まれたFDを、ウィンドウズの パソコンで読み込み、ハードディスクに保存する方法はないものでしょうか? とりあえず、FDの読み書きと、ハードディスクへの転送ができれば良いのです。 ネットワークの構築も、プリンタの接続もいりません。 原始的な使用法とは思いますが、それだけでも大助かりです。 まことに恐れ入ります、どなたか糸口だけでもご教示下さい。 よろしく、お願いいたします。 |
ども、ごぶさたです。 遂に胃カメラ飲むとこまでいってしまったROLです。 いや、きいてはいたけど苦しいもんですね、あれは…(涙) さてさて、例のスクリプトの件ですが、 telnetで調べた結果サーバー側にnkfとtarはあることが判明。 サーバーの管理者から使用許可をいただきました。 あとはhttpdownなんですが、きちんとインストールするのであれば 使用してかまわないとのことでしたので、 httpdownをインストールして、スクリプトはそのまま使う方向にかえました。 というか、openで他のサーバーのファイルを開こうとするとエラーを起こすみたいなんですけど httpdownを使ってるのって、これのからみなんでしょうか? |
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上での 台帳管理ソフトを作ってもらう、ってのをお勧めしますよ。 # ↑不況を知らない学生の発想かも。社会に出ると上司に # 「そんなものに金は出せん。君がなんとかしろ!」 # とか言われるのでしょうか(^^; |
> というか、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です。 会社に入るとやっぱりストレス溜るんでしょうか… お大事に… |
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 ---------- ここまでくるとワシには何がなんやらさっぱり(笑) |
Makefileの LIBS= -lresolv を LIBS= に変更して もっかいmakeしてください。 > ここまでくるとワシには何がなんやらさっぱり(笑) C言語はソースコードをコンパイルするとともに、既に コンパイル済の部品(=ライブラリ)を組み合わせて(=リンクして) バイナリを作成するんです。 そのコンパイル済の部品の名前が、OSごとに少しずつ違う わけです。例えば -lresolv は /usr/lib/libresolv.aが あることを期待しているんですが、ROLさんとこのサーバには そのファイルがなかったのでエラーになったわけっすね。 |
>openで読めるのは、そのサーバ上にあるファイルだけですから、 >こうやって一度ファイルを落とした後にopenして読み込むわけです。 あ、やっぱり。 openって他のサーバーのファイルは開けないのか。 おかげで、httpdownの役割というか重要性も理解できました。 あとは各ディレクトリの設定をやり直すだけで取りあえず動くはず… でも、この脱力感はなんでしょうね? 過去ログをとるスクリプトを理解することが目的になってしまってるような気がする。 っていうか、あそこの現状を見るに、過去ログそのものの 存在の意義を見出せなくなってきている自分に気がついた… |
お師さん、こんにちは。 「その他」での書きこみを見て、ふと気がつくと… 何故か手元にFreeBSD 2.2.Jの箱が… と、いうわけで、性懲りも無くまた手をだしてしまい ました。まあ、ゆっくりとやっていきますです。 で、さっそく質問ですが…(^^; Xの画面(解像度)の事なんですが、僕の設定では 1280*1024でちょうどXの画面がディスプレイのワクに ばちっとはまるようになっているのですが、解像度を 変えると(800*600等)画面がディスプレイのワクから はみでてしまいます。ただ、カーソルを画面のワクの ほうへ動かせばスクロールするので使用するのには 別に問題はありませんが、「解像度が変わっても ディスプレイのワクにばちっとはまんねーかなぁ」 とふと思ったので、ちょっとお聞きしたかっただけです。 お師さんの画面ではそういう問題はありませんでしたか? |
あ…2.2.6Jだった。6を落としてしまった。 失礼しました。 それでは。 |
> 解像度を変えると(800*600等) これは、Ctrl-Alt-`+'などで解像度を変更した場合ですか? もしそうなら、ルートウィンドウサイズはそのままで、画面の 一部分を拡大しているだけなので、無理なんじゃないかなぁ。 あるいはウィンドウマネージャの再起動でなんとかなるかも しれませんが…。 後から試してみます。 > あ…2.2.6Jだった。6を落としてしまった。 高級なパッケージをお持ちで(笑) > でも、この脱力感はなんでしょうね? 興味のないことを無理にやってても つらいだけなのは 十分理解できますので、やめちゃってもいいですよ。 こんなの義務でも何でもないんだし。 どーでもいいことやってても、それはただの時間の浪費です。 どうなさるかは おまかせします。 |
なるへそ。なんとなくわかった(ような)気がします。 >これは、Ctrl-Alt-`+'などで解像度を変更した場合ですか? そうです。だって、設定ファイル(でしたっけ)等の いじりかたがまだよくわからないので、お手軽にでき る方法しかやってませんのですよ。 でも後は自分でなんとかなると思います。 (でもいつになることやら。過去ログのリジェクトログ 付きの文を無理やり見る方法を教えてもらった時は 教えてもらってからできるまで○ヵ月かかってたしなぁ… あ、やべっ!また怒られちゃう(^^;) ご教授どうもでした。 |
>どーでもいいことやってても、それはただの時間の浪費です。 >どうなさるかは おまかせします。 ん〜、取りあえずスクリプトが動くようになるまで、 がんばってみるつもりです。 ただ、スクリプトがマトモに動いたからといって、 ログをとるかどうかはそのときの気分次第っていうことで(笑) だってすでに目的と手段が入れ代わってるんだもん(爆) |
> だってすでに目的と手段が入れ代わってるんだもん(爆) A4集計を始めた理由 1. httpクライアントが書けたから。 2. POST形式のデータ送信方法がわかったから。 3. こんなことができるんだぞ〜と自慢したかったから。 最初から動機が不純でした(笑) |
UNIXでの日本語環境のことしりたいです! |
どもども、ROLっす。 g2のその後ですが、スクリプト自身は動いてるようなんですが test-logディレクトリに1998-12-19.tgzと testbbs-log.htmlの2ファイルはできてます。 でも、できてるだけ。 容量がそれぞれ1kと0K。 どうやらhttpdownでうまく落とせてない模様。 おっかしいなぁ??? プロキシがおかしいのかな??? プロキシってどこのでも問題ないですよね? |
$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なら、どのディストリビューションか などで結構違いますので、これだけではなんとも… |
User Agent統計を見て… HI-UXは、僕です(^^;。 なんでも日立のHI…なのかどうかは知りませんが、 とにかく日立が関係してるようです。 そんだけしか知らない…(汗) また、ブラウザのchimeraも僕です(たぶん) なんかいろいろ試したかったもんで。 いや、だからなんだってわけじゃあないんですが。 |
&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が何なのかが全然分かってないので、手がつけられないんですが… |
> とにかく日立が関係してるようです。 どうもです。早速更新しました。 > が問題なんでしょうね…多分。 事前に ~/test00 と ~/public_html/test-log をmkdirして おけば大丈夫だとは思うんですが、どうでしょう。 > の-fが何なのかが全然分かってないので 本買いましょ〜。 ファイルが存在するかどうかのチェックです。/hoge/file というファイルが存在すれば、-f "/hoge/file" は真に なります。 # 他には # -f ファイルがあるか # -d ディレクトリがあるか # -r 読み込み権限があるか # てな感じです。あと20個くらいはあったはず。 既にその日のアーカイブが存在する →少し前にg2を実行した →いちいち全部落とすのは時間がかかる →事前に展開しておけば、時間の節約 というわけで、動作チェックをしている場合は # if ( -f "$main_dir/$1" ){ next; } の行のコメントをはずすと、既にあるファイルは落とさなく なるはずです。 今日の分をもちまして過去ログ作成は終了しますので、 あとはROLさんにまかせたっ。ではではでは。 |
すんません、お師さん。原因はそれじゃないみたいです。 ちょこちょこかえて、「$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が巧く働いてないって事ですよね? これはなんでなのかわかんないっす。 もういいかげん、いやになられたとは思いますが、すみませんが ご教授くださいませ。 |
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を設定してやるとどうなりますか? |
追加 それぞれ出来た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には…? |
えっと、www.cs.gunma-uのproxyには、外部の人は接続できないはずです。 いつも使っているproxyを設定してください。 もしサーバ上から % telnet www.sega.co.jp 80 GET / HTTP/1.0(リターン) (もいっかいリターン) として、HTMLが出力されるならproxyは必要ないはずですが、 もしダメなら適切なproxyを設定する必要があります (外部のポート80宛のパケットは通さない設定なのでしょう) |
% telnet www.sega.co.jp 80 GET / HTTP/1.0(リターン) (もいっかいリターン) 実行したらHTMLが出力されました!!! ってことで、変数の定義の所の $proxy =以下と &download内の print OUT "level 1\n"; print OUT "httpproxy $proxy\n"; の2行を削除して、やってみます!!! |
はじめまして。 えっと、学校の端末でzipを解凍することはできないんですか? そもそもunixではzipはだめなのですか? おしえてください |
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 などで探せます。数分待てばいくつか表示されるので、お好きな ものを使うといいでしょう。 |
やっと…、やっとDLまではこぎつけました、はぁ長かった… まぁまだまだ問題は山済み状態なんですが、一番大きな山はこえたのだと思ってます。 で、残された、私ではなんともならない問題… そう、自動化です。 以前、某氏から触りの部分だけ、聞いたはずなんですか さっぱり忘れてます。 なので、どういうファイル名のファイルか、 そしてそのファイルの中身でどういう指事をすれば 任意のCGIを任意の時間に自動的に動かすことができるのか… これを御教授ください。 |
まずは 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サーバは関与しませんから、プログラムとか スクリプトと言った方がいいですね。 |
お師さん、いつもすみませんです。 お教えいただいた crontab とその説明ってFreeBSDのですよね。 BIGのサーバーは Linux 2.0.36で動いてるようで まず「~/.crontab」って名前でファイルがおけなかったので 適当に名前を変えて、% crontab script を実行してみましたが 「bash: /usr/bin/crontab: Permission denied」っていわれて、ダメです。 んで、「whitch crontab」で crontabコマンドを探すと 「whitch: command not found」っていわれちゃいます。 どないしたらよいのでしょうか? あぁ、もうまったく手が出ない世界にアシを突っ込んでるな… |
僕の場合.crontabというファイル名にしているだけで、 他のファイル名でも全く構いません。 > 「whitch crontab」で crontabコマンドを探すと whichですよね。whitchじゃなくて。 > bash: /usr/bin/crontab: Permission denied ん〜、とりあえず、 % ls -l `where crontab` (「'」ではなく「`」で囲んでください) と % ls -l `which crontab` の結果を教えてください。あと、 % id の結果も。もしかしたらbigではcronは使えないように なってるのかもしれません。その場合は、管理者に お願いするしかないです。 |
え、それぞれの結果です 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) てな所ですが、どうなるでしょ? |
もいっかい。 % ls -l /usr/bin/crontab でお願いします。 |
ls -l /usr/bin/crontab -rwx------ 1 root bin 9008 Aug 24 1997 /usr/bin/crontab* って結果です。 ってこれって、オーナーしか動かせないって事…(涙) |
その通りです。管理者にお願いしてみましょう。その結果ダメだと 言われたら残念ながらcronは不可、ということになります。 # ソース持ってってコンパイルとか…したいですか? |
だ、だめです、お師さん >自動起動系のものはサーバーの保守の関係上、 >いかなる理由があろうとも一切禁止です。 だそうです(涙) MacでAppleScriptで毎日サーバーにTelnet接続して スクリプト起動させるようにする…しかないか? (出来るかどうかは解らんけど…) |
うーん、仕方がないと言えば仕方がないですね。管理者が そういう方針を取ることは理解できます。 結局は6:30に起動するプロセスがあれば、その中で g2を実行すればいいわけです。内部にきっかけとなる プロセスを用意することができないなら、外部から 呼ぶという手もあります。AppleScriptも一つの手ですね。 他には ・6:30に自動的にbigの中のあるwebを取得するように して、その中でCGIを動かしておく。そのCGIの中で g2を実行(CGIは普通nobody権限で動くので、そこら へんに問題あり)。 ・6:30に自動的にbigにメールを送る。.forwardに メールが届くとあるプログラムが起動するように しておいて、現在時刻が6:30付近ならg2を実行 とかとか。 |
こちらでは、はじめまして。 「ネットワークプログラミングの基礎知識」を読ませて頂きました。 で、本題の方は、向こうで話題にしてしまったので(^^; ちょっとズレた質問で申し訳ないのですが、「inetdの役割」で 「UNIXでは現在実行中のプログラムのことをプロセスといいます」 という定義がありますよね。 この「プロセス」というものがもう一つよく分からないのです (inetdの説明上では理解できるんですが…)。 「実行中」というのは、1つのプロセスのプログラムがexecで 切り替わった場合も、プロセスとしては同じだという意味で 受け取っていいのでしょうか? また、プロセスというのは、カーネルがスケジュールに従って 実行時間を割り当てる単位と考えてもいいのでしょうか? それから、UNIXではプロセスを生成できるのはforkだけだと聞きますが、 forkって親プロセスのメモリイメージとレジスタを丸ごとコピーする んですよね。この場合、子プロセスが直ぐにexecでプログラムを切り替えても、 メモリ上には親プロセスのコピーがそのまま残るんでしょうか? (execで切り替わったプログラムが終了しても、子プロセスがまだ 実行を続けるかも知れないので、こんなコピーの残骸で一杯になりそうな 気がするのです…) それと、マルチプロセスと関連のありそうな言葉として、タスク、スレッド、 コンカレント、コルーチンなどとの相違も教えて頂ければうれしいです。 スレッドは、プロセス内プロセスみたいなもの…? コルーチンは、Windowsの3.1以前のアプリケーションみたいなもの…? なんか、ネットワークとぜんぜん関係ないなぁ…すいませんです(^^; |
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の用語かな と思うんですが、結局ここらへんはプロセスと呼ぶかタスクと 呼ぶかの違い、単純に呼称の違いではないかと思ってるんですが…。 コンカレント・コルーチンは初めて聞きました(^^; |
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するのも疑問だったのです。 |
ちょっと間違いです(^^; >execは戻らないんですね(MS-DOSとごっちゃにしてたかな?) MS-DOS でも exec は戻りませんでした。 (いずれにしても、単一プロセスのMS-DOSの感覚が なかなか抜けないみたいです…(^^;) |
AppleScript対応したtelnetソフトがないぃぃぃぃ… ってわけで、ここ1週間ほど、朝6時頃おきて、サーバーに繋いで コマンド打ち込んで…をくり返す毎日でございます。 ブラウザ上からCGI直接指定して、うまく動かせるようにできんかな… だったら、毎朝自動的に立ち上げてほっぽっときゃいいし(笑) |
下、ワシの発言です。 つい、名前のとこに「タイトル」を入れてしまった(笑) |
tarでファイルを一つにまとめて出来るファイル(% tar xf〜で指定)を直接いじって大丈夫でしょうか? ファイルの書き換えが面倒なので「% tar xf〜」で複数のファイルを一つにまとめ、一括して特定の文字列を置換したあと、 元に戻す…ってのをやりたいんですけど? |
すんません、お師さん。 下の質問は無視ぶっこいてください。 実験の結果、だめな事が立証できましたわ。 |
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にファイル自体を書き換えるオプションがあったかな? |
># perlにファイル自体を書き換えるオプションがあったかな? perl -pi.bak -e "s/a/b/g;" file[0-9] では? |
> perl -pi.bak -e "s/a/b/g;" file[0-9] うーん、簡単ですねぇ。ちなみに僕は最近までオプションは -wと-e しか知りませんでした。でも最近-cを覚えました(^^; 分厚いマニュアルをめくってオプション調べるより自分で書いた方が 早いんで、なかなか覚えられないんですが、長い目で見るとさっさと オプション覚えた方がいいんでしょうけどね…。 # 一番悪いのは、青ラクダ本の目次。「オプション一覧」とか # 「スイッチ一覧」なんて項がない。どこに書いてあるかと # 言えば「コマンドインタプリタとの協調」。毎回オプション解説を # 探すのに苦労してます。…ま、言い訳ですな(^^; > ブラウザ上からCGI直接指定して、うまく動かせるようにできんかな… CGIはnobody権限で動きますので、CGI経由で作られるファイルは 全て所有者がnobodyとなります。ファイル消せなくなってあわてない ように(笑) |
># 一番悪いのは、青ラクダ本の目次。 青いラクダは、確かに読みづらいですよね。 私の場合、普段は「日本語 perl texinfo バージョン 4.0.19.2」のプレーンテキ スト版をオンラインマニュアルとしてを使ってます。高尾直弥さんという方の訳 ですが、リファレンス部分は赤いラクダとほぼ同内容だと思います。 ただ、今使ってるものはいろいろイジってて配布条件(GNU)上問題があるのと、 手元にオリジナルが見当たらないので、ちょっと探してみましたが、根性がない ので↓のようなHTML版しか見つけられませんでした(^^; http://www.cec.co.jp/usr/hasegawa/Docs/perl-jman/index.html でも、どこかに必ずオリジナルのtexinfo やプレーンテキスト版もあると思いま す(^o^;ゞ WindowsのヘルプやHTMLよりも、やっぱりエディタで正規表現検索が可能な普通の テキストが使い易い… |
日本語 perl texinfo の1頁ものがありました。 http://main.ipc.fukushima-u.ac.jp/fdai/man/perl.html テキスト版の前後を<pre></pre>で括っただけなので、ブラウザではちょっとヘンになりますが、 直ぐにテキストに戻せると思います。 |
どうもです。早速GETさせていただきました。 これでちょっとは賢くなれる…かな?(^^; |
はじめまして(^^; Perl関係で質問なのですが良いでしょうか。 Perlのみで画像(画像ファイル)の生成って出来ないんでしょうか? いろいろ書けるほど情報が集まってないので、簡単ですがこれで。 よろしくおねがいします。 |
はじめまして、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 をどうぞ。英語ですが使い方は簡単にわかるはずです。 |
はじめまして、山口といいます。 いきなりの質問で失礼ですが、.forwardの中にメールアドレスを書くと、届いたメールはその書き込んだメールアドレス当てに転送されますが、その時もとのメールアドレスでもみれるようにするにはどうすれば良いでしょうか。 要するに転送する時に自分のところにオリジナルは置いておいて、そのコピーを転送するというぅような形にしたのですが。 どなたかアドバイスを下さい。 |
はじめまして 68userさん M.Masudaです。 いや〜こちらのページにはじめてよらせていただきましたが ずいぶんと勉強になります。 先ほど、CGIスクリプト関連をDOWNしたのでこれからおいおい 解析して勉強させていただきます。 にしても、PerlだけでなくUNIXやプロトコル・ネットワーク 関連の情報量には驚くばかりです。 これからも、宜しくお願いします。 ところで本題ですが。 自分で実験してみればいいのでしょうが、ファイルロックの アルゴリズムには、一般的にflockを採用している物や、ロッ クファイルを作成してスクリプト自身がロックを管理してい る物が有りますが、今までの68userさんの経験上どういう手 法が一番効果が高いでしょうか。 あと、下の山口さんの質問は私も興味ありです(笑) 本屋さんでオライリーのsendmailかmailの本でも買って勉強 すればいいのでしょうが、それだけのためにはオライリーシ リーズは高すぎる!!! ここでうなずいた方は、沢山いるはず(爆笑) #68userさんはレスの書込みの時間が遅い(早い?)ですが何 #をしてる方なのでしょうか? そろそろ中級に足のかかってきた私ですが、宜しく御教授下 さい。 |
はじめまして>山口さん、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さんはレスの書込みの時間が遅い(早い?)ですが何 > #をしてる方なのでしょうか? ははは、生活リズムが不規則な ただの学生です(^^; |
どうもありがレスとうございます。 .forwardの設定早速指定してみます。 >完璧な方法があれば僕も知りたいです(^^; そうですか、まだ「これ!」ってセオリーは無いんですね(^^ゞ 今、flyを使ったカウンターを作ってるんですが、残ってしまった ロックファイルを削除する方法を考えてみます。 今までCUIはDOSしか触った事が無いのでUNIXのTABや矢印キーには 非常に驚き、非常によく作られたUNIXのシステムに感心しています。 おかげでキータッチがだいぶ早くなりました。(^_^)V この掲示板のタイトルに有る「UNIX,CGI,ネットワークの...」 は、今の私が求めているばかりで、ここは情報の宝庫です。 学生という事は、私よりだいぶ若いのにかなりの知識を持って いるようで恥ずかしいばかりですが、ぜひまた何かあったら教 えて下さい。m(_ _)m 宜しくお願いします。 |
訂正 誤:どうもありがレスとうございます。 正:どうもレスありがとうございます。 (^^ゞ |
68userさんご回答ありがとうございます。 68userさんの言う通りにやってみたところ、 ¥hoge,foo@bar.comのhogeにはメールが残らず、 すべてfooに転送されてしまいました。 何が行けないのでしょうか? hogeの前は「エンマーク」でいいのですよね。 |
僕が現時点で一番いいと思う方法は、シンボリックリンク自身に プロセス番号の情報を埋め込み、もしリンク作成できなかったら リンク先を調べて、さらに「/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の前は「エンマーク」でいいのですよね。 全角の「¥」ではないですよ。半角の「\」です。 エンマークかバックスラッシュかは、表示される環境によります。 |
>たぶんセオリーはあるんでしょうけど、僕が知らないだけです(^^; いやいや、これだけ知ってれば十分じゃ....この概念は私的でした ね(^^ゞ 私のプログラミングは、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を沢山 書いて、ブラウザのキャッシュを無効にしてリロードです。 #本当にこれでいいのか解からないけど、他に手段を知らない(^^ゞ ではまた。 |
>> $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に関しては全くの素人です(^^; |
詳しい解説ありがとうございます。 いまいちおバカな頭で理解できないけど、 local と my の違いは、 サブルーチンからさらにサブルーチンに呼ばれた時に。 local = 前のルーチンの値を保持する。 my = 最初のサブルーチンを呼ばれた時(定義した時)の値を示す。 と、解釈していいのかなぁ? もしそうなら、具体的に使う時は再帰呼び出しの様な使い方を した時に違いが出る。ということでしょうか? それならmainルーチンから普通にサブルーチンを呼び出した時 (初期化ルーチンの様な)さらにルーチンを呼び出さなければ、 同じ結果ですね。 #localやmyで指定されたサブルーチン内の変数に当てられた分の #メモリは、そのルーチンが終了すれば開放されるのだろうか? >$a=$b=$c=100; は理解できました。 やっぱBASICが最初だと、Perlの構文は簡単に記述できるけど、 理解に時間がかかる!、単におバカなだけだったりして((((^^; >というわけで、\&finishと書くわけです…と青ラクダ本に 何ページに載ってます? よく言う青ラクダ本は持ってますが、あんまり読んでると眠く なるので、必要な部分だけ拾い読みしてます。(^^; #にしてもラクダ本って、何が何処に書いてあるのか解かりづら #い...、しかもたまに書いてある英語のジョークが、真剣に読む #と腰を砕くし....(; ;) 私は、恥ずかしいけど請け負いでホームページ製作をしてるんで すが、製作作業と勉強に掛る時間が同じ位です。(>_<) >こんな変なものには絶対手を付けまいと誓いました(笑) すいませんこんな変なもの作ってます(爆) Javascriptは、クライアント側のプログラムなんで、アクセス環 境で動いたり動かなかったりなので、大手サイトやアメリカのH サイトで使用している物を、見ながら使ってます。 これは無断コピーの意味ではなく、「沢山のアクセスのあるサイ トで使われているコードはエラーが少ないだろう」を前提にして ます。もちろんそのまま使うのではなくコマンドの使われかたを 流用するだけだけど。 一応ネスケとIEは、3と4のバージョンで動作確認しながら作 ってますが、他のOSは環境が無いのでどうにもならないし..。 私のページも、68userさんの環境からアクセスすると、最悪かも しれない。(^^ゞ 暇なら来た時BBSに書込みでもしていって下さい。 |
ちょっと横ヤリです(^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さんの仰るように ( ) が不要になります。 |
手元の青ラクダ本では、6.2.1 シグナル(P.389)に書いてありました。 あとmmさん、どうもです。 ああ、もうちょい長く書きたいけれど、風邪がつらいです。 時期が時期だけにインフルエンザかなぁ…。発熱・頭痛・ 体の節々の痛み・せき、などなどフルコースです。 というわけで、今日はこの辺で…。 |
あっ、おだいじに>68user さん …のいぬ間に、ちょっと訂正(^^; 副作用という用語は、単純な代入式では使わないようです。 また、「= は b+c の値を返す」と書きましたが、正確には a に代入した値を返すようです。 つまり、a と b+c の型が違う場合は、a の型になるそうです。 |
う〜ん.... やばい!あたまが... ばくはつしそうぅ... Perlだけでも、CぢゃなくてBASICから入ったので混乱してるのに、 やれJavaScriptだ、DHTMLだと私の頭はいま、知恵熱で300度位です。(笑) もう少し時間を掛けて、勉強してみます。(>_<) mmさんありがとう。 #名前が似てますねぇ(^_^)V ここの常連さんは、レベルが非常に高いのでお勉強には最適です。 言い訳だけど、青ラクダ本はホント辞書の様なので、初心者には 何かの事をさせたい時に、それがどこに書いてあるのか探すのが 一苦労です。(国外のジョークはそれを理解するのにエネルギーが 必要なので、訳者に削除して欲しいと思うのは私だけ?) やっぱ一度、全部を時間を掛けて読破しないと..... う〜ん時間が無い... 誰か一日を30時間にするライブラリ知りませんか?(爆) ちょっと忙しくなってきたのでしばらく来ないかもしれないけど しばらくしたら、またわからない所教えて下さい。>ALL それでは。 68userさんお大事に! |
ちょっと変な質問ですが、解かれば教えて下さい。 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が悪いのか、それともネーム解決 が悪いのか私には解かりません。(^^ゞ もしこの現象が解かれば教えて下さい。 サーバー設定が原因でありませんように...アーメン(^^) |
>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^;ゞ |
★再再訂正(^^;;; JavaScript の var って、ブロックスコープじゃないんですね。 試してみたら、単に関数内でローカルなだけでした(^^; それと、awk も、仮引数リストの変数が関数内でローカルなだけで、 これも関係ありませんでした(^^;; マジメな話に慣れてないので、訂正が多くってスミマセンですm(_o_)m |
どもども。なんとか熱も下がったのですが、もうちょい安静にしときます。 > あとlocalとmyは > (snip!) > ということでどうでしょう? 実は言葉でうまく説明することができなかったので、 サンプルソースでごまかしたというのはナイショです(笑) M.Masudaさんからメールをいただきましたが(500エラーで 書き込みできなかったそうで)やはり >> IE2はバーチャルサーバーのドキュメントを参照できない事になります。 ということのようですね。 メールからの引用ですが、 > 「もうIE2なんて使ってる人いないよ」と言っても、それを実現して > くれなきゃ困るなんて言われるんで、とほほ状態です....。 社会とは理不尽なところですね(^^; ところでM.Masudaさんのwebですが、奥深くまで入っていったわけ ではないですけど、FreeBSD2.2.7+NC4.04で、Javascriptのエラーはでませんでした。 > 私のページも、68userさんの環境からアクセスすると、最悪かも > しれない。(^^ゞ というわけでご安心を。まぁ もしエラーになったとしても、minorityの 宿命ということであきらめてます。 # 別にわざとエラー起こしているわけではないですし。 |
500エラーで書けなかった内容です。 ====================================== どうもありがとう。影の68userさん(^^)/ ブロック...そう今日読んでたとこに有りました。 ああいった使い方は、Cとかに多いみたいですね。 なんかPerlて、底無し沼の様に奥が深くって、ちょっとビビッてま す。(笑) 個人的には、プログラミング好きなんでいろいろ試したいし、構文 の柔軟さは、すごくうれしい!\(^O^)/ だけど、ホント誰かrequireできる、一日を30時間いや48時間くら いにするルーチン書いてくれないかな(笑) 【86.9%本気】←どっかで見たなぁ Webで使うCGIでする事なんて割と簡単なので、今のレベルで良いか もしれないけど、この業界で生き残るにはちゃんと勉強せねば! と、最近つくづく感じてます。 #最終的にはDBとの絡みが有るだろうし IEの件はちょっと情報が入ったのですが、やはりだめブラウザのレ ッテルが張られているようですね。 まだ確認は取ってないですが、IE2はどうもバーチャルが見れない バグがあるらしいです。(未確認なので信用しないように!) サーバーを管理している人と連絡をとって、いくつか対応策を思案 中です。 「もうIE2なんて使ってる人いないよ」と言っても、それを実現して くれなきゃ困るなんて言われるんで、とほほ状態です....。 JavaScriptも結構面白いんだけど、環境によってブラウザの対応レ ベルが違うので、バージョンが違うとエラーが出たりはよくありま すね。 そろそろインターネット界も仕様をもっと統一してくれると、私み たいにこの世界で生きている人もやりやすいんだけどなぁ。 ブラウザ毎のルーチンって具合で、各ブラウザに合わせたスクリプ トを作ってると、たまに暴れたくなります。(^^ゞ でもこういう場所があって、私みたいな人間にはとても助かります。 なんか愚痴っぽくなってしまいましたがご勘弁を!(^^)/ ==================================================== なんで500エラーが出たんでしょうか? >というわけでご安心を。まぁ もしエラーになったとしても、minorityの >宿命ということであきらめてます。 私のページは、右側の部分(個人的な内容)でスクリプトを多用しています。 特にMusicとFavoriteのなかの部分で使ってますが、くだらないから見る 価値ないかも?(^^ゞ >原因は、IE2 だけが Host: ヘッダを送ってないということかな…? 通信パケットを見たら、全くそのとおりでした。 IE2のバカ! でもこれで、私の範疇では無い事が解かりましたので一安心です。 でわまた。 |
@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とかと異なり、関数や手続きを入れ子にできるんで、 親のローカル変数との衝突を避けるために、もっと積極的に利用してるかも知れません。 |
>> 500エラーで 書き込みできなかったそうで > あれま…そんなことが… ログを見ると、ここのwwwboard.cgiは最近2ヵ月で20回くらい 500エラーが起こってます。ここは無改造なのですが、ロック用 ディレクトリが残ってしまうと500エラーになってしまうので、 はやいとこ改造せねばいかんなと思いつつ…めんどくさいし〜。 # ログがどんどん増えていくのもなんとかしないと。 > perl の場合は、foreach $i (LIST) の $i がループ内でローカルになりますね。 それは foreach my $i (LIST) とかの場合では?と思いつつ試してみたところ… foreach $i (LIST) でも $i はローカル変数扱いなんですねぇ。知らなかったっす。 |
> 500エラーが起こってます。ここは無改造なのですが、ロック用 > ディレクトリが残ってしまうと500エラーになってしまうので、 他のスクリプトで、ロックファイルのタイムスタンプを調べて、 10分以上前なら削除、てな方法がありましたよ。 ># ログがどんどん増えていくのもなんとかしないと。 レスキューさん所みたくページ表示行数を決めて、[次ページ] なんてしたら? #言うだけは簡単なんだよな〜(^^; >でも $i はローカル変数扱いなんですねぇ。知らなかったっす。 自分もさっき実験してはじめて知りました。(*_*) >JavaScript は、私も、IE/NN間の相違に加えてバージョン間の違いも多いので、 >自分でちょっと使うとき以外は、あまり深入りしないようにしてます。 >でも、M.Masudaさんの場合は、そんな悠長なコトも言ってられないのかな(^^; 本来ちゃんとした手続をすればある程度、エラーを減らしたり出来るらしいですが 、私もそこまで出来てませんし今のところクライアントにはわざといろいろと難し い説明で逃げ回ってます。(^^ゞ #でもDHTMLのスタイルシートやレイヤーの方がもっとたちが悪いですよ(互換性で) 厳密な処理を必要とする部分はCGIを利用して、それ以外の処理をJavaScript等に 行なわせる。といったところでしょうか。 ところでmmさんて何者?(^^ゞ >ワタシの文章も分かりにくいとは思いますが、実は最初に書いた初版は >もっとひどくて、自分で読んでもワケ分からんモノでした(^^; >(一応、アレは改定第2版(^^;) 何か執筆していらっしゃるんですか? |
BBSに関しては、本気でちゃんとしたシステム作るつもりは ないんで、まぁ…こんなもんで(笑) # 引用の色変えはmmさんとこのBBSのマネ(^^; あとは何かありますかねぇ…。タグの自動補完とか二度書き禁止とか… うーん、いまいちそそる機能がない。 |
もいっちょテスト! |
ああやっぱりやだなぁ。 メッセージ数はいつでも変更可能にしたいなぁ。 …よく考えずにいじると後悔するという、いい例でした(^^; |
>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>とかが入れ子にならないし、引用符の中で ">" を使われると、 正規表現でのタグの切り出しができないし… |
> <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で組もうとした事があるけど、エラーから回復させる事が # できずに(=文法エラーにぶつかると止まってしまう)挫折しました(^^; |
ちょっと質問!です。 すいませんシェルコマンドの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) ##前から思っていたけど、英語圏で生まれていたらもっと詳しくなっ ##ていたろうな。だってマニュアルって英語だもん(^^ゞ |
>おろ、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の方を独自の切り出しルーチンに替えればいいのかな…? |
crontabコマンドについて質問させてください。 あるプログラムAをcrontabで自動起動させたいのですが、 そのプログラムAはCシェルでしか動きません。 そこでcrontabで呼出すシェルスクリプトBを作成し、Bの先頭で Cシェルを指定し、次に必要な環境変数を設定し、 次にAを実行するようにしたのですが、 うまくいきませんでした。 Bにenvをいれて、環境変数を出力するようにしたら、 path等がshのデフォルトのままでした。 ちなみにAはオラクルに接続しSQL処理をおこないます。 どなたかご存知の方がいらっしゃいましたら、お知恵をお貸しください。 |
> 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 とか。 |
> yacc は私も挫折しました…ただし、68user さんよりはもっと手前でですが(^ こっちも挫折は早かったですよ〜。 http://X68000.startshop.co.jp/~68user/tmp/html.l http://X68000.startshop.co.jp/~68user/tmp/html.y うーん、短いなぁ。今見ると、どこがどういう意味なのかさっぱり(笑) |
どうもありがとう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ポートにアクセスする際に使用する、クライアント側の ポートの番号です。 私の使用しているパケットモニターで確認しました。 クライアント側アプリケーションが、通信の際にソケットを生成するとその時に自動的に割り当て られるみたいです、アプリの処理方法はそれぞれでなんでしょうが、通信セッション(っていうのかな) が終わる毎にクライアント側のポートが変わりました。 #まじめに勉強した訳でなくパケットモニターでの通信内容をみて書いてます。(^^ゞ |
>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ではトークンを正規表現で切り出しますよね。 だから、<>内をまとめて切り出すのは難しいような気がするのです。 それとも、<>内はまた別のルールでトークンに切り分けるのかな…? |
> REMOTE_PORT どうもです。これを設置したのは去年の6月ですから、その当時はよく わかってなかったようですね。ちなみに当時は、 「サーバ側はポート80で待っているが、一旦コネクションが確立されると、 次のクライアントのために一刻も早くポート80を開けなければならないので、 新しいポートが(CGIに)割り当てられる。CGI側はそのポートを通じて クライアントと通信しなければならない」 のではないかなぁ…と思っていた記憶があるような ないような。 > でもうちの環境ではLinuxなので適当に、コンバート?しながら見てみます。 いや〜、おそらくLinuxにもjmanはありますよ。僕はLinux知らないけど、 ないはずがないと思います。 > ただ、lexでは"<BODY>"とかをトークンとして扱ってますよね。 どうなんでしょう? 僕は挫折した人間なのでよくわかりませんが(^^; weblintなどもperlでやってるんで、HTMLチェッカはyacc&lex向きじゃ ないのかもしれませんね。 |
>weblintなどもperlでやってるんで、HTMLチェッカはyacc&lex向きじゃ >ないのかもしれませんね。 なるほどー 文脈自由文法とかがちゃんと分かってないので、まだ?なんですが…(^^; Cで言語処理系のプログラムを書く機会があったら、またちゃんと勉強しようと 思いつつ、そのままになってるんですが、Windowsなんかを使ってるとどんどん 遠ざかって行くような気がします(^^;;; 日本語マニュアルもありがとうございました。 とりあえず、ウチのサーバーのmanの出力は読みやすくはなったのですが、 やっぱ日本語だと助かります(^^; |
68userさんへ ありがとうございます。 参考にさせて頂き、もうちょっとやってみます。 |
こんにちは。 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 いやーパケットモニターで生の通信内容見てると、結構勉強になります セキュリティーとかいろんな事の考え方も変わりますね。 |
つまり、処理結果を小だしに表示させてタイムアウトを防ぎたいわけですね。 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使いの方いません?(^^; |
>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 |
こん**は >>j*シリーズは私の探したところ見つかりませんでした。(; ;)x2 こちらかと http://www.linux.or.jp/jman/ LANGがja_JP.ujisなら /hoge/man/ja_JP.ujis以下検索しますよーん |
どうもです、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 |
すいません、今度は名前の書き忘れだ〜 下の書込みは私です。 m(_ _)m |
すいませんも一つ質問です。 /var/log/messagesに、 sun last message repeated 3 times というメッセージが5分置きくらいに出力されるんですが、 これって何か分かります? #質問2でした。(^^ゞ |
>>で、そういう場合はnphスクリプトを試してみてはいかがでしょうか。 > やってみました。おかげで思うとおりの結果が得られました。 おお、そうですか。僕はnphは一度も試したことはなかったりするんですが…(^^; > sun last message repeated 3 times 普通に英語を読めば「前回と同じメッセージが3回出力された」ということで、 /var/logl/messagesのその前の行を見ればいいと思います。 # と、ずっと思ってたんだけど違うかな? |
わたくしUNIX初心者も初心者というかwin95ユーザでありまして プロバにtelnetで繋いでUNIX気分を味わっているもんでございます。 まったくwin95とは違いまして「こんぴゅーたをさわっている」って いう気分を満喫している(だけ)ところでございます。 コマンドがいろいろ載っていて、たのしゅうございます。 これからも続けてくださいましね。たよりにしております。であ。 |
ネコミでの書き込みがなんかおかしい とほほ ブラウザかえようかな 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で日本語表示出来なければ管理者に頼むしかなさそう(笑) |
> コマンドがいろいろ載っていて、たのしゅうございます。 どもども。「ここがわかりにくい」などのご意見がありましたら ぜひ教えてください。 > ブラウザかえようかな > 68user(X68K?)さんはふだん何つかってます? 学校ではNN3.04、家ではNC4.04です。まぁ一長一短ですねぇ。 早くMozilla5でないかな…。 |
>だれも管理してなかったりして。 ありゃ・・そうだったんですか となるとログのメッセージは・・・ |
> となるとログのメッセージは・・・ 全ユーザがrootになることができて、みんなでよってたかって管理してるとか(^^; |
>全ユーザがrootになることができて、みんなでよってたかって管理してるとか(^^; むむむ・・何かトラブッてそうですね(^^;;; |
どうもです。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; とか。 |
> そうなんです。私が一応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の必要性がないような気がするんですが、 何か理由があるのかなぁ。 |
>前にクラックにあっているサーバーが直ぐ近くに 物騒な話ですね。こうなると再インストールしかないです。 近くのサーバーもやられてる可能性が高いような気がします。 とりあえず/etc/inetd.confの不必要なエントリをコメントアウトして killall -HUP inetd あと/etc/hosts.allow、/etc/hosts.denyでtcpwrapper の設定をするのが吉かと telnetの代わりにsshを使ったほうが心臓に良いです。 たしかtera termを拡張したttsshってやつがあったと思いますが #もう対策されてたならすみません |
やですね〜。クラックされるのは。 ちょっと前に知り合いのLinuxがクラックされてました。 すぐに気づいて、そのとき作成されたらしいファイルを 消したんですが、数日後また同じようにクラックされて しまい、とうとうサーバをFreeBSDに代えてしまいましたとさ。 クラック自体より、どこの穴をつかれたのかがわからないのが 一番恐いですね。 |
どうもです。 いろいろ助言下さってありがとうございます。 >こうなると再インストールしかないです。 もちろん既に、マシンごと新しくなってます。 >クラック自体より、どこの穴をつかれたのかがわからないのが >一番恐いですね。 これが一番恐いのだけど、最近リモート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にしたら何か問題はあ りますか? |
> #愚問でしたね。こんな公の場で書けるわけないですね。(^^ゞ いや、僕は方法を知らないので…(笑) > セキュリティー対策の物ですか? 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化されていないのが不思議。 # ディストリビューションにもよるのかな? |
みなさんの話を聞いてるとびびってきました(苦笑) クラッカーに目つけられると安眠できなさそう インストールしたらすぐtripwireいれたほうがいいのかな Red Hatって見つかった穴を公開するらしいですよ たぶん新しいの買えや(笑)ということなんでしょうけど >Linuxはデフォルトでshadow化されていないのが不思議。 そう言えばIRIXは最近まで・・・ >IPがunknownって出る奴が有るのですが これ何なんでしょう 知りたい(爆) >管理者が居なくて、ほったらかし状態。 仕事やりながら管理するってきびしいと思いますよ |
こん**は。 >>管理者が居なくて、ほったらかし状態。 > 仕事やりながら管理するってきびしいと思いますよ 本来私の管轄では無いので最近本末転倒してますが、他に管理している 人間がいないので、勉強がてらにいろいろな情報を物色しています。 #アー目が痛い! >>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内でのアクセスなんであまり必 要性が無いですが、これも時間が出来たら試験的に導入してみたいですね。 |
>Feb 8 04:15:36 ns in.fingerd[2730]: refused connect from unknown 見たことないです。 #といってもアタック(スキャン)自体あまりないから知らないだけ パケット覗いてみては? >telnetの23はルーターで塞いであるし ・・・内部犯行・・なんて無いですよね(笑) |
どうもです。ABCDEFGさん。 >・・・内部犯行・・なんて無いですよね(笑) ははは、それは無いです。 mad.leenux.com ってとこと ugly.bastard.co.uk の2ヶ所から 進入してます。 そのクラチャンですが、ちょいと弄られた前のディスクの中を覗いて見たら、 隠しディレクトリに、いくつかのクラックソフトをお土産においっててくれ たみたい。(^^ゞ #俺ホントはこんなことやってる暇無いんだけどなぁ... #まいっか! 入られてた時、マシンに負荷が掛ってるので、おかしいなって皆で言って、何 度もリブートかけていたんです。 それでも重いので変だと思い、最近作られたファイルを探したところ発見し ました。 どうもそのマシンで、あちこちのネームサーバーを探してたみたいで、その 履歴が残っていました。 皆さんも気を付けて下さい、自分のマシンだけならフォーマットするとか出 来ますけど、踏み台されちゃ悔しいですからね。(^^ゞ でわでわ。 |
どうもごぶさたしてます>お師さん で、過去ログその後ですが…すみません、諦めました。 理由その壱 メインでNETに繋がってるのがMacなわけなんですが、 こいつのtelnetアプリケーションがAppleScript等に対応しない物ばかりで telnetでの自動化は不可能という結論に達しました。 理由その弐 ブラウザからの起動も考えたんですが、CPUをG3化してあるせいなのか、 2台繋いでいるHDDの片方を認識しないまま起動することが多く、 起動するHDDが特定できない、もしくは手動で再起動しないとOSが起動しないことすら ある状態です。 スクリプト自身はきちんとサーバー上で動いているんですが、 どうにも自動化のメドが立ちません。 いろいろご指導いただいた上になんなんですが、ここで正式に 過去ログ作成を断念したことをお伝えする次第です。 |
はじめまして。みなさん、UNIX超初心者の者ですがよろしくおねがいします。 実は今年からUNIXを習っているのですが、全然分かりません。特にShellの プロセスのあたりというか、スタンダードインプット、アウトプット、 エラーとの兼ね合いとか。。???? だれか、教えて頂けるか、良いウエブや本を紹介して頂けませんか? よろしくお願いします。 メールでもOKです。non100@excite.co.jpです。 |
> ここで正式に過去ログ作成を断念したことをお伝えする次第です。 それは残念。過去ログうんぬんより、いままでプログラムを書いたのに 結局うまくいかないとわかったときは がっくりきますね。 > Shellのプロセスのあたりというか、スタンダードインプット、アウトプット、 > エラーとの兼ね合いとか。。???? え〜、もうちょっと範囲をしぼっていただけると答えられるかもしれませんが、 範囲が曖昧なので…(さすがにそのあたりを全部説明するのはつらいです)。 「どこがわからないのか自分でもわからない」という状態なら、 The UNIX Super Text(上・下) 技術評論社 上下巻それぞれ3500円くらい がいいんじゃないでしょうか。 古いし(6年くらい前かな)、値段が高い、と評する人もいますが、 僕はお勧めします。ただし買うのは上巻だけでいいと思います。 |
はじめまして。 初歩的な質問なのですが、UNIXのコマンドで 現在のディレクトリ以下のファイル(下位ディレクトリ内のファイル含む)の中から ある特定の拡張子だけ、検索するというコマンドってありますか? ぜひご教授ください。 |
カレントディレクトリ以下から、拡張子が 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 |
68userさんありがとうございました。 早速試してみます。 これからもなにかありましたらよろしくお願いします。 ではでは! |
はじめまして。 今回久しぶりにTELNETにログインしたら、 FreeBSD 2.2.7-RELEASE (BASE) #2: Wed Dec 23 11:45:56 JST 1998 というメッセージがでてきました。 超初心者のうえ、久しぶりなので、何がなんだか分かりません これは、そのままにしておいても大丈夫なものなんでしょうか? |
それは、「このOSはFreeBSDだよ」というただのメッセージです。 ついでに書いておくと、FreeBSD2.2.7Rで、カーネルコンフィグ ファイルはBASEで、これまで二回カーネルの再構築をして、 最後にカーネルを作り直したのは Dec 23 11:45:56 JST 1999 っつーことです。 さらに蛇足ですが、このメッセージは /etc/motd に 書かれており(ブート時に毎回作り直されるのかな)、 login(1)が /etc/motdを表示します。 # see login(1),motd(5) |
そうなんですか。 安心しました。どうもありがとうございました。 |
ご無沙汰です(^^; いま、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 >っつーことです。 なんか、はじめて訪問して来た客に、家の事情を何から何まで 事細かにおしゃべりするおばーちゃんみたいな…(笑い) |
> % 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の強者ほど知識はないし、ここを見てる人も少ないので # 自己満足かもしれませんが。 |
追加。SolarisでもFreeBSDと同じ挙動でした。 |
わー! ごめんなさい、書き方が悪かったです(^^; おばーちゃんの件は、68userさんのことではなく、 FreeBSDのメッセージのことなんです。 telnetで接続したら、いきなり、「うちはね、これまで2回改築してて、 最後に改築したのは〜で、基礎工事んときには…」みたいな メッセージが出るんで、これがオシャベリなおばーちゃんみたいだ っていう意味でした(^^; ややこしいコト書いてすいませんでしたm(_o_)m いま、Cソースを頂いてきたので、本編の方は後程… |
こんにちは。はじめまして。いわもとと申します。 UNIX超初心者の私ですが今回crontabコマンドの 使い方について調べるように仰せつかりました。 それでこちらのHPを参考にさせていただいたのですが うまくいきませんでした。とりあえずcrontabファイル (だと思う ユーザ名がファイル名になっていて 中身はHPに書いてあったのと同じようになっていた) は出来たんですが、そこから先がわからないんです。 どうやっても動いてくれません。 これって私が相当バカなんでしょうか?誰かご存知の方 教えて頂けると幸いです。 |
こん**は、いわもとさん。 私も初心者のなので申し訳ないのですが、cronはデーモン(常駐) プロセスなので設定ファイルを修正したら、変更した設定を再読 込させなければいけないですね。 osが解からないですが、私の環境(Linux)では/etc/rc.d/init.dに 再起動用のスクリプトがありますので、/etc/rc.d/init.d/cron.init に start、stopとすれば良いのではないでしょうか。 #ぜんぜんはずしてたらごめんなさい。 ところで何処かのページ上のcron設定解説ページを見て 操作したのでしたらそのURLを教えてもらえないでしょうか。 #68Userさん正解をお願いします。(^^ゞ |
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のメッセージのことなんです。 あ、なるほろ。了解です。 |
touch の件、ありがとうございました。 FreeBSDのソースも、助かります。 これは、今後も大いに役に立ちそうです(多謝) >いえ、そうはなりません。FreeBSDのtouchは、STDINを >全く読んでないようです。 これは全く意外でした(^^; ソースも見ましたが、全く読む気はないみたいですね。 うーん…なんでだろう? ひょっとして、touch *.txt で該当ファイルがなかった場合に touch に argv[1] が渡らないのかな?…と思ったのですが、 ちゃんと *.txt が渡ってました…(^^; なぜ、標準入力にこだわるかというと、MS-DOSの場合、 ファイル指定のメタキャラクタに * と ? しか使えないので、 csh風の glob match をサポートした ls コマンドを利用して ls *.{c,h} | touch みたいな使い方をしようと思っていたのです。 とりあえずは、touch - で、ちゃんとファイル - を作成する ようにしました(笑い) でも、ファイルを指定しなかった場合は… もう少し考えてみます(^o^;ゞ |
> ひょっとして、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をやらねば。 |
そうそう、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だったのか。 |
はじめまして。Asanoと申します。 私のUNIX歴は1年ぐらいの初心者です。 UNIX Userの雑誌のバックナンバー(1995年12月号)を 探しています。お持ちの方で、譲ってもいいよいう人が おりましたら、下記アドレスまでご連絡お願いします。 付録のCD−ROMは無くてもかまいません。 よろしくお願い致します。 E-Mail asanonet@po.anoa.or.jp |
こんにちは。いわもとです。 68Userさん、M.Masudaさん、ありがとうございました。 おかげさまでうまく動かすことが出来ました。 UNIX歴わずか数日の私には本当にありがたい限りです。 今後ともよろしくお願いします。 |
>えっと、これは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 だと、ファイル名が素通りするだけですね… |
>FreeBSDの場合は/etc/crontabを書き換えると自動的に反映されます >(1分ごとに書き換えられたかどうかチェックされてる)。 http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#crontab ここに書いてありましたね。(^^ゞ すいませんでした。 #確認せずに発言は止めましょうの見本みたいでしたm(_ _)m ところで、あるアカウントに来たメールをきっかけにスクリプト やCGIを実行させるってのはどうすれば実現できるのでしょう? forword辺りに仕掛けをするんでしょうか? #download.cgiの件は解決しましたでしょうか? |
> 以前に「シェルは、マッチしなかった場合に > そのままコマンドに渡す」という話を聞いたことがあるのを > 思い出して、あんな風に書いたのです。 おろ、確かにそうなりますね。以下は全て推測ですが、 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月号)を > 探しています。 ありますけど、お譲りするのはちょっと…(他人のなんで)。 これこれの特集のこの点を知りたいということでしたら、簡単で いいなら抜粋してここに書いてもいいですが。 |
ありがとう68Userさん。\(^^)/ >procmailを使うことが多いようですね。 ># http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#procmail このへんはカキコした後に見て、この辺の解説でできるかなぁと 思っていた所です。 ちょっと試してみましたが、私のしたいことはprocmailを使わなく ても .forwordに |exec command で出来そうです。 具体的には、あるアカウントにメールを出すと、現在のサーバー 状況を出力させる様な事をさせたかったのです。 .forwordだけで、procmailを使わずにそのままスクリプトが実行で きたのでその方向で試してみたいと思います。 その手順では、何か不具合が予想されますか? >これを見た人が理解できるかどうか知りたいので、詳しくは書きません。 私は、スクリプトで処理しようと思っていたので、procmailの解説 をよく見ていませんでした。(^^; 良く読めば解りますヨ。 環境のない人には全然解らないだろうけど、解説内容を自分で試す 事が出来れば、動作が解るでしょう。 一つ気づいたのですが、超大作のUNIX解説ですが一部だけを印刷し ようとすると、カット&ペーストしなければならないので、コマン ド別のページが在るといいかも... #贅沢言うなって....すいませんm(_ _)m あとメタキャラの解説なんて在るとうれしいかも ついでにもう一つ。 正規表現はperlから勉強した(進行形)のですが、シェルとはどのく らいの違いがあるのでしょうか? |
>と表示するのはシェルの役目で、このときlsは実行されていないはずです。 ふむふむ、勉強になりますですm(_o_)m >shの仕様としては、-cに続いてコマンドを指定すると、マッチしなかった >場合でも、コマンドにワイルドカードをそのまま渡しているようです。 なるほどー、生でunixに触れないので、このヘンの微妙なところが よく分からないのです(^^; >ファイルの内容を標準入力から受けるのはよくありますが、 >ファイル名を標準入力から受け取るのは普通ではないと思います。 そっかぁ…、filterという概念からは逸脱してるかも知れないですね。 確かに、findも-execで済みますし、ls(csh likeな指定)を使いたい ってのはMS-DOSでの事情でしょうし… MS-DOS版独自のオプション-S を追加して、その場合だけ標準入力を読む ことにします。 ありがとうございましたm(_o_)m ところで、Human68k って、モトローラのチップで動くOSですよね。 X68000でしたっけ? |
> 正規表現は(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です。ハドソン謹製(笑) |
>X680x0上で動くMS-DOSクローンなOSです。ハドソン謹製(笑) コンベンショナルメモリ(640KB)の制限がないんで、 TSRが常駐し放題って噂は聞いてました(^^; しかし、ハドソン製ですか…シャープじゃないんだぁ(驚) >シェルの ? や * (これらをglobとかワイルドカードと言います)は >正規表現とは大きく違います。 シェルのglobも、広い意味では、正規表現と言っていいんじゃないで しょうか。 ドラゴンブックでも、正規表現によるパターン記述の例として、Lexや AWKと共に、シェルのファイル指定を挙げています。 ただ、一般的には、sed, grep, awk, perl等の正規表現とglobは 区別されるようですんで、表現だけの問題ではありますが… |
セガのシェンムーBBSで、ここを紹介しました。 過去ログが充実しているので、多くの人に知ってもらいたいと 思ったからです。勝手にすみません。以前も勝手に紹介したような。 |
UNIX User (1995年12月号)の 特集:UNIXはソースが決め手です。 PART 1:GNUツールで最新のデバッグ環境を整えよう●向川信一 PART 2:GDBを活用してデバッグを効率的に●向川信一 の内容を知りたくて、パックナンバーを探していました。 Solaris2.6のマシンですが、デバッグ環境構築のノウハウが なく、どこから手をつけていいのやら、わからない状況に あります。簡単な抜粋を書いていただけるだけでも、 助かります。お手数かと思いますが、お願いします。 |
シェルってあまり(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っていう検索エンジンの名前をあちらこちらで聞きます。 これを使ってみたらどうでしょうか。 #最近本業よりシェルいぢってる方が面白くなっている自分が恐い... |
> ログ作成ってのは説明でのリファイルの事ですか? いえ、ただのログです。例えばこんなの。 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本立てですが どちらがお望みですか? すいませんがお返事は *メール*でお願いします。 |
>でも12MBの壁があって(アドレスレジスタが24bitだから)、 MS-DOSしか使ってなかった頃の最大実装は8MBだから、 私の場合、壁のうちに入らないなぁ…(^^; >でも同じものと言った方が初心者にわかりやすいなら、それはそれで >いいと思います。 私の経験なんですが、昔、正規表現といえばsedやgrep(その頃はawkも perlも知らなかった)で使うアレのことしかないと思い込んでたことが あって、誤解を招く文脈で「正規表現」という言葉を使って指摘された 覚えがあるんです。 難しい話でよく理解できなかったために、正確には覚えてないんですが、 文脈自由文法や正規文法とかの話に割り込んで、何か発言をしたのだと 思います(^^; だから、これらを区別して説明するのはいいと思うのですが、globも 正規表現の一種又はサブセット?だということも含めておいた方が、 初心者の方にも後々のためにはいいんじゃないかなと思ったのです。 とは言うものの、議論するほどの問題ではないので、この話題は以降 無視して頂いて結構です。 |
すいません... >いえ、ただのログです。例えばこんなの。 これなんですが、 >.forwardに書いただけではログ作成や排他処理をやってくれないです。 procmailが勝手にログを作ってくれるのですか? もしそうなら、それは何処に出力されるのですか? と言う意味でした。 #日本語ヘタですいません...(^^ゞ > * ^Subject: hoge$ > は、ヘッダに「(行頭)Subject: hoge(行末)」という行があれば > commandに渡されるわけです。ヘッダ名(この場合はSubject)の > 前に ^ がありますから。 > # 本当は * ^Subject: *hoge$ にしなきゃいけないんだけど あっなるほど、よく見ると間にスペースが... これは、2つの条件([^hoge]、[hoge$])が指定されているのですね。 (↑ procmailの解説) #ネスケのデフォルトフォントをMS P明朝にしているのだけど #半角スペースが分かりづらいしアンダーバーが表示されないし、 #設定変更しようかな...気に入っているんだけど。←独り言 >namazuを使うなら... そうなんですか。最近よく見かけるのでもしかして、と思ったので すが。 #「ですよね〜。んが、」の行にはやられた... #思わず吹き出して周りの白い目が... >これくらいならシェルスクリプトでもできますよ。 う〜ん、シェル使い。というか、やっとPerlを使えるようになってき た私には、「さすが」以外言葉が出ない...(((((^^; >正規表現の一種又はサブセット?だということも含めておいた方が、 >初心者の方にも後々のためにはいいんじゃないかなと思ったのです。 初心者として、ありがたきお言葉。感謝感謝m(_ _)m >mmさん |
自己レスです。 偶然というか出来すぎ?でレスキューさんのページでprocmailの 解説を見つけました。 #しかも一昨日UPばかりの情報。もしかしてここでのやり取りを見 #ていた?! いやはや、だいぶ変な事を書いてますね(^^ゞ ログの件は環境変数に、 LOGFILE=$HOME/procmail.log の様な指定をしたときにprocmailによって作成される。 ですね。 >> # 本当は * ^Subject: *hoge$ にしなきゃいけないんだけど > あっなるほど、よく見ると間にスペースが... これは単純にメールのヘッダーの規則で、Subject:とその内容の 間には半角スペースが必要なんですね。 なんてオバカなんでしょう。 大変失礼をいたしました。(^^; 謎が解決しました。 |
> ログの件は環境変数に、 > LOGFILE=$HOME/procmail.log > の様な指定をしたときにprocmailによって作成される。 yes. 環境変数じゃなくてレシピに書くんですけどね。 > これは単純にメールのヘッダーの規則で、Subject:とその内容の > 間には半角スペースが必要なんですね。 Subject: hoge(スペース1つ) Subject: hoge(スペース2つ) Subject:hoge(スペースなし) のいずれにも対応できるようにするためです。調べてませんが、 どちらもメールヘッダとしてはアリなんじゃないでしょうか。 (RFC821あたりで決まってるかな?) ところで素朴な疑問ですが、補完って知ってます?>M.Masudaさん(や他の方) コマンドラインでTABやCtrl-Dを押すやつ。 知らない人が多いなら、軽く解説を書こうかなと思ってるんですが。 入門書でシェルの補完まで触れているのを見たことないんで、 もし補完を知らずに「UNIXのコマンド入力は めんどくさいものだ」 と思う方がいたらヤだなと思いまして。 |
初めてメールさせていただきます。 UNIX の bc コマンド/ dc コマンドの使い方を伝授していただけないでしょうか。 あるいは、このコマンドの解説本をご存知でしたら教えていただけないでしょうか。 お願いします。 |
先日はどうもでした。(^^ゞ >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 |
> #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) 計算式を逆ポーランドに変換すると、括弧の優先順位などを 気にせず、先頭から順番に処理していくことができます。 まぁ、コンピュータ向けの書き方で、人間向きではないですね。 |
>DOSの頃はこれが無かったので、長いコマンドでミスタイプすると >大変でした。 DOSでも、TSRを使えば、補完可能でした… というより、これがなければ、DOSのコマンドラインを使う気には なりませんでした。 私が使っていたのは、history.com というもので、コマンドライン 上での行編集機能、ヒストリー機能、補完機能、別名機能などが ありました。 ただ、unix上の補完機能の解説って読んだ覚えがないので、 本家のものがどういう仕様になっていたのか、できれば知りたいです。 DOSの場合、カレントに abc.exe というファイルがあって、 コマンドラインの先頭で a を入力して、補完機能を使うと、 abc というようなコマンド名(.exeがない)の補完が行われます。 でも、unixの場合は、補完は引数ファイルだけだという話を聞いた ような気もしたりしますんで…(違ったかも知れない(^^;) >dcは逆ポーランドで記述する計算機です。 少し前までなら、まだ逆ポーランド記法の電卓を使ってる人がいる って話を聞いたことがあるんですが、もう絶滅したかな…(笑い) 確か、FORTHも逆ポーランドだったような…? |
.>実は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 コマンドにこんなことを望めますか?コンパイルさせずに演算結果を 取り込みたいというのがこの目的です。 |
やはりみなさん知ってますか。僕は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になるんですが…。 |
> ところでbcで割り算の結果を小数点の精度で得る方法をご存知ですか? man読んでたら書いてありました。scale=3などとして、有効桁数を 指定すればいいんですね。デフォルトはscale=0だから、小数点以下は 表示されない、と。 あと、ご存知かもしれませんが、bc(GNU bc)の日本語マニュアルは http://www.jp.freebsd.org/man-jp/search.html で見られます。 |
>> それでは、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シリーズ 用のソフトは便利でした。 メモリチェックをすっ飛ばしてくれるので、環境の切り替え時にバッチ 組んでメニューで再起動なんてよくやっていました。 |
> これは、最近小耳に挟んだ事なのですが、一部のサーバー(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だけを 特別扱いしてることになるんですが…。 |
> http://X68000.startshop.co.jp/~68user/tmp/.completerc ガ〜ン! やはり、ご本家は、スゴーイ!! DOSの貧弱な環境を何とかunixに近づけたいと思っていたのですが、 やはり所詮、マネはマネに過ぎなかったみたいですね(^^; (でも、プリミティブなDOSは、やはり問題外…) M.Masuda さん >メモリチェックをすっ飛ばしてくれるので、環境の切り替え時にバッチ >組んでメニューで再起動なんてよくやっていました。 えー、一体どのような環境を切り替えられたのでしょうか? キャラクタデバイスやTSRなら、リセットしなくても変更可能だし、 それ以上の環境の切り替えはウチでは必要なかったので、 そういうのは使ったことないです(^^; |
>えー、一体どのような環境を切り替えられたのでしょうか? すいません。ついオンラインで読んで疑問に思って書き込んでしまいましたが、 このボードとは無関係の話題でした(^^; この質問は、なかったことにして下さいませm(_o_)m (それに、RAMディスクやディスクキャッシュの構成を変える場合にも、 リセットは必要ですね(^^;) |
>えー、一体どのような環境を切り替えられたのでしょうか? すいません。ついオンラインで読んで疑問に思って書き込んでしまいましたが、 このボードとは無関係の話題でした(^^; この質問は、なかったことにして下さいませm(_o_)m (それに、RAMディスクやディスクキャッシュの構成を変える場合にも、 リセットは必要ですね(^^;) |
>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 > ガ〜ン! > やはり、ご本家は、スゴーイ!! 全く同感です。 |
結果の報告です。 >え、ほんとですか? それだと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 と言われるようになってしまいました。 ロックファイルにアクセス権が無いって事でしょうが、それが どこに有るのか解からない。(>_<) どうすればいいでしょう。とほほ。 |
こんばんは。いわもとと申します。 今日1日散々悩んでいたんですが、crontabコマンドから シェルファイルを呼び出し、そのシェルファイルの中で SQL*PLUSを呼び出してPL/SQLプロシージャを実行させようと していたのですが、TNSサービス名が認識できないと エラーを返されてしまいました。 直接シェルファイルを実行させるとちゃんとサーバを 認識してプロシージャを実行してくれるのですが、 crontabコマンドから呼び出すとうまく行きません。 tnsnames.oraファイルも正しく入力されていましたし、 まったく原因がつかめません。 どなたかこういうエラーに詳しい方、解決方法を 教えていただけないでしょうか。 |
こんばんは岩本さん。 http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#crontab 上のページでcron実行時の注意として、 「なお、crontabで実行されるときには、ほとんどの環境変数が指定 されていないので注意が必要。」と有りますが、試しに簡単なスク リプトで、実行時に有効になっている環境変数を表示させてみて 必要な変数をスクリプトに追加してみたらどうでしょうか? 多分この辺のような気が... #またぜんぜん違ったりして。(^^; |
M.Masudaさんへ。 % grep -i procmail /etc/sendmail.cf の結果を教えていただけますか。 > crontabコマンドからシェルファイルを呼び出し… SQL*PLUSなるものも、TNSなるものも知らないので、あくまで一般論 ですが、確かに環境変数が原因であることが多いと思います。 csh/shスクリプトなら、-xや-vオプションを付けることで、 どこで止まっているかわかります。また、 % env - sh とすると、環境変数を完全にクリアした状態のshが立ち上がるので、 その状態でスクリプトを動くような状態にしてみてはいかがでしょう。 # ただし、cronでは設定されているはずのPATH、HOME、USERなども # クリアされてしまいます。 |
> % 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 と出ました。 これは吉か、はたまた大凶か? 出来れば意味を教えて下さい。(^^; |
こちらは 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接続時でのアクセス制限です。 |
へぇぇぇぇ、ほんとにprocmailを特別扱いしてるんですね。 > 出来れば意味を教えて下さい。(^^; きついことをおっしゃる(笑) Mで始まる行は、配信エージェントの定義を表します。 P=はプログラムのパス、S=とP=はエンベロープ/ヘッダの書き換え、 10/30、20/40ってのは書き換え規則(どこか別の場所で定義されている)、 F=はこの行の(他の行から参照する際の)設定の名前を決めてるのかな? それとも他での定義を参照してるのかな? T=は、メールヘッダに追加される? A=... はわかりません。 sednmail.cfを理解できるほどの知識があるわけではないので (コウモリ本も持ってない)、こんなもんでご勘弁を(^^; Slackwareの配布サイトを見てみましたが、やはり標準で procmailを特別扱いしているようです。Linux界では 普通なのでしょうか(僕からするとちょっと気持ち悪いですが)。 > それから、WU-FTPDでの/etc/ftpaccessの設定について > もし分かるのならメールで直接聞いてもいいでしょうか。 すいません、wu-ftpdは使ったことがないのです。 |
はじめまして、こんばんわ。ぬいぐるみバンザイと言います。 CGIについてですが、少し質問があります。 それは、ホームページの更新状況を(自分や他人のサイトも含めて)自動で (そのCGIを実行すれば)検知するようなものを作りたいor探しているのですが お心当たりはないでしょうか? 初心者の自分ではソケットを使ってターゲットとなるサイトに接続して、index.htmlあたりの ファイルの月日を取得できたらいいなと思うのですが、こういうことは可能なのでしょうか? 初心者ゆえ、何をいってんだ?的なところがあるかも知れませんが、よろしくお願いします。m(__)m ではでは |
自分のサイトならば、上のURLのスクリプトではいかがでしょう… 他人のサイトの場合は、仰るようにソケットを使って HEAD メソッドかな… M.Masuda さん >4M積んだノートでは、620kbのfreeは確保出来たのですがそれで >限界でした。 そう言えば、そんなことが流行ったことも…、でも620はスゴイ…(笑い) |
> それは、ホームページの更新状況を検知するようなもの 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にそういう機能が付属しているのでは ないでしょうか。 |
はじめまして。 UNIX初心者なので、いろいろ分からない事があり、 いきなりですが、みなさんに教えて頂きたいことがあります。 シェルスクリプト内にてスーパーユーザーになりあるコマンドを 発行したいのですが、スーパーユーザーになったところで プロンプトが帰ってきてしまい、以降の処理に行きません。 どの様にすれば、シェルスクリプト内にてスーパーユーザーになって コマンドを発行できるのでしょうか? よろしくお願い致します。 できれば、シェルのサンプルを見せていただければと思っております。 |
>へぇぇぇぇ、ほんとにprocmailを特別扱いしてるんですね。 ありゃりゃ、ほんとにそうだったんですか、私の勘違いなのかなぁ なんて思って、「違いますよぉ」なんてレスが返って来るかと思っ てました。(^^;;;; 一番難しいと言われるsendmailに関しては、既に私の理解を超えてる ので、今は逃げます...(爆) 将来の、目標としておきます。(^^ゞ >きついことをおっしゃる(笑) そんなそんな、コウモリ本もなくてあれだけ理解してればぜんぜん ○では?...。 でも本当にシステムによってかなり設定が違うんですね。 勉強になります。 >すいません、wu-ftpdは使ったことがないのです。 残念です。一応目的の事は達成出来たのですが、その手順での 他の部分への影響が知りたかったのです。 この辺は、いくら1ソフトの設定が出来ても、システムそのものに 詳しくないと、分かりませんからね。 プログラマーの弟は、free630kbと私に自慢してました。(^^ゞ>mmさん #すいません、違う話題で...>68Userさん こんにちはtakashiさん シェルスクリプト内でrootになる? それってどうやるのですか? 普通suコマンドやpasswdコマンドでは、わざとユーザーに入力要求 を出して、システムを保護するようになっているという話を聞いた 事が有ります。 それに、スクリプト内にrootのパスワードを記述しなければいけな いのでは? もしそうなら、それはセキュリティー的に辞めた方がいいと思いま すよ。 何をしたいのかが分かりませんが、root権限でログイン中以外の時 に、何かをさせたいのであればcrontabなどで実現させるのがいいと 思いますヨ。 #外しているかなぁ(^^ゞ |
M.Masudaさん、ありがとうございます。 Masudaさんと言う通り、セキュリティの問題のあるやり方なので、 他の方法を考えたいと思います。 また、お世話になると思いますが、その時にもよろしくお願い致します。 |
>他の方法を考えたいと思います。 どんな事をしたいのかを書くと、きっと有効な情報が得られると 思いますヨ。 またまた、御世話になります。m(_ _)m シェルスクリプトのif文で、前のコマンドの終了結果を知りたい場 合はどうすればいいのでしょうか? 具体的にはこうです。 /#!usr/bin/sh vi text.txt if [ 条件(text.txtを更新したら) ];then date>>text.txt fi 条件のところでの指定法方が解からないのです。(^^ゞ #すげー初心者ですね←私 |
ありがとうございます。m(__)m>mmさん、68userさん やっぱり、CGIで全部自動というのは、難しそうですね。 教えて貰ったことを参考に作ってみます。また来ることがあるかも知れませんが その時はよろしくお願いします。m(__)m ではでは |
> 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番目の方法のソースは、よろしければお見せしましょうか? |
ん〜、コマンドの status は $? を見ればいいですけど、 今試してみたところでは、更新してもしなくても、どちらも 0 を返してきました。正常終了は正常終了なので更新の有無は 関係ないのでしょう。 で、この場合は最終更新時刻が更新されたかを調べるとか、 /tmpにコピーして、それを編集させ、元のファイルとdiffする などするのがいいんじゃないでしょうか。 |
>ん〜、コマンドの status は $? を見ればいいですけど、 あれま、やっぱ甘かった!。 viの終了コードで判別しようと思ったんですが...、そうですね よく考えたら、保存しようがしまいが一応正常終了だから、それ では判別できませんね。(^^ゞ わざわざ試してもらってすいません。 #でも「$?」の方法が知らなかった... #ホント初心者です。(*^_^*) DOSの場合、終了コードはかなりいい加減だっただった記憶が 有ります。UNIXの各コマンドの場合正確にコードを返してくるの ですか?、それからどんな時にどんな終了コードが返るかは、man で調べる以外に基準の様なものはあるのでしょうか?。 #例えば正常終了だと0が返る等 /tmp/の方法でやってみます、もっと単純に出来ないかと思った のですが。(^^ゞ >2番目の方法のソースは、よろしければお見せしましょうか? この方法は、私も非常に興味があります是非お願いします。m(_ _)m |
gettimeofdayについて |
gettimeofday |
>2番目の方法のソースは、よろしければお見せしましょうか? この方法は、私も非常に興味があります是非お願いします。 すいません。これって「wrapperを使う」方ですね。 勘違いしてました。 興味があるのは、perlでの方です。 「suidperlを使う」ってのは、やってみましたが動きませんでした。 なぜなんだろう? |
> 「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 するだけです。 |
先日某所で尋ねられた件について、ちょっと分からなかったので、 質問させて下さい。 尋ねられた内容は、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ヒープの場合のように、メモリ上に ゴミとして残るのでしょうか? それとも、プロセスの終了を見て、システムが自動的に解放 してくれるのでしょうか? |
>「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 |
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の件は少し調べてから…。 |
LinuxWorldでredhatを入手して一週間! ついにLinux起動いたしました(笑) さぁ、次はインターネットに接続だ。 しかし、ここの話題についていけるようになるのに、どれだけの時間がかかるやら…(笑) |
なぜじゃ〜どうしてじゃ〜←狭間かんぺい調(爆) >一般ユーザで... これもだめです。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) |
うちでは #!/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じゃないんですねぇ(^^; > しかし、ここの話題についていけるようになるのに、どれだけの時間がかかるやら…(笑) やる気があればすぐですよん。 |
え〜、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); エラーチェックもしています。 > 先日某所で尋ねられた件について、ちょっと分からなかったので、 > 質問させて下さい。 もしよろしければ、その話題が出たのはどこなのか教えていただけますか? こういう楽しい話題が出るところに参加したいもので。 |
> いきますが、それを担当するのは > 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]; っぽいですね。 |
>はい、勝手に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って言ってたので、 向こうからこっちにリンクを張っておきますんで、 覗いてみて下さい(笑い) |
ふぅ、この前はつかれてたのでなかば強制的に自分なりの解答と してしまいましたが、引き続き調べてみました。 #くっそー、グヤジイ!!!(怒笑) >/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が開けないと言っているらしい。 #英語圏で生まれていれば、こんな苦労は無かったのに(; ;) |
追加ですが。 > perl -c とすると、Args must match #! line at su.cgi line 1. これは、スクリプトのパーミッションを4755とした時にでます。 0755にすると出ません。 なにか関係があるのでしょうか? |
> ちなみに、一般権限でコマンド上の実行は、スクリプトの内容通り > 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)あたりに書いて ありませんか? バイト行くんで、この辺で。では〜。 |
バイトお疲れ様でした。 いや〜ハマリまくりです。(^^; 結果から言えば動きました。ありがとうございました。 #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 私の隠しブックマーク見ましたね(^^; |
> メール見てもらえましたか? (僕にとっては)内容的に問題ないので、メールの続きはこちらでやります。 > その前に、田中 健という人物をご存知ですか? > http://www.club.kyutech.ac.jp/~hermit/ いやぁ、知らないです。イントラネット内(インターネットとは繋がって いない)で うちのページをコピーして社員向けに公開してもいいか、という メールは頂いたことがありますけど、それとは多分違う人だと思います。 ま、別にいいですけどね。どうせ間違いだらけ/役に立たないコンテンツ なので気にしません。おもしろいものを教えてくださって どうも ありがとうございました(笑) > forkされたプロセスでは、再びnobodyに戻ってしまう事です。 ん〜どうかなぁ? もしそうだとすると suidperl 内では、system や `` などで サブプロセスを(所有者権限で)使えないことになりますが、だとしたら suidperl の意味は半減しますよね。今 実行環境がないので、後からもう少し調べてみます。 > 私の隠しブックマーク見ましたね(^^; ははは、見たかもしれません。 カウンタのあるページは referer 取ってますので、ご注意を>All たまに、どんな風に紹介されてるか見に行ったりします。一度referer たどって行ったらボロクソにけなされてて、喜んでそこの人にメール 書いたこともあります。 # だって、「いいページだ」と書かれるより、「ひどいページだ」と # 書いてある方がうれしいから。悔しいので、ページを よりよいものに # しよう、という気が起こりますよね。 このBBSは referer 取ってませんでしたが、mmさんに > 向こうからこっちにリンクを張っておきますんで、 > 覗いてみて下さい(笑い) と言われたので、昨日から取り始めました(^^; でも、それらしいものが 見付からないなぁ。 > あっ、すいません。先に教えて頂いたときに、いろいろあるなー > と感心してたのですが、ライブラリのソースがあることまでは、 > 考えが及びませんでした(^^;;; まぁ僕はローカルにソースを展開しているので、grep 一発で探せますが、 ネット上で公開されてても探すのはつらいですね。 |
> 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が使われるのかも しれません。 |
えぇぇぇぇぇぇぇぇ!!!!!!??????? なんでぇ??? #すいません無駄な行を書いてしましました。(^^ゞ なんか、うちの環境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を有効にすると、サーバーエラー になります。 コマンドラインから実行すると、正常なんですが...。 #なぜ???? |
うちでも同じです。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: と吐いてくれるはずです。 |
>先頭で $|=1 とすればいいでしょう。 なるほど、これ($|=1)も関係あったんですね。 う〜ん、もっと詳しく検証せねば。 もうちょっと探ってみます。 |
一般的には、以下のの方法でデバッグすると、大抵の場合解決すると思います。 #!/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になりました。 |
大変お騒がせしている、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型? |
> ファイルハンドルを指定しなくとも最後に openしたハンドルのみ > クローズされると、思っていたのですが。suidな時、STDOUTまで > クローズされませんか? suidかどうか/httpd経由かコマンドラインか に関わらず、STDOUTが クローズされました。そもそもcloseってファイルハンドルを省略 すべきでないし、仮に省略した場合はselectで指定されたファイル ハンドル(デフォルトはSTDOUT)がクローズされるんじゃないですかね? # perl4、perl5.004で試しました。 > ところで、wrapper.cgiでのurl指定方法のwrapper.cgi/hoge.cgi > は、知ってはいたのですがどういう動作になるのですか? print文を埋め込んで試してみませう ;-) |
>suidな時、STDOUTまでクローズされませんか? ホントだぁ...これまた私の勘違い。 いままで作ったスクリプトを見直したら、ちゃんとやってました。 意識していたわけではなく、性格的な問題?からそうしていたの ですが、これって案外重要だったのですね。 この件でのスクリプトでの試験では、安易にそうしていただけでし た。#お恥ずかしい。(*^_^*;;; closeのみだとSTDOUTまでクローズされ、結果スクリプトが終了して しまうのですね。 >パスが通って無いのが原因と判明しました。 よく考えたら、スクリプト内で$ENV{PATH}=''としてるのに、何を 言ってるんでしょう私は。(; ;) でもなんで、$ENV{PATH}=''としなければいけないのでしょうか。 新たな疑問! #まるで小学生のガキが、なぜなぜ攻撃してるみたいですが..(^^ゞ #最近、私を含め周りにUNIX信者が増えている模様です。 #だって面白いんだもん。 >print文を埋め込んで試してみませう ;-) すいません、オバカでよく分からないのですが具体的にどうすれば 私にも理解できるでしょうか。 ↑完全に開きなおってるかもしれない(^_^)V これだけいろいろ御世話になっているので、何かお礼がしたいとこ ろですが、なにか出来る事が有れば言って下さい。 と、いっても何が出来るわけでは無いし....でも気持ちだけは有り ます。(本気度=120%) |
> すいません、オバカでよく分からないのですが具体的にどうすれば > 私にも理解できるでしょうか。 何を知りたいのかわからないので、全部は説明したくないです(結構な量になるので)。 何を知りたいのでしょうか? できれば open(EXEC,"| .$ENV{PATH_INFO} 2>&1"); というのを書いたのだから、「とりあえずPATH_INFOの値を見てみる」 くらいは試してください。 > でもなんで、$ENV{PATH}=''としなければいけないのでしょうか。 一言で言えば「汚れている」からです。消す必要はなくて、PATHを 再設定すればよかったですね。長くなるので青ラクダ本 P.409 参照。 別に質問するなってわけじゃないですけど、自分で調べる努力は必要です。 それでもわからなかったらどんどん質問すればいいですけど、その際でも 極限まで発生条件を切り詰めた上で、 「何がわからないか」「どのような状況で調べたのか」 などを書かないと、結局 回答者側が苦労するハメになります。 |
よかったやっと見れるようになった。(^^ゞ う〜んすいませんです。 >> すいません、オバカでよく分からないのですが具体的にどうすれば >> 私にも理解できるでしょうか。 > 何を知りたいのかわからないので、全部は説明したくないです(結構な量になるので)。 >「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の様な指定方法は、 掲示板等では話題としては知っていましたが、具体的な内容まではまだ 未解析でした、すいませんです。 |
> よかったやっと見れるようになった。(^^ゞ サーバの定期メンテがあって、落ちてたようです。 そもそもの > ところで、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に値が入る、っていうくらいです。 という解説でいいですか? どうもそういうことを聞きたいんじゃ ないような気もするんですが、聞きたいことと違っていたら 「何が知りたいか」を書いてください。 |
>そもそもの 大変申し訳有りませんでした。 言葉が足りませんでしたね。 今までの流れから、「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} と返り意味が分かりません。 と、こんなところです。 いろいろ他にもありますが、これから書込みの際は十分吟味した後 に書込みしたいと思います。 今後もよろしくお願いいたします。 |
> デバック目的だけの機能では無いだろうし、本来の目的は何だろう 「なぜその機能があるのか」と考えるのは、「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 というスクリプトを実行しているだけですね。 |
なるほど、やっと理解できました。 68Userさんがわからないと言っていた事や、自分の勘違いが。 理解したと思っていた事が、全然理解できていなかったのですね。 やはり他の仕事の片手間のように勉強しているのと、基礎からしっか り勉強している人にはかないませんネ。 ちょっとプログラミングに深入りしすぎたかも知れません、web上で よく見かけるプログラム程度なら書けるかもしれませんが、システム や応用した機能みたいな部分(少なくとも私から見ると)は、ちゃんと 勉強しないと難しすぎます。 最近、業界では有名(らしい)なプログラマー人とファイルロックの 事で話しをする機会がありましたが、私とは基礎概念が違いました。 もう少し、時間をかけて基礎的な部分から修行したいと思います。 wrapper.cgi、ありがとうございました。 |
UNIXは初心者です、ここで質問して良いかもわかりませんが、よろしければお教え下さい。 OSはだいぶ古いSONY製のNEWS−OSというのを使用しています。相当古いマシンなので、また UNIXなのでちょっと恐くてさわれないのですが、基本的なコマンドは少し勉強しました。 前置きが長くなってしまいましたが・・・ハードディスクの空き容量を調べたいと思うのですが、どの ようなコマンドを使えば良いのかよくわかりませんでした。どうぞ、お教え下さい。そういうコマンドとか は無いのでしょうか? |
NEWS-OSはよく知りませんが、df -kで Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/sd0s1a 118959 25837 83606 24% / などという表示が出るんじゃないでしょうか。これだと 118M中 25M(全体の24%)を使用中ってことです。 |
はじめまして。他にはない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ファイルが見れなくなります。 どうぞお試しくださいませ。(知ってたらごめんなさい。(汗)) |
ども、おひさしぶりです。 お元気でしょうか? 私は相変わらずです。(^_^; 何度もここで色々聞こうと思っては思いとどまり何とか自分で解決してきたんですが、 とうとういきずまりました...。 データのチェックで 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 '' ではないなら式はどうなるのでしょう? なんか解りにくくてすみません。 説明下手なんですが...そこを何とか...。(-_-; |
> とやるだけで全ての***.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++; } もアリかも。 |
なるほど(?)、ありがとうございます! Perl の専門書を買わないと駄目ですね...、コマンド(?)が全然解らない...。 唯一理解できたのが、 if ( $d ne "\n" ) { $dd++; } ですが...、そっか! 改行コードって \n でしたね...、普段使ってるのにすっかり忘れてました...。 また勉強してきます!! |
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 終了#### 外してたらごめんなさい。 |
> <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 |
すいませんまたまた教えて欲しいのです。 下のスクリプトでおかしい所は無いでしょうか。 #!/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も存在しますが、その記述内容は私には高度すぎて 全然分からずお手上げ状態です。 どうかご教授よろしくお願いします。 |
下には書き忘れましたが、$timeout=2;も指定してあります。 |
リャマ本って、「プログラミングPerl改訂版」ですよね? ラクダ本じゃなくてリャマ本が正式名(というか通称)なんですか? それとも「ラクダ本=旧版」「リャマ本=新版」? 何も試さずに書きますが、リャマ本にも書いてある通り、pingechoは 「TCPのechoプロトコル」を使って ホストが生きているかどうか調べます。 が、少くともFreeBSDのデフォルトでは echoポートは閉じられていますので、 一般的に「echoが通る=生きている」とは言えないでしょう。 echoプロトコルってのは http://X68000.startshop.co.jp/~68user/net/echo-1.html です。だから、telnet hostname echoでお話しできたら、pingechoでも 正しい答えが返ってくるはずです。 |
追加。これまた何も試さずに書きますが、さらっとNet.Pmを見た限りでは 適切な引数を渡せば ICMPのecho も使えるようです。これを使えば /sbin/ping と同じ挙動をさせられると思います。 |
> さらっと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 $>; を外せば、一般ユーザ権限でもいけるかも(試してません)。 |
>リャマ本って、「プログラミング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)詳しくなければ無視してください。 ありがとうございました。 |
> 一般ユーザ権限でもいけるかも(試してません)。 /sbin/ping もsuidされてるので、ICMPをしゃべるにはroot権限が 必要なんじゃないでしょうか。だから多分コメントアウトしても ダメだと思います(未確認ですけど)。 > つまりラベル等で復帰先の指定をするという事です。 んー、gotoとかですか? Perlでは、ほとんどgoto文を使う必要は ないと思うのですが。他の方法で代用できませんか? # alarmのシグナルハンドラからの復帰先を指定したいとか? |
>/sbin/ping もsuidされてるので 本当ですね。今まで気づかず使っていたみたいです... #mount等がそうなのは分かりますが。ICMPをしゃべる事自体 #root権限が必要なのだろうか?無駄なトラフィックを避ける為? > alarmのシグナルハンドラからの復帰先を指定したいとか? はい、まったくそのとおりです。 #やっぱ表現力足りないみたい>自分 gotoは68Userさんと同じ理由で使うつもりは有りません。 ラクダ本でのalarmの解説が、私にとっては不十分なので上記の 方法があるのかさえ分かりません。 #シェルスクリプトでも同様の方法があるのでしょうか? またこういう処理をする時に定石の様なものは有りますでしょうか。 あれば簡単でも教えてもらえれば助かります。 |
> またこういう処理をする時に定石の様なものは有りますでしょうか。 定石かどうかはわかりませんが、 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成功 } でもいいかも。 |
サンプルまで書いてもらってありがとうございます。 自分で書いたスクリプトも、ほとんど同じような事をして、 さらに引数で秒数を指定できる様にしてあります。 #もっともこんなスマートには書いてないですが(^^; >子プロセスの始末まで考えなくていいなら、 自分のスクリプトではこの部分の処理まではしていません。 試験時にスクリプト実行後(シェル、web経由)にpsで確認しても プロセスが残る事はなかったので。 シェルやアパッチがこの辺の処理はやってくれると思っています。 #そう思いたいってのが本音。 スマートなスクリプトの為の勉強になりました。 いつもありがとうございます。 |
初めまして。 HTTPについてのページを読ませていただきました。 telnetでHTTPに接続できるとは思いもよりませんでした。 そこで、質問があるのですが、cookieを送信するときは、 どのようにすればよいのでしょうか?おしえてください。 |
> 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(だったかな?)が送られますので、普通は特に後始末を する必要はないです。 もちろん子プロセスがシグナルをブロックしていたら その限りではありませんけど。 |
どうもありがとうございました。 netscapeはちょっと重いので、簡易ブラウザーを作ってみようかと 考えています。 |
端末のネットスケープで日本語入力をしたいのですが いつもemacsで書いてカットアンドペーストをしています。 ダイレクトに入力することはできないのですか? |
kinput2を立ち上げて、NN/NC上のテキスト入力エリアで、 Shift+Spaceで変換モードONだったような気がします。 kinput2 は .xsessionの中で起動すると楽です。 |
ども、こんばんわ。 今、初めて1から CGI を書いているのですが、 そこでちょっと質問が...。 JPERL でチェックした所、問題なく動いた(様に思う)のですが、 アップロードしてパーミッションを変更しても、お約束の 「Internal Server Error」がでます。 68user さんはエラーチェックなどはどうやってますか? |
> 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 に限ったことではないけどね。 |
当然のことですが、念のため補足を。 > それが嫌なら trouble@cs.gunma-u.ac.jp に質問して下さい。 trouble宛なら返事出さなくていい、ってわけじゃないです。 |
はい、わかりました。 「ありがとうございます、うまくいきました」と書けば良かったですね。 本を見ながら初めて頭から書いたので多分色々不都合やら効率が悪い所やら あるんでしょうが、これから一個一個潰していきます。 でわ、また御礼か泣きつきに来ます。(^_^; 毎度毎度、ありがとうございます。 |
はじめまして,こんにちは. つい1週間ほど前にFreeBSDに手を出した者です. さっぱり解らないので色々と探してここにたどり着きました. ”UNIXのお部屋”は大変参考になりますね.すごく重宝します. また何か解らないことがあったらこちらに伺おうと思っているので その時は何卒よろしくお願いします. |
どもども。今後ともよろしくです。 表現がわかりにくい/構成が悪い部分があったら教えて下さいね。 どうも肥大化しすぎて、どこをどうすれば利用しやすくなるのか わからなくなってしまいましたので。 |
たぶん完成しました。(^_^; http://www.raidway.ne.jp/~nouveau/dc/sh/ に置く、race.htmlとrrr.cgiです。(cgiはrrr.txtにしておいてあります) どんなもんでしょう? wrapperが非常に役に立ちました、ありがとうございます。 ところでハッシュというものは一時的にでも並べ替えは出来ないんですね。 代入した数値順での並べ替えでずっと詰まってました...。 |
> 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、などなど。 |
すみません、置く前に書いたんで...。 設置にも手間取ってたりしました、何故かエラーが...。 ハッシュの件は解決しなかったので処理が終わったら 別の変数に代入しちゃいました。 この辺はかなり無駄がありそうですし、エラーがあるなら この周辺でしょう...。 むぅ、foreach ( sort〜ですか...、組み込めるかな...。(-_-; お手数おかけしました。 |
あ、見れた。で、気づいた事。 - $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,...) の方がすっきりするかも。 全体的に特に問題はないんじゃないでしょうか。 |
後は > ($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のように。 渡された値が適切かどうかを調べるのは(僕は)必須だと思います。 |
あ、3月だ...、全然気付きませんでした。(-_-; 変な書き方してますね私、指摘されると自分でも思う...。 sprintfは便利ですね。でもなんで%02dの時だけ『0』が...。 私の持ってる本も%02dだけ0が付いてる...。 > FORMから渡される値をチェック... とりあえず$ENV{'HTTP_REFERER'}のチェックを入れてみます。 って、コレだと投票できないブラウザがあったか...。<SSとか 全部の値をチェックするんだったら投票フォーム部分も組み込んだ方が 楽そうだし、そうしようかな...。<いづれ(^_^; 勉強になりました! >変なのを入れられる可能性がありますね。旧SEGA BBSのように。 ギクッ! |
111111 |
2222222 |
こんばんは。 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"; |
> でもなんで%02dの時だけ『0』が...。 要は桁合わせですな。 Ex. printf("%d,%4d,%04d\n",10,10,10); > この配列の中に返される文字列の中に複数のバイナリが混じるというのは、 > ディレクトリエントリが壊れているのでしょうか。 うーん、どうなんでしょうねぇ。漢字のファイル名ってこともありますし、 バイナリが混じっているだけで壊れているとは言い切れないです。 > 特にヌル(\x00)が多量に含まれます。 ファイル名にヌルってありだったかなぁ…? 具体的な出力結果を見てみないことには、なんとも言いがたいです。 |
あ、しょうもないことかも知れませんが emiclock の costumes で Transparent dress (一番下のコスチューム) を、どうやったら拝めるのでしょうか? |
>漢字のファイル名 これは無いです。 本によると「システムによって保守されるディレクトリ構造の内容」 とあります。という事からエントリが壊れているのかと思った訳です。 しかし、意図的に壊してみることまではさすがにできないので、 困ってしまいました。 もう少し調べてみます。ありがとうございました。 |
> Transparent dress (一番下のコスチューム) > を、どうやったら拝めるのでしょうか? あはははは。誰もが一度は思った疑問ですね。 僕も知らなかったんで調べてみました。 1. 30分チャイムを鳴らす設定にする。 2. alarmを....年............に.....。 3. 30分チャイムが鳴るまで待つ(0分or30分) 4. Costumesに…なんとアレが! ちなみにオリジナルのMac版のドキュメントには以下の記述がありますなぁ。 > < ひとりごと > > ある日、もとそふと探検隊は某秘境の洞窟の壁に書かれた落書きを発見した。 > 壁には、「1958年10月24日06時33分」と落書きされていた。これ > が、いったい何を意味するのかはわからない。 > 洞窟は、さらに奥へと続いていた。仲間と30分に待ち合わせることにして、 > チャイムをセットし、隊長はさらに奥へと進んだ。 > 30分を知らせるチャイムが鳴った。そのとき、隊長の顔は、笑顔に変わって > いた。ついに秘宝を発見したのだ。 …で見れますか? うちのemiclockは30分チャイムがなぜか選べないようになってるんですが… なんでだろ。というわけでソースを1行書き換えて見てしまいました(^^; |
大変お久しぶりです。岩本です。 とは言っても覚えている人はいないでしょうけどね(笑) 実はUNIXでお伺いしたいことがあります。 crontabでシェルを動かしたいのですがうまくいきません。 以前Masudaさんに「実行時に有効になっている環境変数を 表示させてみて・・・」のアドバイスを頂き、その通りやって 見たところ、確かに環境変数がほとんど指定されていませんでした。 そこで環境変数をスクリプト内で追加設定させたいのですが どうすればよいのでしょうか。ちなみにスクリプトに envやsetenvを使って自ユーザログオン時の環境変数を 設定させてみたところ結局実行時に変数は変わってませんでした。 OSはソラリス2.5、マシンはsun7の300です。 ご存知の方、お詳しい方がいらっしゃいましたら よろしくお願いいたします。 |
> そこで環境変数をスクリプト内で追加設定させたいのですが > どうすればよいのでしょうか。 動かしたいものがshスクリプトなら、先頭付近に export HOGE=fuga 書くとか。cshスクリプトなら setenv HOGE fuga てな感じでしょうか。 |
68userさん、ありがとうございました。 無事問題が解決しました。 今後ともよろしくお願いします。 |
ども、はじめまして。パソコンスクランブルの方でこのページ をターゲットにしてしまったREMAHLと申します。EUCとリンクフリー という条件が重なったため、あちらの掲示板にてソースが化ける 例として取り上げさせていただきました。この度は大変失礼しました。 それからスクリプト2、3頂きました。CGI勉強中なので研究材料 として使わせていただきます。これからもよろしくお願いします。 |
どもども。ああいう場合に他サイトを例に出すのは 僕もよくやることなので、お気になさらぬよう。 |
>どもども。ああいう場合に他サイトを例に出すのは >僕もよくやることなので、お気になさらぬよう。 お気遣い、有り難うございます。 つい最近CGIを始めたばかりなので「CGIの小部屋」は 私のような素人には非常に参考になります。今は人様の 作られたスクリプトを改造している程度なので、まだまだ 分からないことだらけです。もし分からなければこの掲示板で 質問を、と思っていますので、その時はよろしくお願いします。 |
始めまして。 掲示板を発見したので、感謝の言葉でもと思い書き込みました。 仕事中に壁にぶつかるといつもこのサイトをみて解決の手助けにしてます。 とても助かってます。 これからも宜しくお願いします。 |
こんにちは。 ためになる、きれいでわかりやすいページなので大変よろこんでいます。 (色使いなんかも目に優しくていいですね、コードなんかを白バックで 読むのなんて耐えられませんです ^_^;) がんばって勉強させていただきます。 これからもがんばってください。 最高にクールです |
お褒めいただき、ありがとうございます>しょいちさん、pzさん ただ、ここの記述がわかりにくいとか、このコマンドの この機能が解説されていないなど、悪いところも書いて いただけると なおうれしく思います。何かお気づきに なりましたら、また書き込んでください。 |
はじめました、bsdのコマンドマニュアルとして重宝させてもらって ます。ところで hello worldと一行書いてccでコンパイルしたら a.outができましたが ./a.out と入力しないと動きません。 単純にa.outと入力して動かすにはどうしたらよいのですか? |
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)を 有効に使う方がいいと思います。 |
さっそくの解答thanksです とりあえずset pathの最後に.を追加致します。 シェルの補完はよくわからないので、もう少ししたら やってみます(^^ゞ |
お久しぶりです。(^^; やっぱ68Userさんは、プログラマー志望だったのですね。 #当り前と言えば当り前なのかもしれないですが... ところで、BSDIというOSを知っていますか? 実はうちの環境にソレが入ったのですが、BSD系らしく作法が 少々異なっています。 なにか、知っていたら教えてください。 Linux系(SystmV系?)との操作上の違う所とか注意点とか。 #やっと日本語manを入れて少し分かりはじめたのにまた振り出し... もちろん漠然と聞いているので、思い付いたような事でいいです。 hoppyさんへ >シェルの補完はよくわからないので、 コマンドを途中までタイプして、タブキーを押すとうれしい事が 起こりますヨ! |
> やっぱ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ごとにバラバラなんで、ご注意を。 |
どもです(^^; >プログラムを書ける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でした。 |
>プログラマーな人なのに ここ、訂正します。 これじゃ、偏見ですね。(^^; プログラマー方すいませんでした。 |
とほほさんとこの話題が出てますね(笑い) そのとほほさんのラウンジの質問を見ていて思い出したのですが、 (質問自体は、ホームぺージの作成には関係なさそう…) statが返す構造体のmodeの上位7ビットはどのような意味がある のでしょうか? 上位3ビットは、 0x8000 ブロックデバイス 0x4000 ディレクトリ 0x2000 キャラクタデバイス であることは分かったのですが、下位の 0x1000 0x0800 0x0400 0x0200 が分からないのです。 検索で探しても、ビットの意味まで記述した記事が見つけられなくて…(^^; ところで、perlのCGIで、 (stat(STDOUT))[2]&0x2000 (stat(STDOUT))[2]&0x8000 を調べて見ると、下の方が真となって、ブロックデバイスと 出たのですが(STDINも同じ)、これってウチのWebサーバーが CGIの標準出力を一旦ファイルにリダイレクトしている ということなのでしょうか? |
あれから、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つは何なんでしょうか? |
> ただ、私の周りにはちょっと偏屈な技術者が多く、人間性は信じら > れない人がおおいです。 ん〜、まぁ初心者の程度にもよるかと。僕の場合、自分で調べようと しない人、一度聞いたことを覚えようとしない(メモを取らない)人には、 教えたくないですね。 もちろん、 > 初心者を馬鹿にしきった口振りや態度 がよろしくないのは当然ですが、教えをられる側の程度にも よるのではないかと思います。 > たとえば、とほほさんとは何度かメールのやり取りをしてますが、 > プログラマーな人なのに、おおらかな人間性を感じました。 いや〜僕はあんなに心が広くないので(^^; ちなみに僕は他人に(直接面と向かって)教えてると、だんだん 不機嫌になってきますので、あまり教えないようにしてます(笑)。 |
> その中で、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ですから(でしたよね?)、実装の違いがあるの かもしれないので、僕の知識では何とも言いがたいです。 |
>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 を予想したのですが…?? |
> 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のパイプは、一度ファイルに落としてから再度そのファイルを リダイレクトして実現しているんでしたっけ。 |
会社でホームページを開設するんですが,サーバを管理してほしいとの事なんです。 NTTから直接らしいんですが、ネットワーク用なんです。 回線はOCNエコノミーです。 具体的にどんな本を読んで勉強すればいいか教えてください。 具体的に教えていただけると、本当に感謝です。 勉強しますんで是非アドバイスを下さい。 お願いします |
あーうー、あなたが現在どれだけの知識を持っているか、どんな OSを使うのかがわからないので、なんとも答えにくいです。 # それに、僕はその分野の良書を知らないので…。 サーバおっ立てるなら、とりあえず DNS/WWW/SMTP/POP くらいを 勉強すればいいでしょう。書店に行けば 「FreeBSD(Linux)で始めるインターネットサーバ」(この書名はあくまでも例です) などという本が結構置いてあると思うので、数冊買って読んでみては いかがでしょう。ドメイン登録が必要なら、JPNICへの手続きの 方法が書いてあるものを買うといいかも。 とまぁ非常に簡単なアドバイスしか言えませんが…。 |
>セクション番号です。 ありゃ〜! すいません、詳細な説明があったのですね(^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 になりました。 |
68userさん, 大昔のSEGA PC-BBSでピンボケ発言をしていた Netboyです. 'にくぽんBBS'の掲示を見て,お邪魔しました. お肉さんは会社の研修で,今月はネットできないそうです. SEGA PC-BBSの過去ログの件なんですが,私がサーバーと 回線を用意しますので,そちらで公開を継続していただく ことは可能でしょうか? T1以上の回線上のサーバーを新しく仕込む予定です. 68userさんにアカウントを発行して,68userさん用のHP領域を 差し上げますので(ログ展開用と合わせて2G程度), そちらで当面の間,公開を続けていただきたいのです. '当面の間'とは,具体的には,来夏くらいまでです. その後のことは,やってみてからご相談したいと思います. 勝手なお願いですが,よろしくお考えいただけますよう, お願い申しあげます. - - - - - - - - - - - - - - - - お肉さんの過去ログ置き場である私の自宅サーバー (ODN;64kbps常接;Linux)なら,とりあえずすぐに使えます. ログを移設したりする用途であれば,すぐにでも アカウントを発行できます.ただし,遅〜いボロサーバー ですけど. |
こんにちは、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さんが「こんなはずでは…」と思われるのは避けたいので、 現状を御理解いただいているのか確認したいわけです。 # もちろん「やっぱりやめます」ということになっても、全く構いません。 |
68userさん, ご質問いただき,ありがとうございます. >しかし、それだけのリソースを僕に貸し与えることによって、 >Netboyさんにメリットが発生することは全くないように思える >のですが、なぜそういうお申し出をされるのでしょうか? お申し入れをした理由は次のようなものです. 1.SEGA PC-BBSのファンであること 2.ログの保存と公開について68userさんの 活動に関心を持っていたこと 3.Web掲示板CGIにちょっとした機能を付け加える計画を 進めていて,このような'ログの置き場所・公開方法の問題'を ある程度解決したいと考えていること さらに,たまたま私がお手伝いしているPCパーツショップさん のサーバーを任されていて,偶然予備のWebサーバーが空いている のです.このサーバーはFreeBSDです. >一度設置してしまえば保守する >必要はないので、HDDがクラッシュでもしない限り、永遠に >存続させられると思います。 もっとアクセス量があるのかと思っていました.それなら 帯域幅を圧迫しないと思いますので,特に期限は無しで 構いません.アクセス量があると,来年のサーバー設置 料金が上がってしまうので難しいところです. 領域の余った部分はお好きに使っていただいて構いません. Telnetごしに普通の感じで触れるようにします. 詳細はメールでご質問にお答えできますし,ご説明したい ことがらもいくつかあります. メールを差し上げて構いませんでしょうか? (長文で失礼しました) |
追加して補足します. 予定しているサーバーは,群馬の両毛インターネットさんという 業者さんのところにある,上流が東京インターネット系6Mbps (又はODN系1.5Mbps)のサーバーです. 商用サーバーですが,営業内容とは関係ない,お得意様ユーザーさん のHPやパーツのドライバ類,データシート,掲示板などを収容する 予定のものです.よってコンテンツはすべてコピーフリーになります. ただし,メインWebサーバーがコケたときは,こちらを復旧機材に 徴用されますので停止します.オマケにこの業者の米NIC用2nd-NS サーバーと兼用になっていて,Webトラフィックがあまりに重くなると 怒られてしまいます. |
> お申し入れをした理由は次のようなものです. なるほど、概ね理解しました。では、 ・僕もNetboyさんも、一切の義務/責任を負わない ・アカウントの存続、容量などは、Netboyさんの一存にお任せする ということなら、お申し出をお受けしたいと思います。 > もっとアクセス量があるのかと思っていました ちなみに5月のアクセス数(ヒット数: httpd-access.logをgrep|wc -l したもの)は10000弱です。全文検索を付ければもう少し増えるかも しれませんが、倍増とか3倍増などということはありえないと思います。 > メールを差し上げて構いませんでしょうか? はい、よろしくお願いします。 > 群馬の両毛インターネット takauji.or.jp でしたっけ? ところで、なんでtakujiなのかしら。 |
>・僕もNetboyさんも、一切の義務/責任を負わない >・アカウントの存続、容量などは、Netboyさんの一存にお任せする >ということなら、お申し出をお受けしたいと思います。 ありがとうございます. 上記の条件は了解いたしました. >ところで、なんでtakujiなのかしら。 さぁ...(笑) 企業向けのryomonet.co.jpというのもあります. では,メールをこれから送りますので. |
え〜、トップページにも書きましたように、 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のとこに検索フォーム付けました。 |
このサイトを Infoseek で見付けてしまった、高山と申します。 68user さん、はじめまして(笑)。 このサイトには、HTTP クライアントや、POP3 クライアントの作り方 など、他にはあまり無い情報があって、hacker 志望(実力は全然で すが)な僕には、かなり為になります。 これからも、たまに見に来ようと思いますので、頑張ってください。 では。 # www-links Project 。もっと人手が欲しい〜。 # 特に、三平さんの収集した URL の整理とか、相当キツそう(涙)。 |
余談ですが、HTTPのソースを見たい時はブラウザに view-source:http://abc.hogehoge.com/ とかするとソースウインドウが開きます(笑) 既に知ってますかね、でもCGIだと色つけとかすれば 便利そうです、作ってみようかな・・・ |
<a href="http://abc.hogehoge.com/">http://abc.hogehoge.com/ |
x−mate3.0をしている人、おしえてください。 メールを待ってます。 |
x−mate3.0をしている人、おしえてください。 メールを待ってます。 |
> 68user さん、はじめまして(笑)。 どうも(^^; > hacker 志望(実力は全然ですが)な僕には、かなり為になります。 いや〜、ほんとは「カーネルの読み方」とか「デバイスドライバの作り方」とか 書きたいんですけど、実力がないのであれが精一杯…。 高山さんはとっても若いので、今のうちに勉強して立派なハッカーになってください。 > # www-links Project 。もっと人手が欲しい〜。 担当の部分が進んでなくてすいません。システムができないことには メンバの協力も得られませんから、早く仕上げなくてはと思っているんですが。 URLの整理くらいなら、www-links-workで手伝ってくれる人を募集しては どうでしょう。 > view-source:http://abc.hogehoge.com/ これは知りませんでした。というか、この手のはいろいろあることは 知ってるんですが(about:とか)、細かい部分は全く知りません。 # ところでウスターソースさんって、どこかで見かけた記憶があるんですが(失礼)、 # SEGA? それとも、とほほBBSかな。 |
始めまして。 ちょっと悩んでいるので教えていただきたいのですが、 日本語(漢字使用可)のtalk,write,phoneを探しているのですが ご存知ですか。お分かりになれば教えていただきたいのですが。 |
okphoneはどうでしょう。 ftp://ftp.win.or.jp/pub/network/okphone/ ただし、クライアントだけが日本語に対応すればいいのか、それともサーバの 対応も必要なのかはわかりません。あと、talk/writeはわかりませんです。 # ICQを使うってのは? |
はじめまして。 REF HAT5.2をインストールしていろいろテストしているのですが、 PCの場所移動のためにIPアドレス等を変更したいのですが、 どのファイルを直せば良いのでしょうか? Xが使えれば簡単に直せるようですが、ディスプレイが悪いのか、 設定が悪いのかわかりませんが、まともに画面が見れなくなってしまうので、 Xでの設定は出来ないんです。(こっちを直せという意見もありますが・・・) 詳しく説明しているページを紹介してくださってもかまいません。 どうかご教授ください。 |
RED HATの打ち間違えです(^^ |
Linuxは知りませんが、一般的に/etcの下なの確かでしょうね。 /etc/sysconfig/ の下とかにないですか。 grep 133.8.3 /etc/{*,*/*,*/*/*} などとして、どこで設定しているのか調べてみてはどうですか。 # 133.8.3 は現在のIPアドレスね。/etc/hostsや/etc/resolv.conf、 # デフォルトゲートウェイの修正も忘れずに。 |
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 なんで動いたままになってるのかわかりませんので、どうか御教授下さい。 サーバーの負荷が重いから停止させてくれと、文句を言われているので、 なんとか終了したいものです。 |
ゾンビプロセスや、ディスク入出力待ちのまま固まってる プロセスは殺せません。 > 文句を言われているので、なんとか終了したいものです。 え〜、リブート…とか(^^; |
はじめまして。 インストール後に表示言語設定を コマンドを使って変更する事は可能なのでしょうか? ちなみにインストール時に設定したのは英語と日本語の 混在で、変更したいのは日本語表示です。 |
ネットワークプログラミングの基礎知識について すごくわかりやすかったです。 ありがとうございました。 |
何とか自力でできました。 これからも度々来させてもらいますので その時はよろしくお願いいたします。 |
はじめまして。超初心者です。 xvの説明のところに 「Xの起動時に背景に好きな壁紙を貼りたい場合は.xsessionに % xv -root -quit file.jpg などと書いておけばよい。」 とありますが、.xsessionが見つかりません。 どこにあるにでしょうか。 |
.xsession がなければ .xinitrc でいいです。具体的には xdmで Xを起動しているなら .xsession 、startxやxinitでXを起動しているなら .xinitrcです。 |
はじめまして。 私も日本語表示で困ってます。 Solaris2.6にTeraTermを使ってコーディングを行っているのですが、 日本語が文字化けしてしまいます。 LANGはjapanese、TeraTermの設定はEUCに設定してあります。 このほかに注意する個所がありましたら教えてください。 ちなみに他の人は同じ設定で文字化けしてないようです。 |
> LANGはjapanese 化ける化けないに関してはLANGはあまり関係ないです(と思います)。 症状がよくわからんのですが、日本語が書かれたファイルをcat するだけで化けますか。cat hoge|nkf -eでEUCに変換すると どうなりますか。 補足。 > .xsession がなければ .xinitrc でいいです。 どちらもホームディレクトリに置けばいいです。どちらもなかったら http://X68000.startshop.co.jp/~68user/unix/config.html#%7E%2F%2Exsession のような内容のファイルを作成しておきましょう。 |
再び日本語表示 さんへ 設定を保存しましたか? 設定し直した後に setup→save setup で設定を保存します。 一回終了してもう一度立ちあげると直ると思います。 |
cat hogeでは、日本語は表示されます。 問題はviで日本語入力した際、文字化けしてまうことです。 (説明不足でした。すみません) OSのエラーコメントなどは、正常に日本語で表示されます。 |
いい忘れました。設定するのはtera termの方です。 ついでにこちらの方から質問があります。 OSをインストールしたのですが、root直下に.Xdefaultsが できません。インストールに失敗したのでしょうか? それからVXVAをインストールしたのですが’本マシンではVxVAを起動することはできません。’というメッセージがでて起動しません。 バージョンも対応osにも問題ありません。よろしくお願いします。 |
>ユニ男 さん TeraTermの設定を保存し、再び起動してみましたが、 まだ文字化けするようです。 |
>再び日本語表示さん Telnetではどうですか? |
Telnetも同じ症状です。 設定を日本語EUC、SJISのどちらにしても 日本語の入力は文字化けします。 うーん・・・なぜなんだろう??? 正常に動いている人の.profileを見ても 環境変数は同じなんですけどねぇ。 |
> 問題は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とは何か知らないので、残念ながらお役に立てそうにありません。 |
>再び日本語表示さん Telnetではどうですか? |
viは日本語を通します。 which viでは、私も正常に表示される環境も /usr/bin/viを使用しています。 LANG=ja export LANG とし、envでちゃんと格納されているのを確認しました。 TeraTermの設定も確認させてもらいましたが、 やっぱり同じです。表示されない理由がわかりませんが、 もうすこしあがいてみます(苦笑) |
>68user さんへ 返答ありがとうございました。 .XdefaultsはべつのCDからインストールすることがわかりました. それからVXVAとはVXVMというディスクのミラー化(ROOTいかのファイルを全て万が一のために同じものをバックアップとしてさくせいする)するためのソフトのユーザーインターフェイスのことです。 とりあえずこれは再インストールすることになりました. >再び日本語表示さんへ そうゆうことになると私もお手上げです. 力不足の私をお許しください・・・ |
こんにちは。 X ウィンドウシステムというのは OSとは別個にインストールするものなのでしょうか? もしそうだとすればどこから手に入れれば良いのでしょうか。 よろしくお願いします。 |
OSはなんでしょうか。UNIX系OSならば、よほど変なOSでない限り Xも一緒に付いてきますので、何も入ってないとしたらインストール時に 選んでないだけだと思うのですが。 |
>68user OSはUX/4800です。 結局ほかのサーバーからコピーしてきました。 でも変ですね。インストール時にディレクトリ も指定したんですけど・・・。 |
>68user ’さん’ 呼びつけで送ってしまいました。ごめんなさい。 よろしくお願いします. |
.xinitrcもないのですが・・・ |
日本語入力ができるようになりました。 原因は stty istrip なるものが.profileに記述されてたことです。 自分で書いたものでないので、気づかなかったのですが、 これは入力文字を 7 ビットにストリップする処理でした。 相談に乗ってくださった68userさん、ユニ男さん、ありがとうございました。また何か合った際はよろしくお願いします。 |
> 原因は 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 |
相談に乗って頂きありがとうございました。 (結局わからずじまいなのですが・・・) 今度はもう少し勉強してから質問したいと思います。 では、またいつかお世話になると思いますので、 その時まで・・・ |