>>2100 68user >UUCP はメール・ニューズ限定のプロトコルである。 現状はその通りなのですが、名前の通りファイルの転送も出来ます。 以前IIJでAnonymous UUCPでファイルの配布がされていたことが ありました。1分30円だったかな。 「インターネットに接続されている全ての」ではなく、 「TCP/IPでインターネットに接続され…」であればとりあえず 矛盾は無くなりますが、ちょっと分かりにくいですね。 |
皆さんはじめまして。実は今はじめてCGIをperlで作っていますが、フォームの内容を送信しようとすると以下のようなメッセージが出てきます。 このメッセージを出すことなくメールへの送信は可能でしょうか? よろしくお願いします。 Sending C:\WINNT\blt9F.tmp to xxxx@xxx.ne.jp Subject:XXXXX Login name is info@xxxxx.com |
>>2097 rosegarden >そうですか、いや、自分のやり方が悪かったかと、 >思っていたのですが、そういう仕様なんですね。 いえ、仕様だと言い切るとまた語弊がありそうなんで濁しておきます(笑) 自分の場合は、あまりにも使えないコンソールなんで、Cygwin使ってます。 でも、うまく設定が出来ないんでDOSと半々かな(^^; >>2100 68user >両方の知識を身に付ける必要があると思います。 確かにそうですねぇ。自分はGUIは滅多に立ち上げずに殆どCUIのみで 利用していますが、最近の雑誌を見るとGUI上前提の記事が多いので、 実際にWindowsのような使われ方をしている人の比率は多いのかなぁ? あ、もちろん複数の環境が有る場合ですが… >>2102 よしあき Windows環境でsendmail互換のMTAをperlから利用していると想定して ですが… 多分そのsendmail互換のアプリが出しているメッセージなので、その 部分に以下のような記述をすれば回避できると思います。 (ん?コレはブラットJってやつかな?) 実際の記述部分が判らないので予想で書きますが、 1. open(MAIL, "sendmail 〜 コマンド |"); 2. open(MAIL, "sendmail 〜 コマンド > nul"); 「1」コマンドの標準出力を受け取るので、エラーチェックなどを検知する事もできます。 「2」標準出力を強制的にブラックホールに捨てます。 また、質問する時はもう少し詳しく環境とかを書きましょう。 |
初めまして。最近CGIの勉強を始めました。(^^) 今まで、フリーで配布されているCGIの改造をしたことは あったのですが、自分で最初から書けるようになりたいと思っています。 わからないことがあるたびに、本を読んだり、インターネットで検索するのですが 68userさんのページが一番詳しく、わたしの知りたいことが書いてありました。 ありがとうございました。crypt関数とか、半角カナ・機種依存文字問題とか うまくいかなくて、いきづまっていたので、大変参考になりました。 (日本語特有の問題は、翻訳本にはほとんどでてこないし (^^;) これからUNIXのことも勉強したいと思っています。 これからもどうぞよろしくお願いします。 |
Perl一般の質問ですみません。 さいきん Word が作った RTF をパースしないといけないハメになったんですが、 VBA はツライので Perl でやろうと思っています。 RTF::Parserというのを見つけてインストールはうまくいったんですが、 ドキュメントがまったくなく、お手上げです。 (TODO: Write a document とか書いてあるのがだいぶ前なので、 投げたのかも、、) どなたか使い方をご存知の方、リンクだけでもご存知の方教えてくださいませんか? あと、他に Perl で RTF をパースした経験がある方、 「やめたほうがいい」という結論に達した方などなど、 この問題に情報がある方はお寄せください。 また、RTF の規格についてわかりやすく書いているリンクなども、、。 あと、あまりにもこの件が掲示板の趣旨を逸脱するようでしたら すみません、ツッコんでください。(^^; スナフキンさん> Cygwin 最高ですよね! 割り切って使うには最高です。 これと Meadow のおかげでやっと Windows と友達になれました。 ところで、1.1 をお使いですよね? なぜか B20 ベースの解説サイトやソフトが多いのですが、 B20 にくらべて 1.1 は超超超超安定してていい感じです。 わたしはここでお世話になった技術で Apache をコンパイルして CGI のテストも Windows でしてます!(^o^) |
Solaris 2.6 で、Sun Workshop 4.2 を使用しています。 事情により境界整列を全く行なわせない指定をしたいので、 $ cc -flags (snip) >-misalign 境界整列していないデータのロード/ストアを可能にするコードを生成 を指定しているのですが、意図した様な動作が得られません。 また、 >#program align foo, var と指定してもダメです。 どうすれば良いのか御存知の方、いらっしゃいますか? |
>>2106 ten >#program align foo, var とりあえず program じゃなくて pragma でしょう。あと、試して ませんが書き方が怪しいのではないかと思います。こちらを参考に。 http://docs.sun.com/htmlcoll/coll.674.1/euc-jp/CUG/accOptions.html#1407 >>2105 ふくし > また、RTF の規格についてわかりやすく書いているリンクなども、、。 Rich Text Format は Microsoft が作った規格なので、Microsoft に 仕様書が存在するはずなのですが、見付けられませんでした。もしかしたら 今は別の団体が管理しているのかもしれません。 |
こんちは、お初です。最近Perlはじめました。 ほかの言語はからっきし使えません(TT関西弁ならいけるけど。。。 で、Perlのプログラミングで質問させてもらいます。 テキストファイルで、↓こういうかんじ name age year -------------------------- CCIE 22 2001 みたいな感じのテキストがあって、そこから3行目だけを出力させたいのと この場合だと22だけを取り出したいっていう2つのことがどうすれば いいか今格闘中です。 たぶん正規表現かなーっとおもって オライリーの正規表現見てますがさっぱりで・・・(^^;) どなたか助言よろしくお願いしますm(__)m |
>>2108 CCIE > 3行目だけを出力させたい 自分で何行読んだかを数えます。 $line = 1; open(IN, "file"); while (<IN>){ if ( $line == 3 ){ print "これが 3行目の内容です: $_"; } $line++; } > 22だけを取り出したい $_ に "CCIE 22 2001\n" が入っている状態で、 ($name, $age, $year) = split(/\s+/, $_); とすれば $age に '22' が入ります。 \s は空白・タブを表し、\s+ は1文字以上連続した空白・タブを表しますので、 $_ を1文字以上連続した空白・タブで分割し、それぞれのフィールドを $name、$age、$year に代入 という意味になります。 あるいは ($name, $age, $year) =~ m/^(.*)\s+(\d+)\s+(\d+)$/; という方法もあります。^ は行頭、\d は数字、$ は行末を表し、 括弧でくくった部分がそれぞれ $name、$age、$year に代入されます。 |
>>2109 68user > ($name, $age, $year) =~ m/^(.*)\s+(\d+)\s+(\d+)$/; 余計なような足りないような… ($name, $age, $year) = m/^(.*)\s+(\d+)\s+(\d+)$/; 若しくは ($name, $age, $year) = $_ =~ m/^(.*)\s+(\d+)\s+(\d+)$/; では無いでしょうか? |
早々の返事ありがとうございますm(__)m 参考に勉強させてもらいます. みなさんすごいですね.ってこういうのでつまづいているのは僕だけかな(TT いまから,↓の$や()や\や+がごちゃごちゃしたものをゆっくり理解していきたいとおもいます. 実は今,これでいうと22の部分をTkのGIFgraphで表現しようと思ってるんです. テキストファイルが定期的に書きかえられるのでグラフ化したいと思って. それで,いま撃沈しているところを聞かせていただいたんです. 出きるだけ御迷惑をかけないように自分で努力したいと思いますが,また質問してしまうと思うのでそのときはよろしくお願いします. |
はじめまして。68userさんのページはとても勉強になります。時間があったら、全文を熟読したいと思います。(そんな時間ないかもしれませんが。) それにしても、毎回いろいろな人からの質問に応えることのできる知識に、 少し圧倒されました。自分はまだまだ未熟者です。今後どーしてもわからないことがあったら、質問するかもしれませんので、そのときは、どうかよろしくお願いします。 |
ふと思ったのですが、CGIへPOSTメソッドでデータを送信した時に そのCGIでデータを受け無い時(readしない場合)って、そのデータは どうなるのでしょう? CGIで、最近流行りのバッファーオーバーフロー対策?として、POST データサイズを予め調べてから、read で読み込むようにしようと 考えましたが、このような場合は、サーバーOS/ソフト側でバッファ に一旦溜まるのでしょうか? それとも、CGIが受け取らない限りOS/ソフト側でデータそのものを 受け取らないのでしょうか? 試しに自環境にあるApacheに、アップロード機能付きの掲示板CGIを 使って約80Mbを送信してみましたが、cgi-lib.pl のエラー?でCGIは 停止したらしく、ps コマンドを見ると、zonbi となっていたため、 httpdがタイムアウト処理?をして切断された結果(だと思う)、ブラウザに 「cgi-lib.pl: Request to receive toomuch data: 84400432 bytes」と 表示され切断されたように見えました。 そして、その状態まで送信は止まらずにブラウザは送信を続けていました。 top や free で送信中のメモリの状態を観察していても変化がなかった 事から、CGIが受け取らないと捨てられてしまうようにも見えますが、 ちゃんと試験が出来ていたのか、自信が無いので正確な所は不明です。 結局、CGIでPOSTデータを受け取らなくても(プロセスが死んでいた為) ブラウザ自身は送信を続けていたので、どの時点で(OSかApache)データ を破棄しているのかは判断できませんでした。 そもそもCGI側でオーバーフローを気にしなくても良いならば、それでいい のですが、どうも動作が判りません。 #それとも実装依存なのかな? |
>>2110 /tk > 余計なような足りないような… 確かに。補足どうもです。 >>2112 moz > 質問するかもしれませんので、そのときは、どうか > よろしくお願いします。 ぜひ回答する側にもまわって下さい :-) >>2113 スナフキン > そのCGIでデータを受け無い時(readしない場合)って、そのデータは > どうなるのでしょう? 実装依存です。TCP 的に言えば、相手側がプロセスが read してくれないと相 手側の OS のバッファにたまります。それがいっぱいになったら書き込み側が ブロックします。つまり print SOCKET "...."; を実行したままずっと止まってしまうということです。 ちゃんと調べたわけではありませんが、一般的にPOST データを全部受け取っ て CGI に渡す web サーバが 多いような印象を受けます。あくまで印象なの で、試したわけではありません。 もし int sock; bind(...); listen(...); sock = accept(...); ... ヘッダ読み込み ... if ( fork() == 0 ){ char *args[]={"/home/user/public_html/cgi-bin/foo.cgi", NULL}; dup2(sock, 0); execvp("cgi", args); } else { int status; wait(&status); } のように、直接ソケットを CGI プロセスの標準入力に渡すような 実装ならば、CGI プロセスが read しないと書き込み側がブロック するわけですね。 apache の実装がどうなっているかわかったら僕にも教えて下さい。 |
>>2114 68user なんかいろいろとアレなので、書き直し。 int sock; int pipes[2]; bind(...); listen(...); sock = accept(...); ... ヘッダ読み込み ... pipe(pipes); if ( fork() == 0 ){ char *args[]={"cgi", NULL}; dup2(sock, 0); dup2(pipes[1], 1); execvp("/home/user/public_html/cgi-bin/foo.cgi", args); } else { char buf[256]; int len; int status; while ( len=read(pipes[0], buf, sizeof(buf) ){ write(sock, buf, len); } wait(&status); } ソケットのデータを CGI プロセスの標準入力に渡し、 CGI プロセスの標準出力を受け取り、そのままブラウザに 返す web サーバもどきです。 |
こんにちは。又お邪魔させてもらいました(^^;) この前はありがとうございます。うまくできました\(^o^)/ 今回は、Perl/Tkなんですがアドバイスよろしくお願いします。m(__)m リストはこんな感じなんですが・・・ use Tk; $mw = MainWindow->new; $mw->title("gifgraph"); $can = $mw->Canvas(-width=400, |
すみません↓ tabで形をそろえようとしたら送信のところにいっちゃってenterおしちゃいました(^^;; ヒヤアセ で、リストは use Tk; $mw = MainWindow->new; $mw->title("gifgraph"); $can = $mw->Canvas(-width=>400, -height=>300) -pack(); for(;;){ $gif = $mw->Photo(-format=>'gif', -file=>"graph.gif"); $can->createImage(200,150,-image=>$gif); $mw->after(4000); } 画像が更新されるのでfor文で何度も画像を読みこませたいんですが、ウィジェットすら開かないんです。for文をはずせば今ある画像が表示されるんですが、なぜなんでしょうか? |
>>2117 CCIE Perl/Tk は久しくやってないので忘れてしまいましたが、 $can->createImage(200,150,-image=>$gif); $mw->after(4000, \&change_image); MailLoop; exit; sub change_image { $gif が変わっていたら $can をいじる } じゃないですかね。 |
参考にさせていただきました。 少し手を加えてなんとか表示できました。それで、 GDモジュールとGIFgraphモジュールでgifを作って for(;;){ ・・・・・・ } の中に入れたんですが $my_graph=new GIFgraph::lines(); ・・・・・ 見たいな感じでGIFgraphを定義させました。 for文の外にこう言う定義は書いたらいいんですが、このモジュールの仕様?(バグ)で中に入れてどんどん作らないと更新されないんで中に書きました。 でもそうすると何度も定義するのでメモリがどんどん食われていくんです。メモリの制御を除いてもメモリが増えていってました。 前に定義したものが残っているのでそれを破棄するってことはできるんでしょうか? |
>>2115 68user そうですか実装依存ですか。それが判っただけでもOKです。 ありがとうございます。 perl側では、あまり意味がないという事になりますかね。 しばらくApache関連の情報も探しましたが、今の所該当する 情報は見つかりません。 わざわざ例題(cですよね?)まで書いてもらいましたが、 よく判りませんでした。m(_ _)m cが解かればソースを見て何とかなるかもしれませんが、 まだ不勉強なので… 何か見つけたら報告します。 >>2105 ふくし >ところで、1.1 をお使いですよね? いえ、B20でした・・・って最近使っていないのがバレバレですが(笑) 自分は、DOS上では面倒な処理をする必要がある場合ぐらいしか 使ってません。普通は本物の環境で作業しています。 Cygwin でシンボリックリンクまで対応している事を知ったのも、 最近です(笑) |
すいませんヘルプです。 SUN SPARC ServerUitra5にモデムをつけようとして ttyポートを書き変えたらディスプレイが 見えなくなってしまいました。 モデムから入りエミュレータ−から見るととプロンプトのところに?<クエスチョンマーク>がでてこんな事になってます。 ok の後に ls−a をやって見ました。 ls -a f006cd5c SUNW,UltraSPARC-IIi@0,0 f005f2f8 pci@1f,0 f004cd88 virtual-memory f004c7a8 memory@0,10000000 f002ccf0 aliases f002cc80 options f002cb48 openprom f002cadc chosen f002ca6c packages ok ディスプレイを復活させるためには どうすれば良いのでしょうか? |
とっても今さらですが、 >>2119 CCIE > 前に定義したものが残っているのでそれを破棄するってことはできるんでしょうか? 最小限のスクリプトを見せてもらえればわかるかもしれません (し、わからないかもしれません)。 >>2121 木島 透 すいません、わかりませんです。 ところで、また UNIX の部屋のカウンタが壊れているなぁ。 http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/count/countup.pl?rev=HEAD&content-type=text/x-cvsweb-markup で怪しそうなところと言えば、 sub counter_increment { ... myopen(OUT,"> $countdir/count.$ARGV[0]") || exit; print OUT "$num\n"; close(OUT); } ここらへんでブラウザが中断されて SIGPIPE 受けた、くらいしか 思い付かない。 ちなみにこのサーバは行儀の悪いロボットのせいか、しょっちゅう file: table is full となります。この前は apache が落ちた形跡があるし。うーむ。 |
みなさん、はじめましてこんばんわ。 IPなど、とっても私にとっては難しい事なのですが、今困っていて、ここを探しました。 実はいつも行くHPの掲示板などに、荒らしがヒドイんです。 管理人さんは、海外にいるとか、何とかで・・・。管理されていないんですよね。元々は、すごく雰囲気がよくて、みんなが楽しめていた掲示板だったんですが・・・。荒らしが多すぎて、無視して、カキコミしてたら、ほんの数時間前にカキコミしたのが、消えてしまっている・・・その位、ひどいんです。 どうにか出来ないものでしょうか?記事の削除などは、管理人さんしか出来ないですよね?でも、管理人さんが管理をしないので・・・。 困ってしまって・・・。そしたら、IPで、拒否できるっていう情報を聞きました。それも、管理人さんじゃないと出来ない方法なのでしょうか? 無知すぎる自分も悪いんですが・・・一日も早く、荒らしがいない掲示板に戻ってほしいと思っています。なにか、いい方法があるかたは、教えていただきたいです。 長々と申し訳ありませんでした。 |
>>2123 マイ > 記事の削除などは、管理人さんしか出来ないですよね? そうです。第三者には出来ません。 > IPで、拒否できるっていう情報を聞きました。それも、管理人さん > じゃないと出来ない方法なのでしょうか? これも管理人が特定の IP アドレスを拒否するようにしないと いけません。 結局のところ、現在の掲示板をそのまま生かすなら、 ・管理人にちゃんと管理してくれ、と頼む ・管理人からパスワードを教えてもらうなどして、管理者の権限を譲り受ける (それを許さないようなプロバイダの規約があるかもしれませんので、ご注意あれ) のどちらかしかないでしょう。 IP アドレスの制限については、掲示板の形態がわからないと 何とも言えませんが、CGI プログラムを使っているのならば http://www2s.biglobe.ne.jp/~cru/library/zddbbs/zddbbs0.html が使えると思います。 |
みなさまはじめまして。 場違いな質問かもしれないのですが、 皆様ご親切なので質問させていただきます。 ただいま、当方、UNIXCにて、プログラムを作っております。 そこで、telnetやTeraTermを起動した時に ユーザID、パスワードの認証があると思うのですが、 それと同様のことを、Cのプログラムの中で行ないたいのです。 <例> ユーザ名を入力してください → USERA パスワードを入力してください → (キーボードを入力しているが出力されない) このような設定(記述)のしかたをご存知の方いらっしゃいますでしょうか? また、この時に入力されたフィールドをscanfで読み取ることは可能なのでしょうか? もし、ご存知な方がいらっしゃったら教えていただきたいです。 宜しくお願いいたします。 |
>>2125 RUB UNIX と言ってもいろいろあるので、ちゃんと環境を書きましょう。 以下、FreeBSD と仮定して説明しますが、Solaris でも同じはずです。 > パスワードを入力してください → (キーボードを入力しているが > 出力されない) http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/gen/getpass.c?rev=1.9 の getpass が参考になるでしょう。 要は、tcgetattr して、ECHO を落として (NOECHO にする)、 tcsetattr することで、tty ドライバの echo back を OFF にできます。より詳しい情報は termios(4) をどうぞ。 もっとお手軽にやりたいなら、 http://X68000.startshop.co.jp/~68user/net/ftp-5.html の stty の部分を読んでください。 |
お世話になります。 土田@アグレです。 今、ブラウザの変わりになるCOM++のDLL(つまりTCP/IPのブラウザプログラム) を作成しています。 HTTPサーバがWebLogic5.1なのですが、電文そのものはあっているのに、最初から 「HTTP 1.1 400」のエラーが帰ってきてしまいます。 ソケットのコネクションに問題があるのではと考えているのですが、わかりません。 どなたかお知恵を拝借させていただければ幸いです。 ちなみにコーディングは以下のとおりです。 int AuthSocket::connectAgent(SOCKET sock, long *iPort, long *iRetry, sockaddr *sockAddr) { struct sockaddr_in sockAddrIn; int res, i; memset(&sockAddrIn, 0x00, sizeof(struct sockaddr_in)); sockAddrIn.sin_family=AF_INET; sockAddrIn.sin_addr.s_addr=inet_addr("127.0.0.1"); sockAddrIn.sin_port=htons((unsigned short)*iPort); sockAddr=(struct sockaddr *)&sockAddrIn; res=ECCOM_SUCCESS; for (i=0; i<=*iRetry; i++) { if (SOCKET_ERROR==connect(sock, sockAddr, sizeof(struct sockaddr_in))) { res=ECCOM_FAILURE; } else { res=ECCOM_SUCCESS; break; } } return res; よろしくお願いします。} |
>>2127 つちだ > 電文そのものはあっているのに これはどうやって確かめましたか? 具体的に何を送っていますか? 400 Bad Request が返ってくるなら、やはりまずはリクエストを 疑うべきだと思います。 |
初めて投稿させていただきます。 突然の質問なのですが、SolarisでGNUを使わずに前日の日付を取得する方法というものはあるのでしょうか? |
>>2129 福助 env TZ=JST-15 date がお手軽でしょうか。 |
>>2130 68user 違った。env TZ=JST+15 date でした。 |
すいません、HTML で質問です。 charset ですが、 西ヨーロッパ語(ISO-8859-1)と 日本語(Shift_JIS 希望)を一枚の Web ページで共存できるでしょうか? 以下の方法はいずれもダメでした。 ・font face でフォント名を指定 ・meta タグを2個書く もしご存知でしたらご教示ください、、。 |
>>2132 ふくし http://henika.virtualave.net/untitled.htm みたいのでよければ、 http://www.ne.jp/asahi/minazuki/bakera/html/reference/charref (最後にスラッシュはつけない) を参考に、文字実体参照を使用すれば可能かと思います。 それ以外の方法は、unicodeぐらいでしょうか? |
>>2133 Mr. おおっ文字参照、忘れていました。ありがとうございます! (ちなみに IE6 では見えますが、NC4.75 では見れない、、) 結局 charset は仕様上ページ単位で混在させられない、 ということなんでしょうかねー。 |
>> 2133 へにかさん 掲示板のウラをついて敬称をつけようとして失敗しました ;;; すいません。 |
教えてくんで申し訳ありません。 会社の FreeBSD に telnet していたのですが、 急に ssh を使えということになり、 愛用の TeraTerm に TTSSH を組み込もうとして苦戦中です。 いろんな Web を参考に、したことは以下の通り。 ・TTSSH のバイナリ−を展開して TTERMPRO ディレクトリに入れた ・空のテキストファイルを作って ssh_known_hosts と名づけて TTERMPRO ディレクトリに入れた ・TTSSH.exe を起動し、とりあえず接続しないで環境設定へ ・[Setup]-[SSH] で [SSH Known Hosts] の [Read/Write Files] に ssh_known_hosts をいれて [OK] ・[Setup]-[Save setup] を実行し、普段使っている teraterm.ini を指定 ・teraterm.ini に [SSH] セクションが加わっており、その中に、 KnownHostsFiles=ssh_known_hosts という行があるのを確認 ・同じセクションの Enabled= をなんとなく 1 に ・再び TTSSH.exe を起動 ・[Host] を正しく指定し、[port] を 22 番にし (ssh のポートが 22 番であることは管理者に確認済み) [Service] を SSH にして [OK] をクリック ・メッセージが出る。 SECURITY WARNING There is no entry for the server "正しいサーバー名" in your list of known hosts. The machine you have contacted may be a hostile machine pretending to be the server. If you choose to add this machine to the known hosts list and continue, then you will not receive this warning again. □ Add this machine and its key to the known hosts list」 ・チェックボックスをチェックして [Continue] をクリック ・メッセージが出て終了。 TTSSH The host and its key cannot be added, because no known-hosts file has been specified. Restart Teraterm and specify a read/write known-hosts file in the TTSSH Setup dialog box. All the encryption algorithms that this program and the server both understand have been disabled. To comunicate with this server, you will have to enable some more ciphers in the TTSSH Setup dialog box when you run Teraterm again. This connection will now close. ・再び TTSSH.exe を起動し、接続せず、[Setup]-[SSH] を見ると、 [Read/Write Files] には何も入っていない。 ・ssh_known_hosts のプロパティは「読み込み専用」にはなっていない。 こういう状況です、、。 |
もうしわけありませんでした、状況が変化しました。 Windows 2000 Server と Windows 95 OSR 2.1 を使っているのですが、 下の現象は 2000 でのものでした。 95 を使ったら状況が変化しました。 下の現象(ssh_known_hosts が作られず、つくっても認識しない)は置きませんでした。 たぶん Program Files 配下のフォルダのアクセス権の違いだと思います。 Windows 95 で TSSH.exe で入ろうとすると、 またキーをつくるかと言われたのでチェックしたら、 次回からは聞かれなくなり、 TTERMPRO フォルダの下に ssh_known_hosts が自動的にでき、 その中にホスト名と「公開鍵」が入りました。 それはいいのですが、入ろうとすると、RCA 秘密鍵を指定する方法しか選べません。 FreeBSD に Telnet で入って ssh-keygen で identity を作って それを TTERMPRO フォルダにコピーし、指定したのですが、 Authorization Failed になって入れない状態です。 以上とりあえずのご報告でした。 あせって情報が整理されないままにポストしてしまい申し訳ありませんでした。 |
ひとりで騒いでてすみません。 だいぶわかりました。 ・ファイルがあるのに「エントリがない」と怒られ、 「追加してくれ」と言ったらさらに怒られて終了する件は、 ssh ログインと同時に同じ Teraterm をもう1個起動しているときと わかりました。(^^; ・TTERMPRO/ssh_known_hosts は、なくても勝手に作ってくれ、 管理者が定めたリモートホストの公開鍵を自動的に取ってきてくれると わかりました。 ・あとは自分用の公開鍵と秘密鍵のセットを何らかの方法で作り、 秘密鍵を TTERMPRO に入れて [Setup]-[SSH Authorization]-[Use RCA Key to login] で 指定し、 公開鍵をリモートホストの ~/.ssh/authorization_keys という名前で保存すればいい、 らしい。 ・うちのリモートホストは RCA 暗号鍵必須らしい。 (ログインするとき Use plain password.. がグレイアウトするので) ということがわかりました。 が、依然ログインできません。 正しいパスフレーズを入力してるはずなのに Authorization に失敗します。 |
書き込みは2回目です。 プログラムというよりはアイデアの問題かも知れませんが,どなたか教えて下さい。 プロバイダのサーバ(UNIX)にPerlで書いたプログラムを送ってCGIを動かしています。よろしくお願いします。 質問1: フレームで区切られたhtmlのページからsubmitボタンでCGIに飛びます。 CGIではprint "Location: $str\n\n";を使って別のhtmlページへ飛ぶようにしています。 この時,そのフレーム部分だけが別のhtmlページへ飛びますが, ウィンドウ全体(親ウィンドウ)を別のhtmlページ |
すみません,文が途中で切れてしまったので,再投稿させていただきます。 −−−−− 書き込みは2回目です。 プログラムというよりはアイデアの問題かも知れませんが,どなたか教えて下さい。 プロバイダのサーバ(UNIX)にPerlで書いたプログラムを送ってCGIを動かしています。 質問1: フレームで区切られたhtmlのページからsubmitボタンでCGIに飛びます。 CGIではprint "Location: $str\n\n";を使って別のhtmlページへ飛ぶようにしています。 この時,そのフレーム部分だけが別のhtmlページへ飛びますが, ウィンドウ全体(親ウィンドウ)を別のhtmlページへ飛ぶようにできないものでしょうか。 質問2: FORMから入力された文章中の半角カタカナを全角カタカナに変換したいのですが 半角カタカナを(文字化けしないで)半角カタカナとして CGIで受け取る方法はあるでしょうか。 FORMから入力された文章をEUCでconvertする前に文字化けしてしまうので(?), jcodeのh2z_eucを使っても上手くいきません。 |
あ,UNIXにもいろいろあるのですね。 ソフトはFreeBSDです。 |
>>2138 ふくし うーん、TTSSH は使うこともありますが、いつも plain password で やってるのでわかりませんです。すいません。 >>2140 椎 > ウィンドウ全体(親ウィンドウ)を別のhtmlページへ飛ぶように > できないものでしょうか。 多分 Location ではどうにもならないと思うので、CGI で Content-type: text/html <html><body onload="document.myform.submit()"> <form name=myform action="hoge" target="fuga" method="get"> </form> </body></html> てな HTML を吐くのはどうでしょうか (最近ちょっと Javscript を 覚えた)。 > 半角カタカナを(文字化けしないで)半角カタカナとして > CGIで受け取る方法はあるでしょうか。 普通、何もしなければ文字化けはしません。perl は扱っている データが半角カナかどうかを意識しませんので。 具体的にどういう処理を行って、どううまくいかないのですか? |
>68user さん いつもお世話になっております! 結局、 ・TTSSH は RSA 暗号鍵しかサポートしていず、 一方うちの FreeBSD は DSA 暗号鍵しかサポートしない (%ssh -V の結果は OpenSSH_2.5.2p2, SSH protocols 1.5/2.0, OpenSSL 0x...) ということらしいです??? よくわかりませんが、、。 ということで、 ・DSA をサポートする Windows SSH クライアントで、 ぼくがしたいこと(Emacs を使って Perl をいじったり Mew でメールを読んだりする)ができるものを探す ・Cygwin を使う(と、出来るらしい) ・DSA をサポートする Windows SSH クライアントで接続し、 別マシンの Telnet ポートをポートフォーワーディングして Telnet で使う ・会社のマシンを RSA にしてもらう などの認識でいいのか、検討中です。 ところで、本掲示板の趣旨は理解しているのですが、 ちょっと事情があってあせっています。 (来週にも Telnet 禁止になるらしい、、、) ココ以上の掲示板が見つかるかわからないのですが、 場合によっては同趣旨の質問を別の場所に マルチポストしていいでしょうか? ずうずうしいですが非常時ということでご検討お願いします、、。 |
先日はありがとうございました 今回もまた質問で恐縮なのですが、cshのシェル変数のstatusのようなものはbshにはないのでしょうか?スクリプトを作る際、2種類のファイルを比較しそのファイルに違いがあればエラー処理ということを実行したいのですが・・・。何卒よろしくお願いいたします |
> ふくしさん ~/.ssh/authorization_keysではなくて、~/.ssh/authorized_keysということではないですか? openssh_2.3から2.9にして使ってますがどちらもRSAが使えないということはありませんでした。 もしくはビルドする際のオプションが違うとか。 |
>>2143 ふくし > (来週にも Telnet 禁止になるらしい、、、) おすすめしているわけではありませんが、ssh の plain password で 運用するのはダメですか? > 場合によっては同趣旨の質問を別の場所にマルチポストしていいでしょうか? どうぞ。結論が出たら教えて下さい。 >>2144 福助 > 先日はありがとうございました 上の「使い方」を読んでください。で、結果を報告するようにして下さい。 もしそれが面倒でしたら、申し訳ありませんが掲示板の使用はご遠慮下さい。 > cshのシェル変数のstatusのようなものはbshにはないのでしょうか? $? です。 |
68userさん> (plain password の件) TTSSH の初期画面で、plain password の部分が (というか、RSA 鍵の使用以外の部分が) すべてグレーで使用不可になっているんです。 たぶん接続先の ssh の設定だと思います。 (マルチポストの件) ありがとうございます。 でもその必要なくなりました。 にゃさん> すいませんその通りだったようです、、、;;;;;; ということで開通しました! わーんこれで来週も生きられる、、 (Teraterm/Emacs/Mew 依存症なだけなんだけど、、) |
>>2142 68user 御返事ありがとうございました。 Javascriptはよくわからないので,まずはそのままprintでCGIに入れてみましたが Internal Server Error……と言われてしまいました。 どの部分かは書き換える必要があるのでしょうか。 ジャンプ先のURLはどこに入るのでしょうか。 Javascriptに解決方法がありそうということであれば, そちらを勉強してみてそれから再度報告しますが, 今回の件を解決する上で勉強上のポイントがあれば教えてください。 お願いばかりですみません。 > 具体的にどういう処理を行って、どううまくいかないのですか? ウェブページ上のフォームに半角カナで入力してsubmitボタンで送り, 受け取ったCGIで,「=」で$key,$valにsplitした後に%inに入れて while (($key,$val) = each %in) { jcode::convert(\$key, 'euc'); jcode::convert(\$val, 'euc'); if ($val eq 'http://') { $val = ''; } $val =~ s/\r\n|\r|\n//g; $val =~ s/,/,/g; $in{$key} = $val; } なんてことをやっています(途中の置換は今回の件とは関係ないと思いますが……)。 この後,CGI上でhtmlを書き出して$valをウェブページに表示させると文字化けします。 例えば,半角カナで「アイウエオ」と入れると「竺軸宍雫七」となりました。 |
> ふくしさん よかったですね。 protocol versionsを2だけに制限されるところもあると思うので気になってました。 公開鍵暗号の認証の方がssh-agentを使えるので慣れば楽だと思います。 TTSSHだと関係ないですがCygwinからなら使えますし。 あと、何か変なことがあったら、 ssh -v で挙動を調べると原因がわかることが多いです。 > Teraterm/Emacs/Mew 依存症なだけなんだけど、 OSを変えてしまった方が楽の様な気が・・。 |
>>2122 68user > ところで、また UNIX の部屋のカウンタが壊れているなぁ。 ご存知だったらすみません。 受け売りですが,カウンタ記録ファイルを2つ用意するといいみたいです。 単純な方法ですが,効果抜群とか……。 自分はそんなにアクセスが集中するページを持っていないので, 効果の確認はできていませんが……。 ↓自分がデータベース用に使っているPerlのスクリプトです。 @file1 = stat($logfile1); @file2 = stat($logfile2); if ((@file1[9]) > (@file2[9])) { $rfile = $logfile1; $wfile = $logfile2; } else{ $wfile = $logfile1; $rfile = $logfile2; } &lockwait; #←ファイルロック用のサブルーチンです。 if (!open(DB,"$rfile")) { &error('データベース読取エラー','復旧をお待ちください。'); } @lines = <DB>; close(DB); rmdir($lockfile); |
>>2148 椎 > そのままprintでCGIに入れてみましたが Internal > Server Error……と言われてしまいました。 Javascript はブラウザ側で解釈するものなので、Internal Server Error が起きたということは CGI 側の問題です。perl -c などで 文法チェックをしてみて下さい。おそらくは print "<html><body onload="document.myform.submit()">\n"; などと、" の中に " をそのまま書いたか、Content-type ヘッダの 先頭に空白を入れたか、というところではないでしょうか。 > ジャンプ先のURLはどこに入るのでしょうか。 form の action です。 > 「竺軸宍雫七」 それは perl や jcode.pl 的には化けていません。EUC-JP の半角カナの 「アイウエオ」は 8e b1 8e b2 8e b3 8e b4 8e b5 です。一方、Shift_JIS の「竺軸宍雫七」は 8e b1 8e b2 8e b3 8e b4 8e b5 です。つまり全く同じコードであって、同じバイト列を EUC-JP と解釈するか、 Shift_JIS と解釈するかで表示が違う、ということになります。 で、エンコーディングを解釈するのはブラウザの仕事なので、 ブラウザが誤認しないように print "Content-type: text/html; charset=EUC-JP\n\n"; と適切なエンコーディングを指定してやればよいです。 > jcodeのh2z_eucを使っても上手くいきません。 この件は具体的に書いたスクリプトを提示して下さい。 >>2150 椎 > カウンタ記録ファイルを2つ用意するといいみたいです。 なるほど。ただその手法は壊れる確率は低いけど正確なカウントは できないように見えるので、ある意味「逃げ」かなぁとは思います。 完璧な排他ができないはずはないと思っていますので。 このページは自己満足のためにあるのでその手法は選びませんが、 仕事となればそういう解もありだとは思いますので、全面的に 否定しているわけではありません。 |
>>2140 椎 > フレームで区切られたhtmlのページからsubmitボタンでCGIに飛びます。 であれば, submit が含まれている form の target に "_top" を 指定すれば良いだけに思えますが・・・ > EUCでconvertする前に文字化けしてしまうので(?) というのは, どのように確認されましたか? >>2150 椎 > if ((@file1[9]) > (@file2[9])) { スライス? |
>>2152 /tk ありゃ? 3点リーダって駄目なのか。 すいません。以後気をつけます。 |
連続ですいません。 >>2153 /tk 単にウチのIMEが3点リーダでは無く 半角中黒3つに変換していただけでした。 |
>>2061-2071 なぜ HELO や EHLO を送るのかという話ですが、http://www.sk-jp.com/book/javamail/ の本には helo は、Sender MTA んもホスト名を記述することになっている。 しかし、現在はここに何を書いても意味をなさないようになって いる。なぜなら、現在ではクライアントがグローバルなホスト名を 持たないことが多いので、記述すべき内容がない & 正しいかどうかを 検証する手段もない。 というようなことが書いてあります。なので、歴史的な事情、というのが一点。 さらに http://djbdns.jp.qmail.org/djb/smtp.html にあるように、EHLO のレスポンスにより、その SMTP サーバで使用可能な コマンドがわかるので、MUA はこれを読んで適切なコマンドを送るように すべき、というのが一点。 …でどうでしょうか? (そんなことはわかっておられるような気が とてもしますが) ちなみにこの本、JavaMail (Java 用 POP・SMTP・IMAP の API) を 使う人なら文句なくおすすめです。 >>2140 椎 > であれば, submit が含まれている form の target に "_top" を > 指定すれば良いだけに思えますが・・・ ああ、なるほど。ごもっともです。 |
始めまして。 C言語のネットワークプログラミング参考にさせて頂いて おります。m(_ _)m 一つ質問なんですが、httpsのサイトを取得する時、 プロキシー経由の場合はどのようになるのでしょうか? google等で検索してみたのですが、分かりませんでした。 最初にプロキシーに対して、 CONNECT **.com:443 HTTP/1.0 HOST: **.com って感じでやるのかなぁって所まで分かったのですが、、 ご存知の方いらっしゃいましたら、ヒントだけでも頂きたい です。宜しくお願い致します。 |
長文ですみません……。 >>2115 68user > " の中に " をそのまま書いた その通りです。うっかりしてました。 > form の action です。 htmlと同じなのですね。 strはよく見るのですが,hogeとかfugaは知らなかったので……。 よければ意味を教えて下さい。 > つまり全く同じコードであって、同じバイト列を EUC-JP と解釈するか、 > Shift_JIS と解釈するかで表示が違う、ということになります。 なるほど。 > print "Content-type: text/html; charset=EUC-JP\n\n"; > と適切なエンコーディングを指定してやればよいです。 やってみましたが,同じ結果でした。うーん……悩む……。 ちなみにこうする前は, Content-type: text/html\n\n と <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-euc-jp"> を入れていました。 > > jcodeのh2z_eucを使っても上手くいきません。 > この件は具体的に書いたスクリプトを提示して下さい。 require 'jcode.pl'; jcode::convert(\$str, 'euc'); jcode::h2z_euc(\$str); です。 > なるほど。ただその手法は壊れる確率は低いけど正確なカウントは > できないように見えるので、ある意味「逃げ」かなぁとは思います。 > 完璧な排他ができないはずはないと思っていますので。 そうですね。 私は「累計」を正確にカウントすることに意味があるのか疑問なので (カウンタは目安だと思っているので)気にしていないのですが, プログラム的にはつきつめる価値はあると思います。 >> 2152 > であれば, submit が含まれている form の target に "_top" を > 指定すれば良いだけに思えますが・・・ formにtargetが使えることを知りませんでした。 やってみたら上手くいきました。ありがとうございました。 > > EUCでconvertする前に文字化けしてしまうので(?) > というのは, どのように確認されましたか? いえ,確認できていないので(?)を付けています。 ただ,convertした後に半角カナを拾い出すスクリプトを入れていて, 文字化けした後の文に含まれている半角カナは拾うことができているので, なんとなくそうなのかな……と思いました(根拠になっていませんね)。 例)半角カナで「明アイウエオ」とすると「フタ竺軸宍雫七」(フタ:半角カナ)に 文字化けし,「フタ」を拾い出すことができています。 > スライス? すみませんが,意味がわかりませんでした。 ちなみに,このやり方は本屋で買った書籍から知りました。 |
>>2157 椎 > hogeとかfugaは知らなかったので……。 hoge の意味ですか? ならこちらを。 http://www.selab.tutkie.tut.ac.jp/~yoshida/hoge.html > require 'jcode.pl'; > jcode::convert(\$str, 'euc'); > jcode::h2z_euc(\$str); それで正しいと思います。 それでも化けるなら、文字列処理をしている全ての処理 - ブラウザから渡された「%8e%b1%8e%b2」というような URL エンコード された文字列 - & で split した文字列 - = で split した文字列 - URL デコードした文字列 - EUC に変換した文字列 で、print 文でデータを出力してみて下さい。そしたらどこで化けて いるかわかるでしょう。また、フォームが書いてある HTML の文字 コードが何になっているかも調べて下さい。 わからなかったら、最小限まで切り詰めたソースを見せて下さい。 >>> if ((@file1[9]) > (@file2[9])) { >> スライス? > すみませんが,意味がわかりませんでした。 $file1[9] が正しい、ってことでしょう。 > ちなみに,このやり方は本屋で買った書籍から知りました。 $file1[9] や (@file1)[9] なら正しいですが (わざわざ後者の書き方を する必要はありませんが)、@file1[9] は誤りです。本当にそう書いてあるなら その本は捨てましょう。 >>2156 Nira > CONNECT **.com:443 HTTP/1.0 > HOST: **.com ここまでは正しいと思います。その後は暗号化したリクエストを 送りますが…暗号化まで自力でやろうとしておられます? |
>>2158 68user ご返答ありがとう御座います。 >ここまでは正しいと思います。その後は暗号化したリクエストを >送りますが…暗号化まで自力でやろうとしておられます? CONNECTメソッドまでは正しいですか。 暗号化を自分でやるだけの知識は無いです。(--;) CONNECTした後は、サンプル通りのにやっているのですが、 SSL_connect()で0が返ってきます。 方法が正しいなら他の部分のバグかもしれないっすね。 そういえば、httpsの取得に良いサイトを発見しました。 https://www2.ggn.net/cgi-bin/ssl です。http://www.moxienet.com/lynx/ssl-testから リダイレクトされるサイトで、LynxでSSLが使用できる かどうかをチェックするためのサイトらしいです。 |
>>2158 68user ありがとう御座いました。 理由はわからないのですが動くようになりました。 SSL_load_error_strings(); の後に ERR_load_crypto_strings(); ERR_load_SSL_strings(); OpenSSL_add_all_algorithms(); を追加してみたら、難なく動きました。(--;) http://www.openssl.org/docs/crypto/BIO_f_ssl.html のサンプルを見てたら、上記3つの関数を呼んでいたので 真似してみました。 お騒がせ致しました。m(_ _)m |
はじめまして 最近CGIを作りはじめたして、問題が・・・ サーバはUNIXでCGIの処理を行なった後に作られたファイルの所有権がすべてnobodyになってしまっていて、その作られたファイルの操作が全くできなくなってしまいました。所有権の変更も出来ないんです。 だれか助けて下さい。。 おねがいします。 |
>>2159 Nira > そういえば、httpsの取得に良いサイトを発見しました。 ありがとうございます。このページをサンプルとして載せておきます。 >>2161 あやの > その作られたファイルの操作が全くできなくなってしまいました。 #!/usr/bin/perl system("rm -f ファイル"); print "Content-type: text/plain\n\n"; print "File removed.\n"; というような CGI スクリプトを作って、ブラウザから CGI に アクセスすれば消せます。 > 所有権の変更も出来ないんです。 普通ファイルの所有者を変更できるのは root のみです。 # 設定次第でできる OS もありますが。 よって、 - 事前にファイルを作成しておき、nobody が中身を変更できる ようにパーミッションを設定する。 - ファイルの所有者は nobody とし、他のユーザがそれを 参照・変更できるようにパーミッションを設定する。 - ファイルの所有者を nobody 以外とする。 サーバ管理者に suExec や cgiwrap を入れてもらうか、 自分で suid なプログラムを作る。 # http://x68000.startshop.co.jp/~68user/webcgi/permission.html のいずれを選ぶ、ということになります。 |
はじめまして、こんばんはっす。 突然ですがシェルスクリプトをつかってファイルを 書き換えようとしてるのですが "ディレクトリースタックの番号指定が深過ぎます." とコメントされ動いてくれません。どういうことなんでしょうか? ちなみに このシェルスクリプトです。 わかるかたがいたら教えて下さい。 #!/bin/tcsh set d=1 while(d<=16){ cat -n invar3_$d.dat > ninvar3_$d.dat d++} end |
>>2163 けんじ 突っ込みどころがたくさんありすぎて書ききれないので、とりあえず 動くものを置いておきます。 #!/bin/tcsh set d=1 while ( $d < 16 ) cat -n invar3_$d.dat > ninvar3_$d.dat @ d = $d + 1 end まずはマニュアルか、初心者向けの csh プログラミングの本を 読んで下さい。よい本が見付からなければ sh で書くのも手です。 sh なら結構な種類の本が出ています。 |
すいません、丁寧に教えていただき ありがとうございます。 はい、もっともっと勉強していきます! ただ、perlやshではうまくいってくれるのですが なぜかcshでは教えてくださったようにしても "ディレクトリースタックの番号指定が深過ぎます." といって動いてくれません。 特になにも変更等していないのですが、、、、。 なにはともあれありがとうございました! |
とても長いCGI処理がしたくてforkで子プロセスに処理を投げてあげたときは、ブラウザがすぐ開放されることは分かったんです。でも、処理中にエラーとか発生したときは見た目で分からなくなっちゃうんですよね?? エラーのときはなんか表示させたいのですが良い方法はあるのでしょうか? それとも長い処理はもっとfork以外の違う方法があるんですかね?? よろしくおねがいします。。。 |
>>2165 けんじ > ただ、perlやshではうまくいってくれるのですが perl と sh と csh は全く別物ですけど、それは理解されてますか? > 特になにも変更等していないのですが、、、、。 という文章は、sh で動いたものをそのまま csh でも動かそうと しているように見受けられます。 > "ディレクトリースタックの番号指定が深過ぎます." $d<=16 を d<=16 と書けばそうなります。 >>2166 かな 掲示板の一番上にある「使い方」を全く読んでいませんね。 # http://www.parkcity.ne.jp/~chaichan/qanda/qa1999.htm?01-10-03-19-11 |
>>2158 68user > print 文でデータを出力してみて下さい。そしたらどこで化けて > いるかわかるでしょう。また、フォームが書いてある HTML の文字 > コードが何になっているかも調べて下さい。 やってみたら,どこで化けているかわかりました。 jcode::convert(\$str, 'euc'); で化けていて,これを削除したら化けなくなりました。 なぜでしょうか? フォームが書いてあるHTMLの文字コードはeucにしています。 その場合は,コンバートする必要がないということでしょうか? とりあえず解決したみたいなのですが(?), 気になるのでぜひ教えて下さい。 > $file1[9] が正しい、ってことでしょう。 あ,確かに。 本からそのまま写して問題なく動いていたので 全然気付きませんでした。 人に見せると恥ずかしいので,早速,修正しました。 ありがとうございました。 > その本は捨てましょう。 あはは(^^; 確かに,少なくとも私のような初心者は 正しい記述の本で勉強した方がいいでしょうね。 私でも気付くような間違いがあちこちにあることは確かです。 でも,プログラミングのアイデアというかミソというか 参考になる点もたくさんあって,結構重宝してます。 |
とても初歩的な質問だと思いますが、教えて下されば幸いです。 掲示板を最近設置したのですが、サーバがアメリカにあるため 時差があるタイムスタンプをします。この時間を 16 時間早めたいのですが どのような記述をすればいいのか、わからないのです。恐らく下記の一行が関係するのだと思います。 $TimeDiff = 0; よろしくお願いいたします。また、過去ログを一応見ましたが既出の質問であった場合はお詫び申し上げます。 |
>>2168 椎 > なぜでしょうか? なぜでしょうね? 正確なところは各部分で s/([^-_a-zA-Z0-9])/sprintf("%%%02lX",unpack("C",$1))/eg; として URL エンコードした結果を見ないとわかりません。 > フォームが書いてあるHTMLの文字コードはeucにしています。 > その場合は,コンバートする必要がないということでしょうか? NN4, NN6, IE4, IE5 あたりなら、フォームの書いてある HTML と 同じエンコーディングで、フォームデータを送ってきますので、 フォームの書いてある HTML と、処理するデータのエンコーディングが 一致しているなら jcode::convert は必要ありません。 ただし、これは規格として明文化されているわけではないので、 あくまでも NN と IE がそういう挙動をする、ということです。 もし Shift_JIS や ISO-2022-JP で送ってくるブラウザがいた 場合は化けます。 >>2169 ジュン > この時間を 16 時間早めたいのですが 言語は何ですか? 以下は perl だと仮定して…。 $TimeDiff をどのように利用しているのかわからないと なんとも言えませんが、秒数なら $TimeDiff = 60*60*16、 時間なら $TimeDiff = 16 でしょうか。 localtime を使っているなら、その前の行に $ENV{TZ}='JST-9'; と 書いておけばうまくいくかもしれません。 |
> その本は捨てましょう。 う〜ん、ここは68userのボードなので構わないのですが、 なんか、2ch化しているようでちょぴりショックだなぁ(^^ゞ 多分typeでしょう、本当にその様に書くことを勧めているのであれば 68userさんと同じ意見ですが… だけど、椎さんがコマンドの本来の項を読まずに、理解しようとしないで コピーしているだけであれば、椎さんの手抜きでしょうけど(^^ゞ まあ、自分もはじめはそうだったので人の事を言えませんが(笑) ちなみに、テストの為にコンバートした短い文字列を表示していませ んか?昔のネスケでの挙動ですが、短い文字列の場合はブラウザで文字 コードの判別がつかずに化ける場合があります。 その場合はそこそこの長文を表示すると、うそのように表示される場合 が有りました。 原因はSJISとEUCの文字コードが一部かぶる為です。(自分のスクリプ トはSJISで記述の為) あと、よくやるのがEUCでコンバートして出力していながら、CGIの他の 表示部分で違うコードを出力していたり(結構気付かなかったりします) プログラマーな人は、この様な無駄なトラブルを減らす為にALL EUCで 作る人が多いようですね。 >プログラミングのアイデアというかミソというか 自分の場合は、他人のスクリプトを解析することでいろいろ覚えました。 リファレンス以外はこの手法が一番お勧めです。 無駄を省いたルーチンは誰が作っても大体同じようなものになるはずです。 この掲示板のソースだってかなり勉強になるはずですよ(^^ゞ >>2166 かな 「使い方」を読むどころか、コピー文章ですね(^^ゞ ここまで典型的なのもはじめて見ました(笑) ところで、最近JAVAに嵌まっているようですが、JAVAはJavaScriptと perlとどちらに近い印象でしょうか?>68userさん 敬遠していたJAVAも覚えた方がいいかなぁ、と思う今日この頃(^^ゞ |
>>2168 椎 > jcode::convert(\$str, 'euc'); > で化けていて,これを削除したら化けなくなりました。 > なぜでしょうか? とりあえず, getcode 関数の戻り値を確認してみましょう。 http://www.mikeneko.ne.jp/~lab/kcode/jcode.html#h2-1 http://www.din.or.jp/~ohzaki/perl.htm#JP_Code >>2157 椎 >> スライス? > すみませんが,意味がわかりませんでした。 ありゃ。すみません。 >>2158 68user > $file1[9] が正しい、ってことでしょう。 という意味でしたが, 断言する自信が無いのと もし, 意図的にやっている事ででしたら その理由が聞きたかったもので… ちなみにスライスについては http://www.context.co.jp/perlnews/bn/perl-newsletter-0010.html http://www.context.co.jp/perlnews/bn/perl-newsletter-0013.html が参考になると思います。 |
>68userさん 素早い回答と、明確のお答えありがとうございます。 使っている言語はperlで、秒数の設定により解決しました。ありがとうございました。 |
>>2170 68user > 一致しているなら jcode::convert は必要ありません。 必要ないということは,あってもいいのでしょうか。 つまりeucをeucにコンバートする処理をしても問題はないんですよね? そうだとしたら,今回の問題はまだ解決できていないということですね。 >>2171 スナフキン > コピーしているだけであれば、椎さんの手抜きでしょうけど(^^ゞ ええ,その通りです。まだわからないことが多いので,とりあえず(^^; > そこそこの長文を表示すると、うそのように表示される場合 > が有りました。 そうかもしれません。ただ,短い文字列を入力するようにしていますので, 根本的に解決しないとダメですね。 > CGIの他の表示部分で違うコードを出力していたり イメージできないんですが,具体的にどんな場合でしょうか。 エディタでeucで保存するようにしているのですが, これだけではeucにならないものでしょうか。 > この掲示板のソースだってかなり勉強になるはずですよ(^^ゞ 機種依存文字の検出のところなど,参考にしたいなと思っていました。 とはいえ,今日初めてソースを見たのですが, 理解するのに,かなり時間がかかりそうです。 >>2172 /tk > とりあえず, getcode 関数の戻り値を確認してみましょう。 おお,これは使えそうですね。やってみます。 > ちなみにスライスについては なるほど〜。よくわかりました。 必要がないのにスライスを使っていたことになるわけですね。 意図的でなくて申し訳ない感じです。 |
こんにちは、はじめましてTOMです。 初級アマチュアプログラマーです。 ちょっと自分で解決できなかったので質問を聞いてください。 ・モジュールAに、ライブラリlib30.soをリンクしています。 ・モジュールBに、ライブラリlib40.soをリンクしています。 ・さらに、ライブラリlib40.soの中で、ライブラリlib30.soの中の関数Func09が 使用されています。 ライブラリlib30.soの中の関数Func09が修正されました。 再コンパイル、再リンクは、 全て(モジュールA・モジュールB・lib30.so・lib40.so) 行わなければならないのでしょうか? よろしくおねがいします。 |
>>2175 TOM Func09 の引数の数や、引数の型、戻り値の型を変更しましたか? また、Func09 から他の部分のグローバル変数を参照するところ を変更しましたか? いずれの変更もしてないなら、ライブラリ利用側の再コンパイル・ 再リンクは不要です。 引数や戻り値を変えた (=インタフェースを変えた) なら、 再コンパイル・再リンクのし忘れを防ぐため、メジャー番号を lib30.so.1 -> lib30.so.2 などと上げた方がよいでしょう。 >2174 >> 一致しているなら jcode::convert は必要ありません。 > 必要ないということは,あってもいいのでしょうか。 あってもよいです。僕は必ず jcode::convert は付けます。 > つまりeucをeucにコンバートする処理をしても問題はないんですよね? 本来問題ないのですが、Shift_JIS の半角カナと EUC-JP を正確に 判別することはできないので、EUC-JP な半角カナを Shift_JIS の 文字列だと誤認してしまい、EUC-JP に変換しようとする、ということは あります。 一応 jcode.pl がエンコーディングを自動判別する際は、「Shift_JIS と して解釈できる部分の長さ」と「EUC-JP として解釈できる部分の長さ」を 比較して長さが長い方を採用しますが、もちろんこれでも完璧では ありません。 # たしか両方の長さが一致したら、EUC-JP とみなされたと思う。 > 必要がないのにスライスを使っていたことになるわけですね。 いいえ、@a[0] はスライスを使っているわけではありません (よね?)。 perl がおせっかいなので @a[0] -> $a[0] という読み替えをしている だけです。 % perl -we '@a=(100,200);print "@a[0]\n"' Scalar value @a[0] better written as $a[0] at -e line 1. 100 >>2171 スナフキン > ところで、最近JAVAに嵌まっているようですが、JAVAはJavaScriptと > perlとどちらに近い印象でしょうか?>68userさん うーん、どっちも遠いですねぇ…。でもまぁ僕がやってるのは サーバサイドの方なので、どちらかと言えば perl ですか。 でも、perl とは似てないですね。 とにかくクラス設計が楽しいです。 |
すいませんでした。 以後気を付けます。。 |
はじめまして。 ネットワーク関係の関数でちょっと質問なのですが。 inet_aton(hostname)になっていますがこれをinet_aton (ipaddres) にしても問題はないのでしょうか? hostnameが解決されていない場合、IPアドレスをそのまま 使用してみたのですが表面上問題はでていませんが、 内部的にどうかまで分からなかったので。 どなたか教えて下さい。 分かり難い内容の書き込みになってすみません。 |
>>2176 68user > # たしか両方の長さが一致したら、EUC-JP とみなされたと思う。 一致した場合は undef では? > いいえ、@a[0] はスライスを使っているわけではありません (よね?)。 > perl がおせっかいなので @a[0] -> $a[0] という読み替えをしている > だけです。 http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html を読んだうえでの僕の解釈は @a[0] はスライスです。 但し, 要素数が 1 のリストであり, スカラー値ではありません。 たまたま @a[0] をスカラーで評価したときに, その最後の要素である $a[0] が返されただけです。 となるのですが 例によって勘違いしている可能性大です。 |
>>217668user 68userさん インターフェイスの変更は、ありませんので ライブラリ利用側を再コンパイル・再リンクせずに利用できました。 回答ありがとうございました。 |
/tkさんが教えてくれた↓のページを読むと, > http://www.mikeneko.ne.jp/~lab/kcode/jcode.html#h2-1 ・convert()は内部ではgetcode()を自動的に呼び出し文字コードを判断する ・getcode()では,半角カナは文字コードの自動認識の判断対象からはずされる とあります。また,スナフキンさんが > そこそこの長文を表示すると、うそのように表示される場合が有りました。 と言われたように,私の場合も半角カナ以外の文字をある程度以上追加すると 文字化けしないことがあります。 例)アイウエオ(半角) →竺軸宍雫七(全角) アイウエオ(半角)あいうえお(全角)→アイウエオ(半角)あいうえお(全角) これらのことから,今回の文字化け現象の原因は,convert()が (正確にはgetcode()が)半角カナの文字コードを 正確に判別できていないことのようです。 これを調べるためにコンバートの前後でgetcode()をかけてみました。 $code1 = &jcode::getcode(\$str); jcode::convert(\$str, 'euc'); $code2 = &jcode::getcode(\$str); その結果,次のようになりました。 $str = 'あいうえお' → $code1 = 'euc',$code2 = 'euc' $str = 'アイウエオ(半角)' → $code1 = 'sjis',$code2 = 'euc' つまり,getcode()は半角カナの「アイウエオ」をsjisと判定して sjisをeucに変換する処理をしていたのです。 長々と書きましたが,68userさんが書かれたように, > Shift_JIS の半角カナと EUC-JP を正確に > 判別することはできないので、EUC-JP な半角カナを Shift_JIS の > 文字列だと誤認してしまい、EUC-JP に変換しようとする、ということは > あります。 ということのようです。 で,ここでどうするかというプログラム上のアイデアが問われるのですが, (残念ながら例の本には載っていません・笑) 今は,「$strに全角文字を数個追加して,コンバート後にそれを除く」ということを 考えています。 ただ,自分でもかっこ悪いなぁと思うので,他にアイデアがあれば教えて下さい。 >>2176 68user > いいえ、@a[0] はスライスを使っているわけではありません (よね?)。 私は/tkさんが教えてくれたページを読んでスライスを覚えたので No.2179の/tkさんと同じ解釈をしたのですが, この解釈の違いによって,使い方とその結果が変わるということが ないのであれば,あまり本質的な問題ではないような気がします。 68userさんが正しい知識を教えようとしてくれる気持ちはとてもありがたいです。 |
シイ |
すみません。下の書込は私,椎です。 今回のことがあって,名前のような文字数が少ないフォームへの 日本語の記入に抵抗を感じたので, これから椎はやめてshiiにしようと思います。 |
>>2178 SA > inet_aton(hostname)になっていますがこれをinet_aton (ipaddres) > にしても問題はないのでしょうか? 問題ないと思います。FreeBSD では inet_aton と inet_addr は同じ 関数になってます。 # http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/inet_addr.c?rev=1.12.2.1 >>2179 /tk > @a[0] はスライスです。 ん〜、(@a)[0] とは違うということですか? >>2179 /tk > 一致した場合は undef では? >>2181 椎 > ・getcode()では,半角カナは文字コードの自動認識の判断対象からはずされる そうでしたっけ…。昔 jcode.pl を読んだときはそうじゃなかった ような気がしますが、読み違えていたのかもしれません。 > 今は,「$strに全角文字を数個追加して,コンバート後にそれを除く」と > いうことを考えています。 追加する全角文字のエンコーディングを EUC-JP にするか、Shift_JIS に するかが問題です。どちらか決めるためには追加対象文字列のエンコーディングを 自動判別しなきゃいけません。で、それが正確にはできないので…と堂々めぐりです。 まぁ、元のフォームが EUC-JP であるということなので、 /([\x00-\x7F]|[\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])*/ にマッチすれば EUC-JP として解釈できる文字列である、ということですから 無変換、でいいと思います。 # jcode.pl は汎用ライブラリですからそうもいきませんが。 > すみません。下の書込は私,椎です。 名前の部分にカーソルがある状態で Enter を押しても書き込み しないようにすればよいのかな? (どうやるのかさっぱりわかりません) |
>>2184 68user > 追加する全角文字のエンコーディングを EUC-JP にするか、Shift_JIS > にするかが問題です。 半角カナ「アイウエオ」の場合,後ろにスペースを3つ追加するだけで 上手くいきました。多分,全角文字なら判別対象になるので, それをある程度の長さで追記すればいいのかなと思いました。そこで, html側で別に送った全角文字を追加して判別するつもりでした。 ただ,こちらの掲示板では短い半角カナの「シイ」を判別できたので, jcode.plのせいではないようです(私の方ではシイも化けました)。 cgi-lib217.plを使っているせいかも……? 人様のプログラムの改造から使い始めたPerlですが, 以前に比べればいろいろなことがわかってきました。 上述のことを確かめる意味でも, 自分が理解できる範囲で1から作り直してみることにします。 (jcode.pjは深く考えずに使いますが……(^^;) それを検証できたらまた報告しますね。 |
>>2174 椎 >イメージできないんですが,具体的にどんな場合でしょうか。 すみません、よく読んでいませんでした。 CGIで出力するページソースの中の日本語コメントがSJISでEUCに変換 した日本語を同時に出力と言うケースでしたが、shiiさんの場合は まったく違うようですね。 >>2176 68user サーバーサイドという事は常駐システムですね。 さすが68userさん(笑) 自分も先日初心者用のCD付き本を買ってきて、JDKをインストールして みましたが、いきなりサンプルの Hello! が動かないトラブルで、 既にめげています(笑) ざっと見た感じでは、関数類を覚えれば特に難しく無さそうな感じも しますが、甘いかな?(^^; もしよければ、お勧めの初心者向けサイトを教えてくれると嬉しいです。 >2184 >名前の部分にカーソルがある状態で Enter を押しても書き込み こういう事でしょうか? <HEAD〜内 <SCRIPT LANGUAGE="JavaScript"> <!-- function submit_check(){ if(!document.FORM.elements.MESSAGE.value){ alert("メッセージを記入してください。"); return; } if(!document.FORM.elements.NAME.value){ alert("名前を記入してください。"); return; } document.FORM.submit(); } //--> </SCRIPT> <FORMへ <FORM METHOD=POST ACTION="$script_name" NAME="FORM" OnSubmit="submit_check();return false;"> 外してます? |
>68userさん ありがとうございました。 IPアドレスで使用していきます。 |
cgi-lib217.plを使わずにreadで読んでやってみましたが やはり文字化けしました。引き続き調査中です。 |
すいません、また怪奇現象が起こったのでお力をお貸しください。 Excel のワークシートを単純に <a href> タグでリンクすると クリックすると中が見えてしまう(文字化けの文書として開こうとする)ので、 いぜん別の場所で教えてもらった方法をアレンジして 下のような CGI スクリプトで行っています。 --- download.cgi --- #! perl $arg = $ENV{'QUERY_STRING'}; $arg =~ /name=(.*)/; $excelfile = $1; $pwd = `pwd`; chomp($pwd); unless (open (FL, $excelfile)) { print "Content-type: text/plain\n\n"; print "error opening $excelfile because $! at $pwd"; exit; }; print <<HEAD; Content-type: application/octet-stream Content-disposition: attachment;filename="$excelfile" HEAD print <FL>; close(FL); ------------------- これを、 <a href="http:.../cgi-bin/download.cgi?name=test.xls">ここをクリック</a>して xls ファイルを、、 のように呼び出そうという寸法です。 これが、場所によって挙動が異なるのです。 project | cgi-bin | | download.cgi | subproj1 | | aaa.html | | xxx.xls | subproj2 | | subdir | | | bbb.html | | | yyy.xls ここで、 http://org/~project/subproj1/aaa.html として見える aaa.html の中に、 <a href="http://org/~project/cgi-bin/download.cgi?=xxx.xls">XXXをダウンロード</a> と書くとうまくいくのですが、 http://org/~project/subproj2/subdir/bbb.html の中に、 <a href="http://org/~project/cgi-bin/download.cgi?=yyy.xls">YYYをダウンロード</a> と書くと、 error opening yyy.xls because No such file or directory at /.../project/cgi-bin と表示されます。 パスが何らかの理由で見えないのかと思って <a href="http://org/~project/cgi-bin/download.cgi?=../subproj2/subdir/yyy.xls">YYYをダウンロード</a> と書くと、なんと download.cgi という名前でファイルを保存しようとします。 保存して中を開けてみると、中身はなんと yyy.xls! 1回目の実験は xxx => yyy の順番で行ったので、 何らかのキャッシュが行われているのかと思い、yyy => xxx の順で行っても同じです。 ということでよろしくお願いします。 サーバー側は FreeBSD 2.2.8-RELEASE+Apache(Apache のバージョンの見方がわかりません、、)、 クライアント側は Windows2000 Server+NC4.51 および IE6 です。 |
↓下の件ですが、Apache は 1.2.5 だと管理者からメールが来ました。 |
>>2185 shii そうですか、できましたか。どうも僕だけ話をわかってなくて 間違ったことばかり言っているようです。すみません。 >>2189 ふくし download.cgi が実行されたときのカレントディレクトリは、download.cgi のある ディレクトリになっているはずです。 よって、cgi-bin/xxx.xls も cgi-bin/yyy.xls もないので両方失敗するはずです。 なのに xxx.xls だけ成功するということは、cgi-bin/ の下に xxx.xls だけファイルが 置いてあったとか、シンボリックリンクが張ってあったとかいうオチではないかと 思うのですが、いかがでしょうか。 >>2186 スナフキン > サーバーサイドという事は常駐システムですね。 うーん、CGI を常駐システムと呼ばないのと同じで、Java Servlet も 常駐システムとは呼ばないと思います。 > ざっと見た感じでは、関数類を覚えれば特に難しく無さそうな感じも > しますが、甘いかな?(^^; いや、そんなもんじゃないですか? 標準クラスライブラリを組み合わせて パズルのようにプログラムを組み上げて行く感じです。 書き込みミスをした原因は >>2184 68user > 名前の部分にカーソルがある状態で Enter を押しても書き込み > しないようにすればよいのかな? のせいですか?>shii さん もしそうなら >>2186 スナフキン > <FORM METHOD=POST ACTION="$script_name" NAME="FORM" OnSubmit="submit_check();return false;"> を組み込みます。 |
>68user さん すいません、、xxx.xls がなんかのはずみで cgi-bin に 入ってました、、いつもすいません、、。 ../ で cgi-bin に遡れないんですね。 (download.cgi として yyy.xls が保存できたのがわからんが、、) cgi-bin の下に project に対するシンボリックリンクを張って 解決しました。 |
>>2191 68user > そうですか、できましたか。どうも僕だけ話をわかってなくて > 間違ったことばかり言っているようです。すみません。 え。何も間違ってないですよ(と,思うのですが)。 私の書き方がわかりにくかったらすみません。 というか私が無知で,68userさんが書いていることを理解できて いないような気がします。 > 書き込みミスをした原因は 申し訳ないと思いつつ,半角カナを試させていただいたのです。 ですから書き込みミスではありません。すみません。 プログラム上は同じ事をやっている気がするのに, どうしてこちらの掲示板では半角カナを判別できるのか が現在の謎です。 ちなみに, 私のCGIでは「シイ(半角)」が「鴫」と化けます。 有名なTeaCupの掲示板でも同じように化けました。 私がこちらのソースを見ただけでは,わからなかったのですが, コード判別で何か特別なことをされていますか? 私のjcode.plのバージョンはv 2.3 1997/02/23ですが, バージョンのせいってことがあるのかな……? |
大ショックです。 jcode.plを最新版(v 2.13 2000/09/29)に入れ替えたら 半角カナを認識しました。それだけのことだったのです。 大解決です。ここまでたどりつけたのも皆様のおかげです。 ありがとうございました。 それから,いろいろと変なことを書いたりやったりして すみませんでした。 ちなみに下に書いた私が使っていたjcode.plのバージョンは, 中に書いてあった記述をそのままコピーして貼ったのですが, ちょっと変ですね(^^; |
思わず,半角カナを認識したと書きましたが,正確には違うようです。 半角カナのsjisとeucは判別しようがないですよね。 中の説明には特に書かれていないようですが, 判別不能な場合の処理として, 古いバージョンではsjisと判断していたところを eucに判断するようにしたのではないでしょうか。 |
どうやら,2.3から2.6にバージョンアップしたときに 修正されたようです。以下,引用です。 (バージョンの記述が変だったというのは私の勘違いでした。) −−−−−−−−−−−−−−−−−−−−− jcode.pl-2.6 をリリースしました。 ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/jcode.pl-2.6 2.3 からの変更点は、以下の通り。 - &jcode'tr の中で JIS コードの認識方法をちょっとだけ変更 - JIS X 0208-1990 のシークエンスを認識するように変更 - &jcode'getcode のバグを修正して、説明を追加 --utashiro |
はじめまして。玉中と申します。 突然の投稿で失礼致します。 1台のパソコンにネットワークカードが複数枚ささっており、それぞれにIPアドレスが割り当てられている場合に、それら全てのIPアドレスを取得するにはどのようにすればよいのでしょうか。言語は C/C++ です。 NIC が1枚だけの場合は、gethostname() と gethostbyname() で取得できるのですが、複数の場合の取得方法が分かりません。 つまりは、ifconfig コマンドのようなことをやりたいのですが、 どなたか方法をご存知ありませんでしょうか。 よろしくお願い致します。 |
UDPクライアントをPerlで作成したいのですが なかなか上手く行きません。 特定のポート番号(例 NTPの123)にメッセージをなげて そのポート番号が存在するかしないかを確かめたいのですが・・・ どなたか詳しい方いらっしゃいませんか? |
>>2198 SA > 特定のポート番号(例 NTPの123)にメッセージをなげて 送るだけなら、多分こんな感じだったかと。 use Socket; my $iaddr = inet_aton("10.0.0.1"); my $sock_addr = pack_sockaddr_in(123 ,$iaddr); socket(SOCKET, PF_INET, SOCK_DGRAM, 0); send(SOCKET, "hoge", 0, $sock_addr); ただし、 > そのポート番号が存在するかしないかを確かめたいのですが・・・ UDP なので、送ったデータが相手側に到達したかどうかは 判別できません。 >>2197 玉中 > つまりは、ifconfig コマンドのようなことをやりたいのですが、 ioctl & SIOCGIFCONF でやるか、BSD 系なら getifaddrs(3) ってのが 使えるはずです (OS 名くらい書きましょう)。どちらも http://www.mmjp.or.jp/pearsoned/washo/network/wa_net28-j.html の16章に載ってます。 あとは ifconfig のソースなどを参考にして下さい。 http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/sbin/ifconfig/ |
>>2184 68user >> @a[0] はスライスです。 > ん〜、(@a)[0] とは違うということですか? どちらもスライスだと思うのですが @a は配列のスライスで, (@a) はリストのスライスかと… ただし, どちらも一般的には「配列スライス」で括られると思います。 要は, 単数であっても配列やリストの添え字であった場合には スライスと呼べるだろうという個人的解釈です。 # ↑突っ込み大歓迎モード |
AGEと申します。 Red Hot Linux 7.0J を使用しています。 「ntp-4.1.0.tar.gz」をインストールしてみました。 しかし、rpm のものがあったのでアンインストールしたいのですが インストールされたファイルを知る方法はあるのでしょうか? よろしくお願いいたします。 |
>>2191 68user ServletもCGIと同じくリクエスト毎に起動するのですか? 不勉強でした。セッション管理ができると言うので常駐するものと 勘違いしていました。 >パズルのようにプログラムを組み上げて行く感じです。 そのパズルが難しそう(^^; >>2201 AGE >インストールされたファイルを知る方法はあるのでしょうか? man rpm をどうぞ。 ntpってRHLに標準で入っている(はず)の xntpdとは別物なんですね。 |
>>>2202 スナフキン >man rpm をどうぞ。 すいません。言葉足らずでした。 xntp はインストールされてなかったので、 ntp はソースから make install しました。 その場合のインストールされたファイルを知りたかったのです。 ntp を削除して、管理しやすい xntp(ntp-4.0.99-15〜.rpm)を インストールしようとおもってます。 |
ええと,結局,最新版jcode.plでも半角カナは文字化けしました。 たまたま「シイ」はOKでしたが「アイウエオ」はNGでした。 こちらの掲示板でもたぶん化けると思います。 そこで,前に書いた方法をスクリプトにしてみました。 尚,送信ページには,↓この1行が入っています。 <INPUT TYPE="hidden" NAME="assist" VALUE=" "> VALUEは,全角スペース5個です。 −−−− # コード判別補助文字列名(送信ページと統一,半角英数字に限る) $assi = 'assist'; read(STDIN,$input,$ENV{'CONTENT_LENGTH'}); @parts = split(/&/,$input); # コード判別補助文字列$ASSIST0の取得 foreach(@parts) { ($key0,$val0) = split(/=/); # 最初の=で分離 $key0 =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; if ($key0 eq "$assi") { $ASSIST0 = $val0; } } foreach(@parts) { ($key,$val) = split(/=/); # 最初の=で分離 $val =~ tr/+/ /; # trは1文字単位の置換 # コード判別補助文字列の追加 if ($key ne "$assi") { $val = $val.$ASSIST0; } $key =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; $val =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; jcode::convert(\$key,'euc');#---- from jcode.pl jcode::convert(\$val,'euc');#---- from jcode.pl if ($key eq "$ass") { $ASSIST = $val; } $val =~ s/($ASSIST)$//g; # コード判別補助文字列の除去 $key =~ s/\r\n|\r|\n//g; # gはマッチする文字全て $val =~ s/\r\n|\r|\n//g; $key =~ s/,/,/g; $val =~ s/,/,/g; $key =~ s/</</g; $val =~ s/</</g; $key =~ s/>/>/g; $val =~ s/>/>/g; $key =~ s/"/”/g; $val =~ s/"/”/g; $key =~ s/&/&/g; $val =~ s/&/&/g; $in{$key} = $val; } −−−− これで「ア」などという1文字の半角カナもコード判別できているようです。 もうちょっとスッキリできればいいのですが……。 |
>>2204 shii http://www.din.or.jp/~ohzaki/perl.htm#JP_Code っていうかそのコードには 気になる点がいろいろと・・・ |
>>2205 ナナシサソ リンク先はPerlメモのgetcode関数のところですね。 できれば気になる点を具体的に指摘していただけると とてもありがたいのですが。 |
>>2204 shii 考え方はよいのですが、もちっとスマートにやるなら、 「あ」の文字コードを調べるスクリプト require 'jcode.pl'; $_="あ"; jcode::convert(\$_, 'euc'); s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; print "あ in euc-jp: $_\n"; $_="あ"; jcode::convert(\$_, 'sjis'); s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; print "あ in shift_jis: $_\n"; $_="あ"; jcode::convert(\$_, 'jis'); s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; print "あ in jis: $_\n"; 実行結果: あ in euc-jp: %A4%A2 あ in shift_jis: %82%A0 あ in jis: %1B%24B%24%22%1B%28B # これは他のパターンも有りうるかも を踏まえて、 <input type="hidden" name="assist" value="あ"> としておき、 read(STDIN,$input,$ENV{'CONTENT_LENGTH'}); ($assist_code) = $input =~ s/(^|&)assist=(.*?))($|&)//; if ( $assist_code =~ m/^\%A4\%A2$/i ){ $input_encoding = 'euc'; } elsif ( $assist_code =~ m/^\%82\%A0$/i ){ $input_encoding = 'sjis'; } elsif ( $assist_code =~ m/^\%1B\%24B\%24\%22\%1B\%28B$/i ){ $input_encoding = 'jis'; } @parts = split(/&/,$input); foreach(@parts) { ($key,$val) = split(/=/); $key =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; $val =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; jcode::convert(\$key,'euc', $input_encoding); jcode::convert(\$val,'euc', $input_encoding); } くらいがよろしいかと思います (動作確認はしていません)。 >>2203 AGE > ntp はソースから make install しました。 > その場合のインストールされたファイルを知りたかったのです。 もし Makefile に uninstall とか deinstall とかいうターゲットがあるなら、 # make uninstall # make deinstall ですが、なさそうならば # make -n install して、インストールされるファイルをメモって、手動で rm ですね。 >>2202 スナフキン > ServletもCGIと同じくリクエスト毎に起動するのですか? いいえ、しません。そういう意味では常駐していますね。 しかし、CGI を使うときも apache が常駐していますが、「常駐 システムを開発している」という意識は僕にはありません。それと 同様に、Servlet コンテナが常駐していても「常駐システム」とは 呼ばないんじゃないなぁ、ということです。まぁ、ここらへんの 感覚は人によって違うのかもしれません。 >>2200 /tk > どちらもスライスだと思うのですが えっと、@a[0] と (@a)[0] は違うんですよね? ということです。 要は、 「@a[0] は文法エラーのところを perl があえて $a[0] に読み変えている」 とこれまで思っていたのですが、 「@a[0] は文法的には正しいけれど、$a[0] の方が適当なので perl があえて警告するようにしている」 ということでしょうか? > @a は配列のスライスで, (@a) はリストのスライスかと… perl に配列とリストという区別はあるんでしたっけ。 |
>>2207 68user おお,なるほど!ありがとうございます。 ダミーを送るのなら,それをわざわざ対象文字列に結合しなくても いいわけですね。私が間抜けでした。 文字コードを調べるスクリプトが面白いですね(勉強になります)。 今回の件を自分のCGI向けに最小限にカスタマイズした(つもりの) スクリプトが下記です。 #--------------------------------------------------------- read(STDIN,$input,$ENV{'CONTENT_LENGTH'}); @parts = split(/&/,$input); foreach(@parts) { ($key,$val) = split(/=/); $val =~ tr/+/ /; $key =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; $val =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; $code = &jcode::getcode(\$key); jcode::convert(\$key,'euc',$code); jcode::convert(\$val,'euc',$code,"z"); $val =~ s/\r\n|\r|\n//g; $val =~ s/,/,/g; $in{$key} = $val; } #--------------------------------------------------------- 入力項目名に半角カナ以外の日本語を使用することが前提なので, 汎用性はありません。 getcode関数を全項目に使っているところが余分なのですが, 見た目は,以前に比べてすっきりしました。 ところで, > ($assist_code) = $input =~ s/(^|&)assist=(.*?))($|&)//; ここはassistの中身のみを残して残りを消す作業だと思うのですが, ($assist_code)にカッコがついている理由と, 正規表現内のカッコの数が合わない理由を教えてください。 ・「行の先頭」または「&の直後」にある「assist=」 ・「任意の1文字の0回以上の最短マッチ」 ・「行の終わり」または「&の直前」 と,部分的にしか理解できませんでした。 |
>>2208 shii おいらはこう書くべきと思うけどな my ($assist_code) = $input =~ /(?:^|&)assist=([^&]*)/; どうせassist=なんじゃら、なんて残ってたって関係ないし。 > 正規表現内のカッコの数が合わない理由を教えてください。 ミスだねこれは だいたい、これだと > ($assist_code) = $input =~ s/(^|&)assist=(.*?))($|&)//; $assist_codeに入るのは(^|&)の部分になっちゃう |
>2207 68user >もし Makefile に uninstall とか deinstall とかいうターゲットがあるなら、 > # make uninstall これでうまくいきました。ありがとうございました。 |
メールを送るCGIについて。 フォームに入力されたメールアドレスに対して、Sendmailを使って CGI(Perl)からメールを送る時のことです。 ユーザやホスト名などが間違ったメールアドレスを入力しても、外部の サーバ宛てなら、正常にCGIが終了し、エラーメールが戻ってきます。 ここまでは良いのですが、CGIやSendmailがあるサーバと同じサーバ 宛てにメールを送る場合、アドレスが正しければもちろん正常にCGI は終了し、メールは届きますが、UserUnknownになるようなメールアド レスを指定して送ると、正常にCGIは終了せず、サーバエラーになっ てしまいます。 このようなサーバエラーを回避する方法はあるのでしょうか? どなたか教えて下さい。よろしくお願いします。 |
初めましてpearlともうします。 以下のことで大変困っており、この掲示板にたどり着きました。 どうぞアドバイスをよろしくお願いします。 NTサーバーのあるディレクトリ(aaa)以下の 複数のサブディレクトリ(x1,x2,x3...)にある全てのファイルを 階層構造を保ったまま、Solarisのあるディレクトリにそっくり 移動(転送)したいのです。操作できるのは、Solaris側のみで、 シェルスクリプトによる自動実行を目指しております。 当初は、ftpのオプションで簡単に出来ると思っておりましたが・・。 また、不定期にサブディレクトリおよびファイルの追加があり 出来得るならば、初回以降は差分ファイルの転送だけ行いたい のですが、実現可能な方法をどなたかご教示願えませんか? |
>>2209 ナナシサソ > おいらはこう書くべきと思うけどな そうですね、僕の書いたコードではうまく動きませんでした。 >>2211 ぷよ丸 要はエラーを無視できればよいのですか? 何もエラー処理を 考えずに書けば無視できるのではないかと思うのですが、 具体的にどのように sendmail を実行していますか? >>2212 pearl おそらくは rsync を使うのがベストではないかと思います (使った ことはありませんが)。それがダメなら wget かなぁ。あるいは Solaris に sharity-light を入れて SMB しゃべれるようにして、 NT 側は共有フォルダ (って言うのかな) にしておくとか (これも 使ったことはありません)。 |
「エラー処理を無視できれば・・・」で、ひらめいて、エラーログ を見ながらいろいろとやってると解決できました。 つまり、sendmailでメールを送るときに、同一サーバ宛てのメー ルアドレスが間違っていると、標準出力にUserUnknownのエラーが 書き出され、HTML出力前にそうなるから、エラー(BadHeader のエラーかな?)になっていたんですね。 それが分かったので、HTMLを先に出力してから標準出力を閉じ、 sendmailでメール送るという順序にすることで解決しました。 これだと、sendmailの実行時にエラーが出てもCGIからは無視し た感じになりますものね。 めでたしめでたしで解決したので報告します。 コメントありがとうございました。 これからもよろしくお願いします。 |
>>2207 68user > 要は、 > … cut … > ということでしょうか? そういう事だと思います。 以前書いた時に記述した近藤さんのサイトにも > @a[0]のような書き方はPerlのコードとして正しいものだからです。 と書かれていますし。 > perl に配列とリストという区別はあるんでしたっけ。 ん〜, スカラーで評価した時に, 配列は要素数を返し リストは最終要素を返す。 とかそういう話ではなくてでしょうか? でも, scalar (@a); とか書いたら, しっかり最終要素が吐き出されたので なんか, 自分でも @a と (@a) の違いはよくわかりません。 少なくとも > えっと、@a[0] と (@a)[0] は違うんですよね? はい。そうです。 とは言えなくなってしまいました。 # 読み返すとゴミのような発言ですが, ご容赦下さい。m(_ _)m |
訂正です。 >>2215 /tk > 最終要素が吐き出されたので 要素数が吐き出されたので |
はじめましてです。 『HTTPクライアントを作ってみよう』の辺を参考にHTTPクライアントを 作っているのですが、うまくいきません。 まず、”作ってみよう”の前にtelnetを使ってのところでつまずきました。 % telnet test.hoge.com 80 Trying 123.123.123.10... Connected to test.hoge.com. Escape character is '^]'. GET /test/test.html HTTP/1.0(リターン) とやると、『NOT FOUND』になってしまいます。 ※ブラウザでhttp://test.hoge.com/test/test.htmlは表示される。 ※ちなみに、http://123.123.123.10/test/test.htmlは『NOT FOUND』 おそらく、Apacheでヴァーチャルホストで設定しているのだと 思いますが、このような場合どのようにすればよいのでしょうか? 以上 宜しくお願いいたします。 |
>>2217 QDAK GET / HTTP/1.0(改行) Host: test.hoge.com(改行) (改行) |
>>2207 68user 「常駐システム」という言葉が悪かったですね、訂正します。 >Servlet コンテナが常駐して あえて言えば mod_perlに近いのでしょうか? まあ、そのうちに勉強して理解できるように頑張ります。 #なかなか時間が取れませんが… >>2217 QDAK ナナシサソ(舌を噛みそう(^^;)さんも書いていますが、 http://X68000.startshop.co.jp/~68user/net/http-4.html の「さらなる改善点・バーチャルホストに対応」をどうぞ。 |
>2213 アドバイス有り難うございました。検討した結果使うことは出来ませんでしたが大変勉強になりました |
はじめまして。 「UNIXの部屋」でコマンド集を ”かなり”の量コピーさせていただきました。現場用サブnoteに保存して活用いたします。 また何か困ったことがあればここに来ると思いますがそのときはよろしくお願いします。 ありがとうございました。 |
crontab -e user でcronを登録したのですが起動するときにどうも環境設定が user で ログインした状態と違うみたいです。 .cshrc を取り込まずに cron が 動いてるらしくパスやら環境変数やらまるで違うのです。 そこで以下のようにむりやり設定するようにしたのですが 35 18 * * * setenv LANG ja;setenv ・・・ 結果は駄目でした。 cronが起動される際の環境設定(環境変数やパス)はどこでどうやって 設定するのか分かりますか? |
下記No.2222 は解決したので無視してください。 申し訳ありません。 |
1./usr/local/reg/env/.cshrc.sun中で設定され ている a-e, l, m で始まる alias を実際の file に基づき説明 せよ(Mule の複数バッファの機能やカット,ペーストの機能を利 用すると良い). 2.ヒストリ機能で直前のコマンドを少し変更する方法を 調べろ.(cp foo bar と入力する代りに cp ffo bar と入力して しまった場合等に便利) 3.*等のグロッビング用の文字を普通に入力するための方法を 調べろ(ファイル名が * のものを作成せよ.ただし,Mule は使 用しない.set noglob もしない). 4.(t)csh において,~ は特別な意味を持つ文字である.この意 味を調べろ(複数あるかもしれない). (参考)Emacs には,shell という関数や manual-entry という関数が存在する. 1〜4 に対する回答を,Subject が Report 5 なる mail で, 10/25(木)までに ip-rep@j-lab.ee.aoyama.ac.jp に送ること. |
No.2224は学校の課題なんですが、メールは送らないでください。このアドレスは先生のなので、意味がないのです。僕は生徒で、答えがわかったら掲示板に書いてください。お願いします。 |
「掲示板に書いてください。」って・・・ 日本語の勉強が先だよな・・ 先生に苦情を送っちゃっていいですか? |
どうもすいませんでした。昨日からずっとインターネットで調べていたのですが、解らなかったので甘い考えでした。でも、自力でやって、二番だけわかったんですよ。やっぱりだめですよね楽しようとしたら。お返事まってます。 |
でも、愚痴を言っていいですか?先生って授業でやってないことを、レポートにすゆんですよ!!パソコン初めてやってるひとにっとっては、とっても大変なんですよ。学校には聞ける友達もいないし・・・どうしたら・・って考えたら、エキスパートに聞くのが一番かなって!でもいつも徹夜とかでやっても、間違ってると零点にするんですよ!努力を認めてくれないんですよ。ナナシサソさんは、UNIXできる方なんですか? |
ちなみに、二番のこたえは、 「Ctrl-P(以下C-p)を押すとhistoryの前に入力したコマンドが現れる直前に入力 したコマンドをcp foo bar と入力する代りに cp ffo bar と入力して しまった場 合には、C-pを押してcp ffo barのffoをoffと書き換えればよい。」 であってますかね。よろしければ、採点のほうよろしくお願いします。 |
>>2229 n > 学校には聞ける友達もいないし・・・ UNIX を勉強するより、 - 詳しい友達を見付ける。 - それほど親しくない友達でも、課題提出前くらいは親しげに話しかけられる ような社交性を身につける。 - 課題だからといって、問題をそのまま掲示板に書き込んでも反感を買うだけ、 ということを書き込む前に推測できるようになる。 - 仮に課題だとしても、そうは見えないようにうまくカムフラージュ できるような文章力を身につける。努力しているという姿勢を アピールする。 といったことを学ぶべきじゃないですかね。いや、ほんとに。 というわけで、 http://cocoa.2ch.net/unix/index.html あたりで再チャレンジしてみては。 |
どうもご迷惑をかけました。ひとつお願いがあります。これからは、ホントに解らない事だけを聞くので、これからもこの掲示板に書き込みたいのです。よろしくお願いします。68USERさん本当にアドバイスありがとうございます。これからは、気おつけます。これからもよろしくお願いしますと、言いたいのですがいいですか?ダメでしたら素直に書き込みはやめます。ちなみに、今回いのレポートは二番だけで送りました。くどいようですが、すいませんでした。そして、ありがとうございます。 |
「ネットワークプログラミングの基礎知識」で勉強させていただきました。とてもわかりやすくて入門にはピッタシカンカンでした。 難しかったのは、ソケットからの入力のバッファリングをOFFにする部分。以下のような説明をされてましたね。 > 26: select(SOCKET); $|=1; select(STDOUT); >ソケットに対してバッファリングしないようにします。 >これもおまじないだと思って下さい。 なかなかこれを理解できずにいたのですが、「プログラミング Perl 2nd」P146によると >autoflush HANDLE EXPR という関数があるらしいですね。"use FileHandle;"宣言が必要ですが・・。 autoflush SOCKET 1 ↑これなら、"おまじない"じゃなくて意味が通じ易くなるかもしれませんね |
おまじないというと、現時点で目先の理解の妨げになるから今はわからなくていいみたいな意味で書籍などでも使われてると思うので意味を通じさせるつもりは無いと思うんですよね。 説明が面倒(できない)でおまじないと言ってるわけじゃないですから。 でも、おまじないと言われて「ここでおまじないするのか」と素直に理解する人もあんまりいないですよね。 こういう時が、自分で調べ初めて自分で答えを見つける習慣を身に付けるチャンスになってるとおもうので良い表現だと思いますが。 |
>>2233 りょうすけ >説明が面倒(できない)でおまじないと言ってるわけじゃないですから。 ええ。そうですよね。"おまじない"という表現に異論はありません。枝葉の部分まで細かく説明するとかえってわからなくなっちゃいますもんね。 まぁ、プログラムの可読性という面でいうとautoflushも明快で良いかな?と思っただけです。(でも動作の仕組みを理解するにはselectでファイルハンドルを操作したほうが勉強になるのかも・・) |
こんにちは。 http://x68000.startshop.co.jp/~68user/net/rfc.html から リンクして頂いているThe WAYというサイトの管理人です。 このたび、RFC2616の日本語訳のURLが http://www.studyinghttp.net/rfc_ja/2616/ に変更いたしました。 是非リンクの変更をよろしくお願いします。 |
UNIX プログラミング FAQのサイトが http://www.adl.rd.nacsis.ac.jp/~moro/unix-programmer/faq-j_toc.html に移転しているようです。 |
また質問ですいません。 ActiveState 以外の Windows 用 Perl で、 自由に配布できるものってなにがおすすめでしょうか? 友人が自費出版本に CD-ROM を付けて売りたいのですが、 ActivePerl のライセンスがやたら面倒くさく、 (なんか 20 ページの英語の書類を書いてどうこう、、という、 手続きぐらいしろよって話なんですけど) なんとかならないか、という話です。 勝利条件としては ・Perl 5.005 移行で ・Windows で動き ・Jcode.pm が動く ということらしいです。 DJGPP 版、というのもあるようですが、 DOS 用ということで 16bit ですよね。 制限きついのかな、、? Cygwin はぁ、、? と聞いてみましたが、 Cygwin はその説明(bash の説明とか)だけで本1冊書かないといけない、 そうです。(そうかぁ、、?) でも cygwin.dll だけあれば Perl は動くのかな? (そういうインストーラー作れるかな?) (そんな部分的な部分を再版しても Cygnus 的に大丈夫なのかな?) もしご存知の方がいらっしゃればご教示ください。 LSI-C とか Borland C++ のフリー版とかで Perl をコンパイルしてみようかな、、。 |
あーなんかボケボケ書いたかも、、(DJGPP あたり、、) また落ち着いて謝りにきます、、;;; |
こんにちは Perlについて質問させてください。 %aa=(a=>1,b=>2,c=>3); %bb=(a=>4,b=>5,c=>6); %cc=(%aa,%bb); これでは%cc は a=4,b=5,c=6 のように上書きされてしまいます。 %cc が a=5,b=7,c=9 になるようにするにはどうしたらいいのでしょうか よろしくお願いします。 |
#質問で迷惑掛けてるので答で貢献;;; mo さん、はじめまして。 %aa=(a=>1,b=>2,c=>3); ていうことは、 $aa{a} = 1; $aa{b} = 2; $aa{c} = 3; と同じです。 a = 1; b = 2; c = 3; ではないです。 %aa はハッシュというものを作っています。 お手もとの参考書などで「ハッシュ」という言葉を調べてください。 で、%bb=(a=>4,b=>5,c=>6); ていうことは、 $bb{a} = 4; $bb{b} = 5; $bb{c} = 6; と同じです。 %cc=(%aa, %bb); ということは、上の結果、 %cc=(a=>1,b=>2,c=>3,a=>4,b=>5,c=>6); と一緒なので、 $cc{a} = 1; $cc{b} = 2; $cc{c} = 3; $cc{a} = 4; $cc{b} = 5; $cc{c} = 6; と一緒なので、結局 $cc{a}、$cc{b}、$cc{c} は2回代入されるので、 後のほうが有効になって、 $cc{a} = 4; $cc{b} = 5; $cc{c} = 6; となっているわけですね。 で、この場合、$cc{a}、$cc{b}、$cc{c} には、 それぞれ $aa{a}、$aa{b}、$aa{c} と $bb{a}、$bb{b}、$bb{c} の 合計が入って欲しいわけだから、 %cc = (a => $aa{a}+$bb{a}, b => $aa{b}+$bb{b}, c => $aa{c}+$bb{c}); とするか、 foreach (a..c) { # $_ が a から c までくりかえし実行 $cc{$_} = $aa{$_} + $bb{$_}; } とするか、%aa、%bb にどんなキーが入っていてもいいことにするには foreach (keys %aa) { # $_ に %aa のキーを次々に入れながら繰り返し実行★ $cc{$_} = $aa{$_} + $bb{$_}; } とするか、 %cc = map {$_ => $aa{$_} + $bb{$_} } keys(%aa); とするか。 ★がついたのが一番おすすめか? foreach、keys、a..c、map については適当な本を調べてください。(ひでえ、、) とりあえず foreach (a..c) { print "$_\n" } とか foreach (keys %aa) { print "$_\n" } とか、 @x = (1..5); @y = map{ $_ * 2 } @x; foreach (@x) { print "$_\n"; } とか動かしてみると面白いと思います。 #もっとあっと驚く回答があったら教えてください |
すいません 下で foreach (a..c) { と書いているのは foreach ('a'..'c') { と書かないと怒られます。(警告だけで、動作はするようです) ようは、a、b、c は変数の名前でなく文字列で、 %aa、%bb、%cc というハッシュのキーですね。 %aa というハッシュの、キーが 'a' の値にアクセスするには $aa{'a'} と書きます。ただしこの場合 a はハッシュのキーであると はっきりしているので $aa{a} と省略形で書けます。 同じハッシュでキー x の値に 550 を、キー y の値に 660 を入れるには キーと値を交互に指定するリストを使って %aa = ('x', 550, 'y', 660); と書きますが、キーと値の関係をはっきりさせるために カッコの変わりに => という記号を使えば %aa = ('x' => 550, 'y' => 660); と書けます。で、この場合は => の左側はハッシュのキーなので 省略して %aa = (x => 550, y => 660); とも書けるわけです。 でも、この '' 省略方式だと、 空白を含むキーが使えません。 %kg = ('yamada tarou' => 80, 'satou tamao' => 50); だと $kg{'yamada tarou'} に 80 が、$kg{'satou tamao'} に 50 が 入りますが、 %kg = (yamada tarou => 80, satou tamao => 50); だとエラーが出て動きません。 $kg{yamada tarou} も怒られて動きません。 下のプログラムで a, b, c というのは、 ハッシュのキーで「文字列」であることを覚えておいてください。 |
ふくしさん、 こんにちわ map の使い方はまだ理解できませんが ★のコードは理解できました。 ありがとうございました。 |
はじめまして。 2日前から調べているのですが、解決できずにここにたどり着きました。 CGIからCGIへデータを渡す際に print "Location: test.cgi?data=1\n\n"; ではなくPOSTでデータを渡したいのですが Socketを使うというのを発見し、いろいろ試したのですが まるで駄目です。(Socket自体、今まで使用したことも無いので(^^;) 具体的には送信元のCGIをindex.cgi、受信するCGIをtest.cgiとしますと index.cgiに下記のような記述をしてみたのですが test.cgiには何を書いてよいのかすら分かりません。 ご教授頂けないでしょうか よろしくお願いします。 ================================ #!/usr/local/bin/perl use Socket; $server='www.*****.com'; $port = 80; $port = getservbyname($port,'tcp') unless $port =~ /^\d+/; $iaddr = inet_aton($server) or die "$serverは存在しないホストです。\n"; $sock_addr = pack_sockaddr_in($port,$iaddr); socket(SOCKET,PF_INET,SOCK_STREAM,0) or die "ソケットを生成できません。\n"; connect(SOCKET,$sock_addr) or die "$serverのポート$portに接続できません。\n"; select(SOCKET); $|=1; select(STDOUT); $file='test.cgi'; $query='data=1'; $len=length($query); print SOCKET "POST $file HTTP/1.0\r\n"; print SOCKET "Content-Length: $len" . "\r\n\r\n"; print SOCKET "$query"; ================================ |
こんな感じでは? if ($ENV{'REQUEST_METHOD'} eq "POST"){ read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } @pairs = split(/&/, $buffer); foreach $pair(@pairs){ ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; } $data = $FORM{'data'}; って、よくある掲示板のパターンですけど。(はずしてたらごめんなさい) というより、index.cgi は普通にフォームを使うだけでことは足りないのでしょうか? (Socket を使わずに) |
補足・その他です(^^; main.cgi→index.cgi→test.cgi となっていて main.cgiでフォームを使いindex.cgiにpostでデータを送信しています。 この受け取ったデータをtest.cgiにそのまま渡したいのですが、 その方法で悩んでいます。 test.cgiはメンバー入り口で受け取った会員ナンバーによって それぞれのページデータを読み込み表示するスクリプトになっていますので 直接 http://***.com/test.cgi?ID などとされて入室されるのは避けたいのです さらに考えた結果、index.cgiとtest.cgiをまとめてしまえば良い事に気付きました(^^; ですが、今後の為にもSocketを使えるようになりたいので もうちょっと努力してみます。 iwtaさんありがとうございます。 受け側では標準入力で良いのですね。 <SOCKET>をいろいろいじってみたりしてました。。。 ということは受けるほうでは use Socket; は不要なのでしょうか Socketの文献をいろいろ読んだのですが、POSTについての情報がどこも少なく (英文は読んでませんが) いろいろとお尋ねしてお手数をおかけします。 |
>>2232 名無しさん ご指摘ありがとうございます。どうやってわかりやすく説明するかは 非常に悩むところですね。autoflush は「存在自体あまり知られてない」 という痛い欠点があり、難しいところです。次回更新時に何かしら わかりやすい解説を書きたいと思っています。 >>2235 H-Hash > このたび、RFC2616の日本語訳のURLが > http://www.studyinghttp.net/rfc_ja/2616/ に変更いたしました。 ご連絡ありがとうございます。修正いたしました。 >>2236 Ka23 > UNIX プログラミング FAQのサイトが > http://www.adl.rd.nacsis.ac.jp/~moro/unix-programmer/faq-j_toc.html > に移転しているようです。 こちらもありがとうございます。後ほど修正しておきます。 >>2243 sio test.cgi は同じサーバにあるのですか? で、ブラウザから直接呼び出すこと はないのですか? ならば CGI じゃなくてただのスクリプトですので、 main.cgi からは open(IN, "/foo/bar/test.cgi ID |"); と呼び出せばいいでしょう。ソケットを使う必要はありません。 もし test.cgi が同じサーバにあって、これまでは CGI として動いていたけ ど、これからはブラウザから直接参照させたくない、ということならば、 $ENV{REQUEST_METHOD}='GET'; $ENV{QUERY_STRING}='data=1'; open(IN, "/foo/bar/test.cgi |"); と、WWW サーバの代わりに適切な環境変数をセットしてからスクリプトを実行 してやればよいでしょう。 test.cgi が別サーバにあるならば、直接スクリプトを実行することはできな いので、そのときはソケットを使いましょう。 > print SOCKET "POST $file HTTP/1.0\r\n"; > print SOCKET "Content-Length: $len" . "\r\n\r\n"; > print SOCKET "$query"; 送ったはいいけど、これでは結果を受け取っていませんし、ブラウザに何も表 示していません。 while (<SOCKET>){ # ヘッダを捨てる m/^\r\n$/ and last; } print "Content-type: text/html\n\n"; while (<SOCKET>){ # ボディのみ表示 print $_; } とかいうのをこの後に付けて下さい。 > POSTについての情報がどこも少なく あまり書くことがないからでしょう。気を付けるのはContent-length を付け ること、くらいじゃないでしょうか。 あと、CGI 経由で HTTP クライアントを開発するのはやめましょう。まずはコ マンドラインから動くような HTTP クライアントを作り、完成したら CGI 経 由でも動くように改造しましょう。でないと、問題の切り分けが非常に面倒に なります。 |
68userさんありがとうございます。 やりたい事が全てご指摘通りです(^^; open関数のパイプの使い方すら知りませんでした。 今やっと説明されているページを見つけ http://www.kt.rim.or.jp/~kbk/perl5.005/perlipc.html 勉強中です。 Socketについてもようやく理解できました。 データを受け取った側で、ブラウザ処理をしようとするから 訳が分からなくなっていたようです。 今日はperlに浸かり勉強する日にします p(..) |
X Window Systemを立ち上げるときに、 (**) stands for supplied (--) stands for probed/default values (**) ... (**) ... というメッセ-ジが出て立ち上げることができません。 これはいったいどういうことなのでしょうか。 |
正確には (**) stands for supplied, (--) stands for probed/default values (**) ... (**) ... でした。 |
>>2247 sio > データを受け取った側で、ブラウザ処理をしようとするから > 訳が分からなくなっていたようです。 まず、全体の構成を見直すべきでしょうね。 - main.cgi に統合する。 - test.cgi はユーザ名を引数で受け取り、ログイン可能なら 戻り値 0 を、ログイン不可なら戻り値 1 を返す。 などと現在の仕様を比べ、一番良さそうなものを採用しましょう。 >>2249 初心者 > (**) stands for supplied, (--) stands for probed/default values それは起動時に (成功・失敗にかかわらず) 必ず表示されるメッセージです。 また、OS などの環境が何も書いていないので、答えられる人は いないでしょう。 # 僕は XFree86 やらビデオカードやらには詳しくないので、 # 書いてもらっても答えられないかもしれませんが。 |
こんにちは。いつもお世話になってます。 Perlについて質問があります。 各ファイルに ”ー1”と ”ー2”が含まれた行があって、それを区切りに2つのファイルに分けたいのですが、なかなかうまくいきません。 EXAMPLE: *File0001の内容ーー 0001ー1 C100 Open C101 NG 0001ー2 C102 Open C103 Open *File2の内容ーー 0002ー1 C200 Open C201 NG C202 Open 0002ー2 C203 Open C204 NG この0001と0002の2つのファイルを0001ー1と0001ー2、0002ー1と0002ー2の4つのファイルに分けたいのです。 下のスクリプトは全然間違ってるのですが、/-1/ と /-2/ があった行数を記憶して、後から 行の番号を比較してどうにか区切ろうと思ったのですが、やっぱり最初は$barcode22=0だし、全然駄目です。 普通、どのようにするのか教えて頂けませんか? よろしくお願いします。 sub read_file_to_array { my($file)=$filename; open (FILE, "<$dir\\$database\\Defect\\$file") or die "Can't open $file\n"; $line=0; while (<FILE>){ if ($_ =~ /-1/) {$barcode11=$.}; if ($_ =~ /-2/) {$barcode22=$.}; if ($line > $barcode22) {print "$_ ";}#試しにSTDOU#に出力してみるだけ } $line++; } |
動くかわからんけどとりあえずできた sub read_file_to_array { #←? my $file = shift; open (FILE, "<$dir\\$database\\Defect\\$file") or die "Can't open $file\n"; open (OUT1, ">$dir\\$database\\Defect\\${file}_1") or die; open (OUT2, ">$dir\\$database\\Defect\\${file}_2") or die; my ($flag1, $flag2); while (<FILE>) { if ( /-1/ ) { $flag1 = 1; } if ( /-2/ ) { $flag2 = 1; $flag1 = 0; } if ($flag2) { print OUT2; next; } if ($flag1) { print OUT1; next; } } } |
うぎょぎょ。。if ($flag2) {〜の部分の順番が逆になっちゃってるし。ダサ・・ closeしてないし・・終了時に閉じられるから大丈夫かアハハ |
>>2251 ミング 必ずデータの先頭が .*-1 か .*-2 であるなら while (<FILE>) { if ( /-[12]/ ){ chomp; open (OUT, ">$dir\\$database\\Defect\\$_") or die; next; } print OUT; } かなぁと思うんですが、違うかな? 業務用プログラムかだとちゃんとエラーチェックしないとまずい でしょうが、データの内容がある程度保証されているなら、こんな テキトーな感じでよろしいかと思います。 |
ナナシサソさん、68userさん 出来ました!! ご指導どうもありがとうございました。 |
二日連続の質問になってしまいますが、よろしくお願いします。 No.2251のInput file名は"Ab00010", "Cd00020", のように文字と数字からなっているのですが、Outputは別のDirに"Ab00010" "Ab00011" "Cd00020" "Cd00021"というように、/-2/の部分は”元のファイル名+1”というファイル名にしたいのですが、、、、 800ページあるらくだの本も一応買ってきたのですが全然分からないので、ウェブサイトで調べてみたのですが、唯一これかな?と思ったのが: $string="abcd771gfds"; $string=~/(\W+)\s+(\d+)/; とすると、$1=abcd, $2=7771, $string=abcd771gfds になる、とあったんですが、 試してみると$1=" ", $2=" ", $string="4294967295"になってしまい、訳が分からなくなってきたのですが、これは全然違うアプローチなんでしょうか? どうしたら ”Ab00011”が作れるんでしょうか? |
$flag == 2 ? $string ++ : ; でいいと思う・・ゲロゲロ |
UNIXの歴史について、知ってる範囲で教えてください。 できれば、メールの方がありがたいです。 |
>>2257 ナナシサソ でもアルファベットと数字からなってるので、数字だと見てくれないみたいなんですけど、、、 |
>>2259 ミング Perlは妙なことが出来たり・・ 多分うまくいくと思うんだけどな・・ |
ミングさんはじめまして。 まず abcd771gfds の件です。 #!/usr/bin/perl $string = "abcd771gfds"; $string =~ /(\W+)\s+(\d+)/; print "1:<$1> 2:<$2> string:<$string>\n"; を動かすと 1:<> 2:<> string:<abcd771gfds> と出ました。 \W+ は、英数字(word)以外1文字以上なので、なくてあたりまえ。 \s+ は、空白文字(space)1文字以上なので、なくてあたりまえ。 \d+ は、数字(digit)1文字以上だが、前に \W も \s もないのでダメ。 もし、$1 に abcd、$2 に 771(7771 は間違い?)を入れようとするなら、 $string =~ /^([a-zA-Z])(\d+)/; とかでしょうか。 ^ は文字列の先頭を示します。 これをやらないとどこからサーチしはじめるかわからん。 [a-zA-Z] は英字。\d は数字。 (わー、目からウロコ。英字のカンタンな文字クラスってないんですね) #!/usr/local/bin/perl $string = "abcd771gfds"; $string =~ /^([a-zA-Z]+)(\d+)/; print "1:<$1> 2:<$2> string:<$string>\n"; を動かすと 1:<abcd> 2:<771> string:<abcd771gfds> となりました。 |
ミングさん、つぎにファイル名生成の件です。 もっとカッコいいプログラムはいくらでもあるかと思うんですが、 ここではわかりやすく確実に動くのを取りました。 #!/usr/bin/perl $fname = "Ab00010"; $fname =~ /([a-zA-Z]+)(\d+)/; $fname_a = $1; # 英字部分 $fname_n = $2; # 数字部分 $fname_n++; # 数字部分に1加算 $fname_n = sprintf "%05d", $fname_n; # 先頭にゼロを詰めて5文字に $fname = $fname_a.$fname_n; print "fname: $fname\n"; $fname_n++; # 数字部分に1加算 $fname_n = sprintf "%05d", $fname_n; # 先頭にゼロを詰めて5文字に $fname = $fname_a.$fname_n; print "fname: $fname\n"; $fname_n++; # 数字部分に1加算 $fname_n = sprintf "%05d", $fname_n; # 先頭にゼロを詰めて5文字に $fname = $fname_a.$fname_n; print "fname: $fname\n"; 実行してみます。 fname: Ab00011 fname: Ab00012 fname: Ab00013 ポイントは sprintf でしょうか。 これは文字列をいろんな形で整形しますが、汎用性が高すぎるので、 sprintf "%0n", m; n はケタ数、m は数字 で、m を n ケタ、ゼロ詰めで表示するとだけ今はご説明します。 ただですね、これだと1ファイルが10個以上のサブファイルに分けると Ab0002n に突入してしまって、 もし Ab00020 という元ファイルがあると名前が衝突しますが、 それはいいですか。 |
>>2258 オハツ > UNIXの歴史について、知ってる範囲で教えてください。 「UNIXの1/4世紀」 http://www.ascii.co.jp/books/detail/4-7561/4-7561-3659-1.html を読みましょう。 |
ふくしさん、ナナシサソさん、 ご教授どうもありがとうがざいました。 やっと出来ました。 とても分かり易く助かりました。 今後もいろいろと宜しくお願いいたします! |
はじめまして。教えていただきたいことがあります。 こちらを参考に、perlのネットワークプログラムを作りたいと思っています。OSはPlamo Linux、perlは5.005です。 やりたいのはローカルネットワーク上に、ブロードキャストでメッセージを送って、ポートを開いている全部のコンピュータがそのメッセージを受信するというものです。 試験として #!/usr/local/bin/perl use IO::Socket; $socket = IO::Socket::INET->new( PeerAddr => '192.168.0.255', PeerPort => 2425, Proto => 'udp', ); if ( ! $socket ){ die "接続できませんでした。 $!\n"; } print $socket "test"; $socket->flush(); $socket->close(); と、いうのを動かしてみました。ブロードキャストである192.168.0.255ですから、2425でポートを開いている他のPC(VBのwinsockを使いました)にtestが表示されるかと思ったのですが、 > 接続できませんでした。 不正なファイルデスクリプタです というエラーが返って来てしまいます。 このエラー、192.268.0.3の様にIPを指定すると、出現しません。 いろいろとサーチエンジンなどもあたったのですが、どうしてもこの原因がつかめず、困っています。 perlを使って、udpとブロードキャストアドレスでネットワーク通信されている方がいらしたら、ブロードキャストアドレスをどうやって指定しているか、教えていただけませんでしょうか? よろしくお願いいたします。 |
>>2265 武田一浩 broadcast するときは、socket option の設定 $socket->setsockopt(SOL_SOCKET, SO_BROADCAST, 1) || die "$!"; が必要です。 IO::Socket じゃなくて普通の Socket モジュールを使うなら setsockopt($socket, SOL_SOCKET, SO_BROADCAST, 1) || die "$!"; ですね (これは IO::Socket で生成したソケットに対しても有効です)。 ただ、こちらで試した限りでは、 > 接続できませんでした。 不正なファイルデスクリプタです というエラーは出ませんでした。if ( ! $socket ) でエラー になっているということは、何か別の原因があるような気がします。 ちなみに printf $socket "1:%d:name:hostname:%d:ext\0group", time(), 0x1; で参加通知です。 |
No. 2266 # 68user さん、リプライありがとうございます。 次の様に修正してみました。 #!/usr/local/bin/perl use IO::Socket; $socket = IO::Socket::INET->new( PeerAddr => '192.168.0.255', PeerPort => 2425, Proto => 'udp', ); $socket->setsockopt(SOL_SOCKET, SO_BROADCAST, 1) || die "$!"; if ( ! $socket ){ die "接続できませんでした。 $!\n"; } printf $socket "test"; $socket->close(); 結果は、 Can't call method "setsockopt" on an undefined value at ./udptest.pl line 11. でやはり駄目でした。 192.168.0.255のアドレスを、特定のPCのIPに設定すると、そのPCにはtestの表示が出ますから、スクリプトそのものにはエラーがないのだと思いますが、なぜか私の環境ではブロードキャストアドレスが使用できない(?)のではないかと思います。 とりあえず、Perlやスクリプトには異常がなさそうなので、Plamo Linux のMLにでも質問をあげてみることにします。 ありがとうございました。 |
・・ <% strPathName = "HTTP://××/××/××/○○○.xls %> <a href=<% =strPathName%> ><% = strData(cnt)(0)%></a> ・・ </html> 上記のようにリンクしたいパス名を設定しました。 やりたいことは、 既存のダイアログ『ファイルのダウンロード画面 次の場所からファイルをダウンロードするように選択しました』 を表示させてからExcelを表示したいのですがどうしたらいいですか? 現象として、 すぐにExcelが表示されてしまいます。 |
はじめまして、どうしても分からない事があるので質問させて下さい。 HTMLの中にSSIでCGIのファイルを読み込ませようとしたのですが <!--#include file="test.cgi" --> だとOKなのですが <!--#include file="test.cgi?id=kouji" --> のように引数を付けると [an error occurred while processing this directive] とエラーになってしまいます。 「?」の部分からエラーが表示されるのですが、これを回避する方法を教えて下さい。 webも調べてみたのですが、結局分かりませんでした。 http://tohoho.wakusei.ne.jp/wwwssi.htm こちらの下の方に書いてあるexecの例で >○ <!--#exec cgi="xx.cgi"--> >× <!--#exec cgi="xx.cgi arg1 arg2"--> >× <!--#exec cgi="xx.cgi?arg1+arg2"--> >× <!--#exec cmd="xxx.pl"--> >○ <!--#exec cmd="/bin/xxx arg1 arg2"--> >○ <!--#exec cmd="./xxx.pl arg1 arg2"--> これの○で書いてあることみたいに引数を渡そうとしても駄目でした・・・ よろしくおねがいします。 |
なんでも聞いてすいません。 Windows 2000 以降についてくる「メモ帳」の「名前をつけて保存」では、 ISO-2022-jp および Shift_JIS(正確には Windows 932 および Windows 1152)のことを 「ANSI」と呼び習わしていますが、これはどういう経緯でしょうか? ANSI といえばアメリカの工業規格で、ASCII や ISO-8859-1 を規定してるもんだと 思い込んで生きてきましたが、Delphi の入門本とか ML とかを見ても 「ANSI 文字列を Unicode に変換、、」とかいって、 Windows で使える Unicode 以外の文字、という意味で ANSI 文字列、 と書いてあるようなんですが、この言葉は正しい業界用語なんでしょうか? それとも Windows ローカル語? この言葉のスコープはどこまでなんでしょうか? 「メモ帳」といえば UTF-16LE-BOM のことを「Unicode」、 UTF-16BE-BOM のことを「Unicode Big Endian」、UTF-8 のことを「UTF-8」と言ってますが、 これなんかも業界用語なのか Windows 語なのか単なるメモ帳の開発者の気の迷いなのか わかりません。(あ、でも Word も共通なんだよな、、) 場違いでしたら情報のポインタや、討議するのにふさわしい掲示板等教えてください。 よろしくお願いいたします。 |
とても素人で、申し訳ないのですが、ご存知の方がいらしたら、教えて下さい。ハードは、IBM社のRS/6000を使用しています。kシェルを作成して下記の作業を行いたいと考えています。 複数のテ゛ィレクトリーに10〜30のファイルが存在しています。 各ファイル中に/usr/kokyakuと記述があれば、/usr/okyaku と変更したいと考えています。sedコマンドを利用すればそれぞれのファイルの中身を変更させることは可能であることは、分かったのですが、対象の ファイル数が多い為、該当のディレクトリーにcdし、 grep -l'/usr/kokyaku' * > filename などで、対象ファイル名を保存したファイルを作成し、そのファイルを自動的に読み込んでファイル名をいちいち指定せずにsedコマンドを実行でき ないものでしょうか?awkコマンドでファイル名が保存されているファイルを読み込み、sedコマンドの出力ファイルを$1の名前にするなどは可能なのでしょうか? ちなみに、イメーシ゛的には、カレントディレクトリーの下のファイル(*)の内容を自動的に置換してほしいのですが… sed 's/\/usr\/kokyaku/\/usr\/okyaku/g' * >*の出力 つたない説明で、申し訳ありませんが、お知恵を頂けたらありがたいです。 |
みーさん: Perl ですいません、一応テストもしました。 ミソは find コマンドの出力を ` ` で配列に入れて for で処理している、、(フツーやんねえかな、、) #! /usr/local/bin/perl -w # kokyakuokyaku $tmp = "TempFileDayooon"; # 中間ファイル。存在しないファイル名を選ぶこと for $file (`find . -print`) { chomp; if (-f $file) { open FILE, $file; open TMP, ">$tmp"; while (<FILE>) { s|/srv/kokyaku/|/srv/okyaku/|g; print TMP; } close TMP; close FILE; rename $tmp, $file; } } |
(一応)ふつー File::Find 使うよね。知ってるー (^^;;; |
ふくしさんどーもありがとうございました。大変申し訳ないのですが、findコマンドの使い方をよく理解していないので、どなたかお教え頂けないでしょうか?私の理解としては、ディレクトリー内の条件にあったファイルを探す時に使うコマンドだと思っていたので、例えば、頭に’m*’がつくファイルを探したりする時に使用するものだと思っていました。1つあるいは複数のファイルから、指定パターンに合致した行を探しその対象のファイル名を表示させる為には、grepしか使用出来ないと思っていたのですが、findコマンドで、ファイル(シェル)中に/usr/kokyakuと記述されているファイル名をfindコマンドで探す場合は、どのように記述すればよいのでしょうか? また、ふくしさんの記述して下さった各行の処理内容をもう少し詳細に教えて頂けないでしょうか?お手数をおかけいたしますが、よろしくお願いいたします。 |
>>2267 武田 一浩 $socket = IO::Socket::INET->new( PeerAddr => '192.168.0.255', PeerPort => 2425, Proto => 'udp', ) || die "$!"; とした方が、どこでエラーが出ているかを把握しやすいでしょう。 > とりあえず、Perlやスクリプトには異常がなさそうなので、 そうですね。perl か OS の問題ではないかと思います。 あと、ifconfig -a して、デバイスに fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 と、「BROADCAST」が付いていてブロードキャストに対応していることを 確認して下さい。もしかして ppp デバイスだったりすると付いてないかも。 >>2268 もみの木 > 現象として、すぐにExcelが表示されてしまいます。 要は、ASP は全く関係なくて <a href="HTTP://××/××/××/○○○.xls">hoge</a> というリンクをクリックしたときの挙動ですよね? Windows は よくわからないので、 http://www.parkcity.ne.jp/~chaichan/bin/qanda.cgi?modefg=9 で質問した方がよろしいと思います。 あとの話題は後ほど。 |
みーさん: なんかすいません。 たぶんぼくのやり方すごく非標準的なので、 もっとカッコいい方法はいくらでもあると思うんですが、、 find はファイル名の検索、 grep はファイルの中の文字列の検索、 で、合ってます。 ぼくのスクリプトでは各ファイルの中での文字列検索/置換を 自分で書いています。(while のあたり) #! /usr/local/bin/perl -w # kokyakuokyaku $tmp = "TempFileDayooon"; # 中間ファイル。存在しないファイル名を選ぶこと for $file (`find . -print`) { chomp $file; # すいません、ココ、間違ってました if (-f $file) { open FILE, $file; open TMP, ">$tmp"; while (<FILE>) { s|/srv/kokyaku/|/srv/okyaku/|g; print TMP; } close TMP; close FILE; rename $tmp, $file; } } `UNIXコマンド` …バッククォート(`)でUNIXのコマンドを囲むと、 出力結果をリストで返す for $変数 (リスト) { ...なんだかんだ... } …リストの要素を1個ずつ $変数 に入れながら、 「なんだかんだ」の部分を繰り返す。 上では find の結果を1行ずつ $file に入れて処理している。 それはカレント ディレクトリ以降のファイル/ディレクトリである。 % find . -print …カレント ディレクトリ以降のファイル/ディレクトリを一覧表示する。 chomp $file; …$file(find の結果の1行)の末尾から改行を取り除いて、 ファイル/ディレクトリ名として正しいものにしている -f 文字列 …「-f」はファイルテスト演算子のひとつ。 右に来る文字列がふつうのファイルだったら真を返す。 ここではディレクトリをはじいている。 open FILE, $file; …ファイル名 $file のファイルを入力で開いて、 ファイルハンドル FILE で入力アクセスできるようにする open TMP, ">$tmp"; …ファイル名 $tmp のファイルを出力で開いて、 ファイルハンドル TMP で出力アクセスできるようにする while (<FILE>) { ...なんだかんだ... } …ファイルハンドル FILE で読み込まれる ファイル $file(ここでは find の結果のうち、ファイルのみ)の 1行1行を、$_ という特殊な変数に入れながら 「なんだかんだ」の部分を繰り返す。 $file を読み終わったらループを脱出する s|/srv/kokyaku/|/srv/okyaku/|g; …デフォルトの作用対象である変数 $_ に対して、 「/srv/kokyaku/」を「/srv/okyaku/」に置換する。 s は substitute(置換)、g は global(全体的に)の略。 g を略すと1行に1回しか置換しない print TMP; …TMP ファイルハンドルに、デフォルトの作用対象 $_ を出力する ここで $_ は FILE の1行1行に 「/srv/kokyaku/」=>「/srv/okyaku/」の置換を施したものである close TMP; close FILE; …ファイルを「閉じる」。 (ファイルアクセスのために確保されていたメモリなどの資源を解放する) rename $tmp, $file; …置換する前のファイル名が $file、 置換したあとのファイル名が $tmp なので、 $tmp を $file に改名する。 これで置換したファイルで元ファイルは上書きされ、 中間ファイル TempFileDayooon は消えてなくなる こんな感じでしょうか。 |
>>2271 初心者みーです。 複数ファイルの中身を一括置換する、という目的に限れば、 http://x68000.startshop.co.jp/~68user/unix/pickup?perl の perl -pi.bak -e .. ところをどうぞ。 > findコマンドで、ファイル(シェル)中に/usr/kokyakuと > 記述されているファイル名をfindコマンドで探す場合は、 > どのように記述すればよいのでしょうか? いろいろありますが、以下のような感じです。 % find . -exec grep -l /usr/kokyaku {} \; … 機能は実現できるけど、遅い。 % grep -l * … ファイル数が多すぎるとダメ。ファイル数が数千程度ならこれでいいでしょう。 % find . -print | xargs grep -l … ファイル数が多くても OK。 % find . -print0 | xargs -0 grep -l … ファイル数が多くても OK。ファイル名に改行が含まれていても OK。 今回は grep -l でいいのではないでしょうか。 あと、 > sed 's/\/usr\/kokyaku/\/usr\/okyaku/g' * >*の出力 で実現できることはわかっているので、後はこれを複数のファイルに対して実 行すればよいのです。いろいろ方法はありますが、お勧めなのは「文字列をい じくってコマンドラインを作り、sh に喰わせる」方法です。 grep -l * で、 file1 file2 file3 という出力が得られるとします。次に grep -l * | sed "s|\(.*\)|sed 's./usr/kokyaku./usr/okyaku/.g' < \1 > out/\1 | " とすると、 sed 's./usr/kokyaku./usr/okyaku/.g' < ./file1 > out/./file1 sed 's./usr/kokyaku./usr/okyaku/.g' < ./file2 > out/./file2 sed 's./usr/kokyaku./usr/okyaku/.g' < ./file3 > out/./file3 という文字列が得られます。それをよく確認して、よさそうなら grep -l * | sed "s|\(.*\)|sed 's./usr/kokyaku./usr/okyaku/.g' < \1 > out/\1 | " | sh と末尾に | sh を付ければ、そのまま実行されます。 正しいコマンドラインができるまでは「| sh」を付けずに試行錯誤すれば よいので、いろいろなところで応用が効くと思います。 |
>>2270 ふくし > 場違いでしたら情報のポインタや、討議するのにふさわしい > 掲示板等教えてください。 場違いではないですが、わかりません。会社では Windows Me だし (笑) ふさわしいところは… fj.kanji くらいしか思い付かないなぁ…。 後は >>2269 kouji ですが、これはちょっと調べてから回答したいと思います。 |
ふくしさん、68userさんどうもいろいろありがとうございました。とっても勉強になりましたし、助かりました。perl -pi.bakの方法で、一括変換変換させる方法をバックアップファイルも一緒に作成できるので、実施したいと思います。簡単なテストをしたところ、大丈夫そうでしたので…。他の方法も、今後時間のある時に試してみたいと思います。迅速なご回答と親切な説明、本当にありがとうございました。 |
始めましてm(__)m UNIXを学校で使っています。 家では使えないんでしょうか? 家にパソコンはあるのですが…(-.-;) |
ぷたろさん、はじめまして。 ・家のパソコンに UNIX(FreeBSD とか Linux)を入れる。 いろんな本に、すでに入ってる OS(Windows ですか?)と切り替える方法が 書いてある<=管理が大変だけど ・家のパソコンをインターネットにつなぎ、 会社のパソコンに Telnet(Windows だと Teraterm が有名)で ログインする。リモートコントロールの感覚ですね。 グラフィックなソフトは使えないけど、、。 この場合は学校の管理者の人に聞いてみてください。 |
ふくしさん、ありがとですm(_ _)m 家のパソコンのOSはwindowsです。 外付けのハードを買って そこにLinuxを・・・。 ってな具合にはいかないですか? う〜ん、どうしよう(--;) |
>ぷたろさん いちから Linux を入れて自分で管理する気があるんだったら、可能ですよ。 いまの Windows の HDD に余裕があるんだったら、 同じ HDD にパーティションを切って入れてもいいし、 新しい HDD を買う予定があるんだったら、ぷたろさんがおっしゃるように 外付けのでも新しい内蔵のでも入れて、そこに入れてもいいし。 要するに、今使ってる Windows のマシンに新しく Linux を入れて、 Linux と Windows と切り替えて使うことは可能です。 体験するだけだったら、ここの会社 http://www.mlb.co.jp/ のが 面白そうです。Live Linux というのは Windows マシンに CD-ROM を 突っ込むと Linux 体験が出来るそうです。あと MLD5 というのは Windows のパーティションを壊さずに(フォーマットせずに)そのまま Linux を入れられ、Linux は Windows からハードウェアの設定を 読みこんで自動インストールしてくれるそうです。 ぼくはどっちも使ったことないし、設定は人に任せているのでくわしいことは わからないのですが、トライしてみたらどうでしょうか。 |
ふくしさん、親切にありがとうございますm(_ _)m 同じHDDにいれるんだったら HDDを分割するソフトがないと ダメですよね? HDDを新しく買って Linuxを一からやってみようかな。。。 Linuxを自分で管理って大変なんですか? 「いちから Linux を入れて自分で管理する気があるんだったら」 ってあるから大変そう・・・。 う〜ん。新しい事をするのは難しいです(-.-;) |
>ぷたろさん HDDにパーティションを切るソフトは、商用のLinuxにはたいてい ついてきます。少なくともMLD5にはついてきます。 あと、FIPSというフリーのパーティションソフトもあります。 新しいHDDを買ってきてもいいですが、 どのディスクからブートするかを指定する何らかの手段が必要です。 この掲示板だけではフォローしきれないと思うので(^^; 適当な入門用Linuxを買ってみるといろいろ書いてあると思います。 それから大変かどうかですが、それは人によります。 最近の入門用のディストリビューションは 最初からなんでも使えるようになっているようですが、 もしネットワークにつなぎっぱなしにする環境なら、 不要なサービスを殺さないと外からどんどん入ってこられます。 最低でも root(管理者用ユーザー)のパスワードは設定してください。 では、がんばってくださいー。 |
たびたび申し訳ありません。また、教えて下さい。perlのコマンドでカレンドディレクトリの中の複数ファイルを対象に、該当の文字(/usr/kokyaku)を特定の文字(usr/okyaku)に置換させようと考えています。下記のコマンドを実施したところ、特定文字を含まないファイルについても、バックアップファイル**.bakが作成されてしまいます。該当のファイルのみバックアップファイルを作成することは可能でしょうか? perl -pi.bak -e 's/\/usr\/kokyaku/\/usr\/okyaku/g' * カレントディレクトリーには、20ほどのファイル(ほとんどがシャル)が存在し、上記文字を含むファイルが6つほど存在するので、6つのみファイルの中身を置換し、バックアップファイルも6つのみ作成してほしいのですが、わがままなお願いでしょうか?お手数をおかけいたしますが、簡単な方法があれば教えて下さい。 |
>>2286 みー > バックアップファイル**.bakが作成されてしまいます。 おそらくそういう仕様です。 で、どうすればいいと思いますか? 不要なファイルができて困るのなら、不要なファイルを作らないように するか、不要なファイルを削除すればいいわけで。 まずは自分で考えてみて下さい。 |
今晩は、初めまして。 突然ですが質問して宜しいでしょうか。 ホスト名と、IPアドレスの頁を読ませていただいたのですが、まだ良く分かっていないので、この場をお借りして質問させていただきます。 IPアドレスが微妙に違って、でもホスト名が同一の場合、それは同一のパソコンからアクセスしていると解釈していいのでしょうか? すみません、物知らずで…教えてくださると嬉しいです。 |
68userさん、回答ありがとうございました。仕様でそうなっているのでは、仕方がないので諦めて、カレトディレクトリーに該当ファイル数が少ない場合はファイルを指定し、該当ファイル数が多い場合は、不要なファイルを後で、rmで削除することにします。 |
>みーさん えーシェルスクリプトも Perl もつかえる環境なのに手動でやるんですか、 それはもったいない、、失敗もしそうだし、、 >TAKEさん 相手がプロバイダーの場合など、同じホスト名でも ちがうパソコンのことがあるのでは、、。 |
回答が遅くなったので、もう見ておられないかもしれませんが… >>2269 kouji exec cgi、include file には引数を渡せない、という仕様の ように思えます。ソースを読んでみたのですが、いまいち わからなかったので自信はないのですが。 ただし、include virtual なら <!--#include virtual="./a.cgi?a=b&c=d" --> というふうに書けば引数を渡せます。 どうしても include file、exec cgi で、ということなら <!--#set var="QUERY_STRING" value="hoge=1" --> <!--#include file="./a.cgi" --> <!--#exec cgi="./a.cgi" --> などとやってみたのですが、QUERY_STRING の値は上書き されてしまうようなので、これはダメ。よって、 <!--#set var="MY_QUERY_STRING" value="hoge=1" --> <!--#include file="./a.cgi" --> <!--#exec cgi="./a.cgi" --> などとして、CGI 側では QUERY_STRING でなく MY_QUERY_STRING を 使う、という方法しかないように思えます。 まぁそんなことをするくらいなら、素直に include virtual を 使った方がよいでしょうけれども。 |
>>2236 Ka23 > UNIX プログラミング FAQのサイトが > http://www.adl.rd.nacsis.ac.jp/~moro/unix-programmer/faq-j_toc.html > に移転しているようです。 遅くなりましたが修正いたしました。 # http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/link-book.html が、今 www.adl.rd.nacsis.ac.jp には unreachable なので、 そのページはまだ見ていません。 |
>>2159 Nira > そういえば、httpsの取得に良いサイトを発見しました。 > https://www2.ggn.net/cgi-bin/ssl です。 http://x68000.startshop.co.jp/~68user/net/ssl.html に反映しました。 # http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/ssl.html 他にも「前に情報提供したのにまだ反映されていない」という部分が ありましたら、ご指摘いただけると幸いです。 |
>68userさん ありがとうございました。 include virtualを使います。 |
ふくしさん、ご回答有難うございました。 参考になりました。 |
Perl の質問ですが、(101) とか ($x) とかいう式は、 ・スカラーをカッコに入れたもの と思われるのでしょうか、 ・要素数が1個のリスト と思われるのでしょうか。 ($x) = (6,7,8); と書くと、$x には 6 が入るので、($x) はリストのようです。 でも、そのあと、 $n = ($x); と書くと、$n には ($x) の要素数 1 ではなく、$x の値 6 が入ります。 $n = (); と書くと、$n にはゼロは入らないで undef が入るようです。 ということは、() は空リストではなく、 「無」をカッコで囲んだ式が入ってるということでしょうか。 というのは、空リストだとすると、 $n には空リストの要素数 0 が入るように思うからです。 |
みなさん、はじめまして。 ちょっと、C言語の質問をさせてもらっていいっですか? 自分は、redhadのLinux2.1を使っているのですが、 タイム関数の #include<time.h> が、使うことが出来ませんが、Linuxにおいては タイム関数は対応していないのでしょうか? ある、実験において実験結果をグラフにしようとしている のですが、タイム関数が使えないために、横軸がLOOP回数での 表示しか出来ずにグラフが成立しなくて困っています。 どうか、良きアドバイスをいただけないでしょうか? お願い致します。 |
>>2296 ふくし @a をスカラーコンテキストで評価すると、@a の要素数が得られますが、 (6,7,8) をスカラーコンテキストで評価すると最後の要素の 8 が 得られます、ってことで回答になってますでしょうか。 >>2297 ひろ POSIX にもある関数ですので使えるはずです。どうやったらどういう エラーが出たのかを詳しく書きましょう。 |
68 ユーザーさん> なるほど〜そのとおりのようですね。どうもありがとうございました。 |
はじめまして。UNIX初心者で申し訳ない質問なんですが、、 今自分が使っているOSのバージョンを知るコマンドってあるのでしょうか? DOSで言う「ver」にあたるものです。 手持ちの本に載ってなかったので、くだらない質問で申し訳ないんですが、 お願いします。 |
maru さん、はじめまして。 uname -v ですな。(DOS の方を知らんかった、、;;;) |
ふくしさん、さっそくありがとうございます。 DOSでのコマンド、お役にたててなによりです。(笑) |
はじめまして、けんといいます。すごく初心者なのですが、質問 させてください。 ネットワークプログラムをやろうと思い、 UNIXネットワークプログラミング(リチャードスティーブンス) の本を買ってきたのはいいですが、プログラムの実行の仕方が わかりません。学校のソラリスにTELNETでつないで、最初の例題 timetcpcli.cという、時間を返してくれるプログラムを 書いて、gccで実行したのですが、例題に特殊な"unp.h"という ヘッダーがあり、それを作者のHPからダウンロードしてきて、 timetcpcli.cと同じディレクトリーにコピーしました。 そしていざ、gccをやってみても、そのようなファイルもディレクトリ も存在しませんと返ってきました。ファイルとヘッダーを同じ ディレクトリーに置いといて実行できるのでしょうか? 大変初心者ですいません。自分がこのようなプログラムをやる 域に達していないのですが、どなたかご教授ください。 |
>>2303 ken > ファイルとヘッダーを同じディレクトリーに置いといて > 実行できるのでしょうか? #include "unp.h" と書いてあるならいけるはずです。 もしかして #include <unp.h> と書いてませんか? |
68userさん>失礼しました。今後、気をつけます。 さて、プログラムの方なのですが、参考図書とにらめっこして いたところ、恥ずかしい事にタイム関数の使い方を間違ってい ました。今後、こんなことのないように気をつけます。 有難うございました。 |
こんにちは、 Solaris2.6を使用しておりますが、 印刷のコマンドの「lp」と「lpr」の違いはなんでしょうか。 いろいろ調べたんですが、なかなか意味が理解できなくて。。 「lpr」の方はSunOS/BSD互換パッケージコマンドとありますが、それだけ の違いでしょうか。 よろしくお願いします。 |
こんにちは。質問したいことがあります。 UNIX上で、あるアプリケーションの画面(検索結果を表示しているような一般的 な画面)をそのままハードコピー感覚で印刷したいのですが、 これにはどういった処理・手順が必要なのでしょうか。 単純にlpコマンドではうまく印刷できないですよね? PostScriptに変換しないとやはりダメでしょうか。 ちなみにOSはSolaris2.6で出力プリンタはEPSON LP9200SXです。 (プリンタはLAN上にいます) プリンタの方でも何か設定が必要でしたら教えてください。 よろしくお願いします。 |
>>2306 pon > 「lpr」の方はSunOS/BSD互換パッケージコマンドとありますが、 > それだけの違いでしょうか。 それだけです。 BSD 系 UNIXには lpr の方しかなくて、SystemV 系は lp です。 Solaris の /usr/usb/ の下にあるのは全て BSD 互換コマンドです。 # ucb=University of California, Berkeley |
>>2307 まさお > プリンタはEPSON LP9200SXです。 これ、PostScript プリンタですよね。 http://www.i-love-epson.co.jp/products/printer/laser/lp9200ps3/9200ps32.htm ImageMagick 付属の convert で PostScript に変換して、 lp に流すのはどうでしょうか。 % xwd > image.wd % convert image.wd image.ps % lp -d printername image.ps あるいは、とにかくブラウザが見える画像形式に変換して、 ブラウザから印刷する、とか。 |
68user様、ありがとうございました。 やはりPostScript への変換が必要なのですね。 ところでこのPostScript変換ツールというのは、テキスト用、画像用とかいろいろとあるようですが、これらはみな1ツールとしてOSにインストールする必要があるということですよね。 以上ありがとうございました |
68userさん、さっそくのお返事ありがとうございます。 <unp.h>ではなく、"unp.h"としてもこのような、ファイル、 ディレクトリはありませんと返ってきます。 僕はウィンドウズユーザーなので、UNIXをやるときは学校と つなげるしかありません。僕の環境はOSはWin2000,next ftp とtera term proで学校のSun OS5.8につないでいます。 作者(リチャードスティーブン)のHPからunp.hと例題が 詰まったフォルダーをダウンロードしてきて、WIN上で解凍。 それをFTPで自分の学校のアカウントにおくりました。 自分のアカウントではcというディレクトリを作り、その中に、 例題のdaytimetcpcli.cというファイルと,"unp.h"という ファイルをおいて、gcc daytimetcpcli.cとうつと、このファイル、 ディレクトリはありませんとでてきます。例題も、unp.hも コピー&ペーストでありつけたので、打ち間違えはないのですが、 どこに問題があるのでしょうか?たいへんすいません、よろしく お願いします。 ちなみにunp.hというファイルは下記のURLにいって、それをコピー してきました。 http://www.sfc.wide.ad.jp/~nob/webdoc/unpv12e/lib/unp.h |
>>2310 まさお > テキスト用、画像用とかいろいろとあるようですが、これらはみな1ツールとして > OSにインストールする必要があるということですよね。 「1ツール」の意味がよくわかりませんが、 - テキスト用としては a2ps - dvi なら dvi2ps - 画像用としては convert で PostScript に変換 などと、別々のアプリケーションで配布されています。 ファイル形式ごとに、いちいちどの変換フィルタかますかを考えるのが面倒、 ということなら、file コマンドなどでファイル形式を判断し、適切なフィルタを 経由して lp にデータを渡すシェルスクリプトを書く、という手もあります。 >>2311 ken > このような、ファイル、ディレクトリはありません 意訳せず、正確なエラーメッセージを書いて下さい。 例えば unp.h を置いて、以下の内容のような foo.c というファイル #include "unp.h" main(){ } を置き、コンパイルすると % gcc foo.c In file included from foo.c:1: unp.h:7: ../config.h: No such file or directory In file included from foo.c:1: unp.h:200: ../lib/addrinfo.h: No such file or directory となります。config.h や addrinfo.h を用意していないということはありませんか? でなくて、 foo.c:1: unp.h: No such file or directory と出るなら本当に unp.h がないのでしょう。unp.h が置いてあるディレクトリに行って、 % cat unp.h とするとちゃんと表示されますか? |
>68userさん いろいろとありがとうございました。よくわかってきました。 ところで、もっと漠然とした質問で申し訳ないんですけど、UNIX上で画像などを印刷する場合は、ファイルをPostScript形式に変換しなければどんなことしても絶対印刷は無理!ということなのでしょうか。 (要はImageMagickやxvのインストールは必須ということでしょうか。) Postscriptがなかった時代は印刷できなかったんですかね。 では失礼します。 |
>>2313 まさお 要は、プリンタが解釈できる言語を流してやる必要があります。 PostScript プリンタは PostScript を解釈できます。LIPS な プリンタには LIPS で、ESC/Page なプリンタには ESC/Page な データを流してやらないといけません。 そのための変換ツールが、lipsf だとか、gs (GhostScript) だとか、a2ps とか dvi2ps とかなわけです。 どうでもいいですが、PostScript プリンタってのは価格が高いので、 普通の企業では LIPS とか ESC/Page なプリンタを買うことが多いです。 Canon やら Epson がドライバを出しているので Windows からの利用は OK なんですが、UNIX から非 PostScript プリンタを使うのは何かと 面倒だったりします。 |
>68userさん ありがとうございました。 いろいろ複雑ですね。ますます考えることが多くなってきました。 要はUNIXからアプリケーションの画面(スナップショット)を印刷する処理を 考えているところなのです。 プリンタがEPSON LP8200LP2 でOSがSolaris2.6です。 画像なので、以前教えていただいたようにImage Magickなどの変換ツールを あとからインストールしないとダメなようすね。 OSの方にあらかじめ組み込まれているコマンドとかがないのか探しているんですけど、 みつかりません。「jtops」というコマンドがOSにあるのですが、これはテキスト専用 でしょうか。 あと、教えていただいたLIPSやESC/PAGEというメーカーの制御コードもテキスト 専用なんですよね? 画像の印刷はやはりPostscript変換ということですよね。 たびたび失礼しました。 |
>>2315 まさお > 「jtops」というコマンドがOSにあるのですが、これはテキスト専用 > でしょうか。 のようですね。 > あと、教えていただいたLIPSやESC/PAGEというメーカーの制御コードも > テキスト専用なんですよね? いいえ、イメージもいけます。 てゆーか、そんなに難しく考える必要はなくて、PostScript プリンタ なんだから PostScript で送ってやればいいんですよ。 例えば ftp://gatekeeper.dec.com/contrib/share/lib/ghostscript/examples/tiger.ps を落として % lp -d printername < foo.ps で印刷できるはず。 あとは任意の画像を PostScript に変換するツールをインストールすれば おしまいです。convert でも xv でも gimp でもできます。 |
>68user さん ありがとうございました。 勉強になりました。 |
ネットワークプログラムなのですが、エラーメッセージとしては、 68userさんがおっしゃったように、 In file included from daytimetcpcli.c:1: unp.h:7: ../config.h: No such file or directory In file included from daytimetcpcli.c:1: unp.h:200: ../lib/addrinfo.h: No such file or directory というメッセージが返ってきます。しかし、unp.hも、addrinfo.h, config.hも同じディレクトリーにいれてgcc daytimetcpcli.cと うっても、上記のようなエラーが返ってきます。ヘッダーファイル が同じディレクトリーにあるのにこのようなメッセージが返ってくる ということは、やはりどこかに、なんらかの間違いがあるということ でしょうか?よろしくお願いいたします。 |
>>2318 ken /home/user/c/daytimetcpcli.c /home/user/c/unp.h というファイル配置で、カレントディレクトリが /home/user/c/ のとき ../config.h は /home/user/unp.h を表します (.. は親ディレクトリを表すから)。同様に ../lib/addrinfo.h は /home/user/lib/addrinfo.h を表します。 そこにヘッダファイルがないので No such file or directory になって いるわけです。本に、ヘッダファイルやソースファイルをどういう ディレクトリ構成で置きなさい、という記述はありませんか? |
>>2318 ken unpv12e.tar.gz を持ってきて試してみたところ…README にやり方が ちゃんと書いてありますがな。ドキュメントはちゃんと読みましょう。 % ./configure % cd lib % make % cd ../intro % make daytimetcpcli でうまくいきました。 Solaris8 (SunOS5.8) ではどうかはわかりませんが、FreeBSD では lib の make 時に IPV6_DROP_MEMBERSHIP というマクロが未定義だ というエラーが出ました。これは古いマクロで、今は IPV6_JOIN_GROUP に 変わっています。 んで、ここを書き換えるとコンパイルが通りました。 |
.tgzとして拡張子があるファイル、どう展開しますか? |
ひとつ教えてください。 Windowのダンプのコマンドの一般的な使い方は、 xwd -out display.xwd と入力し、そのあとにダンプしたいWindowをマウスで選択しますが、 このとき、ダンプをとりたいWindowをマウスで指定するのではなく、 プログラム上で指定したいのです。(たとえば、Window上に「印刷」ボタンを設け、それが押されたら今アクティヴなWindowを印刷する、とか。) そういった処理を行うこと可能なのでしょうか? |
はじめまして、 ネットワークプログラミング駆け出し者です。 このような、すばらしいHPを開かれている皆様に感謝致します。 とても、参考になります。 これからも、宜しくお願いします。 |
かなり勉強になりました。 telnetのところでGET index.html HTTP/1.0をやっても403エラーと 出てしまいます。どうしたら、うまくいくか教えてください。 お願いします。 |
cookの作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか? |
はじめまして。 最近unixを触りだしたひよっこです。 大変素晴らしいHPでとても助かります。 実は、unixのシステム管理業務の一環として時間別/日別のcpuの使用率及びメモリ使用率を調べるコマンドを探しています。 cpu使用率はsar -Aでデータを取る事が出来たのですが、メモリ使用率 が分かりません。 どうしてよいのか途方に暮れています。良きアドバイスを頂けないでしょうか? |
いつもお世話になっております。Perl で助けてください。 0x00 から 0xff までループ、というつもりで、 for ("\x00".."\xff") { ... } とやってますが、\x00 のとき1回だけやって終わるみたいです。 なじぇ?(?.?) どなたかお願いします。 |
>>2321 lee > .tgzとして拡張子があるファイル、どう展開しますか? 「tgz 展開」で検索しましょう。 >>2322 pon > たとえば、Window上に「印刷」ボタンを設け、それが押されたら今アクティヴな > Windowを印刷する、とか。 というのができるのかどうかはわかりませんが、xwd の -id や -name オプションでウィンドウは指定できるでしょう。指定する 値は % xwininfo -root -all で表示されるものです。 >>2324 なっち > telnetのところでGET index.html HTTP/1.0をやっても403エラーと > 出てしまいます。 ブラウザでアクセスしても 403 となるなら、telnet でやっても 当然 403 です。もしブラウザでうまくいくのなら、Host ヘッダを 付けてやってみて下さい。 >>2326 ひよっこ OS は何ですか? 僕なら top を使いますが、sar -k とかでも できませんか? (試したことはありませんが) >>2327 ふくし > \x00 のとき1回だけやって終わるみたいです。 終わってしまいますね。よくわかりませんが、 for ("\\1" .. "\\9") { for ("!1" .. "!9") { などでも同様なので、\ という *文字* はマジックインクリメントの 対象外なんじゃないでしょうか。 で、実は本当にやりたいのは for (0x00 .. 0xff) { じゃあないですか? じゃなくて、もし \xXX という文字列が 欲しいのならば for (0x00 .. 0xff) { $hex = sprintf("%02x", $_); } あたりで。 |
いつもお世話になっております。 >実は本当にやりたいのは ばっちりです、、;;; |
はじめまして。 ここのプログラムは凄く参考になり助かっています。 サンプルプログラムの間違いなんですが、 http://jfx.startshop.co.jp/~68user/net/module-2.html にある、モジュールを使ったマルチスレッド版echoプログラムの 31行目「if ( fork() ){」は、 正しくは「if ( $pid = fork() ){」ですよね? |
お答えありがとうございました。 かなり役に立ってます。すごいです。 また、質問何ですが、UNIXで壁紙を自分のもっている画像にしたいので すが、xvコマンド以外で何か良い方法ありませんか? |
はじめまして。 このページではいつも色々と勉強させて貰っています。 さて、質問なのですが、今現在CVSにてあるプロジェクトを管理しており、 そのリポジトリをcvswebにて閲覧出来るようにしようとしているのですが、 ある特定のファイル達の中身を表示しようとしたときに、 cvs checkout: cannot exec co: No such file or directory cvs checkout: could not check out xxx/yyy/Zzz.java という様なメッセージが出てしまいます。 CVSも使い始めたばかりのため、何が原因なのかが分かりません。 もし良かったら何かヒントや、cvswebに関しての解説があるような ページがありましたら教えていただけると嬉しいです。 よろしくお願いします。 |
>>2330 しんベエ > 正しくは「if ( $pid = fork() ){」ですよね? ご指摘ありがとうございます。その通りですね。修正しておきます。 >>2331 なっち > お答えありがとうございました。 > かなり役に立ってます。すごいです。 じゃなくて、回答した結果、解決したかどうかをちゃんと書いて ください。とりあえず http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse を読んでください。 > UNIXで壁紙を自分のもっている画像にしたいのですが、 > xvコマンド以外で何か良い方法ありませんか? ImageMagick が入っているなら % display -window root 画像ファイル でできるかも。 >>2332 わたなべ あなたも http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse を読んでください。少なくともこの掲示板ではマルチポストは ダメですし、2ch でも歓迎はされないでしょう。 あと、OS は何ですか? cvs のバージョンは? RCS のバージョンは? cvsweb には zeller 版と knu 版がありますが、どっちを使って いますか? また、そのバージョンは? 内容を表示って、x-cvsweb-markup のことですか? それとも text/plain ですか? 仮にうちと同じ knu 版 cvsweb-1.105.1.65 だとすると、その エラーが出そうなところは exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where); しかなさそうなので、オプションなどの値を表示させてみて、 同じことをコマンドラインからやってみてはどうですか。 # http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/cvsweb.cgi?rev=1.9&content-type=text/x-cvsweb-markup |
渡辺です。 >>2322 pon は非常に浅はかな行動だったと認識しました。 申し訳ありませんでした。 今後気を付けます。 質問の続きをさせて頂いてもよろしいでしょうか…? 使っている各ソフトウェアのバージョンですが、 OS : Solaris SunOS 5.8 CVS : 1.9 RCS : 5.7 cvswebは、68userさんが使われているのを、http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgiのリポジトリから拝借しました。(ひょっとして、これもまずい行動でしたか。) そして、内容の表示というのは、x-cvsweb-markupも、text/plainもです。 表示出来るファイルに関しては、双方とも表示出来るのですが、エラーが起きるファイルに関しては、両方ともに起きます。 また、68userさんがおっしゃってる通り、 exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where); でエラーが起きているであろうと考え、それをコマンドラインで実行してみたのですが、コマンドラインからは実行できました。 (実行できました。といいますか、あるファイルをチェックアウトでき、標準出力に出力されるという結果を得ました。) オプションの値を変更して…という事ですが、CVSに明るくないため、何をどうかえたら良いのかがわかりませんでした。 これで足りますでしょうか? もし、>>2332での事をお許し頂けるなら、何がアドバイス等を頂けたら嬉しいです。 結果報告もきちんとしますので、よろしくおねがいします。 |
>>2334 わたなべ での書き込みにある、>>2322は>>2332の間違いです。 重ねてお詫びします。申し訳ありません。 |
>>2334 わたなべ > ひょっとして、これもまずい行動でしたか。 問題ありません。書いてある通り、covered by the BSD-Licence です。 checkout できるファイルとできないファイルがあるということですから、 まずはリポジトリのパーミッションはどうなっているか確認して下さい。 同じディレクトリでも co できるファイルと co できないファイルがあれば、 ファイルのパーミッションが怪しいですし、あるディレクトリの下のファイルが 全て co できないならディレクトリのパーミッションがおかしいでしょうし。 うちの Solaris2.6 では % chown -R cvs /cvsroot (グループは cvs グループで統一) % chmod -R g+w /cvsroot (cvs グループに書き込み権限を与える) % find /cvsroot -type d | xargs chmod g+s (BSD タイプのパーミッションに) とかしてます。でも、cvsweb.cgi は nobody で動かしているから これは関係ないかな…。 また、CGI の実行権限は何ですか? 例えば nobody なら su nobody して から checkout してみて下さい。 実際にどういうコマンドが実行されているかは、 if (! open($fh, "-|")) { # child open(STDERR, ">&STDOUT"); # Redirect stderr to stdout exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where); } の前に print "Content-type: text/plain\n\n"; print qq(exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where);); exit; などと書けばわかるでしょう。 それでもダメなら exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where); を exec("/bin/truss", $CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where); として、どのファイルをオープンしようとしてエラーになっているかを 調べて下さい。ちなみに、こちらでやってみると open("/MASTER/cvs/CVSROOT/config", O_RDONLY) = 4 open("/MASTER/cvs/CVSROOT/cvsignore", O_RDONLY) Err#2 ENOENT open("//.cvsignore", O_RDONLY) Err#2 ENOENT open("/MASTER/cvs/CVSROOT/cvswrappers", O_RDONLY) = 4 open("/MASTER/cvs/CVSROOT/modules", O_RDONLY) = 4 .. open("/MASTER/cvs/admin/public_html/cvsweb.cgi,v", O_RDONLY) = 5 となります。 |
特定の一般ユーザをroot権限と同様な権限を与えたいのですが、 設定方法を教えてもらえないでしょうか。 /etc/groupのファイルのrootグループに追加するだけで はいけないのでしょうか。 |
度々すいません。 >>2336 68user >同じディレクトリでも co できるファイルと co できないファイルがあれば、 >ファイルのパーミッションが怪しいですし、あるディレクトリの下のファイルが >全て co できないならディレクトリのパーミッションがおかしいでしょうし。 リポジトリのパーミションを確認しました。 $CVSROOTディレクトリは 755 その中のプロジェクト毎のディレクトリは 775 でした。 各プロジェクト毎のディレクトリ内にある、サブディレクトリは 775 そして、ファイルは全て 444 でした。 チェックアウト出来るファイル/出来ないファイル、全て同一のパーミションで、同一のディレクトリ内にあるファイルでもチェックアウト出来るものと出来ないものがありました。 >また、CGI の実行権限は何ですか? >例えば nobody なら su nobody してから checkout してみて下さい。CGI は nobody で動いています。 su nobody をやってみたのですが、パスワードを求められました。 僕はこのサーバの管理者ではないので nobody にはなれない様な気がしているのですが、可能なのでしょうか? >実際にどういうコマンドが実行されているかは、 これは最初に書き込みをした時点でやってみました。 CGI からではなく、ターミナル上のコマンドからならチェックアウト出来ることも確認しております。 >exec("/bin/truss", $CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where); やってみたところ、以下の様な出力を得ました = From ======================================== cvs checkout: cannot exec co: No such file or directory cvs checkout: could not check out xxx/yyy/Zzz.java waitid(P_PID, 17464, 0xFFBEF1C0, WEXITED|WTRAPPED|WNOWAIT) = 0 ioctl(0, TIOCGPGRP, 0xFFBEF17C) Err#22 EINVAL getpgid(17464) = 350 ioctl(0, TIOCGPGRP, 0xFFBEF17C) Err#22 EINVAL waitid(P_PID, 17464, 0xFFBEF1C0, WEXITED|WTRAPPED) = 0 waitid(P_ALL, 0, 0xFFBEF160, WEXITED|WTRAPPED|WNOHANG) = 0 fork() = 17467 waitid(P_PID, 17467, 0xFFBEF270, WEXITED|WTRAPPED|WNOWAIT) = 0 ioctl(0, TIOCGPGRP, 0xFFBEF22C) Err#22 EINVAL getpgid(17467) = 350 ioctl(0, TIOCGPGRP, 0xFFBEF22C) Err#22 EINVAL waitid(P_PID, 17467, 0xFFBEF270, WEXITED|WTRAPPED) = 0 waitid(P_ALL, 0, 0xFFBEF210, WEXITED|WTRAPPED|WNOHANG) = 0 llseek(0, 0, SEEK_CUR) Err#29 ESPIPE _exit(0) = End ========================================= 上のメッセージの3行目以降は、チェックアウト出来たファイル/出来なかったファイル共に出力されていました。 現状報告だけで申し訳ありません。 このページで学んだ通り、ユーザ権限で CGI を動かすようにもしてみたのですが、それでも何も状況は変わりませんでした。 |
>>2338 わたなべ の >例えば nobody なら su nobody してから checkout してみて下さい。CGI は nobody で動いています。 は >例えば nobody なら su nobody してから checkout してみて下さい。 CGI は nobody で動いています。 と訂正させてください。 毎度毎度申し訳ありません。 |
>>2332 わたなべ > cvs checkout: cannot exec co: No such file or directory ん〜、これってもしかして、単に co(1) が見付からないって 言ってるのかな? co(1) にパスは通ってます? # って、どういうときに co(1) が使われるのかいまいちわかってませんが。 ## これが原因なら、かなり的外れなことを言ってたことになるなぁ。 |
>>2340 68user >ん〜、これってもしかして、単に co(1) が見付からないって >言ってるのかな? co(1) にパスは通ってます? co(1) という書き方が何を指すのか、わからないのですが、 which co で得られるパスを、 cvsweb.conf の $command_path にコロンでつなげて 記述すればいいんですよね? 一応それはやってあります。 CVS も RCS も、root が入れたものではなく、ユーザ権限でインストール したもので、それらをユーザの ~foo/cgi-bin/cvsweb/ で使おうと しているのですが、その辺りに問題があったりしますか? |
>>2338 わたなべ > which co で得られるパスを、 cvsweb.conf の $command_path にコロンで > つなげて記述すればいいんですよね? はい、そうです。 > リポジトリのパーミションを確認しました。 ではリポジトリのパーミッションは問題ないでしょう。 > 僕はこのサーバの管理者ではないので nobody にはなれない様な気が > しているのですが、可能なのでしょうか? 一度 root にならないと nobody にはなれません。 truss の結果 (システムコールでこけているわけではないらしい) と、 > cvs checkout: cannot exec co: No such file or directory > cvs checkout: could not check out xxx/yyy/Zzz.java のメッセージから、単に PATH を検索して、co が見付からないので co -r1.1 /cvsroot/xxx/yyy/Zzz.java,v がこけているのかと思ったのですが、違うのかなぁ。成功するファイルと 失敗するファイルがあるというのが謎ですが…。 でも、最近の cvs (少なくとも cvs-1.11) では rcs (co も含む) は 使っていないはずなので違うかなぁ (cvs は rcs を使わないけど、 cvsweb は rcs を使う)。 …と書いたところで今気づきましたけど、 > CVS : 1.9 古いです。最新版は cvs-1.11.1-p1 のようですが、最低でも cvs-1.11 にして下さい。ここが一番怪しいかな。 ちなみに、最新版の cvsweb はこちらです。 http://www.idaemons.org/cgi-bin/cvsweb.cgi/cvsweb/ |
>>2342 68user >…と書いたところで今気づきましたけど、 >> CVS : 1.9 >古いです。最新版は cvs-1.11.1-p1 のようですが、最低でも cvs-1.11 >にして下さい。ここが一番怪しいかな。 cvs-1.11をインストールしてみましたところ、無事にcvswebも問題なく 動き出す様になりました。 最初に無礼を働いてしまったにも関わらず、解決まで長々と 付き合って頂き、本当にありがとうございました。 これからもちょくちょく来て、勉強させて頂きます。 ありがとうございました。 あと、ちょっとメインの話とはずれるのですが、 >>2340 68user にあった >co(1) というのはどのような時に書く方法なのでしょうか? |
>>2343 わたなべ > 無事にcvswebも問題なく動き出す様になりました。 それはよかったです。バージョンは? と聞いておきながら 古いのを見落としていたのは失敗でした。 >> co(1) > というのはどのような時に書く方法なのでしょうか? セクション番号を表します。セクション 1 はコマンドなので、 「co(1)」は「コマンド co」という意味です。 # http://X68000.startshop.co.jp/~68user/unix/pickup?man |
ありがとうございます。 >>2344 68user >セクション番号を表します。 あ、すでに書かれているところがありましたか…。ちゃんと見てから 質問しないとダメですね…。本当にすいません。 今回色々勉強させて頂きました。 本当に感謝感謝です。 なんだか、頼りっぱなしだったのでちょっと一人で勉強してきます。 また何かあったら質問しにくるかもしれませんが、その時はよろしく おねがいします。 |
はじめまして。ゆきと申します。当方の環境はSUN Sparc Solaris2.51 です。 会社でC++の環境が必要になり、UnixもC、C++もさほど詳しくない私が、 インターネットを頼りにgcc2.95.3のインストールをしました。 それで、渡されたC++のソースをコンパイルしたのですが、以下のような エラーが出ます。渡した本人は、エラーが出るのはおかしいと言って います。 % gcc -lstdc++ -o hello hellocpp.cpp hellocpp.cpp:1: iostream: No such file or directory hellocpp.cpp:2: string: No such file or directory これは要するにインクルードファイルを見に行けない状態なんだと 思いますが、gccのインストールが上手くいっていないのでしょうか? ちなみにC++のソースは以下です。 --------------------------------------------------------- #include <iostream> #include <string> using namespace std; class CHello { private: string m_strOut; public: CHello(){ m_strOut = "Hello World!"; }; virtual ~CHello(){}; void print(void); }; void CHello::print(void) { cout << m_strOut << endl; } int main() { CHello chHello; chHello.print(); } --------------------------------------------------------- 何でも良いので、何かお気付きのことがありましたら、教えて下さい。 よろしくお願い致します。 |
>2346 ゆきさんはじめまして iostream じゃなくて iostream.h、 string じゃなくて string.h だと思います。 h は Header に通常つく拡張子です。 |
とかいって、<iostream> だけの書き方もあるんですね。 手元の cpp ソースは、<iostream.h> でコンパイルできていたのを <iostream> だけにしたら同様のエラーが出たので、 「.h を付けてみる」をトライする価値はあると思いますが。 |
>2348 ふくしさんへ お返事ありがとうございます。土曜は会社に行っていないため、教えて 頂いたことはまだ試していないのですが、日曜に休日出勤(サービス) でもして試してみようかと思います。ところで、申し訳ありませんが、 もしご存知であれば、もう少し教えて頂けないでしょうか。 今回、私にソースを渡した人は、Linux環境で試したらしいのですが、 コンパイル時は gcc -lstdc++ -o hello hellocpp.cpp というふうにしろと言っています。調べてみるとオプション-lは、 ライブラリファイルへのリンクだと知りました。こちらのマシーンを 覗いてみますと、-lstdc++は、どうやら/usr/local/bin/libstdc++を 見に行くように指定しているようなのですが、これがファイルではなく、フォルダなのです。そういうことで、よろしいんでしょうか? しかし、仮にlibstdc++フォルダを見に行くとしても、libstdc++直下 には、iostream(.h)もstring(.h)もありません。これらは、 usr/local/bin/libioというフォルダの中にありました。 ふくしさんは、iostream.hとすると上手くいったということですが、 libstdc++フォルダの中に、iostream.hもstring.hもあったと認識して よろしいのでしょうか?もしそうなら、それらが入っていない私の 環境は、やはりインストール時の失敗ということでしょうか・・・ もしよろしければ、お教え頂けませんか?よろしくお願い致します。 |
>>2348 ふくし > とかいって、<iostream> だけの書き方もあるんですね。 C++ はよく知りませんが、namespace 対応の C++ コンパイラならば .h を省略できるはずです。 gcc は長らく namespace への対応がダメダメでしたが、少なくとも gcc-2.95.3 では OK です。 で、iostream はヘッダファイルです。libstdc++ はライブラリです。 ヘッダファイルがないと言われているのにライブラリのことを気に するのは間違っています。 >>2349 ゆき > これらは、usr/local/bin/libioというフォルダの中にありました。 それはライブラリのソースでしょう。それが /usr/local/bin/ に あるのはおかしいです。 > コンパイル時は gcc -lstdc++ -o hello hellocpp.cpp というふうに > しろと言っています -lstdc++ は不要です。C で -lc が不要なのと同じで、わざわざ指定 しなくても勝手に libstdc++ はリンクされます (指定してもいいですが)。 > -lstdc++は、どうやら/usr/local/bin/libstdc++を見に行くように > 指定しているようなのですが どうしてそのように判断しましたか? 普通 -lhoge とすると /usr/lib/libhoge* というファイルがリンクされます。 手もとの環境を見てみると、ヘッダファイルとライブラリは以下の 場所に置いてありますので、参考にしてみて下さい。 Solaris8 + gcc-2.95.2 /opt/sfw/include/g++-3/iostream /opt/sfw/include/g++-3/iostream.h /opt/sfw/lib/libstdc++.a.2.10.0 /opt/sfw/lib/libstdc++.so.2.10.0 FreeBSD + gcc-2.95.2 /usr/include/g++/iostream /usr/include/g++/iostream.h /usr/lib/libstdc++.a /usr/lib/libstdc++.so Linux + gcc-2.95.2 /usr/include/g++-3/iostream /usr/include/g++-3/iostream.h /usr/lib/libstdc++-libc6.1-2.a.3 /usr/lib/libstdc++-libc6.1-2.so.3 結局のところ、うまくインストールできていないのではないかと思います。 |
はじめまして。yamaと申します。 Perlで困っています。 STDOUTの初期化の方法がわかりません。 print文にてhtmlを出力していますが、途中でエラーが発生 した場合、出力済みの情報を初期化し、エラーメセージを出力したい と考えています。 *STDOUT=""; としましたが、エラー表示以前の分も出力されます。 このようなことは不可能なのでしょうか。 プロバイダ環境はUNIXでApacheのサーバです。 なお、UNIX、Apache、Perlのバージョン 等詳しくは聞いていません。 |
>>2351 yama > このようなことは不可能なのでしょうか。 不可能です。stdout に出力したものは既に出力済かもしれませんし、 まだバッファに溜っているかもしれませんが、それをクリアする 方法はありません。出力済かどうかを判断する方法もありません。 # Java Servlet だとできるんですけどね。 というわけで、自前でバッファリングしましょう。 |
>>2352 68userさんへ お返事ありがとうございます。 「不可能」ですか。 ロジックを変更し、必要なチェックを先にするようにします。 今後ともよろしくご指導ください。 |
いつも、お世話になっています。ダウンロードについてなんですが、 .lzhのファイルをコンパイルすることは、UNIXではできるのでしょうか。 もしできるようであれば、ダウンロードの仕方を教えてください。 ちなみに、僕は「Solaris2.6」を使っています。お返事お願いします。 |
>2354 ゆうすけさん、はじめまして。 「lzh のファイルを UNIX でコンパイルする」 と言われると複数に解釈できて、 1)UNIX 上にある複数のファイルを固めて lzh の圧縮書庫を作る 2)どっかから持ってきた lzh の圧縮書庫を展開して、 その中の C とかのソースツリーをコンパイルする のどっちでしょう。 で、どっちもできます。ただし条件があって、お使いの Solaris に lha というプログラムがあるかどうかです。 コマンドラインで「lha」と打ち込んでみてください。 ある場合は使い方が表示され、ない場合は「ない」と起こられます。 で、ある場合はそれを使い、ない場合はインストールします。 で、使い方/インストールの仕方ですが、 とりあえず「lha」というコマンドの名前までわかったので、 あとは検索するなりしてがんばってみて、 どうしてもダメだったらまた聞いてください。 そのとき上の1)なのか2)なのかそれ以外なのかも教えてください。 >2350 68userさん、フォローありがとうございます。 ていうかいつもご苦労様です。 ちょっとでも負担を軽減しようとがんばってみたんですが 役に立たず、申し訳ありません ;;; |
>>2350 68userさんへ お返事ありがとうございました。下記2349の中で、私は勘違いな発言を していたようです。 >-lstdc++は、どうやら/usr/local/bin/libstdc++を見に行くように >指定しているようなのですが とありますが、違いますよね。libstdc++の中の、libstdc++.aという ライブラリファイルを見に行ってるということですね。ということは、 ---------------------------------------------------- hellocpp.cpp:1: iostream: No such file or directory hellocpp.cpp:2: string: No such file or directory ---------------------------------------------------- と言うエラーで見に行っているインクルードファイルは、自動的にリンク されなければならないということでしょうか。私の行ったインストールは どうもおかしいような気がしてきました。 ちなみに、こちらの環境は以下のようになっていました。 /usr/local/bin/libstdc++/iostream /usr/local/bin/libio/iostream.h /usr/local/bin/libstdc++/libstdc++.a libstdc++.so*は検索しても無いような状況でした。やはり再インストール をしてみようと思いますが、上記フォルダ階層はそもそも間違いで、 正しいインストール先というのは、インストール時に指定できるように なっているものなのでしょうか?何度も申し訳ありませんが、よければ その辺りのことを詳しくお教え願えませんでしょうか? よろしくお願い致します。 |
>>2356 ゆき > libstdc++の中の、libstdc++.aというライブラリファイルを見に行ってる > ということですね。 インクルードとリンクは全く別物です。インクルードファイルと ライブラリには何の関係もありません。 > 自動的にリンクされなければならないということでしょうか。 インクルードファイルはリンクするものではなく、インクルードする ものです。 -v を付けてコンパイルすると以下のようになります。 % g++ -v a.cpp Using builtin specs. gcc version 2.95.2 19991024 (release) /usr/libexec/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -Di386 -Dunix -D__FreeBSD__=4 -D__FreeBSD_cc_version=420000 -D__i386__ -D__unix__ -D__FreeBSD__=4 -D__FreeBSD_cc_version=420000 -D__i386 -D__unix -Acpu(i386) -Amachine(i386) -Asystem(unix) -Asystem(FreeBSD) -D__EXCEPTIONS -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__ELF__ a.cpp /tmp/ccFhD943.ii GNU CPP version 2.95.2 19991024 (release) (i386 FreeBSD/ELF) #include "..." search starts here: #include <...> search starts here: ← ここ★ /usr/include/g++ ← ここ★ /usr/include ← ここ★ /usr/include ← ここ★ End of search list. The following default directories have been omitted from the search path: End of omitted list. /usr/libexec/cc1plus /tmp/ccFhD943.ii -quiet -dumpbase a.cc -version -o /tmp/cctFu943.s GNU C++ version 2.95.2 19991024 (release) (i386-unknown-freebsd) compiled by GNU C version 2.95.2 19991024 (release). /usr/libexec/elf/as -v -o /tmp/ccvXl943.o /tmp/cctFu943.s GNU assembler version 2.10.0 (i386-unknown-freebsd4) using BFD version 2.10.0 /usr/libexec/elf/ld -m elf_i386 -dynamic-linker /usr/libexec/ld-elf.so.1 /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o -L/usr/libexec/elf -L/usr/libexec -L/usr/lib /tmp/ccvXl943.o -lstdc++ -lm /usr/lib/libgcc.a -lc /usr/lib/libgcc.a /usr/lib/crtend.o /usr/lib/crtn.o ★を付けた部分でインクルードファイルの取り込みが行われます。 この環境では、標準のインクルードファイルは /usr/include/g++、 /usr/include である、ということがわかります。そこにインクルード ファイルが置いてあれば何もエラーは起こらないはずです。 で、★の部分が終わったら初めてライブラリが出てくるわけで (ld がライブラリをリンクする)、★がうまくいかないのに ライブラリが云々と悩むのはおかしいです。 > /usr/local/bin/libstdc++/iostream > /usr/local/bin/libio/iostream.h > /usr/local/bin/libstdc++/libstdc++.a これはソースで、本来不要なファイルではないですか? /usr/local/bin/ に ファイルを展開して、そこで make したんじゃないかと想像しますが。 > 上記フォルダ階層はそもそも間違いで、 おそらく間違いでしょう。 > 正しいインストール先というのは、インストール時に指定できる > ようになっているものなのでしょうか? ソースからコンパイルしたなら、make 時に指定することもできますが、 普通はデフォルトのディレクトリにインストールします。 とりあえず package を利用してはどうですか? ftp://SunSITE.sut.ac.jp/pub/sun-info/Solaris/sparc/2.5/gcc-2.95.3-sol25-sparc-local.gz |
>>2337 aki おっと、見逃していました。 > /etc/groupのファイルのrootグループに追加するだけで > はいけないのでしょうか。 root グループにはなれますが、root にはなれません。 sudo など、setuid などで検索してみてください。 |
はじめましてkanjiと申します。コマンドのページを良く利用させて頂いています。感謝です。 UNIXの掲示板で、Linuxの質問をよろしいでしょうか。 本題の質問なのですが、初めてRedHat Linux7Jをインストールし、Webサーバの構築を考えています。 ですがPCMCIAのNWカードを認識してくれません。(3com 3c589Dを使用) そこでPCMCIAのドライバをインストールしようとpcmciacs.3.1.30.tar.gz を入手し、 #zcat pcmciacs.3.1.30.tar.gz | tar xvf - #cd pcmciacs.3.1.30.tar.gz #make config を行なうと、configエラーが出ます。ソースツリーが無いと言われます。 ソースツリーとはどのようなもので、どうやってインストールすれば良いのでしょうか。 よろしくお願い致します。 |
>>2359 kanji pcmciacs.3.1.30.tar.gz を展開した pcmciacs.3.1.30 以下のディレクトリ構造がソースツリーでは。 % cd pcmciacs.3.1.30.tar.gz ではなくて、 % cd pcmciacs.3.1.30 では? 〜.tar.gz は圧縮ファイルです。 cd は Change Directory です。 |
>>2360 ふくし > pcmciacs.3.1.30 以下のディレクトリ構造がソースツリーでは。 Linux も pcmcia も全然知りませんけど、 http://www.linux.or.jp/JF/JFdocs/PCMCIA-HOWTO-2.html などを見るに、カーネルソースを展開して、そこに pcmciacs*.tar.gz を 展開して、make config && make all && make install してモジュールを インストールすべきなのに、カーネルソースツリーが存在していないので エラーになってるんじゃないでしょうか。 >>2359 kanji > configエラーが出ます。 具体的にどういうエラーが出るかをちゃんと書けば、何が問題か わかる人にはわかるでしょう。 # 僕は残念ながら わからない人です。 |
>>2360 ふくし >>2361 68user すみません、わかりました。 ありがとうございました。 カーネルソースの展開が抜けているのでしょう。 早速やってみます。 |
初めまして、inabaと申します。 >>2359 kanji 3com だったら、ディフォルトで認識してくれると思いますが…。 ただ、network と pcmcia の起動順が逆なので失敗しているのかも。 # cd /etc/init.d # ./pcmcia restart # ./network restart と入力してみてください。 # ifconfig で、eth0 が認識されていませんか? 見当違いだったらすみません。 |
はじめまして、渡邊と申します。 ネットワークプログラムに興味があり、POP3 クライアントを作ってみよう(2)の POP3 クライアントサンプルを動作させてみました。 お聞きしたいのは、このままでちゃんとメールが表示されるプロバイダーと表示されないプロバイダーがあり、ニフティでは途中で固まってしまいます。認証までは動いているようで、LISTので止まっているようです。 どうすれば、いいか教えていただけませんか? |
>>2364 わたなべ > LISTので止まっているようです。 http://x68000.startshop.co.jp/~68user/net/sample/pop3-client.pl ですね? telnet で pop3 サーバと話してみるとどうなりますか? LIST 送信の後の while (<SOCKET>){ m/^\.\r\n$/ && last; を while (<SOCKET>){ print "[$_]"; m/^\.\r\n$/ && last; として実行すると何が表示されますか? Windows マシンで動かしていますか? (環境はちゃんと書きましょう) もしそうなら socket(SOCKET,PF_INET,SOCK_STREAM,0)|| die ... の後に binmode(SOCKET); という行を追加するとどうなりますか? |
はじめまして。いつも勉強させてもらっています。 >>2364 わたなべ > LISTので止まっているようです。 私も、pop3 クライアントを自作したときに、同じことを経験しました。 そのときは、pop3 サーバが NT で、 > +OK IMS POP3 Server 0.87 Ready というものだったのですが、 LIST の返事に、"." のみの行がなかったのです。 > +OK 0 message (0 octets) > 0 messages (0 octets) こんな感じでした。 |
>>2366 kuw >LIST の返事に、"." のみの行がなかったのです。 補足です。 その時は、LIST のかわりに STAT を使うようにして回避しました。 |
>>2365わたなべ 早速ありがとうございます。 試してみましたが、状況は変わりません。 環境は、Windows2000のクライアントで、サーバーはFreeBSDです。 telnet pop.nifty.com 110 USER ****** PASS ****** LIST とやる分には、NIFTYでもちゃんとリストされます。 print "[$_]";を追加してみると [+OK <**********> ][+OK ][+OK と表示されます。 print $_; にしてみると、 +OK <**********> +OK +OK で止まってしまいます。 いづれも、Ctrl+Cで終了しないと終わりません。 ところがiij4uでは、 +OK IIJ ************ +OK ************ +OK ************ +OK 5 messages**** と言う感じで正常に動いています。 尚、binmode(SOCKET);を追加してみても状況に変化はありません。 iij4uとNIFTYの差は、+OKの後にiij4uの方は文字があるのですが、NIFTYは何も無いことぐらいです。 att.ne.jpでも動きませんでした。 もちろんtelnetで直接タイプすればリストも問題ありません。 よろしくお願いします。 |
>>2364わたなべ kuwさんありがとうございます。 STATを使う件、本日世が明けたら試してみます。 ありがとうございます。 |
>>2366 kuw > LIST の返事に、"." のみの行がなかったのです。 >> +OK 0 message (0 octets) >> 0 messages (0 octets) なるほど。もう少し詳しくお聞かせ下さい。 それは mail box にメールがたまっていなかったときのみ . が ないのでしょうか? あるいはメールがたまっていても . がない のでしょうか? また、その POP3 サーバアプリケーションの名前は 何かわかりますか? ちなみに . をもってレスポンスの終了と見なしている根拠は http://ring.ip-kyoto.ad.jp/pub/doc/RFC/rfc1939.txt > When all lines of the response have been sent, a > final line is sent, consisting of a termination octet (decimal code > 046, ".") and a CRLF pair. > Examples: > C: LIST > S: +OK 2 messages (320 octets) > S: 1 120 > S: 2 200 > S: . です。 |
>>2370 68user >それは mail box にメールがたまっていなかったときのみ . が >ないのでしょうか? あるいはメールがたまっていても . がない >のでしょうか? メールがたまっていなかったときのみです。 メールがたまっているときは、 > +OK 1 messages (1146 octets) > 1 1146 > . となります。 >また、その POP3 サーバアプリケーションの名前は >何かわかりますか? EMWAC の IMS POP3 Server 0.87 です。 5, 6 年前に NT にインストールして以来、そのまま使っているので、 かなり古いものだと思います。 # この数年、NT を全くいじっていないので、最近の事情はわかりませんが・・・ >ちなみに . をもってレスポンスの終了と見なしている もちろん、これは正しい仕様だと思いますし、 同じ仕様の MUA やメールチェッカーも多いと思います。 |
>>2364わたなべ おはようございます。 昨日の続きですが、下記のようシンプルにしてテストしてみましたが、状況に変化はありませんでした。 よろしく御願いします。 --------------------------------------------- print SOCKET "USER $username\r\n"; print SOCKET "PASS $passwd\r\n"; print SOCKET "LIST\r\n"; while (<SOCKET>){ m/^\.\r\n$/ && last; print $_; } print SOCKET "QUIT\r\n"; --------------------------------------------- 上記の結果 ■AT&Tに接続した場合 +OK <283**.10082***86@mail.att.ne.jp> +OK +OK (ここで止まってしまうので Ctrl+C) ^C % ■iij4uに接続した場合 +OK IIJ POP3 Server (**.iij4u.or.jp) starting. <128**.1008***94@**.iij4u.or.jp> +OK Password required: ******@**.iij4u.or.jp +OK ******@**.iij4u.or.jp has 2 messages (2182 octets) +OK 2 messages (2182 octets) % ------------------------------------------------------------------------------- ■telnetでAT&Tに接続した場合 telnet ***.att.ne.jp 110 +OK <283**.10082***86@mail.att.ne.jp> USER ******** +OK PASS ******** +OK LIST +OK 1 958 2 960 . QUIT +OK ■telnetでiij4uに接続した場合 telnet **.iij4u.or.jp 110 +OK IIJ POP3 Server (**.iij4u.or.jp) starting. <128**.1008***94@**.iij4u.or.jp> USER ******** +OK Password required: ******@**.iij4u.or.jp PASS ******** +OK ******@**.iij4u.or.jp has 2 messages (2182 octets) LIST +OK 2 messages (2182 octets) 1 1090 2 1092 . QUIT +OK IIJ POP3 Server (w/mdir) (m-**.iij4u.or.jp) signing off |
>>2371 kuw ありがとうございます。ということは、その POP3 サーバのバグと 判断してもよいようですね。 >>2372 わたなべ では、残るは改行コードくらいですかね。 select(SOCKET); $|=1; select(STDOUT); $|=1; # 標準出力のバッファリングも OFF print SOCKET "USER $username\r\n"; print SOCKET "PASS $passwd\r\n"; print SOCKET "LIST\r\n"; while (sysread(SOCKET, $_, 1) ){ # read(2) を使って読む。 printf("$_ [%02X] ", unpack('c',$_)); } print SOCKET "QUIT\r\n"; を試して下さい。 |
>>2373わたなべ 試してみました。 +[2B] O [4F] K [20] ・・・・・・ [3E] [0D] + [2B] 0 [4F] K [4B] [20] [0D] + [2B] 0 [4F] K [4B] [20] [OA] で止まります。 NIFTYもAT&Tもこうした現象なのですが解決方法は無いものでしょうか? |
>>2374 わたなべ 接続時のリプライは +OK....\r USER に対するリプライは +OK \r PASS に対するリプライは +OK \n という変なサーバであることがわかります。 # このサーバは RFC1939 に準拠していないと思います。このサーバ # アプリの名前を教えていただけますか。 で、\r や \n だけでも行末と見なすように、 m/^\.\r\n$/ && last; を m/^\.(\r\n|\r|\n)$/ && last; として下さい (*A)。 で、これだけの対処では多分挙動は変わらないでしょう。 > [OA] で止まります。 ということは、相手が LIST に対するリプライをしていない、 つまり「LIST を受け取ったと解釈していない」ということなので、 やはり SOCKET がテキストモードになっており、 print SOCKET "LIST\r\n"; が print SOCKET "LIST\r\r\n"; となって送信されているのではないかと推測します。 *A の変更を行った上で、再度 binmode(SOCKET) を挿入してみて下さい。 # Windows には詳しくないのですが、これでよいんでしたっけ?>どなたか |
>>2375わたなべ 試してみましたが、状況は変わりませんでした。 AT&TにPOP3のアプリケーションを確認したところ、qmailだそうです。 サーバーのOSは、教えてくれませんでした。 よろしく御願いします。 |
初めまして。初めてなのに、こんな事を書くのはあつかましいとも思うんですけど、どうにもならないのでフ゜ロク゛ラムを教えて欲しいんです。 実は、課題がでたんですけど分からないので。 内容ですが Cのフ゜ロク゛ラムファイル(sourse.c)の英小文字をすべて英大文字に変換し、他のファイル(trans.c)に書き出す。 と言う物です。 それで、 #include <stdio.h> #include <stdlib.h> main(int argc, chr*argv[]) { int i; FILE *fin; char ss[256]; if(fin=fopen("sourse","r") == NULL){ printf("オーフ゜ン出来ない.\n"); exit(1); } char( までは出来ました。それから先が全くわかりませんので、宜しくお願いします! |
>>2373 68user >その POP3 サーバのバグ その通りです。 しかも、今回の件には、まるで関係ない話みたいですね。失礼しました。 >>2377 ARGUN >Cのフ゜ロク゛ラムファイル(sourse.c)の英小文字をすべて英大文字に変換し、他のファイル(trans.c)に書き出す。 ならば、 cat sourse.c | tr a-z A-Z > trans.c で良いのでは? |
>>2376 わたなべ > 試してみましたが、状況は変わりませんでした。 ほほぅ、そうですか。それは困りましたね。 > qmailだそうです。 qmail 付属の qmail-pop3d かな? djb モノがそんな挙動を するのはあまり考えにくいですが、telnet ではできている のですから、怪しいのは改行コードです。 現在は sysread で読んでいるのですから、受け取ったデータは 即座に表示されるはずです。ということは、何も表示されない= 送ったリクエストが正しく解釈されていないということなので、 print SOCKET "LIST\r\n"; を print SOCKET "LIST\n"; にしてみたり、いろいろ試してみて下さい。 どうにもならなかったら、試したスクリプトを見せて下さい。 >>2377 ARGUN > Cのフ゜ロク゛ラムファイル(sourse.c)の英小文字をすべて英大文字に変換し、 > 他のファイル(trans.c)に書き出す。 まずは、sourse.c の内容を trans.c にコピーするところから やってみては。 |
>>2364 わたなべ > LISTので止まっているようです。 うちのサーバが qmail + vpopmail だったのでテストしてみたところ 同様の現象が再現しました。 うちの場合 print SOCKET "LIST\r\n"; の直前の行に sleep 1; を挿入したらうまく動きましたので 試してみてはいかかでしょう。 |
>>2380わたなべ /tkさんのアドバイスどおりに sleep 1; を入れたら無事に動きました。 本当に有り難うございました。 大変お騒がせしましたが、これで落ち着いて眠れます。 今後ともよろしく御願いします。 |
68userさん。Kuwさん。有難うございます。 でも、長く入院してたせいで冗談抜きで全く分からないんです。 コピーってどうやるんですか? 甘えだとは思うのですが、迷惑でしょうがプログラム載せて貰いたいのですがおねがいします。聞けるような仲間がいないので。 |
>>2382 ARGUN > プログラム載せて貰いたい --- a2A.c ここから --- main () { system("tr a-z A-Z < sourse.c > trans.c"); } --- a2A.c ここまで --- a2A.c をコンパイルしてできた実行ファイルを、 sourse.c と同じディレクトリにコピーして実行してみてください。 運が良ければ、お望みの trans.c が作成されます。 とりあえず、課題はこれで良いとして、本気でプログラムの勉強を したいのならば、68user さんのアドバイスを参考にがんばってください。 あとは、 >>2230 68user > - 課題だからといって、問題をそのまま掲示板に書き込んでも反感を買うだけ、 > ということを書き込む前に推測できるようになる。 > - 仮に課題だとしても、そうは見えないようにうまくカムフラージュ > できるような文章力を身につける。努力しているという姿勢を > アピールする。 という金言も参考にされると良いでしょう。 |
>>2382 ARGUN google で「C言語 ファイル コピー」などと検索すれば、 サンプルプログラムなんてたくさん見付かります。 「C言語 小文字」だってたくさん見付かります。 http://pc.2ch.net/test/read.cgi/tech/1007902384/l50 で質問するのもよいでしょう。 ここで回答をもらえることを期待するよりもそっちの方が早いです。 >>2380 /tk > sleep 1; うーむ、改行コードは大外しでしたか。ということはその POP サーバは リクエストを 1行だけ読んでいるのではなく、select か何かでバッファに たまっているリクエストを全て解釈しようとしていた、ということですかね? 本来 USER 送って +OK を受け取って、PASS 送って +OK を受け取って、その後 LIST を送らねばならないところを、一気に USER、PASS、LIST を送って、その後 リプライを受け取るという手抜きをしていたからまずかった…と。 |
こんにちは。 環境は OSはSolaris 2.6、printerはEPSON LP8200PS2(PSプリンタ)です。 質問は、 lpコマンドで印刷用紙のサイズを指定したいのです。 HELPなどを見てもそれらしきoptionがないのですが、用紙サイズを A4とかB4とかに任意に設定するoptionはありませんか? よろしくおねがいします |
はじめまして。最近cgiの勉強をはじめたんですが、なかなかうまくいきま せん。 さっそく質問ですがローカルでcgiの動かし方がわからないんです。一通り 関連サイトを回ってみたのですがどうしても駄目なんです。例えば hello-worldを実行すると #!C:/Perl/bin/perl print "Content-type: text/html\n\n; print ""; print "Hello world.; print "; こうなってしまうんです。プロバイダがcgiの使用を許可してないので それが原因なのでしょうか?もしそうならなにか方法を教えてください。 よろしくお願いします。 |
ちなみに環境は windows98,internetexplorer5,プロバイダはocnです。 よろしくお願いします |
>>2386 cgi超初心者 >プロバイダがcgiの使用を許可してない のは全く関係ありませんので安心してください。 ローカルでCGIの動作確認をする方法を初心者向けに説明したサイトを紹介しておきます。 http://members.tripod.com/~tyanko/s_mokuji.html |
>>2385 hiro lp -f で できませんでしたっけ。 |
つかぬ事をお伺いしますが、perlで <+ でファイルオープン時に、開こうとする ファイルが存在しないとエラーとなりますが、以下の様な処理をしました。 が、どう見てもカッコ悪い(笑)のでこんなケースにはどんな処理をしているか お聞きしたいのですが・・・ if(!-e $dat_file){# 存在しない時に作成 if(!open(DAT, ">$dat_file")) { &error('オープンエラー', "データファイルの生成に失敗しました。[$dat_file]");} close(DAT); } #改めて開きなおし if(!open(DAT, "+<$dat_file")) { &error('オープンエラー', "データファイルのオープンに失敗しました。(1)");} while(<DAT>){ chomp; push(@record, $_); } |
>>2390 スナフキン open(DAT, "+<$dat_file") || open(DAT "+>$dat_file") || &error('..'); while(<DAT>){ .. } ってのはどうでしょうね。 あと、perlopentut(1) に参考になることが書いてあるかも (書いてないかも) しれません。 |
ウチのマシンの perl はバージョンが古く(5.004_04)なので perlopentut の情報は見つけられませんでした。 しかしキーワードを検索するといろいろと情報を得る事が出来ました。 if(!open〜 は自分なりの書式なので良く使っていましたが、perlで 杓子定規に覚える事にはあまり意味が無いですね(笑) いままで使った事の無い sysopen もいろいろ試してみます。 的確なキーワードありがとうございます。 参考になったURL http://www.wingworld.co.jp/forum/cgi/messages/1931.html う〜んバージョンを新しくしなければ・・・ |
>>2384 68user > select か何かでバッファに たまっているリクエストを > 全て解釈しようとしていた、ということですかね? この辺の仕様(というか実態)は知りませんが サーバにどのようなリクエストが実際に渡ったのかを 調べるのが、原因究明の早道となるような気がします。 # 実際どのようにすれば, それを調べられるかは分かっていません。 今回の件に関しては, なんとなく > 一気に USER、PASS、LIST を送って、その後 リプライを受け取る のが原因かな。 と特に根拠も無くアタリをつけてテストをしました。 別に sleep である必要は全然無いのですが 個別にリプライを受けて -ERR だったら再入力な スクリプトを書くの面倒だったので… (あと環境が Windows でしたので) >>2390 スナフキン > こんなケースにはどんな処理をしているか 実際にファイルが存在していないのですから オープンエラーで困る事は無いのだし むしろエラーになってくれなくては困るという 考え方をしています。 …↑ゴミレスですね。すみません。 |
UNIX プログラミング FAQが以下に移転しています。 http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html http://www.adl.nii.ac.jp/~moro/ 暫定っぽいですが(^^; |
Cクラス(HP UNIX版)ハードDiskをBクラス使用するとき何か 設定必要でしょうか ? 教えって下さい。 |
access.logは下記のようなもの。$1はエポックタイム (1970/1/1 00:00:00からの経過秒数)で$3はアクセスした端末のIP。 1009379443.542 20 192.168.16.17 TCP_HIT/200 1694 GET http://www.al4a.com/images/911.gif - NONE/- image/gif 1009379443.604 24 192.168.16.17 TCP_HIT/200 10159 GET http://www.al4a.com/honor.gif - NONE/- image/gif 1009379444.170 11683 192.168.16.17 TCP_REFRESH_HIT/200 59687 GET http://www.al4a.com/links.html - DIRECT/www.al4a.com text/html 1009379446.523 2979 192.168.16.17 TCP_HIT/000 11027 GET http://www.al4a.com/images/al4av2.jpg - NONE/- - 1009379446.526 1472 192.168.16.17 TCP_MISS/000 0 GET http://counter7.tracker.com/c5/id/0/104406 - DIRECT/counter7.tracker.com - 1009379447.026 63 192.168.16.17 TCP_HIT/200 15976 GET http://www.al4a.com/banners/gf1.gif - NONE/- image/gif 1009379447.364 16 192.168.16.17 TCP_HIT/200 10159 GET http://www.al4a.com/honor.gif - NONE/- image/gif 1009379448.331 967 192.168.16.17 TCP_MISS/200 9626 GET http://counter7.tracker.com/c5/id/0/104406 - DIRECT/counter7.tracker.com image/gif 1009379449.997 1504 192.168.16.17 TCP_HIT/200 20456 GET http://www.pornleo.com/banner/pussy10-29.gif - NONE/- image/gif 1009379450.256 3056 192.168.16.17 TCP_HIT/200 15679 GET http://www.al4a.com/images/al4av2.jpg - NONE/- image/jpeg 1009379453.262 148 192.168.16.17 TCP_HIT/200 7049 GET http://www.al4a.com/banners/fc1.jpg - NONE/- image/jpeg 1009379453.301 38 192.168.16.17 TCP_HIT/200 9328 GET http://www.al4a.com/banners/am1.gif - NONE/- image/gif 1009379454.056 1963 192.168.16.17 TCP_HIT/200 21921 GET http://al4a.free6.com/free6.gif - NONE/- image/gif これを集計して date time user数 ---------------------- 2001/12/28 00:00 0 2001/12/28 00:30 0 2001/12/28 01:00 5 2001/12/28 01:30 6 のようにしたいのです。awkファイルは3つあり、それをshellに記述して 一括処理しようとしています。 #syukei.sh #!/bin/sh ./syukei1.awk access.log|./syukei2.awk|./syukei3.awk > file #syukei1.awk #!/bin/gawk -f { hour=strftime("%H",$1);minute=strftime("%M",$1);second=strftime("%S",$1) base=$1-(hour*3600+minute*60+second) for(i=1;i<=48;i++){ if((base+1800*(i-1) <= $1) && ($1 < base+1800*i)){ print strftime("%Y/%m/%d %H:%M",base+1800*(i-1)),$3,1 } } } #syukei2.awk #!/bin/gawk -f { sum[$2,$3] += $4 } END { for(item in sum){ split(item, t, SUBSEP ); printf("%s %s %s %d\n",$1,t[1],t[2],sum[item]); } } #suykei3.awk #!/bin/gawk -f { if(length($2) > 0){ kazu[$2] ++; } } END{ for(i in kazu){ print $1,i,kazu[i] } } といった感じです。syukei1.awkで 2001/12/28 00:00 192.168.1.2 1 2001/12/28 00:00 192.168.1.1 1(とりあえずエポックタイムを現在時刻に変換し、秒の項はprintしない。あとはIPaddressを取る) のように加工します。(最後の1は捏造したもの。後々この数をカウントするので) syukei2.awkで↑の$4を集計。 2001/12/28 00:00 192.168.1.2 5 2001/12/28 00:00 192.168.1.1 6 : 2001/12/28 00:30 192.168.1.1 2 2001/12/28 00:30 192.168.1.2 4 のように加工します。(userごとに30分刻みで何回アクセスしたか) 最後にsyukei3.awkで↑の$3を集計。 2001/12/28 00:00 2 2001/12/28 00:30 3 のようにdate time user数という形で出力したいんです。 ただ、ここで今問題になっているのが、例えば2001/12/28 01:00〜2001/12/28 01:30の間に一度もアクセスがなかった場合、 その行が表示されません。アクセスがない場合は2001/12/28 01:00 0 0のように表示したいのですが、 どのようにすればいいでしょうか。また、3つファイルがあるんですが、これを一まとめにすることって可能なんでしょうか。 長くなりましたが、ご教授宜しくお願いします。 |
あけましておめでとうございます。 今年もよろしくお願いします。 >>2396 hogehoge さん:はじめまして cronで30分に1回httpを叩くクライアントを作っておいて、 そいつ1回しかアクセスしなかったら0アクセス、 そいつも含めてn回アクセスがあったらn-1アクセスではだめですかねー。 |
あ…、明けましておめでとうございます。 ふくしさんはじめましてです。 今まではcronを使って30分ごとに集計をとる方法でした。 でも、処理に時間がやたらとかかってしまいまして。 それが1日48回もあるかと思ったら…。 それでプログラムの改善と一括処理に切り替えることにしたんですが。 どうにかならないもんですかね…。ふぅ。 |
>>2398 hogehoge さん:Perl ですいません。こんなんでできそうです。 要は、 ファイルの各レコードについて、 0:00〜0:30、0:30〜1:00、1:00〜1:30、、の各ゾーンに入っているか調べ、 そのゾーンに入っていたら ゾーン、IP アドレスをキーに持つ2次元ハッシュの値を1にし、 全件調べた後に各ゾーンごとにいくつ IP がたまっているかを出力しています。 ろくにテストしていませんがバグっていたらすみません。 #! perl -w use Time::Local; # timelocal 関数を使うために必要なモジュールの宣言 (undef,undef, undef, $mday, $mon, $year, undef, undef, undef) = localtime(time); # 今日が何日か $step = 30 * 60; # 30分刻み $next = timelocal(0, 0, 0, $mday, $mon, $year); # 今日の0時0分0秒の時刻(epoch からの秒数) $start = $next - 60 * 60 * 24; # 昨日の0時0分0秒の時刻 %result = (); while(<DATA>) { ($now, undef, $ip) = split; for ($from = $start; $from < $next; $from += $step) { # $from は計算開始の時刻 $to = $from + $step; # $to は計算終了の時刻 if ($from <= $now and $now < $to) { $result{$from}{$ip} = 1; } } } for ($from = $start; $from < $next; $from += $step) { $num = keys %{$result{$from}}; ($sec, $min, $hour, $mday, $mon, $year) = localtime($from); $year += 1900; $mon++; print "$year/$mon/$mday $hour:$min:$sec $num\n"; } |
すいません、<DATA> でなくて <STDIN> にして標準入力を渡すか、 ファイルハンドルをオープンしてつかってください。 テスト用のコードを修正しわすれました。 |
ふくしさんありがとうございます。 Perlをそのまま使うことができないのがとても残念ですが、 まだawkも始めたばっかりで、アルゴリズムの解釈なんかが 多々間違っていると思われ、とても参考にさせて頂きたいと思います。 なんとか、awkに変換、反映させてみたいと思います。 とりあえず、このスクリプトがうまくいったら、次は Perlをやってみたいと思っています。ありがとうございました。 また何かあったら教えて下さいね。 |
>>2401 hogehoge see http://pc.2ch.net/test/read.cgi/unix/1000303370/130-132n and http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse |
いつもお世話になります。 CGI.pm でファイルのアップロードをするときの質問です。 html で <html> <body> <pre> アップロードするファイルを指定してください。 ファイル名は半角英数字で、空白を含まないでください。 </pre> <form action="fileup.cgi" method="POST" ENCTYPE="multipart/form-data"> ファイル名:<input type="file" name="fname"><br> <hr> <input type="submit" value="OK"> </form> </body> </html> というフォームを作って、 #! perl -w # fileup.cgi use CGI; my($form) = new CGI; print $form->header("text/html"); my($filename) = $form->param('fname'); $filename =~ m|([^\\]+)$|; # Windows のフルパスから基底ファイル名を取り出す $newfile = "./gooddir/$1"; # gooddir の下に入れる。 open (OUTFILE,">$newfile") or die "Can't make serverside file because $!\n"; while ($bytesread = read($filename,$buffer,1024)) { print OUTFILE $buffer; } print <<EOD; <pre> アップロードが終了しました。ファイル「$filename」は $newfile としてアップロードされました。 </pre> EOD という CGI を呼び出すとうまくいくのですが、 同じ CGI を、呼び出し側のフォームも CGI.pm で作って #! perl -w use CGI; use strict; my $title = 'ファイルをアップロードしてください'; my $q = new CGI; print $q->header(); print $q->start_html(); print $q->start_form(-method=>'form', -action=>'./fileup2.cgi', -enqtype=>'multipart/form-data'); print $q->h2($title); print '変換するファイルを指定し、[実行] をクリックしてください。<br>', '(空白のあるファイル名、日本語のファイル名は避けてください)<br>', $q->filefield(-name=>"fname"), '<br>'x3; print $q->submit(-name=>'submit',-value=>'実行'); print $q->endform; print $q->end_html(); とやると、空ファイルが作成されるだけでうまくアップロードできません。 エラーログには何も出ません。 なにがおかしいのでしょうか? 何かおわかりでしたらご教示願います。 |
ん〜、 >>2403 ふくし > -method=>'form' post? > -enqtype=>'multipart/form-data' enctype? とか? |
>>2404 68user さん、本年もよろしくお願いします。 ん〜、ほんとにそれだけのことでした。;;; 恥の掻き初め(寒)ですね。 最初、-enctype を指定していなかったんです。 そうすると start_form がデフォルトで application/x-www-form-urlencoded を取るので 失敗していたようです。 (その場合 start_multipart_form を使えばデフォルトが multipart/form-data になるようですね) method も post がデフォルトなので書いていなかったのですが、 html と最大限あわせようと思って質問の直前に書いて、 それで失敗していたのでした。 ハッシュによる名前付け編集の渡しは、 存在しないキーを渡しても無視されるのはなんかわかりますけど、 存在するキーに定義されてない値を渡しても怒られないのは ちょっと CGI.pm が不便だなあと思いました。 いずれにしても、これらのケースでエラーを出して欲しいです。 (出す方法あったりして、、) とまれ、ありがとうございました&すいませんでした。 本年もよろしくです。 |
proxy サーバに接続後、 strcpy(request, "CONNECT www2.ggn.net:443 HTTP/1.1\r\n" "Host: www2.ggn.net\r\n" "\r\n"); write(s, request, strlen(request)); とする。そしたら proxy サーバが HTTP/1.0 200 Connection established(CRLF) (CRLF) などと返してくるので、 read_size = read(s, buf, BUF_LEN); write(1, buf, read_size); でレスポンスを読み取る (↑これは手抜き)。その後は SSL_load_error_strings(); して、普通におはなし。 >>2160 Nira では ERR_load_crypto_strings(); ERR_load_SSL_strings(); OpenSSL_add_all_algorithms(); を追加する必要がある、ということでしたが、FreeBSD 4.4-RELEASE では 付けても付けなくてもうまくいきました。 お仕事では、Windows+Borland C++ Builder 5.0 でやらなきゃ いけないのが欝です (C++ 知らんし、Windows でプログラムを 組んだことがないし)。HTTP 用モジュールは用意してあるみたい だけれど、使い方がさっぱりわからんなぁ。 >>2405 ふくし > 存在するキーに定義されてない値を渡しても怒られないのは > ちょっと CGI.pm が不便だなあと思いました。 perl 5.005_03 付属の CGI.pm を見る限りでは、エラー検出する 方法はないようですね。 > 本年もよろしくです。 こちらこそよろしくお願いします。 |
>>2406 68user う、一行目が欠けてしまって意味不明に。 一行目は 「お仕事で proxy サーバ経由の SSL 通信を行う必要があったので、メモメモ。」 でした。 |
UNIXを勉強したい人ってはじめは何をすれば良いか教えてください! ほんとにくだらない質問をしてすいませんが、おねがいします!! |
>>2394 Ka23 > UNIX プログラミング FAQが以下に移転しています。 遅くなりましたが反映しました。ありがとうございました。 >>2408 ぶちお > UNIXを勉強したい人ってはじめは何をすれば良いか教えてください! 本屋に行ってインストール記事の載っている雑誌か、 インストール本を買うか、あるいは Turbo Linux とかの 商品 (1万程度) を買うのがいいんじゃないですかね。 その後はネット環境を整えたり、プログラミングしたり 好きなことをすると。 |
68userさんありがとうございました!!助かりました!また質問するときがあると思いますがそのときはよろしくおねがいします!! |
こんにちは。 私はWindowsにActivePerlを入れてCGIやっています。 今回、PPMを使おうと思って、DOS窓でppmと入力したら、 下のようなメッセージが出てきました。 Failed to load PPM_DAT file Can't use an undefined value as a SCALAR reference at C:/Perl/site/lib/PPM.pm line 1586, <DATA> line 36. なんかエラーが出てるようなのですが、PPM.pmというのはいじった 覚えがないし、他のファイルもいじった覚えはなし、上のエラーが 何を意味するのかよく分からないし、Googleなどで検索かけてもみ たのですが、同じ様な事例は見つからず困っています。 どなたか分かる方いましたら、どうすればいいのか教えてください。 お願いします。 Win98,ActivePerl5.6.0(Binary build 623) |
>>2411 ぶぶ さん、こんばんは。 めったに ActivePerl は使わないのですぐにはわからないんですが 手もとの環境では C:/Perl/site/lib/PPM.pm の 1586 行目近傍は以下のようになっていました。 1584:if (defined($location)) { 1585: if ($location =~ /[^\/]$/) { $location .= "/"; } 1586: $package = $location . $package . ".ppd"; 1587:} もしぶぶさんの環境でも同じであれば、 とりあえず 1586 行目の直前に warn "location: $location package: $package\n"; とでも入れてみて、 $location と $package の値を見てみたらいかがでしょうか。 でも、うちの環境(同じ Windows98)で ppm と入れたら その現象が再現できなかったので、 再インストールでもいいかなという気もしますが。 |
>>2412 ふくし 自己レスれす。(寒 >とりあえず 1586 行目の直前に >warn "location: $location package: $package\n"; これ、自分でもやってみましたけど、 C:\> ppm と打っただけではココは通らないみたいでした。 ぶぶさん、 PPM.pm の 1586 行目はぼくと同じですか? (バージョン、レベルは同じなんだけどなァ) あと、ほんとに C:\> ppm と打っただけで怒られます? それともなんか実のあること(パッケージのインストールとか)を やろうとしてます? 後者の場合は入れたコマンドを教えてください。 |
たびたびすいません!!今学校でパソコン同士のデータのやり取りを、Cプログラムでなんとかやろうとしているのですがわからんのですー!先生はfopenとか使えばできるだろー!!というのですが本を見てもかいてないようなかんじで(_m_!)なにしろ未熟者でわからんのですー!よろしければおしえてもらえますか? |
>>2414 ぶちお > 今学校でパソコン同士のデータのやり取りを、Cプログラムで > なんとかやろうとしているのですがわからんのですー! さて困ったものですね。あまりにもひどい質問の仕方です。 http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse は読んでいただけましたか? パソコンって何ですか? UNIX ですか? Windows ですか? それ以外ですか? 具体的な OS 名とそのバージョンは? データのやり取りって具体的に何をしようとしていますか? フロッピーからデータを読み込むことですか? LAN 経由で ファイルを読むことですか? RS-232C 経由でデータを やりとりすることですか? 今後、こういう調子の質問を続けるつもりでしたら、僕は お相手を致しかねますのでよろしく。 |
ふくしさん、お返事ありがとうございます。 PPM.pmの1586行目付近は、下のようになっていました。 1577:unless ($PPDfile && $$PPDfile) { 1578: foreach (keys %repositories) { 1579: my $location = $repositories{$_}{'LOCATION'}; 1580: if ($location =~ /[^\/]$/) { $location .= "/"; } 1581: $$PPDfile = $location . $package . ".ppd"; 1582: return %PPD if (%PPD = getPPDfile('package' => $$PPDfile, 1583: 'parsertype' => $parsertype, 'PPDfile' => \$$PPDfile)); 1584: undef $$PPDfile; 1585: } 1586: return unless $$PPDfile; 1587:} ちょっと違うみたいですよね。こちらの方が行が短いのでしょうか。 ちなみにDOS窓に入力したのは、 C:\>ppm これだけです。 PPM のシェルでパッケージのinstallをしようと思っているのですが、 とりあえずPPMを起動するため、入力しているのはppmという文字だけ です。そして、ppmとだけ入力すると、例のエラーが出るのです。 少ない情報ですが、何か分かりますでしょうか? やはりActivePerlを入れ直してみた方が良いのでしょうか? よろしくお願いします。 |
>>2416 ぶぶ 先ほど、Windows2000 に ActivePerl を入れる必要が あったので試してみたのですが、ppm とだけ 打つと PPM interactive shell ... と出てエラーは出ませんでした。 インストールしたのは最新の build 631 (perl-5.6.1) です。 再インストールは悪くない選択肢ではないかと思います。 |
>>2416 ぶぶ さん: いま会社で ActivePerl の環境がないのでテストできませんが、 >return unless $$PPDfile; ここで >>Can't use an undefined value as a SCALAR reference (スカラーの参照として、未定義値は使えません) ですよね。 $$PPDFile というのは、 $PPDFile というスカラー変数に スカラーへの参照(別のモノを指し示すもの)が入っていると考えて、 そのスカラーの値を返そうとしているわけですが、 そのとき $$PPDFile に undef が入っているのでくだんのエラーが 出ています。 たぶん $PPDFile という変数にもっと上の方でスカラーへの参照を セットすることを期待して動いていたのですが、 その期待が裏切られているようです。 (その上でいろいろしているのも、$$PPDFiles つまり $PPDFiles が指し示すスカラーメモリに対してで、 $PPDFiles にどのような論理で何が入っているかは 下のコードからは不明です) ・・・という風にさかのぼって研究しても勉強になると思いますが、 (意外ともうちょっとでパキッとわかったりして) いずれにせよこんなアンフレンドリーなメッセージが出て中断するのは 作者の意図と違う動作なので、再インストールでもいいと思います。 |
ふくしさん、68userさん、お返事ありがとうございます。 build631をインストールしてみましたら、何の問題もなくPPMの シェルが起動しました。 インストールしてから、PPM.pmを覗いてみると、1586付近は、 ふくしさんが書かれたものと同じになっていました。 前に入れていたものがおかしかったのでしょうか。入っている pmファイルがおかしいとは夢にも思わなかったので再インスト ールを試さずに質問してしまってごめんなさい。 これでやっとパッケージのinstallができます。ありがとうご ざいました。 PS. ふくしさん、エラーに関する説明ありがとうございます。 エラーの出る仕組みがよく分かりました。 |
ボーランドC++コンパイラーでC言語のCGIを作ろうと思っているのですがどうしたら良いのでしょうか? bcc32 -o CGI名 ソース名 でいけるのでしょうか? よろしくお願いします |
>>2420 初心者 > …でいけるのでしょうか? 試してみた結果どうなりましたか? |
メール受信時に"newaliases"コマンドを実行したいのですが、上手くいきません。 方法としては、特定のアドレスにメールが届いた時点でシェルスクリプトを実行するようエイリアスファイルにて設定しており、シェルスクリプトにはsudoで"newaliases"を実行するよう書いています。 また、sudoersにて"newaliases"コマンドをroot権限で実行できるようにも 設定しています。 "newaliases"コマンドではなく、他のコピーコマンド(cp)などは動作するのですが、"newaliases"コマンドは動作しません。 同じような方法を取られている方がいらっしゃいましたら 設定方法を教えていただけませんでしょうか。 宜しくお願いいたします。 |
申し訳ありません。環境を全く書いていませんでした。 RedHat Linux7.1.J、Sendmail8.11.5 です。 宜しくお願いします。 本文↓ メール受信時に"newaliases"コマンドを実行したいのですが、上手くいきません。 方法としては、特定のアドレスにメールが届いた時点でシェルスクリプトを実行するようエイリアスファイルにて設定しており、シェルスクリプトにはsudoで"newaliases"を実行するよう書いています。 また、sudoersにて"newaliases"コマンドをroot権限で実行できるようにも 設定しています。 "newaliases"コマンドではなく、他のコピーコマンド(cp)などは動作するのですが、"newaliases"コマンドは動作しません。 |
>>2423 橋本 どのユーザが「newaliases を root 権限で実行できる」ような 設定になっていますか? また、sudo のログには何と記録されていますか? |
>>2424 68user だけでは情報が不十分かな…。 sudoers に書いた内容と、「特定のメールアドレスにメールが 届いたらコマンドを実行する」というのをどうやって実現して いるか (/etc/aliases とか /home/foo/.forward とか) も 書いてください。 |
>>2424 68user newaliasesをroot権限で実行できるユーザは"deamon"に設定しています。 理由は、メール受信時に実行されるシェルスクリプトが一体どのユーザで 実行されるか分からなかったため、シェルスクリプト内にメールを送信 するコマンドも記述したところ、"deamon"という送信者名でメールを送信 したため、deamonでシェルスクリプトは実行されると思い設定しました。 ですが、実際はdeamonが実行しているようではないようです。 >>2423 にてcpコマンドなど他のコマンドは動作する。 と記述しましたが、私の勘違いで動作していませんでした。 申し訳ありません。 また全てのユーザに"newaliases"、"cp"コマンドをroot権限で 実行できるよう設定したところ、正常に動作しました。 ですが、全てのユーザに許可してしまうわけにはいかないので、 どうにかして特定のユーザにのみ許可して動作するようにしたいのですが ・・・。 以下設定ログ・設定内容です。 ●メール受信時のログ↓ Jan 21 18:20:16 test sudo(pam_unix)[19079]: authentication failure; logname= uid=0 euid=0 tty= ruse r= rhost= user=daemon Jan 21 18:20:23 test sudo(pam_unix)[19079]: 2 more authentication failures; logname= uid=0 euid=0 t ty= ruser= rhost= user=daemon Jan 21 18:20:23 test sudo[19079]: daemon : 3 incorrect password attempts ; TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/newaliases ●sudoersに追加↓ deamon ALL= NOPASSWD: /usr/bin/newaliases deamon ALL= NOPASSWD: /bin/cp ●メール受信時に動作するシェルスクリプト↓ #!/bin/sh sudo cp /etc/mail/123.txt /etc/mail/456.txt sudo newaliases mail -s test mailuser@****.co.jp < /etc/mail/456.txt exit 長文で申し訳ありませんが宜しくお願いします。 |
>>2425 68user 「特定のメールアドレスにメールが届いたらコマンドを実行する」は、 (/etc/mail/aliases)に mailuser :"|/etc/mail/mail-program" と記述しています。 よろしくお願いします。 |
>>2427 橋本 > ●メール受信時に動作するシェルスクリプト で /usr/bin/id > /tmp/id.result などとすれば、どの権限で 動いているのかがわかります。 一般的には、/etc/mail/aliases に mailuser :"|/etc/mail/mail-program" とあるなら、/etc/mail/mail-program というファイルの権限で動きます。 例えば % ls -l /etc/mail/mail-program -rw-r--r-- 1 hoge wheel 46632 Sep 19 02:30 /etc/mail/mail-program ならば hoge 権限で動く、ということです。 |
>>2428 ですが、 mail-programの権限は以下のようになっています。↓ -rwxr-xr-x 1 root root 165 1・21 19:55 mail-program また /usr/bin/id > /tmp/id.resutl の結果は以下になりました。↓ uid=2(daemon) gid=2(daemon) groups=2(daemon),1(bin),4(adm),7(lp) やはり"deamon"で実行されているようです。sudoresにも正しく設定して いるつもりなのですが、シェルスクリプトは動作しません。 deamonに関してはsudoが使えないのでしょうか。 何かよい方法ありましたら教えてください。 宜しくお願いします。 |
>>2429 橋本 …ふむ。 deamon でなく daemon です。sudoers を修正してみて下さい。 |
>>2429 橋本 どうもありがとうございます。 deamonではなく"daemon" に修正したところ上手くいきました! とてもお恥ずかしいですが、すごくうれしかったです。 ありがとうございました。 |
こんにちは。ヒサブリに質問です。 下のような CGI で euc、sjis の文字列をブラウザに表示します。 #! perl -w # ~/public_html/cgi-bin/moji.cgi use CGI; use Jcode; my $q = CGI->new; print $q->header(); print $q->start_html(); print $q->start_form(-action=>'./answer.cgi'); $str_euc = 'こんにちは'; $str_sjis = $str_euc; Jcode::convert(\$str_sjis, 'euc', 'sjis'); print "euc: $str_euc <br>"; print "sjis: $str_sjis <br>"; print "unpacked euc: ".unpack("H10", $str_euc)."<br>"; print "unpacked sjis: ".unpack("H10", $str_sjis)."<br>"; print "eq:".($str_euc eq $str_sjis)."<br>"; コード自体は EUC で書きました。 ブラウザの設定を EUC にすると、 当然のように、EUC 部分は正しく、sjis 部分は文字化けになります。 (本当は sjis 部分は半角カナになりました) (http://www/~fukushi/cgi-bin/moji.cgiの表示) euc: こんにちは sjis: 、ウ、・ヲヒ、チ、マ unpacked euc: a4b3a4f3a4 unpacked sjis: 8ea48eb38e eq: これ、ブラウザの設定を sjis にすると、 euc も sjis も文字化けになります。 これはなぜでしょう? (http://www/~fukushi/cgi-bin/moji.cgiの表示) euc: 、ウ、・ヲヒ、チ、マ sjis: 痔宍痔・ヲ射痔蔀痔煮 unpacked euc: a4b3a4f3a4 unpacked sjis: 8ea48eb38e eq: で、下のように出力する文字列を URL から取得します。 #! perl -w # ~/public_html/cgi-bin/moji.cgi use CGI; use Jcode; my $q = CGI->new; print $q->header(); print $q->start_html(); print $q->start_form(-action=>'./answer.cgi'); $str_euc = $q->url_param('greeting'); $str_sjis = $str_euc; Jcode::convert(\$str_sjis, 'euc', 'sjis'); print "euc: $str_euc <br>"; print "sjis: $str_sjis <br>"; print "unpacked euc: ".unpack("H10", $str_euc)."<br>"; print "unpacked sjis: ".unpack("H10", $str_sjis)."<br>"; print "eq:".($str_euc eq $str_sjis)."<br>"; こうすると、ブラウザの設定を euc にすると、 なんと、euc も sjis も正しく表示されます。 (http://www/~fukushi/cgi-bin/moji.cgi?greeting=こんにちは の表示) euc: こんにちは sjis: こんにちは unpacked euc: a4b3a4f3a4 unpacked sjis: 8ea48eb38e eq: ブラウザの表示を sjis にすると、euc 部のみ正しく表示されます。 (http://www/~fukushi/cgi-bin/moji.cgi?greeting=こんにちは の表示) (http://www/~fukushi/cgi-bin/moji.cgiの表示) euc: こんにちは sjis: 、ウ、・ヲヒ、チ、マ unpacked euc: a4b3a4f3a4 unpacked sjis: 8ea48eb38e eq: これはなぜでしょう? サーバーの OS は FreeBSD 2.2.8-RELEASE、 言語は jperl5.005_03-990612 EUC Version(Latin モードで使用)、 クライアントの OS は Windows 2000 server、 ブラウザーは Netscape Navigator 4.75 です。 |
今日は。 Awkで {AA [$1]++} END {for (BB in AA) ...........} とやると、AAの中に有る同じ名前のものが幾つあるか数えてくれると思うの ですが、Perlではどうやったら同じことが出来ますか? 例えば @array=(9, 9, 9, 3, 3, 3, 2, 2, 1) とすると、 9は3個、3は3個、2は2個1は1個あるので、 9=3 3=3 2=2 1=1 としたいのですが、宜しくお願いいたします。 |
>>2433 ミング さん: なんとなく似せて書くと #! perl @array = (9,9,9,3,3,3,2,2,1); for (@array) { $array2{$_}++; } for (reverse sort keys %array2) { print "$_=$array2{$_}\n"; } とか。 「ハッシュ」の機能を使っています。 @array の順番には関係なく、 常に大きな数字から出力していますがいいでしょうか。 (ハッシュを使うと、順不同になるので、、) |
>>2432 ふくし > Jcode::convert(\$str_sjis, 'euc', 'sjis'); 逆ですよー。 Jcode::convert(\$str_sjis, 'sjis', 'euc'); |
だれか、solaris8intel_platformをAT互換機で動作する、LANカードを 知っている方いらっしゃいますか? |
>>2435 68user あ、ほんとだ、、すみませんいつもいつも、、(_ _) で、 #! perl -w use CGI; use Jcode; my $q = CGI->new; print $q->header(); print $q->start_html(); print $q->start_form(-action=>'./answer.cgi'); $str_euc = 'こんにちは'; $str_sjis = $str_euc; Jcode::convert(\$str_sjis, 'sjis', 'euc'); print "euc: $str_euc <br>"; print "sjis: $str_sjis <br>"; print "unpacked euc: ".unpack("H10", $str_euc)."<br>"; print "unpacked sjis: ".unpack("H10", $str_sjis)."<br>"; print "eq:".($str_euc eq $str_sjis)."<br>"; だと euc モードで、どっちの「こんにちは」も正しく表示されるのは なぜでしょうか? |
>>2436 Bourbon どの程度「使える」資料なのかは知りませんが、 ハードウェア互換リスト (HCL) http://soldc.sun.com/support/drivers/hcl_ja/ というのがあります。 |
>>2437 ふくし > euc モードで、どっちの「こんにちは」も正しく表示されるのは > なぜでしょうか? http://x68000.startshop.co.jp/~68user/tmp/moji.cgi を見ても「こんにちは」が正しく表示されますか? もしそうなら、Netscape4 が自動変換しているのでしょう。Netscape4 は、 文字単位か行単位か知りませんが、ファイルの一部についても自動認識/ 自動変換を行っています。 FreeBSD+Netscape4、FreeBSD+Mozilla nightly build で上記 URL を 見ると、必ず片方は化けています。 |
68userさん HCLは知っていましたが、見落としている部分がありました。 じっくり読んでみます。ありがとうございます。 |
たびたびお世話になります。 おかげさまで、この前使えるようになったPPMで、ImageMagickモジュ ールをinstallして、使おうと思ったら、何にも反応なしで困っていま す。いろいろサイトを見て回りましたが、類似問題は見あたらず・・・。 環境は、Perl5.6.1(build631) Windows98です。 この環境に、PPMで、install Image-Magick してImageMagickを入れ ました。 C:\>ppm PPM>install Image-Magick です。 その結果、c:\perl\site\libにはimageディレクトリができていて、 その中にはちゃんとMagick.pmというのもあるようです。 それで、下のを実行してみたのです。 use Image::Magick; $i = Image::Magick->new; $i->Read('test.jpg'); $i2 = $i->Clone(); $i->Scale(width=>100, height=>100); $i->Write('test2.jpg'); すると、Perlそのものは正常に終了する(エラーは出ない)のですが、 test2.jpgはできてないのです。 ちなみに下のようなのも実行してみました。 use Image::Magick; $img = Image::Magick->new; $img->Read('test.jpg'); ($w,$h) = $img->Get('width','height'); print "Content-type: text/html\n\n"; print "<html><head><title>TEST</title></head>\n"; print "<body bgcolor=\"\#ffffff\">\n"; print "$w / $h\n"; print "<br></body></html>\n"; exit 0; こちらも、$wも$hも空でした。 test.jpgは存在しているし、どうしてうまく行かないのか、まった く見当もつかないので、これだけの情報では不足かもしれませんが、 何か分かる方おられましたら、ご指導ください。どうかよろしくお 願いします。 |
>>2439 68user さん、どうも。 たしかに両方化けずに見えています。 FreeBSD 版では片方化けるんですね。 なるほど、Windows 版 NC はファイルの一部も自動変換、、 しかもブラウザーが渡す URL の文字列は必ず sjis。 これがわかんなくてホボ一日ハマりました。 パラメタはあらかじめ変換しておくのを原則にすればよかったのですが、 表示を見て正しく EUC で入ってくるものと思い込んでいたのです。 |
>>2441 ぶぶ さん: 1本目のプログラムですけど動きましたよ、、;;; test.jpg がなくてもちゃんと動きますね。 その場合はおっしゃるような症状になります。 ということで、test.jpg があるディレクトリが カレント ディレクトリな状態で実行してないとか、、。 test.jpg を C:\test.jpg とかフルパスで指定するとどうなります? #これ便利だなー^^ |
ふくしさん、お返事ありがとうございます。 C:\〜\test.jpg のように、フルパス指定したら動きました。 あと、DOS窓では./test.jpgでもうまくいきました。 でも、CGIとしてAN-HTTPD(ver1.37c/PerlISを利用)を通して 動作させると、CGI(test.cgi)と同じディレクトリにtest.jpg がある時に、フルパスならうまくいくのに./test.jpgでは、やっ ぱりうまくいきませんでした。 で、いろいろやっていると、PerlIS.dllを使うとうまくいかず、 Perl.exeを使うとうまくいくことが分かりました。 PerlISの問題だったようです。 でも、とりあえず動作させることができたので、解決です。 ありがとうございました。 #ちなみに同じような処理(画像の縮小拡大)はGDでもできますが、 #jpeg画像を縮小したときの画質はGDよりImageMagickの方が、 #なめらかできれいでした。 |
>>2444 ぶぶ 解決したようですが、ふつーは $i = Image::Magick->new or die "$!"; $i->Read('test.jpg') or die "$!"; $i2 = $i->Clone() or die "$!"; などと、エラーチェックをするものです。 と書こうと思ったら、Read は存在しないファイルを開いても 0 を返さないから、die じゃあダメなんですね。 $ret = $i->Read('a.gifs'); とかして、$ret を調べて、 Warning 330: Unable to open file (a.gifs) [No such file or directory] とかを解析しないといけないらしいです。Image::Magick、ダメすぎ。 >>2443 ふくし > しかもブラウザーが渡す URL の文字列は必ず sjis。 http: //host/dir/hoge.cgi?ほげ とかですか? |
>>2445 68user さん: >> しかもブラウザーが渡す URL の文字列は必ず sjis。 > http: //host/dir/hoge.cgi?ほげ > とかですか? http://host/dir/hoge.cgi?hoge=ほげ とかです。 CGI には sjis で渡るのに、表示は正常に行なわれます。 |
どうも、ご無沙汰しております。yujiです。^^ お世話になっております。 現在、windows2000+apache+activeperlの環境において、 CGI(perl)からapacheの再起動等を行いたいのですが、 apacheのパスにスペースが入っているためか、 コマンドを実行できず、困っております。^^; 具体的には、 パスが、 d:\Program Files\Apache Group\Apache\Apache.exe のような形です。 実行部分は、 $cmd="d:\\Program Files\\Apache Group\\Apache\\Apache.exe -w -n \"Apache\" -k restart"; system($cmd); のような形です。 パスのスペース部分をアンダースコアに変更して試してみたりも したのですが、うまくいかないようでして。^^; それぞれのフォルダ名にスペースを含めないようにすれば、 解決できるのかもしれませんが、スペースがあった場合に 対応できないものか、と思いまして。 みなさんなら、どうされますか? もしよかったら、アドバイスを、 どうぞよろしくお願いいたします。 |
>>2447 yuji Windows で perl スクリプトを作ったことがないのでアレですが、 $cmd="\"d:\\Program Files\\Apache Group\\Apache\\Apache.exe\" -w -n \"Apache\" -k restart"; はどうですか? >>2448 68user > http://host/dir/hoge.cgi?hoge=ほげ まぁ、規格で定まっていない部分ですから仕方ないですね。 IE だと (設定次第ですが) UTF-8 で送ることもありますし。 |
>>2448 68user 初めて ActivePerl といふものでプログラムを組んでみました。 やはり "" で囲めばよろしいようで。 DOS 窓から C:\> d:\\Program Files\\Apache Group\\Apache\\Apache.exe とするとダメだけど、 C:\> "d:\\Program Files\\Apache Group\\Apache\\Apache.exe" なら OK、というのと同じですね。 |
>>2448 68user さん: >> http://host/dir/hoge.cgi?hoge=ほげ >まぁ、規格で定まっていない部分ですから仕方ないですね。 >IE だと (設定次第ですが) UTF-8 で送ることもありますし。 えーそうなんだ、、それは困るな。 やっぱり世間の検索エンジンみたいに hoge=%A4%BD%A4%B2 とかすべきですね。 日本語キーにするなって話もありますが。 |
68userさん、アドバイスありがとうございます。^^ おかげさまで、無事コマンドを実行することができました。 DOS窓でもスペースがある場合、実行できなかったため、^^; スペースを、区切りではなく文字列の一部と認識させるために、 "で括る方法、とても勉強になりました。^^ |
>>2451 yuji Windows 2000 とかだと、エクスプローラーでフォルダをドラッグし、 コマンドプロンプトにドロップすれば、 "c:\WINNT\program files\" などと "" 付きでフルパスが展開されます。エクスプローラーで ファイルのフルパスを簡単に取得する方法はないのかなぁ。 >>2450 ふくし > hoge=%A4%BD%A4%B2 とかすべきですね。 そうですね。ただ、詳しくは知らないんですが、遷移先にどんな文字 コードを使っているかを伝えられるような送信方法もあったはずです。 RFC になってたかなぁ。 今日の大発見: cd - で一つ前にいたディレクトリに戻れる! (sh, csh, tcsh で確認) これは知らんかったなぁ。 |
file.1 file.2 ... file.9を一括で file-1 file-2 ... file-9に変換したいのですがどうすればよいでしょう? 稚拙な質問で申し訳ありません 使ってるのは tera term です。 |
>>2453 宮村 TeraTermにそんな機能はないだろ。 |
No. 2453 # 宮村 ここなど参考にしてみては。 http://www.nurs.or.jp/~asada/FAQ/UNIX/section2.6.html |
>>2454 * そういう物言いをしたいなら、2ch へどうぞ。 |
できました。教えてくれた方、ならびにカキコ有無にかかわらず少しでも考えてくれた人とてもありがとうございました。これで単位がもらえます。 |
はじめまして、とっしーです。 知っている人がいたら、何かいいお知恵をお願いします。 CGI上でソケット通信をして、他のサーバからデータを取り込み ブラウザ上にてデータ表示をしているのですが。 ソケット通信をするサーバが2個あり1番目のサーバタイムアウト後 2番目のサーバに対してソケット通信をしたいのですが、 sub aaa{ $SIG{ALARM} = sub{exit 1;}; alarm($timeover); $socket = IO::Socket::INET->new(); 〜 } 上記のようなタイマでタイムアウトを検出しても、このサブルーチンの 起動元までリターンしません。(T_T) 起動元までリターンするような、プログラム方法等があればお教えください。 |
>>2458 とっしー うーん、まずは exit してプロセスが終了してるんだから、 どこにも戻りようがない、というところから始めましょうか。 で、どう書くのが正しいのかなぁ。 |
はじめまして。かいとです。 こちらのサイトにある「HTTPクライアントを作ろう(C言語版)」を利用させていただきました。 ありがとうございます。そこで、1つ質問なのです・・・・ connect()でタイムアウト時間を指定したいのですが、できるのでしょうか? ちなみにOSはSolaris2.7、コンパイラはWorkshopのccを使ってます。 どうぞよろしくお願いします。 |
>>2460 かいと ノンブロッキングソケットを使うと、connect を呼ぶとすぐに 制御が帰ってきます。僕はノンブロッキングソケットを使った ことがないので、これをキーに検索してみて下さい。 |
初めまして。snowと申します。 今、8ビットJISで作成されたファイルをSJISのファイルに変換しようと思っているのですが、中々上手く行きません。どなたか教えて下さい。お願いします。 因みに今までは、Pro*Cのプログラム上で、単語毎にjis8touj関数を使用していました。 |
>>2462 snow jis8touj って何かと思ったら http://ecip01.cc.kurume-it.ac.jp:8888/ab2/coll.141.9/JFPDEV/@Ab2PageView/2444? これですか? Solaris only の、しかもあまり利用者が多そうでない ライブラリの話なのですから、何がどううまくいかないか 書かないと回答はもらえないでしょう。 |
基本的なことで、ほんとにすいません。どなたか、solaris8のGUIで Windowsのような[Print]、[Alt]+[Print]のようなハードコピーを するやり方をご存知の方は教えてください。よろしく |
>>2464 # Bourbon まったく知らない領域のことなのですが、恥を忍んで。 「Solaris ハードコピー」で検索をかけた限りでは http://www.advac.co.jp/download/gpr_dl.htmlのような プリントサーバソフトウェアにはそういった機能が 付いていることが多いようです。 こんなのも見つかりましたが、参考になるでしょうか。 http://www.aitech.ac.jp/ie/~milabo/unixmanual/man0.html#19 |
>>2464 Bourbon さん: solaris じゃなくって Linux でしたけど、 やはりハードコピーが必要になって gimp というペイントソフトの 機能を使ったらできました。 solaris で gimp は走ったかなー? |
Perl の質問です。 わけあって、プログラムの終端に goto で飛んでいます。 (CGI なので、exit だと、mod_perl に移植したときに mod_perl ごと死んでしまうと聞いたので) で、 goto FIN if(事情); ... FIN: sub サブルーチン { ... } と書くと、サブルーチン定義のところで syntax error になるんですが、 goto FIN if(事情); ... sub サブルーチン { ... } FIN: だと大丈夫です。なぜでしょうか〜? |
>>2464 Bourbon xwd とかじゃあダメですか? あるいは Solaris と Windows 両方に VNC を入れて、Windows 側から Solaris の画面を キャプチャ、とか。Solaris 標準の CDE でキャプチャする 方法は知りません。 >>2467 ふくし perl の構文解析のバグなんでしょうね。 FIN: ; sub サブルーチン { なら OK のようです。 |
ちょっと脱線A^^; >>2466 ふくし 会社のSolaris(多分8)では、gimpが立ち上がりました(親切な方がコンパイルしてくれたっぽい)。 とはいえ、 >>2467 ふくし CDEは嫌いなので使ってないので、CDEの標準な方法は知りません・・・ |
>>2469 の、 >>2467 ふくし は、 >>2468 68user の間違いです。汚してしまって、すみません。 |
>>2468 68user さん: お、バグですか!^^ 最新バージョンで試してレポートしちゃる!^^ >>2469 へにか さん: gimp 走りますか! 最近 solaris が増えてきたので、 役に立つかも。Alt+ScreenShot 系のキャプチャーは gimp に限ります。そぅとぅ〜便利です。 そのまま流れるように編集できるし。 最近なんか solaris の仕事多いんだけど気のせいかな? ココの問い合わせも増えてますよね。 |
>>2467 ふくし http://www.din.or.jp/~bigstone/cgilab/cgitips/mod_perl1.html ここの・・・ 8. exit()は使用できない exit()は使用できません。代わりに Apache::exit()関数が用意されています。 以下の判定でexit関数を他の関数にオーバライドできます。 use subs qw(exit); *exit = $ENV{MOD_PERL} ? \&Apache::exit : sub { CORE::exit }; |
>>2472 * さん: ありがとうございます! それは使えそうですね。 use Apache するのかな。(あ、調べますしらべます ^^) |
いつもお世話になります。 solarisでマシンにSICIカードを取り付けテープデバイスに装着させる場合、マウントするにはどのようにすればよいでしょう? 簡単でよいので教えてください。 |
>>2474 fairytale テープって mount できるんでしたっけ。 僕はいつも mount せずに % tar cf /dev/rmt/0 . とかやってますが。 |
tar cvf - . | ...と書いてある‘-‘の意味を教えて下さい。 |
>>2476 tarbo 標準入力 or 標準出力です。 大抵、man tar の -f オプションのところに書いてあります。 |
始めまして。ツバサと申します。 さっそくですが、質問させて下さい。 こちらのネットワークプログラミングの基礎知識を元にFTP送信処理をC言語で作成しています。 あるマシンへの送信が上手く行かないのです。 PORTコマンドのレスを読み込む時にread関数でエラーになってしまいます。 レスが返って来ないという事があるのでしょうか? ユーザーの認証などでは問題なくレスを取得できているようなのです。 それも、そのエラーが出るのはある特定のマシンへの時だけです。 何かお分かりになる事がありましたら、お願いします。 あいまいな質問で申し訳ありません。 |
すみません。 No.2478の書き込み時に遊び用のHNで送信してしまいました。 なので、内容で名乗っている名前と表題に出ている名前とが 違っています。 こんな理由なので、ご容赦下さい。 |
質問があります。 solaris2.6で例えば自マシンの/dev以下に、他マシンの/etc以下を mountする時の、書式を教えてもらえないでしょうか?すみません |
>>2478 まい > PORTコマンドのレスを読み込む時にread関数でエラーに > なってしまいます。 「エラー」って具体的に何が起こるんですか? >>2480 ui > solaris2.6で例えば自マシンの/dev以下に、他マシンの/etc以下を > mountする時の、書式を教えてもらえないでしょうか?すみません NFS を使いたいわけですか? ならばこちらなど。 http://www.google.com/search?hl=ja&q=mount+solaris2.6+nfs&lr=lang_ja でも、/dev に /etc を mount するのは多分うまくいかないと 思いますよ。デバイスにアクセスできなくなるし。 |
68userさん ありがとうございます。 勉強します。 |
68userさん、ありがとうございます。 read関数の戻り値が-1だったのですが、errnoを刈り取っていなかったので、 実ははっきりとしたエラー原因がわかっていないのです。 今、そのエラーが出るマシンでのテストができない状況にあるので、確認する 事もできずにいます。 何か情報がつかめましたら、また質問させていただきたいと思っていますので、 よろしくお願いします。 |
>>2483 まい > read関数の戻り値が-1だったのですが、errnoを刈り取って > いなかったので、実ははっきりとしたエラー原因がわかって > いないのです。 そうですね。errno の値に加えて、再現性があるかどうかなども はっきりしないので、もうちょっと調べてみて下さい。 |
いつも、お世話になっています。質問があるんですが・・・ 「Solaris2.6」の環境で動画ファイル(.aviなど)をファイルに落とす 方法がありますか? 「spilt」をやってみても、膨大なファイルの量になってしまいます。 何か、良い方法があったら、教えてください。 |
(質問) テープ装置がない端末でテープ装置がある端末のテープ装置にマウントするにはどうしたらよいでしょうか? どなたか教えてください、よろしくお願いします。 なお、端末同士の、mountは一応出来ます。 |
いつもお世話になっています。質問です。 perlbug コマンドを使って Perl エンジンのバグを起票したのですが、 Connected to ???.???.???.??? but sender was rejected. Remote host said: ???.???.???.??? Your site is blacklisted as a spam haven. と言われて生成したメールが受け取られませんでした。 お前が使っているサーバーは spam の踏み台になるサイトとして ブラックリストされているので、メールを受信しないということのようですが、 http://www.ordb.org で調べてもどこにも使っているサーバーを発見できませんでした。 また、サーバーの管理者にも連絡を取りましたが(Microsoft Exchange です) そのようなクレームは見当がつかないと主張していました。 perl.com がどのような論理で上の拒否を行っているか知りたい、 できれば担当者にメールして聞きたいのですが、 どうすればいいかお分かりでしたらご教示ください。 |
いくら現在は大丈夫だと主張していても、過去にそんなことが あったのかもしれません。。 管理人に、不正中継をしないことをよーく確認してから、 削除要求を出すように言うしか方法はないと思うんだな。 どこかの不正中継リストに登録されちゃっているから拒否されるんだから、 perlbugやらのMLを探したら、どこを見ているかがわかるのかな・・ |
>>2485 yuusuke > 動画ファイル(.aviなど)をファイルに落とす方法がありますか? 「動画ファイルをファイルに落とす」ってどういう意味ですか? 「動画ファイル」というからには既にファイルになっていると思うのですが、 split が出てくるところを見ると「フロッピーディスクに落とす方法」を 知りたいのですか? >>2486 usr mount する必要はなくて、 http://www.wakhok.ac.jp/~maruyama/Super/section2.10.3.html じゃあないでしょうか。 >>2487 ふくし http://dbforums.com/archive/95/2001/08/1/116085 によると、perlbug@perl.org に手動で送ればよいのではないでしょうか。 http://archive.develooper.com/perl5-porters@perl.org/msg06972.html によると、 http://www.mail-abuse.org/ じゃないでしょうか。 # どちらもちゃんと英文を読んでいないので、違ったら失礼。 |
解答ではないですが。 >>2485 yuusukeさんの質問は、恐らくは動画から静止画を 抜き出したいということではないでしょうか。 |
>>2489すみません。その通りです。フロッピーに落とす方法を教えてください。 いろいろとご迷惑をお掛けしてすみません。(CZさんを含み) |
>>2491 yuusuke > フロッピーに落とす方法を教えてください。 ならば、split すればいいと思います。 「膨大なファイルの量」になってしまうのは、元ファイルが 大きければそれは仕方がないでしょう? 何に困っているのか まだわからないです。 |
はじめまして Hiroといいます。 Solaris2.6上に、JAVAサーブレットの環境を構築したいと思っています。 j2sdk-1_3_1_02_solsparc.sh を使ってインストールしました。 その結果 j2sdk1_3_1_02 というディレクトリが作成されインストールもできたようでした。 しかし、バージョンを確認するため java -version というコマンドを打ってみると javaversion"1.1.3" と返って来ます。 (javaversion"1.3.1"とかえってきてほしいのですが) おかしいと思いよく確認したところ、2.6のインストールディスクにデフォルトでJAVA(の古いバージョン)が入っていたようで、 /usr/java1.1/ というディレクトリに古いバージョンがインストールされていました。 こういう場合、今からでも古いバーションをアンインストールする方法というのはあるのでしょうか? |
↓すみません、よろしくお願いします |
>>2493 Hiro /usr/local/ で j2sdk-1_3_1_02-solsparc.sh を実行すれば /usr/local/j2sdk1_3_1_02/ ができますよね。で、 /usr/local/j2sdk1_3_1_02/bin/ に PATH を通せばよいです (/usr/bin/ より前に)。 しかし、今後新しい JVM と置き換えることを考えると、 - /usr/local/java -> /usr/local/j2sdk1_3_1_02 という symlink を張る。 - PATH には /usr/local/java/bin を通しておく。 - /usr/bin/java は /usr/java/bin/java への symlink で、/usr/java は /usr/java1.1 への symlink なので、誤って古いものが起動しないように /usr/java を削除。それでも心配なら /usr/java1.1 をリネームするか、 ばっさり削除。 がいいんじゃないでしょうか。 |
>>2495 68user 68userさん、ありがとうございます。 今、手元にSolarisがなく、夜にでも試してみたいと思います。 ところで、御回答いただいた内容からすると、ばっさり削除にひかれました(あまりスキルがないので、万が一誤動作したら自分で気づきづらいので・・)。 しかし、Solarisにおけるアンインストールの仕方というのは、わたしはよくわかっていません。アドバイスいただきましたように、/usr/java を削除し、/usr/java1.1をばっさり削除、というので、システムそのものへの影響というのはとくに考えなくともいいのでしょうか? すみません、UNIXはよくわかっておらず、とんちんかんな質問をしているかもしれません。 わたしはWindowsの感覚でしかわかっていないので、少し気になってしまいました。 |
>>2492 68userさんへ 実は、動画ファイルをWindowsのパソコンで見れるようにフロッピーに 落とそうとしたのですが、splitをして出来たファイルがかなりの数に なって、一つのフロッピーには収まりませんでした。こういう場合、ど うすればいいのか。また、フロッピーに落としたファイルをWindows上 でどのように結合すればいいでしょうか。まだ、UNIXの経験が浅い為、 いろいろと面倒を懸けてすみません。 |
] |
>>2497 yuusuke さん: はずしてたらすみません。 split というのはしらないんですけど、 lha かなんかで圧縮してから tar の -M オプションでマルチボリュームに分割して Windows 側で tar.exe(あるらしいです)で戻して lha かなんかで戻すという作戦はいかがでしょう〜 |
>>No. 2495 現状報告します。 まず、 /usr/java1.1 /usr/java の二つは、ざっくり削除しました。 その後、 /usr/local/java -> /usr/local/j2sdk1_3_1_02 という symlink を張ると同時に /usr/java -> /usr/local/j2sdk1_3_1_02 という symlink を張りました。 なのでパスは変更していません。 以上をしてからバージョンを確認したところ、きちんと1.3.1との表示がでました。 次にtomcatがちゃんと動くかどうか確認しようとしました。 そのためにhotjava(デフォルトで入っていたブラウザ)を立ち上げようとしたところ、これについては立ち上がらなくなっていました。 なので先ほどNetscapeをゲットしてインストールしようとしているところです。 以上、現段階のご報告まで。 もう少しすすんだらまたここでご報告します。 |
tarでbackupを採る時にtapeを2本目につずけて採る事はできないのでしょうか? |
>>2497 yuusuke > splitをして出来たファイルがかなりの数に > なって、一つのフロッピーには収まりませんでした。 ファイルサイズが問題なのではなく、ファイル数が多くなりすぎた のが問題なのですか? split -b 1400k などと、1ファイルごとのファイルサイズを指定 できますが、それは使いましたか? (1400k より小さくしないと フォーマット済 1.44MB FD には入らないかも) >>2500 Hiro > /usr/java1.1 > /usr/java > の二つは、ざっくり削除しました。 あら、消しちゃいましたか。念のため、/usr/java1.1.old などと リネームしといた方がよいかと思ったのですが、まぁ問題ないですかね。 Solaris2.6 標準の重要なプログラムで java を利用するアプリはない でしょうし。 うちの場合、1.3.1 のつもりで使っていた java コマンドが実は 1.2 だった (PATH の設定をミスっていた) という情けない失敗もあったりします。 ところで J2SE 1.4 リリースですね。 http://java.sun.com/j2se/1.4/ja/index.html Servlet 屋としては正規表現、XML、ロギング API あたりがよさげでしょうか。 まぁこれまでは Perl5Util や Log4j を使っていたのであまり変わりはない ですけど、なんにせよ標準になるというのはよいことです。 |
テスト |
↓ごめんなさい。間違えました。 話は変わりますが、いつも参考にさせていただいてます。 これからも参考にさせていただきます。 |
No. 2502 あのう、ざっくり消した件ですが、hotjavaが立ち上がらなくなったのが影響といえば影響です。 どういう関連でこうなっているのか正確な原因は理解できていません。 明日の夜にまたSolarisをいじる予定です。 |
>>2505 Hiro > どういう関連でこうなっているのか正確な原因は理解できていません。 HotJava は Java で書かれたブラウザで、実行するためには JDK (というか JRE) が必要だからです。起動できなくなったのは、 - JDK1.1 と J2SE 1.3 の仕様の違うから - 単に HotJava が (J2SE 1.3 の) java コマンドを見付けられないだけ のどちらかでしょう。 JDK1.1 を入れ直したかったらこちらから。 http://java.sun.com/products/jdk/1.1/ ただし、現在は 1.1 系列最新の 1.1.8 しか落とせないようです。 他のマシンか、インストール用 CD-ROM から java1.1 だけ 持ってくるのが早いかもしれません (CD-ROM から一部だけ 抜き出すことはできるのかな?)。 |
>>No. 2506 HotJavaが立ち上がらない理由はそういうことなのですか。 JDK1.1を入れなおすと、わたしはまたパスの設定で混乱してしまうかも しれないので、とりあえずはネットスケープを入れるよう努力してみます。 今晩Solarisをいじりますので、また明朝にでも報告します。 |
「ネットワークプログラミングの基礎知識」に「UDP を使ってみよう」を 追加しました。 http://X68000.startshop.co.jp/~68user/net/ |
ネットスケープですが・・ Some localized components (NetHelp, etc) can not be installed at this time. Re-run this script if you'd like to try again. というメッセージがでてインストールできませんでした。 ネットでいろいろ調べたところ、SunのEnglishサイトにバイナリ版 のネットスケープがあったので、ダウンロードしようとしたところ、 まず登録せよとでました。 で、登録して、ログインしようとしたら、できません(泣) それでさきほどSunのカスタマーへ問い合わせのメールを送ったところ です。ここまでで作業はとまっています。 また今晩いじる予定です。 しかし、なかなかすすまない。とほほ。 |
>>2509 Hiro Netscape Navigator/Communicator 4.79 は http://sunsite.sut.ac.jp/pub/archives/WWW/netscape/communicator/english/4.79/unix/supported/ から落とせます。Solaris 2.6 用はありませんが、2.5.1 用が そのまま使えるはず。 日本語化したければ、日本語リソースをこちらからどうぞ。 http://www.imasy.or.jp/~mistral/netscape/download.html 上記ページには > SunOS 5.5.1 用に はバージョンによっては直接 Netscape から > 日本語化キットも出ていますので、これ をそのまま使うことも > できます。 とありますが、見付けられませんでした。 |
>>2510 68user ありがとうございます。 日本語化の方は4.76が最新なんですね。 ということは英語の方も4.79じゃなくて4.76にしといたほうがいいのだろうか? pkgではないので苦戦しそうですが(苦笑)今晩トライしてみます。 |
結局、SunのEnglishサイトから紆余曲折の末ダウンロードすることが できました。まだインストールはできていませんが・・ 明後日の夜にまたいじる予定なのでその後また報告します。 |
わけあって他人が書いた MacPerl のスクリプトを 明日までに Unix で動かして結果をレポートしなければならないんですが、 ある入力データセットだとなんとなくうまくいくのに、 別の入力データセットだと Out of memory! になります。 スクリプトの中を一生懸命見る時間がちょっとありません、、。 こんな状態でも、スクリプトをいじるだけですむ Out of memory! の安直な回避法はひょっとしてあるでしょうか? FreeBSD 2.2.8-release Perl 5.6.0 です。 確かに仕事のやり方がまずいんですけど、 ちょっとあせっているのでご教示くださいお願いします、、。 |
>>2513 ふくし unlimit とか ulimit でメモリ制限を解除してみるとか。 それで無理なら、別バージョンの perl を使ってみて、 それでも無理なら地道にスクリプト修正します。僕の場合。 |
このサーバ、えらい時間がくるってるなぁ。 |
>>2514 68user さん:いつもお世話になります。 unlimit で一発でした、、(^^) 誰にどう迷惑掛けてるか知らんけど、 今日は会社にぼくひとりなんでこれで乗り切ります。 大変助かりました! |
>>2515 68user ntpdは動いてるの? |
>>2517 名無し 動いていません。 で、さっき動かしましたが、うまく設定できませんでした。やれやれ。 |
いつもすみません。また質問です。 FrameMaker という DTP ソフトの文書から WebWorksPublisher というソフトウェアで自動生成した HTML の一部が、Web ブラウザの中で改行してくれません。 |こんにちは、赤| |ちゃん、私がマ| |マよ | ↑こうなってほしいのに |こんにちは、赤|ちゃん、私がママよ | | | | ↑こうなってしまう、、 なにぶんにも機械が生成する HTML なので、 人間が肉眼で見ることは難しいのですが、以下のことがわかっています。 ・NC で見たときは(スタイルシート有効無効に関わらず)正常に見える ・IE でもスタイルシートを有効にしたときのみ異常に見える もし何かわかりましたらお教えください。 |
>>2519 ふくし また自作自演ですみません。 css のなかに .code {whitespace:pre} と書いて、HTML の中に <span class="code">〜</span> と1個でも書くと、 それ以外でも全部 pre 属性になるようです(IEでは)。 IE のバグ説です。 |
>>2520 ふくし もう少しspecificになりました。 次の条件が揃うと起きるようです。 ・IE6 でブラウズする(NC、NE5以下ではオッケー) ・<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd"> で始まる ・<table> の中で <span class="code">~</span> を使って文字を修飾している ・stylesheet(今回は content.css)の code クラス定義で white-space:pre;(ホワイトスペース文字で改行しない)が定義されている この条件が揃うと、行がどんどんどんどん伸びていくという 不具合が発生します。 <span class="code">~</span> の変わりに <code>~</code> だと大丈夫ですが、 それだと字がちょっとちっちゃくなります。 |
うーん・・ けっきょくまだネスケをインストールできていません・・ データは入手できたのですが・・インストールの仕方がなんだかよくわからなくて・・ また今日の夜トライします。 |
買い物カゴシステムでCGIを利用していますが、品目を選んで一度COOKIEにデータが送られた後、再度違う品目を選んでCGIにそのデータを送ると、前のデータが上書きされ、(?消え、)前に選んだ品目は無くなり新しいデータのみになってしまいます。複数のページから品目を選んだり、後から選んだ品目を追加できるようにしたいのですが良い方法はありませんか?また、反対に一度COOKIEに送られたデータはどういう仕組みで空になるのでしょうか?自分でも一応調べてみてはいるのですが、PEALにあまり詳しくないので、どなたかご存じの方がいらっしゃいましたら教えていただけませんか。よろしくお願いします。 |
>>2520 ふくし 僕は HTML とか SGML とかには全く詳しくないので、 ここで質問しても何も得られない可能性は高いですよ。 # 質問するなと言っているわけではありません。 >>2523 りんりん マルチポストうざーい。 http://www.parkcity.ne.jp/~chaichan/qanda/qa2516.htm |
>>2524 68user さん: ええと、ここは68userさんにそれ以外の人が質問する部屋ではなくって ;;; (時々そうなのかな、と錯覚しそうになりますが ;;; 一応みんなで意見の交換、知識の共有をする部屋ですよね。 あと、HTML/SGML は一応ここのお題に即してますよね。 ということで、書かせてもらいました。いつもお世話になっております。 ちょっとは答える方でも活躍しようといつも思っているのですが、 かえって半端な知識を披瀝してご迷惑を掛けているケースも ままあるようで恐縮です。;;; 精進しますので、よろしくお願いいたします。 |
http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse 自分で情報の共有、とかなんやら言ってるんだから、 すべての投稿に対して、ここはおいらが管理人なんだーみたいに レスしてるみたいだけど、それなら、メールで質問してもらって、 回答を掲載すればいいだけだな。 わざわざ、「掲示板」を設置しているんだから、みんなから情報を 集めようとしてるんでしょ?。 |
>>2525 ふくし > ええと、ここは68userさんにそれ以外の人が質問する部屋ではなくって ;;; > (時々そうなのかな、と錯覚しそうになりますが ;;; > 一応みんなで意見の交換、知識の共有をする部屋ですよね。 それはその通りですが、今回の件に関してこの掲示板と、例えば http://www.parkcity.ne.jp/~chaichan/bin/qanda.cgi?modefg=9&dumy=0 のどちらで質問した方が解決しやすいかと言えば、後者の方だと 思います。ここの掲示板で深い HTML の話題になったことは一度も なかったはずなので。 が、ネタ振りのおつもりでしたら いらぬおせっかいでした。 >>2526 名無し > すべての投稿に対して、ここはおいらが管理人なんだーみたいに > レスしてるみたいだけど 要は僕が「すいません、わかりません」と書くのがよろしくないと? 基本的に管理人が発言しないような質問・回答の場は (例えば 2ch)、 多人数の有識者が揃わないと成り立たないと考えています。極端な話、 少人数かつ有識者もほとんどいない場合は、結局誰も返答せず 閑古鳥が鳴く可能性が高いことはおわかりでしょう。 で、この掲示板は、管理人が放置プレイをするには規模が小さすぎると 考えているわけです。要は掲示板の規模・形式に応じた運営スタイルの 違いじゃないでしょうか。 それでもやはりうざいと感じておられるのでしたら、しばらく 「わかりません」的な発言は控えてみましょうか。 |
>>2527 68user さん: 面白そうなボードの紹介をありがとうございます。 下記の件は本当に困っているので、マルチポストになりますが、 そっちで聞いてみます。 |
こんにちは。これからWindows98のPerlでソケットを 勉強しようとおもっています。ご厄介になります。 よろしくお願いします。 (手始めにdaytimeクライアントを作ろうと思ってます。) FYA:手始めにWindows版のtcpdump、Windumpをダウンロードして、 ドキュメントも取ってきて翻訳をExciteに任せたら、すごいことに。 原文 http://netgroup-serv.polito.it/windump/docs/manual.htm >Under SunOS with nit or bpf: To run tcpdump you must >have read access to /dev/nit or /dev/bpf*. >幼虫またはbpfを備えたSunOSの下で: 走ること tcpdump >アクセスを読んだに違いありません、に /dev/幼虫 あるいは /dev/bpf* . # SunOSには幼虫デバイスがぶら下がっているのでしょうか?! >Primitives may be combined using: >原始人は次のものを使用して組み合わせられるかもしれません: # 英語も出来ないとだめみたいですね。 |
>>2529 高井あた さん > 原文 http://netgroup-serv.polito.it/windump/docs/manual.htm これはWinDumpのというよりtcpdumpのドキュメントではないでしょうか。↓に日本語訳があります。 http://www.linux.or.jp/JM/html/tcpdump/man1/tcpdump.1.html |
おっと、WinDump独自の説明はやはり英文で読まなくてはいけないようですが。 |
ありがとうございます。 日本語のマニュアル頂きました。 より深く使えそうです。 私の環境は、メインマシンにWindows98+Apacheとサブマシンに FreeBSD+ApacheがおうちLAN(10Base-Tをリバースケーブル)で、 つながっていて、実験につかってます。 それとは別に外界はWindowsマシンのPHS(H")ダイアルアップで 接続しているのですが、無指定でWindumpを起動したらいきなりPPPを 監視始めて、本当に監視して欲しかったLANの方はだんまり…。 それで調べていたのですが、-i で監視インターフェイスを指定するのは tcpdumpと同じでした。 ただWindumpにはインターフェイスを探すオプション-D があり、 -D を使って使えるインターフェイスを表示して、 そこからインターフェイス名を拾って使うようです。 Telnetでいろいろ見ているんですが、 昨日はchargen に突っ込んでTelnetが固まってリセットする羽目に(笑)。 |
こんばんは。 まだNetscapeのインストールにつまづいています。 経緯を記します(ちょっと長くなりますが・・)ので、なにかアドバイスいただけないでしょうか。 よろしくお願いします。 ーーー http://www.sun.com/software/solaris/netscape/getnetscape476.html からjapaneseをクリックし、そこからnetscape4.76をダウンロード ダウンロードしたファイル名は Japanese[1].tar.Z 解凍すると・・ NSCPjacom NSCPjecom NSCPjpcom NSCPjucom という四つのディレクトリができる。 中を見てみるとどれも構造は同じで install pkginfo pkgmap reloc というファイルやディレクトリの構成 ここで pkgadd -d `pwd` とすると 1 NSCPjacom Japanese(common)Netscape Communicator (sparc)10.4.76,REV=2001.01.17.19.51 2 NSCPjecom Japanese(EUC)Netscape Communicator (sparc)10.4.76,REV=2001.01.17.19.51 3 NSCPjpcom Japanese(PCK)Netscape Communicator (sparc)10.4.76,REV=2001.01.17.19.51 4 NSCPjucom Japanese(UTF-8)Netscape Communicator (sparc)10.4.76,REV=2001.01.17.19.51 とでます。 これら4つの違い?がよくわからず、とりあえず1のみインストールし、successfulはでました。 ただ、その後、起動をどうしてよいものやらわからず、 どこにどうインストールされたのかもよくわからず・・(苦笑) とりあえずnetscapeをさがしました。 # find / -name netscape /usr/openwin/lib/locale/ja/netscape /opt/local/jakarta-tomcat-3.2.4-src/src/native/netscape /opt/pkg/NSCPjecom/reloc/NSCPcom/lib/locale/ja/netscape /opt/pkg/NSCPjpcom/reloc/NSCPcom/lib/locale/ja_JP.PCK/netscape /opt/pkg/NSCPjucom/reloc/NSCPcom/lib/locale/ja_JP.UTF-8/netscape /opt/NSCPcom/lib/locale/ja/netscape /opt/NSCPcom/lib/locale/ja_JP.PCK/netscape /opt/NSCPcom/lib/locale/ja_JP.UTF-8/netscape 全部、ディレクトリでした・・。 なにをしようとしたのかというと、 # netscape & で起動できるかなあ・・? と考えたのですが・・ 一応、これらディレクトリのある場所でコマンドを打ってみましたが、起動はしませんでした。 その他、netscape 以外にNetscapeというのも見つけ・・ # find / -name Netscape /usr/openwin/lib/locale/ja/app-defaults/Netscape /opt/NSCPcom/lib/locale/ja/app-defaults/Netscape /opt/NSCPcom/lib/locale/ja_JP.PCK/app-defaults/Netscape /opt/NSCPcom/lib/locale/ja_JP.UTF-8/app-defaults/Netscape # file /usr/openwin/lib/locale/ja/app-defaults/Netscape /usr/openwin/lib/locale/ja/app-defaults/Netscape: ASCII テキスト # file /opt/NSCPcom/lib/locale/ja/app-defaults/Netscape /opt/NSCPcom/lib/locale/ja/app-defaults/Netscape: コマンドテキスト # file /opt/NSCPcom/lib/locale/ja_JP.PCK/app-defaults/Netscape /opt/NSCPcom/lib/locale/ja_JP.PCK/app-defaults/Netscape: コマンドテキスト で、 /opt/NSCPcom/lib/locale/ja/app-defaults/Netscape のある場所で # Netscape & などは実行してみましたが、やっぱり起動はなされませんでした・・ 以上まででいきづまっております・・ どうすれば起動するのでしょうか・・ (というか、インストールができているのかもはっきりとはしておらず・・) アドバイスのほど、よろしくお願い致します。 |
>>2533 Hiro とりあえず > 2 NSCPjecom Japanese(EUC)Netscape Communicator を入れてみて下さい。 |
>>2534 68user ありがとうございます。 今晩またいじりますので、やってみます。 2点わかれば教えていただきたいのですが 1、その場合、いったんインストールした 1 NSCPjacom Japanese(common)Netscape Communicator はアンインストールしたほうがいいでしょうか? 2、あと起動方法ですが、netscapeがある適当な場所をさがして # netscape & と打ってみる、という方法でいいでしょうか? よろしくお願いします。 |
>>2533 Hiro 実際にやってみました。 > http://www.sun.com/software/solaris/netscape/getnetscape476.html > からjapaneseをクリックし、そこからnetscape4.76をダウンロード サイズは 0.99MB だと思うのですが、これは日本語パッケージというか、 日本語 locale 用の設定ファイルです。 この前に English を選ぶと 16MB くらいのパッケージが落とせますので、 これをインストールします。pkgadd すると 1 NSCPcom Netscape Communicator (sparc) 10.4.76,REV=2000.11.07.14.36 と出るはず。 実行ファイルは /opt/NSCPcom/netscape。メニューが英語でよいなら このままで。 メニューを日本語化したいなら Japanese.tar.Z の方を入れます。とりあえず 2 だけ入れて % env LANG=ja_JP.eucJP /opt/NSCPcom/netscape と実行すると、一部フォントが欠けてしまいました。 # そういえば昔 Solaris+Netscape の環境を使ってたときは # リソース設定してたような気も。 まともに見られなくなったので # rm -rf /opt/NSCPcom/lib/locale/ja として英語版に戻しました (pkgrm の使い方を知らないので)。 2 を入れてから 1 を入れようとすると conflict するようなので、 ひとつだけ選んでインストールすればよいでしょう。 |
>>2536 68user ありがとうござます 先に英語版入れないといけなかったのですか(苦笑)。 今晩試してみます。その後また報告します。 |
始めまして、小僧といいます。 ここのトップからいける、Unixコマンド集にはいつもお世話になって いるのですが、掲示板は今日始めて見つけました。 本を読んでも、ネットで調べてもわからない事があるので質問させてください。 シェルで、Telnetを実行し、別のホスト(仮名:X)にログインし、 コマンドを実行したいのです。 方法は、ファイルにTelnetで実行したいコマンド等を 記述し、それをパイプ(or リダイレクト?)で 実行すればいいと思っているのですが・・・ あまりに簡単すぎる事だから、本にも載っていないのでしょうか? 実行環境は、AIX4.3です。 インストールしたばかりなので、何か設定ファイルみたいな ものが必要なのかな、とも思っています。 アドバイス、宜しくお願いいたします。 |
No. 2538 小僧 さん もしやるとすれば、 ・`telnet' でホストに接続 ・ユーザ名が要求されるまで待つ ・ユーザ名を入力 ・パスワードが要求されるまで待つ ・パスワードを入力 ・コマンドを入力 といったところでしょう。Tera Term Pro(Windows版のTelnetクライアント)では、そんなマクロで自動ログイン機能を実現しています。 利用可能であれば `rsh' でやったほうがずっと楽とは思いますが。 |
CZさん 返信、ありがとうございます。 記載されたレスの中で、質問をさせてください。 ・ユーザ名が要求されるまで待つ と、ありますが、「待つ」というのは Sleepコマンドで適当な時間待つ、という事でしょうか? 誠に勝手で申し訳ございませんが、 ソースレベルでご教示して頂ければ幸いです。 お粗末ですが、私が作成したファイルを掲載します。 -----実行ファイル Start----- #!/bin/ksh cat telnet_file | telnet -----実行ファイル End ----- -----telnet_file Start----- open HOST_NAME UserName Password date -----telnet_file End ----- -----実行結果 Start----- telnet> 試行中... HOST_NAME に接続されました。 エスケープ文字は '^]' です。 getwinsize:ioctl: 指定されたファイルは ioctl システム・コールをサポートしていません。 接続がクローズされました。 -----実行結果 End ----- ※ もちろん、HOST_NAMEやUserNameなどは、実際の環境に則している 値を設定しています。 宜しくお願いいたします。 |
OCNのADSLアクセスIP8「フレッツ」のサービスでの PPPOEのLAN型接続において、 固定グローバルIPを割り当てたPC(サーバー)に対して、 外部のPCから(インターネット経由で)アクセスすると、HOST検索にやたら時間がかかります。(約18秒) 時間がかかっているのは、WINSOCKのgethostbyaddrという関数です。 上記の不具合を解決する方法を知っていましたら、教えていただけないでしょうか?ブローバンド・ルータに原因があるのかと思い、買い替えましたが、結果は同じでした。ちなみに、pingは0.1秒以内に帰ってきます。 |
OCNのADSLアクセスIP8「フレッツ」のサービスでの PPPOEのLAN型接続において、 固定グローバルIPを割り当てたPC(サーバー)に対して、 外部のPCから(インターネット経由で)アクセスすると、HOST検索にやたら時間がかかります。(約18秒) 時間がかかっているのは、WINSOCKのgethostbyaddrという関数です。 上記の不具合を解決する方法を知っていましたら、教えていただけないでし ょうか?ブローバンド・ルータに原因があるのかと思い、買い替えましたが、結果は同じでした。ちなみに、pingは0.1秒以内に帰ってきます。 |
>>2540 小僧 > cat telnet_file | telnet こういうふうに使える telnet ってあるんでしょうか。どこかに 書いてあったのを参考に作っておられますか? で、普通 telnet というのは人間が操作しますので、 Login: と表示されてからユーザ名をタイプし、 Password: と表示されてからパスワードをタイプし、その後コマンドを実行して 実行結果を見るわけです。 なので、これを自動化するには Login: という文字列が相手側から送られてきてからユーザ名を送り、さらに Password: という文字列が送られてきてからパスワードを送り、コマンドを送り、 その結果を取得する。ただしプロンプトとコマンドの実行結果を選り 分ける、というなかなか面倒な話なのです。CZ さんは「ユーザ名が 要求されるまで」と表現しておられますが、実際は単に文字のやりとり をしているだけで、「プロトコル」といった大層なものがあるわけでは ありません。 面倒なこと一切抜きで手抜きするならこんな感じ。 ( sleep 2 ; echo USER ; sleep 2 ; echo PASS ; sleep 2 ; echo date ; sleep 2 ) | telnet localhost ちゃんと真面目にやるなら expect コマンドや p5-Telnet など。 >>1335-1340 参照。 もっとよいのは rsh。さらによいのは ssh って感じですかね。 # http://www.jp.FreeBSD.org/QandA/HTML/1576.html >>2542 こうた > 外部のPCから(インターネット経由で)アクセスすると、 > HOST検索にやたら時間がかかります。(約18秒) どの外部の PC 経由からでも名前解決に時間がかかるのですか? そのマシンのプライマリの DNS サーバはどこにありますか? どのマシンからでもその現象が発生して、DNS サーバが外部に あるなら DNS サーバの問題でしょう。 もし可能ならば、実際のホスト名を出して下さい。 |
>>2536 68user 報告 おかげさまで、netscapeのインストール、できました。 なお、先に入れてしまった日本語 locale 用は、pkgrmコマンドでアンインストールしてから本体をインストールしました。それからnetscapeを立ち上げたら、なぜかメニューも日本語化されていました?pkgrmでの削除では、すべてを削除したわけではないのかもしれないので?残存ファイルで日本語されているのか・・? とにもかくにも、前のhotjavaより軽いし、なんとか動いて嬉しいです^^ ありがとうございました。 その後、tomcatを起動してブラウザからみたところ、examplesの動作確認等、簡単なところまではできました。 取り急ぎご報告まで。 |
>>2543 68user 返信、ありがとうございます。 >> cat telnet_file | telnet >こういうふうに使える telnet ってあるんでしょうか。どこかに >書いてあったのを参考に作っておられますか? いえ、どこにも記述されていません。 FTPで同じ方法を使っているシェルがあったので、 それを参考にして作ってみました。 68uesrさんが言われた(echo 〜)の方法で 多分うまくいくと思います。 貴重なアドバイス、ありがとうございました。 rsh、sshが使えれば楽なんですが、 r系コマンドはセキュリティ上、 ssh等は自分の知識不足のため、お客様へ説明が出来なく (セキュリティに関する部分)Telnetでシェルを 記述する事になっているのです。 過去ログの方も参考にしながら、後は自分で書いていこうと思います。 ありがとうございました。 ※ 掲示板のレスの表示がうまくいかないかもしれませんが、 ご容赦下さい。 |
お世話になります、小僧です。 先日は、Telnetで質問させて頂き、ありがとうございました。 その後、仕様変更に伴い、rsh、rcpコマンドを使用する事になりました。 そこで、新たに疑問が発生したので、質問させて頂きます。 このホームページの"Unixの部屋"の.rhostsに関する内容の所です。 以下、抜粋させていただきます。 ----- 抜粋 Start ----- それとは逆に、hoge.fuga.com の ~/.rhosts に foo.bar.com user1 と書いておくと、foo.bar.com にログインしているとき、hoge.fuga.com に対して、 rcp・rsh・ノーパスワードでの rlogin を使うことができる。 ----- 抜粋 End ----- 記述してある条件のもと、上記の設定を行う場合、 ~/のディレクトリは、User2に記述するとして、 その場合、User1がhoge.fugu.comホストに対して rshを行った場合、実行ユーザはUser2になるのでしょうか? 説明が分かり辛いと思いますが、 ご教示して頂ければ幸いです。 |
先ほどUNIXの部屋で `ログ' を全文検索したのですが、 コマンドに本文がないと改行されないのが気になりました。 例) astrolog 占星術のプログラムらしい bison 構文解析パーサ生成プログラム 根本的な解決策は思いつきませんが、とりあえずは 本文がない場合は「お尻P」を付ければいいのかな? # UNIXの部屋に長いことお世話になっていながら # htmlファイルの存在を全く意識していなかった # ことに気づいた今日この頃です。 |
>>2546 小僧 > その場合、User1がhoge.fugu.comホストに対して > rshを行った場合、実行ユーザはUser2になるのでしょうか? そうです。foo.bar.com に user1 としてログインし、 % rsh -l user2 hoge.fuga.com /usr/bin/id などとすれば確認できます。 >>2547 CZ ご指摘ありがとうございます。</P> を付けるようにしました。 http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/unix/script/make-html |
こんにちは。質問があります。 標準出力と標準エラー出力を画面に出力しつつ エラー出力のみをファイルに保存したいのですが shと標準的なUNIXのコマンドを使って実現可能な ものなのでしょうか。 これまでに試したのは以下のような方法です。 --- test.sh --- #!/bin/sh echo stdout echo stderr 1>&2 --- [その1] $ ./test.sh 2>error.log エラーが画面出力されないので× いざとなれば別の仮想端末で $ tail -f error.log としてもいいのですが。 [その2] $ ./tesu.sh 2>&1 | tee error.log エラー以外の出力も保存されるので× |
>>2549 CZ http://www.ainet.or.jp/~inoue/memo/sh-fd.html などを読みつつ 考えた結果、 % (./test.sh > /dev/tty) 2>&1 | tee error.log と、サブシェルを使わないとできないんじゃないか、という 結論になりましたがどうでしょう。 |
>>2550 68user さん なるほど。 ttyでstdoutを出力してしまえば, stderrが後に残るというわけですね。 (正しい表現が分かっていませんが。) ありがとうございました。 |
こんにちは。 今日、こちらのページをみて、suidというものを使えば、 とあるCGIを「nobodyじゃない権限で実行させたい」と いう願いがかなうということがわかり、早速試してみました。 まず、こちらにサンプルでおいてあるwhoami.cgiをそのまま設置して パーミッションをrwsr-xr-xとしたところうまく動きました。 その後、自作のCGI(nobodyでは動かしたことがあるもの)を同様に nobodyでないユーザで動かそうと思ったら「Internal Server Error」 となってしまいました。 それで、うまくうごいた実績のあるwhoami.cgiを改造しながら原因を探した ところ、どうやら「require 'jcode.pl';」を書いてしまうと 「Internal Server Error」となってしまうということがわかりました。 require 'jcode.pl';行をコメントアウトすれば動きます。 なんとか、この一行を含んでいるものも、setuidして動かすことは出来ない ものでしょうか。 なにかよい方法がございましたらご教示ください。 宜しくお願い申し上げます。 |
>>2552 stone_free まず、 #!/usr/bin/perl require 'jcode.pl'; このスクリプトをコマンドラインから動かして下さい。カレント ディレクトリに jcode.pl があればちゃんと動くでしょう。 suid したスクリプトを実行すると、perl は自動的に汚染モード (taint mode) に切り替わります。いちいちスクリプトを suid して web 経由で実行するのは面倒なので、perl に -T オプションを付けて 汚染モードで動作させます。 #!/usr/bin/perl -T require 'jcode.pl'; 今度は jcode.pl が見付からない、と言われるはずです。 require がライブラリを探すパスは @INC で設定されていますので、今度は #!/usr/bin/perl print "@INC\n"; と #!/usr/bin/perl -T print "@INC\n"; で違いを調べます。 # perl -e 'print "@INC\n"' # perl -Te 'print "@INC\n"' # としてもいいです。 すると、上の方では @INC の最後に `.' (カレントディレクトリ) が含まれて いますが、-T を付けると `.' が含まれていないことがわかります。ドキュメント化 されていないのかもしれませんが、これは汚染モードの仕様なのでしょう。 というわけで、 require './jcode.pl'; require '/foo/bar/jcode.pl'; などと、@INC に頼らず require するか、require する前に push(@INC, '.'); すれば解決です。 その他、suidperl で動かすと PATH だとか umask だとかで文句を 言われることがあるかもしれませんが、いきなりブラウザ上で動作を 検証することはせず、必ず -T 付でコマンドラインから動作を確かめる ようにして下さい。 |
こんにちわ。早速なんですけど、教えて下さい。 以下のことを行った場合、 (1)javaのClassファイルをHP-UNIX上でコンパイル後、圧縮。 (2)windows2000にダウンロード後、CDに焼く。 (3)Solarisで解凍し、実行環境に投入。 で、Solarisで正常に動作するでしょうか? javaだから出来るような気もするんですけど、やっぱりリコンパイルは必要な気もして。 よろしくお願いします。 |
ひとつ気づいたこと。 これまでずっと,tar + gzip 形式のファイルを展開するのに % tar zxvf hoge.tar.gz といった順序でオプションを指定していました。 ところが,GNU Tar のマニュアルを見ると, こんなことが書いてありました。 <http://www.linux.or.jp/JM/html/GNU_tar/man1/tar.1.html> | tar への最初の引数は、オプション Acdrtux のいずれかでなくてはならない。 | この後にはどのオプション機能を指定する事も出来る。 最初の記述法は厳密に言うと間違いということに なりそうなんですが,どんなものでしょうか。 |
>>2553 68user 68userさん、有難うございました。 大変参考になりました。 おかげさまで、動かすことができました。 感謝感激です。 もうひとつ、教えていただいていいでしょうか。 今回の手順のひとつに > perl に -T オプションを付けて汚染モードで動作させます。 > #!/usr/bin/perl -T > require 'jcode.pl'; > 今度は jcode.pl が見付からない、と言われるはずです。 とありましたが、このとおりファイルに書いて # perl test.cgi としてコマンドラインで実行してみたのですが、 Too late for "-T" option at test.cgi line 1. と出てしまいました。 #!/usr/bin/perlの後にオプションをつける場合は、クオートか なにかでくくらないといけないのでしょうか。 また、「汚染モード」という物騒な名前はなにか訳があるのでしょうか。 やはり、本来のユーザと違う権限で実行できてしまうから危険である ということでしょうか。 |
>>2554 たこ。 > で、Solarisで正常に動作するでしょうか? Java のバージョンが合っていれば正常に動作するんじゃないでしょうか。 まぁ僕なら怖いので、Solaris でコンパイルして生成された class ファイルを比較してみます。 >>2555 CZ > tar への最初の引数は、オプション Acdrtux のいずれかでなくてはならない。 原文は The first argument to tar must be one of the options: Acdrtux なので誤訳だと思います。 tar に与える最初の引数の中には、必ず Acdrtux のうちの 1つを 指定しなければならない あたりでどうでしょうね。って、自信はないのですが。 |
>>2556 stone_free > #!/usr/bin/perlの後にオプションをつける場合は、クオートか > なにかでくくらないといけないのでしょうか。 原理を書き出すとまた長くなってしまうので割愛しますが、 #!/usr/bin/perl -T と書いたスクリプト hogescript を実行するには % ./hogescript とします。 これは % /usr/bin/perl -T ./hogescript と等価であって、 % /usr/bin/perl ./hogescript とは等価ではありません。 > また、「汚染モード」という物騒な名前はなにか訳があるのでしょうか。 ラクダ本では「汚染モード」と訳してあります。詳しくはこちらなど。 http://www-sampei.ctrl.titech.ac.jp/perldoc/perl_20.html |
>>2558 68user なるほど!よくわかりました。 重ね重ねありがとうございました。 |
こちらのページのお陰で、サーバプログラミングに入ることが出来ました。 CP/M、DOS、Windowsとやってきたのですが、サーバプ ログラミングに入れなくて困っておりました。 仕事でサーバ側のプログラムを組む必要に迫られ、Unixも知らな いし、サーバサイドの概念もつかめなくていたのに、今ではFTPや HTTP、POPもcronも使えるようになりました。 ついでにPerlまで覚えてしまいました。 黙って読ませていただくばかりでは心苦しく、お礼を述べさせて頂き に参りました。 今後もUnix勉強の基本ページとして利用させていただきます。 親切で分かりやすいページを作って下さり有り難うございます。 心より感謝申し上げます。 |
おっと、私もこのページにお礼を言いに来たのですが プチ先駆者が(笑) このページには大変お世話になっています ネットワークプログラミングの部屋でファイルディスクリプターという 概念を初めて知りました、僕は学生なのですが将来こういう方面の仕事に つきたいと思ってます。大変に参考になるページでした このページの更新、たのしみにしてますm(。。)m |
>> 2557 いろいろと調査してみた結果、windows上でコンパイルしたものを圧縮してsolarisに持っていっても、JAVA周りの環境さえ同じなら正常に動作するということなので、大丈夫だと思います。 ありがとうございました。 |
お世話になります、小僧です。 AIX上での文字コードに関してお聞きしたい事があります。 ファイルの文字コードを確認するコマンドというのは 存在するのでしょうか? 例えば、「このファイルの文字コードはShift-JISだな」などの 判断を行えるようなコマンドの事なのですが。 それと、iconvを行う事が出来る文字コードは、 "/usr/lib/iconv"ファイルに登録されているようなのですが、 このファイルはデフォルトでは存在しないのでしょうか? ご存知の方がいらっしゃいましたら、宜しくお願い致します。 |
kccなんてコマンドがありましたけど、AIXに存在するかどうかは 不明です。 Ex: kcc -c kannji_file.txt ん〜ちょっと調べてみると、どうもLinux系だけみたいだなぁ・・・ |
はじめまして、 現在色々とcgiを作成しており、 色々とよくわからないバグを調べている内 たどり着いた次第です。 他のサイトではあまり解説されていない ヘッダの解説など大変助かりました。 これからも更新楽しみにさせていただきます。 |
>>2564 スナフキン kccコマンドですが、ちょっと無さそうですね・・・ 現在使用しているAIXにmanコマンドが入っていないので なんともいえませんが、ネットや手持ちの資料には 載って無さそうです。 ついでに、と言っては失礼ですが、iconvでもう一つ質問を。 iconvコマンドで、変換後に存在しない文字が存在した場合、 自動で"_"に変換されるようですが、この"_"を他の文字に 変更する事は可能なのでしょうか? 例えば"*"にしたりする事は可能なのでしょうか? ご存知の方がいらっしゃいましたらアドバイスお願い致します。 |
>>2564 スナフキン 文字コードを判断する方法ですが、mule に付属している coco、 昔 fj に流れた kanjitype、jcode.pl の jcode::getcode、 mule/emacs のステータスバーに表示される E/S/J の文字。 僕が知っているのはこれくらいです。 |
お世話になります、小僧です。 色々と調べて頂いてありがとうございます。 どうやら、私の環境で調べる方法はなさそうですね・・・ また分からない事がありましたら、アドバイスお願い致します。 |
>>2564 スナフキン > ん〜ちょっと調べてみると、どうもLinux系だけみたいだなぁ・・・ こういう一般的な用途のコマンド (ファイルを読んでコード変換するだけ) で、 なおかつソースが公開されているものは、よっぽどのことがない限り Linux 専用ということはありません。 FreeBSD の port/package にもありますし、NetBSD の package には含まれて ないようですがコンパイルすれば使えるでしょう。まぁ、それを言い出したら 多分 Windows でも Mac でも使えそうな気がしますが。 >>2563 小僧 そういえば最初にここを紹介すべきでした。 http://www.jp.FreeBSD.org/QandA/HTML/1254.html >>2566 小僧 > 自動で"_"に変換されるようですが、この"_"を他の文字に > 変更する事は可能なのでしょうか? 多分できないです。できたとしても、その環境の iconv のみの独自拡張でしょう。 こういうのは考え方を変えて、 % sed 's/&/&/g' | sed 's/_/&ubar;/g' | iconv -f shift_jis -t euc-jp | \ sed 's/_/\*/g' | sed 's/&ubar;/_/g' | sed 's/&/&/g' などとファイル中の _ を別の文字に置換してから iconv を通せば なんとでもできます。 # &ubar; というのは、いま適当に考えた実体参照で、本当は存在しません。 >>2560 Moo >>2561 へんきち >>2565 sisya どもども。できれば改善すればよい点も書いていただけると嬉しいです。 # と言っても、時間がなくて対応できない可能性が大なんですが。 |
お世話になっております。 シェルスクリプトが上手く動作せず困っています。 行っている方法は、 Linux7.1J sendmail-8.11.2-14 procmail-3.21-0.71で ユーザ"XYZ"のホームディレクトリに.procmailrcファイルを置き、 XYZ宛てのメール受信時に条件が合えばシェルスクリプト"ABC"を 実行するようにしています。 メール受信時に条件が合い、シェルスクリプトを実行するところまでは 上手くできたのですが、実行するシェルスクリプトの中の一部分のみ 動作しません。 その部分とはユーザ"mono"に切り替え、さらにシェルスクリプトを実行する以下です。 su - mono -s /home/mono/mno.sh ---(1) ※ユーザ"mono"はパスワードなしです。 ((なお、mno.shの記述は scp /var/XYZ/123.txt abc.world.co.jp:/home/mono/123.txt ssh abc.world.co.jp sh /home/mono/mno2.sh です。 他のLinuxサーバabc.world.co.jpへsshでファイルをコピーし、 他のサーバのシェルスクリプトmno2.shを実行)) (1)の部分に対してエラーでは、 standard in must be a tty と表示されます。 他のサーバではこの記述通りで動作しました。 また、メール受信時にシェルスクリプト"ABC"を実行するユーザ"XYZ" で手動でシェルスクリプトを実行すると(1)の部分も動作します。 Webで調べたところ、同じような現象になっている例もありましたが 解決策がありません。 そしてエラーの意味がよくわかりません。 勝手な推測ですが、実行しているサーバではセキュリティが強いため パスワードなしとしている"mono"ユーザが原因ではないかと思います。 ですが、シェルスクリプトでパスワードも記述した形での"su"の実行は 可能かどうか分かりません。 申し訳ありませんが、何かよい策をお教えください。 |
タブ区切りテキストを split /\t/ で切って各フィールドを変数に読み込み、 join "\t" で戻そうとすると、 場合によってはデータが抜けていることがあるので困ります。 タブ区切りデータを a, b, c, d、タブを->であらわすと、 split /\t/, "a->b->c->d" => (a,b,c,d) split /\t/, "a->->c->d" => (a,c,d) split /\t/, "a->b->->d" => (a,b,d) split /\t/, "a->->->d" => (a,d) split /\t/, "a->b->->" => (a,d) ということで、 1 while $str =~ s/\t\t/\t♪\t/; @list = split /\t/, $str; for (@list) { s/♪//; # $_ は @list の要素を参照する。♪がデータにないと仮定 } とかやってるんですが、いかにもダサいですね。 もっと常道はあるんでしょうか? Excel で編集すると a->b->->\n が a->b\r\n となってしまうのも 困る。 |
<A href="javascript:x(1)">1</A> をクリックすると最終的に Nの値(abcの所)を計算し document.location.href="http://www.a/cgi/a.cgi?N=abc"; としていたのですが、不便な所を感じ変えたいと思っています。 Submitボタンを押したらNを計算し <FORM name="f" method="post" onSubmit="if(x() != true) {return false}" action="a.cgi"> <INPUT type=hidden name=N value=abc> としてa.cgiを起動する方法は知っているのですが、 上のものと組み合わせた感じで <A href="javascript:x(1)">1</A>をクリックして 最終的にNを計算し <INPUT type=hidden name=N value=abc> のようにpost/getで起動する方法はないでしょうか? 自分なりにやってみてもよくわからないのです。 どなたか教えて下さい。 お願いします。 ちなみに初心者です。難しいことは解らないので細かく教えていただくと 助かります。 |
>>2570 q19_77 > standard in must be a tty su は端末 (tty) からのパスワード入力を求めているのに、 端末がないよ、という意味です。 端末というのは、キーボードで入力ができて、文字が表示されるもの、 たとえば kterm がそれです。procmail 経由で実行されると端末が 割り当てられないので (キーボードもないし、出力する画面もない) エラーになっているわけです。 > 他のサーバではこの記述通りで動作しました。 本当ですか? どうして root でもないのに、パスワードなしで su で他ユーザになれるのですか? > su - mono -s /home/mono/mno.sh 気になる点は2つ。 なぜ -c でなく -s なのでしょうか? http://www.linux.or.jp/JM/html/GNU_sh-utils/man1/su.1.html によると、-s はシェルを実行するオプションですから、-s の場合端末が あることをチェックしているのかもしれません。 あるいは環境変数 TERM などがセットされているので、端末を見にいってしまう という可能性も考えられます。 ちなみに FreeBSD 4.4-RELEASE では、端末がない状態で (cron 経由) echo PASSWORD | su root -c /usr/bin/id でプログラムの実行ができました。 >>2571 ふくし > 場合によってはデータが抜けていることがあるので困ります。 そんなことはないと思いますが、perl のバージョンは何ですか? perl-5.005_03 ではそのような挙動を示しませんでした。 |
>>2573 68user さん: えっと、 split /\t/, "a->b->c->d" => (a,b,c,d) split /\t/, "a->->c->d" => (a,'',c,d) split /\t/, "a->b->->d" => (a,b,'',d) split /\t/, "a->->->d" => (a,'','',d) split /\t/, "a->b->->" => (a,b,'','') となってくれる、ということですか? あれーおかしいなー、、。 実は、下の♪を使ったコードが動いたのでロクな検証をしてないのでした。 勝手な思い込みで外していたら申し訳ありません。 Excel による末尾のタブの削除等の現象かな? うーんうーん。 |
皆さん教えてください。 DATのテープを新しく交換するときに、ラベリングを行おうとすると I/O errorが出るんですけど、まさか、formatが必要とかそんなことですか |
お世話になります。 相変わらずiconvで困っています。 下記のように、コマンドを発行したのですが、 エラーが出てしまってiconvが出来ません。 ----- コマンド発行 ----- $iconv -f shift_jis -t euc aaa ----- エラーメッセージ ----- iconv: 0791-004 コンバータがオープンできません 自分で調べたところ、必要なファイルだと思われるのは、 /usr/lib/iconvファイルだと思うのですが、 このファイルは存在しません。 もしこれが原因なら、中身のサンプルを教えていただければ幸いです。 宜しくお願い致します。 |
>>2576 小僧 > $iconv -f shift_jis -t euc aaa euc という文字コードは存在しないような気がするので (ほんとか?)、 とりあえず -t euc-jp を試してみましょう。 >>2574 ふくし > となってくれる、ということですか? はい、そういうことです。 |
>>2577 68user >とりあえず -t euc-jp を試してみましょう。 ----- 実行文 ----- iconv -f shift-jis -t euc-jp aaa を行ってみましたが、同じ現象が発生しました。 当然の事ながら、ファイル"aaa"はきちんと存在します。 宜しくお願い致します。 |
>>2574 ふくし > split /\t/, "a->b->->" split /\t/, "a->b->->", -1 でわ? |
>>2576 小僧 web で AIX のマニュアルを探してみました。 http://publib.boulder.ibm.com/doc_link/Ja_JP/a_doc_lib/cmds/aixcmds3/iconv.htm http://publib.boulder.ibm.com/doc_link/Ja_JP/a_doc_lib/aixprggd/genprogc/convert_prg.htm#A197C1176 によると、AIX では euc-jp ではなく IBM-eucJP なのかもしれません。 Shift_JIS も同様に IBM-932 かもしれません。 > 自分で調べたところ、必要なファイルだと思われるのは、 > /usr/lib/iconvファイルだと思うのですが、 上記マニュアルを見ると、コンバータのファイルのありかは /usr/lib/nls/loc/iconv/ /usr/lib/nls/loc/iconvTable/ と書いてあるように見えます。 # なぜ /usr/lib/iconv/ だと判断したかが第三者にわかるように書きましょう。 # 皆が AIX を使っているありませんので。 僕は AIX4.3 のマニュアルを見ましたが、あなたがお使いのバージョンが わからないので、これが正しいかどうかはわかりません。ちゃんと OS の バージョンを書きましょう。 >>2579 /tk なるほど。その例では確かに -1 が必要ですね。僕は split /\t/, "a->->c->d" => (a,'',c,d) のように真ん中に TAB がある例だけを試していて、気づきませんでした。 |
>>2573 68user ご返答ありがとうございます。 >> 他のサーバではこの記述通りで動作しました。 >本当ですか? どうして root でもないのに、パスワードなしで >su で他ユーザになれるのですか? >> su - mono -s /home/mono/mno.sh ユーザ"mono"にパスワードがないため、なぜか実行できました。 >なぜ -c でなく -s なのでしょうか? よく分からずに指定したシェルを実行するとあったので、-s に しました。また -c でも駄目でした。 >ちなみに FreeBSD 4.4-RELEASE では、端末がない状態で (cron 経由) > echo PASSWORD | su root -c /usr/bin/id >でプログラムの実行ができました。 この場合、rootのパスワードが必要かと思いますが、そこはどのように されているのでしょうか。 >そんなことはないと思いますが、perl のバージョンは何ですか? >perl-5.005_03 ではそのような挙動を示しませんでした。 perlのバージョンは、perl-5.6.0-12ですが、 シェルスクリプトはどちらもperlを使用しておりません。 #!/bin/sh su - mono -s /home/mono/mno.sh また、 #!/bin/sh scp /var/XYZ/123.txt abc.world.co.jp:/home/mono/123.txt ssh abc.world.co.jp sh /home/mono/mno2.sh と書いています。 そもそもこれが駄目なのでしょうか。 宜しくお願いします。 |
初めて書込みするんですけども、最近Cシェルを始めたんですが・・・ 最初にログインした、IPアドレスから他のアドレスへログインする事ってできますか? |
>>2580 68user 返信ありがとうございます。 >web で AIX のマニュアルを探してみました。 わざわざ時間を割いていただいてありがとうございます。 ># なぜ /usr/lib/iconv/ だと判断したかが第三者にわかるように >書きましょう。 >僕は AIX4.3 のマニュアルを見ましたが、あなたがお使いのバージョン >がわからないので、これが正しいかどうかはわかりません。ちゃんと >OS のバージョンを書きましょう。 申し訳ございませんでした。 調べたのは「UNIX クイックリファレンス」という本です。 OSのヴァージョンは、AIX 4.3です。 次回からはきちんと記載するように致します。 お蔭様で、iconvが出来るようになりました。 本当にありがとうございました。 |
いつも参考にさせて貰っています。 ひとつ気づいた所があるのですが、Perlでのforkを使ったサーバプログラムの部分ですが、 親プロセスは子プロセスの終了ステータスを受けとらなければならないため、waitが必要だと思います。waitが無いと、子プロセスが終了してもdefunct状態のまま存在し続けてしまいます。 このwaitについて、下記の一行を追加するだけでうまくいきます。 $SIG{CHLD} = sub { wait }; (オライリーのらくだ本より) 以上、ご参考まで。 |
お世話になります、小僧です。 連続の質問になるので、気が引けるのですが、 どうしても分からないので相談させて下さい。 AIX4.3.3 にてCDをマウントを行ったのですが、 CDのファイル名が全て小文字に変換されてしまいます。 Windowsで見ると大文字、小文字の区別がされています。 マウントを行うときに、オプション指定で 大文字、小文字を判定させる事は可能なのでしょうか? #AIXでのマウントってちょっと特殊なんですよね? #私が実行したマウントコマンドを記述しておきます。 #>mount -V cdrfs -r /dev/cd0 /mnt アドバイス、お願い致します。 |
はじめまして。 サンプルプログラムをいつも参考にさせていただいている者です。 「C言語で ftp クライアントを作ってみよう (1)」のプログラムを 参考にFTPプログラムを作成していますが、プログラム中で、 cdコマンド、putコマンド相当の処理を行う場合はどのような記述を すればよいか教えていただけないでしょうか(_0_) user、passwd、quitの入力を、USER、PASS、QUITを使用して コマンドをしているように見えます。これ相当の処理を、cd、putで 行う場合のプログラミングを調べております。 申し訳ありませんが御覧になっていたらアドバイスをお願いします (_0_) |
はじめまして。* システムコール・ライブラリルーチンのページをよく見させて いただいている者です。 ふと、気がついた部分がありまして生意気にも 指摘の投稿させていただきました。 http://x68000.startshop.co.jp/~68user/unix/pickup?usleep において、マイクロ秒:百万分の一秒 であり、 0.001 秒単位ではなく、 例の説明も違っていると思います。 既に指摘があったらすいません。 |
こんにちは。 http://X68000.startshop.co.jp/~68user/が正式なURLとの事ですが、OmniWeb4.0.6というブラウザを使うとアドレスを読み込み出来ない旨が表示され以下のようなエラーが表示されます。 http://www2.startshop.co.jp/~68user/では正常に表示されます。 Mar 19 00:45:16 http://X68000.startshop.co.jp/~68user/(HTTP): Host not found: u30dbu30b9u30c8 x68000.startshop.co.jp u306fu3042u308au307eu305bu3093 Mar 19 00:45:16 http://X68000.startshop.co.jp/~68user/ (HTTP): Host not found: ホスト x68000.startshop.co.jp はありません ブラウザのバグかもしれませんが、一応ご報告まで。 ネットワークプログラミングの基礎知識、とても参考になります。 では。 |
>>2588 狂態公開 う〜ん。 ;; ANSWER SECTION: x68000.startshop.co.jp. 17h56m14s IN CNAME ww2.startshop.co.jp. www2.startshop.co.jp. 17h56m14s IN A 210.249.139.22 CNAMEか・・ 狂態公開さんの所のDNSサーバーがおかしいんだと思うぞう。 |
x68000.startshop.co.jp. 17h56m14s IN CNAME www2.startshop.co.jp. だな。wを一つ消してもた |
初めまして、こんばんわ。 ブックさせて頂いて、お勉強させて頂いております。m(_ _)m レンタルサーバを1台借りて、色々しているのですが 今回IPアドレスを2つ追加したのはいいけれど、設定に途方にくれて 書き込みさせて頂いております。 ifconfig_fxp0="inet 210.224.181.hhh netmask 255.255.255.0" ifconfig_fxp0_alias0="inet 210.224.177.ttt netmask 255.255.255.255" 現状に、追加 210.188.eee.6/31 (7も有効)ということで ifconfig_fxp2_alias0="inet 210.188.eee.6 netmask 255.255.255.254" を、追加した次点ではpingでもちゃんと返って来てたのが・・ ifconfig_fxp3_alias0="inet 210.188.eee.7 netmask 255.255.255.254" も、追加したら 6では パケットエラー、7では1行出てそれ以降は いつまでたってもうんともすんとも状態になってしまいました。 が、これはtera term menu で自分サーバー内からのことで、外から TELNET使用すると普通にpingで返ってくるのですが、これはどう考えたらよいものなのでしょうか。 ご存じの方いらっしゃいましたら、アドバイスを頂きたく書き込みさせて頂きました。宜しくお願い致します。 |
>>2591 あや まず、OS 名とバージョンを書きましょう。FreeBSD っぽいので FreeBSD として回答します。 fxp0, fxp2, fxp3 ということは、NIC 3 枚差しなのですか? ifconfig -a で fxp0, fxp2, fxp3 それぞれの情報がちゃんと 出てきます? > ifconfig_fxp2_alias0="inet 210.188.eee.6 netmask 255.255.255.254" > を、追加した もし /etc/rc.conf を編集してリブートしているのでしたら、それは やめて、コマンドラインから # ifconfig fxp2 inet 210.188.eee.6 alias netmask 255.255.255.254 などとして、その後 # ifconfig -a で確認するようにして下さい。 で、要は # ifconfig fxp0 inet 210.224.181.hhh netmask 255.255.255.0 # ifconfig fxp0 inet 210.224.177.ttt alias netmask 255.255.255.255 # ifconfig fxp2 inet 210.188.eee.6 alias netmask 255.255.255.254 # ifconfig fxp3 inet 210.188.eee.7 alias netmask 255.255.255.254 とした、ということですか? fxp2 と fxp3 にそれぞれ重複して IP アドレスを振ってないならば、 「alias」を削って # ifconfig fxp0 inet 210.224.181.hhh netmask 255.255.255.0 # ifconfig fxp0 inet 210.224.177.ttt alias netmask 255.255.255.255 # ifconfig fxp2 inet 210.188.eee.6 netmask 255.255.255.254 # ifconfig fxp3 inet 210.188.eee.7 netmask 255.255.255.254 じゃないかなと思います (ifconfig の実装によっては OK なのかも)。 > も、追加したら 6では パケットエラー、7では1行出てそれ以降は > いつまでたってもうんともすんとも状態になってしまいました。 エラーの内容を具体的に書きましょう。 で、ping が通らないということは、インタフェースが認識されていないか、 ルーティングテーブルがおかしいか、arp テーブルがおかしいのでしょう。 netstat -a、netstat -r、arp -a の結果はどうなってますか? |
>>2587 pyu > マイクロ秒:百万分の一秒 であり、0.001 秒単位ではなく、例の説明も > 違っていると思います。 ご指摘ありがとうございます。早速修正しました。 http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/unix/org/func.src 僕はマイクロ=ミリ (ミリはマイクロの略称) だと完全に勘違いしていたのですが、 ミリ秒=1/1,000 秒 マイクロ秒=1/1,000,000 秒 なのですね。よく考えれば1ミリメートルと1マイクロメートルが同じ長さなはずが ない、と。 >>2588 狂態公開 > OmniWeb4.0.6というブラウザを使うとアドレスを読み込み出来ない旨が > 表示され以下のようなエラーが表示されます。 うーむ、僕も DNS がおかしいのではないかと思うのですが…。 もし Mac OS X をお使いでしたら、ping や nslookup を 試してみて下さい。 |
>>2586 超初心者 > 参考にFTPプログラムを作成していますが、プログラム中で、 > cdコマンド、putコマンド相当の処理を行う場合はどのような記述を > すればよいか教えていただけないでしょうか(_0_) perl 編で、FTP プロトコルそのものの解説をしておりますので、ご一読下さい。 http://x68000.startshop.co.jp/~68user/net/ftp-1.html http://x68000.startshop.co.jp/~68user/net/ftp-2.html http://x68000.startshop.co.jp/~68user/net/ftp-3.html http://x68000.startshop.co.jp/~68user/net/ftp-4.html >>2584 persianopeh > 親プロセスは子プロセスの終了ステータスを受けとらなければならないため、 > waitが必要だと思います。 ごもっともです。wait をすっかり忘れておりました。 ただ、解説も一緒に付けたいので、少し時間を下さいませ。 |
>>2585 小僧 > マウントを行うときに、オプション指定で大文字、小文字を判定させる > 事は可能なのでしょうか? まず基礎知識。CD-ROM にはいくつかフォーマットの種類があります。 http://www.zdnet.co.jp/magazine/pcjapan/0105/sp2/09.html http://publib.boulder.ibm.com/doc_link/Ja_JP/a_doc_lib/cmds/aixcmds1/toc.htm ISO9660 は大文字・小文字を区別しません (たぶん全て大文字で記録される)。 Joliet は、MS-DOS の 8.3 形式とロングファイルネームの2つのファイル名を 持ちます。UNIX のように大文字・小文字を区別するには RockRidge (ロックリッジ) というフォーマットを使います。 よって、その CD-ROM が ISO9660 で作られているなら、大文字小文字の 区別はできません。ただし Windows で大文字小文字が区別されている ということは、その CD-ROM は Joliet か RockRidge なのかもしれません。 Windows で見て、8.3 形式とロングファイルネームの両方が表示されるなら、 それは Joliet 形式かもしれません (本当かなぁ)。 なお、AIX は Joliet には非対応ですが、RockRidge には対応しているようです。 http://publib.boulder.ibm.com/doc_link/Ja_JP/a_doc_lib/aixbman/admnconc/fs_overview.htm これらのファイルタイプを mount のオプションで指定する方法は、web の マニュアルからは読みとれませんでした (むしろ cdrfs を指定すれば 自動認識してくれそうに思える)。 というわけで、残念ながら解決法はわかりませんでした。 >>2852 mattu > 最初にログインした、IPアドレスから他のアドレスへログインする > 事ってできますか? 質問の意味がわかりません。 |
>>2581 q19_77 > ユーザ"mono"にパスワードがないため、なぜか実行できました。 なるほど、納得です。 >> echo PASSWORD | su root -c /usr/bin/id >>でプログラムの実行ができました。 > この場合、rootのパスワードが必要かと思いますが、そこはどのように > されているのでしょうか。 echo PASSWORD の部分に root のパスワードを書いています。 > perlのバージョンは、perl-5.6.0-12ですが、 > シェルスクリプトはどちらもperlを使用しておりません。 それは、ふくしさんに対しての回答です。今回の問題で perl のバージョンを 疑っているわけではありません。 一番簡単なのは root 権限で su - mono -c /home/mono/mno.sh とすることです。root 権限なら何の問題もなくできるはず。 また、問題を切り分けましょう。 > ssh abc.world.co.jp sh /home/mono/mno2.sh ここで tty を要求している可能性もないとは言えませんので、まずは su - mono -c /usr/bin/id から始めるべきです。 |
お世話になります。m(_ _)m FreeBSD 3.5.1 を 利用しております。 すみません、前回書き込みが間違っていました。 NICは1枚です。IPは計4つの状態です。 rc.conf の中身は現在下記のようにしています。 ifconfig_fxp0="inet 210.224.171.ttt netmask 255.255.255.0" ifconfig_fxp0_alias0="inet 210.224.177.hhh netmask 255.255.255.255" ifconfig_fxp0_alias1="inet 210.188.fff.6 netmask 255.255.255.254" ifconfig_fxp0_alias2="inet 210.188.fff.7 netmask 255.255.255.254" ww# ping 210.188.fff.6 PING 210.188.fff.6 (210.188.fff.6): 56 data bytes ping: sendto: Can't assign requested address ・ ・ と、続いて www# ping 210.188.fff.7 PING 210.188.fff.7 (210.188.fff.7): 56 data bytes この行のみしか出ません。 ww# ifconfig -a fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 210.224.171.ttt netmask 0xffffff00 broadcast 210.224.171.ttt inet 210.224.177.hhh netmask 0xffffffff broadcast 210.224.177.hhh inet 210.188.fff.6 netmask 0xfffffffe broadcast 210.188.fff.7 inet 210.188.fff.7 netmask 0xfffffffe broadcast 210.188.fff.7 www# netstat -a Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp 0 6823 210.224.177.hhh.http TKTcd-01p91.ppp..1696 FIN_WAIT_1 tcp 0 0 210.224.177.hhh.http TKTcd-01p91.ppp..1694 TIME_WAIT tcp 0 0 210.224.177.hhh.http 203.139.83.201.4518 FIN_WAIT_2 tcp 0 0 210.224.177.hhh.http 210.225.27.166.13100 FIN_WAIT_2 tcp 0 0 210.224.177.hhh.http 210.225.27.166.13088 FIN_WAIT_2 tcp 0 4 www.telnet c85242.tctv.ne.j.1872 ESTABLISHED tcp 0 0 *.http *.* LISTEN tcp 0 0 *.smtp *.* LISTEN tcp 0 0 *.pop3 *.* LISTEN tcp 0 0 *.telnet *.* LISTEN tcp 0 0 *.ftp *.* LISTEN tcp 0 0 *.sunrpc *.* LISTEN udp 0 0 *.sunrpc *.* udp 0 0 *.syslog *.* Active UNIX domain sockets Address Type Recv-Q Send-Q Inode Conn Refs Nextref Addr c89aaf80 dgram 0 0 0 c89a0fc0 0 c89aafc0 c89aafc0 dgram 0 0 0 c89a0fc0 0 0 c89a0fc0 dgram 0 0 c899f680 0 c89aaf80 0 /var/run/log www# netstat -r Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default oscrt1e-L5.gw.saku UGSc 26 1593573 fxp0 localhost localhost UH 0 112 lo0 210.188.fff.6 0:e0:18:e0:10:2b UHLWb 0 10 lo0 => 210.188.fff.6/31 link#1 UC 0 0 fxp0 210.188.fff.7 ff:ff:ff:ff:ff:ff UHLWb 0 141 fxp0 210.224.171 link#1 UC 0 0 fxp0 oscrt1e-L5.gw.saku 0:0:5e:0:1:16 UHLW 26 0 fxp0 1200 oscrt2e-L5.gw.saku 0:e0:80:2f:1d:0 UHLW 0 0 fxp0 1199 210.224.177.hhh/32 link#1 UC 0 0 fxp0 www# arp -a ? (210.188.fff.6) at 0:e0:18:e0:10:2b permanent [ethernet] ? (210.188.fff.7) at ff:ff:ff:ff:ff:ff permanent [ethernet] oscrt1e-L5.gw.sakura.ad.jp (210.224.171.1) at 0:0:5e:0:1:16 [ethernet] oscrt2e-L5.gw.sakura.ad.jp (210.224.171.2) at 0:e0:80:2f:1d:0 [ethernet] このようになっております。宜しくお願い致します。 |
>>2596 68user ご返答ありがとうございます。 su - mono -c /usr/bin/id として試してみましたが、やはりmonoユーザになれないようでした。 68userさんの言われる通り、以下のようにroot権限で処理を行うように しましたところ、上手く動作しました。 sudorsファイルにmonoユーザがroot権限で"su"できるよう記述 mono ALL= NOPASSWD: /bin/su シェルスクリプトファイルに以下のように記述 sudo su - mono -c /home/mono/mno.sh 上手く動作しなかった原因と対処法は分かりませんでしたが、 動作するようになりましたので、よかったです。 どうもありがとうございました。 |
>>2597 あや > ifconfig_fxp0_alias2="inet 210.188.fff.7 netmask 255.255.255.254" ifconfig_fxp0_alias2="inet 210.188.fff.7 netmask 255.255.255.255" だと思います。 // 以下参照 http://www.freebsd.org/ja/handbook/configtuning-virtual-hosts.html |
早速ありがとうございます。 210.188.fff.6/31 として 6と7がIPとして有効。 /31と言うことで255.255.255.254としていたのですが、 7の場合は255.255.255.255とする理由をご伝授頂ければ勉強になります。 ww# ping 210.188.fff.6 PING 210.188.fff.6 (210.188.fff.6): 56 data bytes ping: sendto: Can't assign requested address ・ ・ と、続いて www# ping 210.188.fff.7 PING 210.188.fff.7 (210.188.fff.7): 56 data bytes ping: sendto: Can't assign requested address ・ ・ と、続くようにはなりましたが。 何度もすみません。宜しくお願い致します。 |
いまさらながら気づいたのですが、 >>2597 あや > ifconfig_fxp0_alias1="inet 210.188.fff.6 netmask 255.255.255.254" > ifconfig_fxp0_alias2="inet 210.188.fff.7 netmask 255.255.255.254" これは根本的に無理でしょう。210.188.fff.6/31 ってことは、 210.188.fff.6 … ネットワークアドレス 210.188.fff.7 … ブロードキャストアドレス となってしまい、IP アドレスを1つも振ることはできません。ネットワーク アドレス部は 30 ビット以下でないとおかしい。 うちの FreeBSD 4.4-RELEASE でも # ifconfig vr0 inet 10.1.1.1 alias netmask 255.255.255.254 とすると、 ping: sendto: Can't assign requested address となりました。 >>2599 hsj > http://www.freebsd.org/ja/handbook/configtuning-virtual-hosts.html に従って、 # ifconfig vr0 inet 10.1.1.1 alias netmask 255.255.255.252 # ifconfig vr0 inet 10.1.1.2 alias netmask 255.255.255.255 としたら OK でした。 |
>>2595 68user お世話になります。 色々調べて頂いてありがとうございます。 その後、調査をした結果、方法がわかりました。 #mount -V cdrfs -r -o nocase /dev/cd0 /mnt コマンドで、大文字、小文字を判定してくれました。 必要なオプションは"-o nocase"だったようです。 時間を割いて調査して頂き、ありがとうございました。 |
>>2601 68user > これは根本的に無理でしょう。210.188.fff.6/31 ってことは、 > 210.188.fff.6 … ネットワークアドレス > 210.188.fff.7 … ブロードキャストアドレス > となってしまい、IP アドレスを1つも振ることはできません。ネットワーク > アドレス部は 30 ビット以下でないとおかしい。 あ、そりゃそうですね・・・。 設定にだけ目がいって基本的な部分を見落としてました(苦笑 そういえば、本題とは関係ありませんが件のページの、 > システムは 10.1.1.0 には 10.1.1.1 として, 202.0.75.20 には > 202.0.75.17 として現れるようにします. は、やっぱり「202.0.75.16 には202.0.75.17 として〜」と 書きたかったんでしょーか。 >>2600 あや > 255.255.255.255とする理由をご伝授頂ければ勉強になります。 これはFreeBSDの場合はそう言うモンだとしか。 ちゃんと調べたわけではありませんが、ルーティングとかの絡みでの 単なる実装上の都合ではないでしょうか。 |
>>2603 hsj > 「202.0.75.16 には202.0.75.17 として〜」と書きたかったんでしょーか。 原文は http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/configtuning-virtual-hosts.html We want the system to appear at 10.1.1.1 through 10.1.1.5 and at 202.0.75.17 through 202.0.75.20. なので、 10.1.1.1 から 10.1.1.5 まで、202.0.75.17 から 202.0.75.20 まで てなところではないでしょうか。 誤訳かなぁと思うのですが、自信なし。 |
ご教授、本当にありがとうございました。m(_ _)m 今回、全部ではないですが理解出来た部分が増えました。m(_ _)m 元々のレンタサーバからの設定が通常とは違うのか、かなりの時間を 経て本日回答は 255.255.255.255 設定にして下さいとのことでした。 ping すると 返ってくるので、こういう設定もあるのかと 又 少し頭を かかえたりもですが。(ーー; 本当にほんとうに、ありがとうございました。m(_ _)m m(_ _)m m(_ _)m |
ActivePerl について質問です。 (ActivePerl-5.6.1.631-MSWin32-x86.msi を使っています) Windows 2000 から`拡張子 pl を使うと、 C:\> foo.pl のようにコマンドのように実行できるようになりましたが、 <> を使ってコマンドラインからファイルを入力すると、 引数にファイル名を渡すと OK ですが (C:\> foo.pl bar.txt のような状態) インプットリダイレクションすると NG です。 (C:\> foo.pl < bar.txt のような状態) 症状は、1行も読み込みません。 これはこういう現象なのでしょうか? 内部的になにが起こっているのでしょうか? もしなにかわかりましたらご教示ください。 |
お世話になります。 また質問をさせて頂きます。 AIXサーバ(ver 4.3.3)から、ファイルを3490テープに出力し、 そのファイルをホスト(S/390)が受取り、処理を行う、 という運用があるのですが、AIXサーバからファイルを3490テープに 出力する方法がまったくわかりません。 上記質問とは関係のない、3490テープに関する情報でも構いませんので、 ご存知の方がいらっしゃいましたら、情報をアナウンスして頂ければ幸いです。 また、必要な情報が何なのかも分かっていません。 「これを読んで勉強してこい」という情報でも構いませんので、 宜しくお願い致します。 |
POP3についての質問です。 Webメールクライアントに興味があり、 初めてFreeBSDをインストールしたのですが 事ある毎に何日も嵌り続けています(^^; 今回、問題の切り分けも自力で出来ずに悩んでいます。 何か良いアドバイスを頂ければと思い書き込みさせて頂きます。 FreeBSD + checkpassword を使いPOPサーバーを起動しています。 例えば User@bsd.com 宛のメールを閲覧するのにPOP3Client.pmを使った perlスクリプトなのですが何故か、私の組んだサーバーを含むいくつかの サーバーで「ユーザー認証が出来ません」 ただ、どのサーバーも telnet で 110ポートへ接続して > USER User > PASS Pass > LIST とすると認証され一覧も表示されます。 Web上で見つけた他のクライアントソフト(peepmail)で試したのですが 同じように特定サーバーで認証エラーが発生します。 その後SOCKET部分の問題かと思い 参考文献によくあるような 〜 略 〜 select(SOCKET); $|=1; select(STDOUT); print SOCKET "USER $username\r\n"; print SOCKET "PASS $passwd\r\n"; print SOCKET "LIST\r\n"; 〜 略 〜 では +OK <8182.1017479300@bsd.com> といった返事しか得られなかった為に 〜 略 〜 select(SOCKET); $|=1; select(STDOUT); print SOCKET "USER $username\r\n"; $tmp = <SOCKET>; print SOCKET "PASS $passwd\r\n"; $tmp = <SOCKET>; print SOCKET "LIST\r\n"; $tmp = <SOCKET>; 〜 略 〜 又は 〜 略 〜 select(SOCKET); $|=1; select(STDOUT); print SOCKET "USER $username\r\n"; print SOCKET "PASS $passwd\r\n"; sleep(1); print SOCKET "LIST\r\n"; 〜 略 〜 とした所、サーバーからの応答が得られました。 この事と関係しているのでしょうか? POP3Client.pm の内容も見たのですが全然分かりません。。。 原因はどの辺りにあるのか、アドバイスを頂けないでしょうか。 |
自己レスです。 POP3Client の呼び出しで > TIMEOUT => 60 というタイムアウト指定項目がありこれを 設定した所、無事に動作致しました。 結局の所、反応の遅いサーバーではタイムアウト指定を してあげないといけなかっただけのようです。 1週間以上悩んでいた事が BBSへ書き込んで数時間で解決しました(^^; |
>>2609 sio DEBUG=>1 としておけば気づきやすかったかもしれませんね。 |
SOCKETを使ったHTTPクライアントソフトで認証のページに アクセスする方法はどうするのでしょうか? |
>>2611 hama 認証が必要なページを読むと、Basic 認証が必要なページならば HTTP/1.1 401 Authorization Required WWW-Authenticate: Basic realm="This URI is required authentication" というようなレスポンスが返ってきます。 もしユーザ名が USER、パスワードが SECRET なら、クライアントは USER:SECRET という文字列を作り、それを base64 でエンコードした VVNFUjpTRUNSRVQK という文字列を「Authorization: Basic 」に続けて送ります。つまり GET / HTTP/1.0 Authorization: Basic VVNFUjpTRUNSRVQK こんな感じ。 Digest 認証ならば、web サーバは WWW-Authenticate: Digest realm="testrealm@host.com", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="5ccc069c403ebaf9f0171e9517f40e41 という感じのを返してくるので、クライアントは GET / HTTP/1.0 Authorization: Digest username="hoge", realm="testrealm@host.com", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="/", response="e966c932a9242554e42c8ee200cec7f6", opaque="5ccc069c403ebaf9f0171e9517f40e41" こんな感じで。 詳細はこちらを。 http://www.ietf.org/rfc/rfc2617.txt |
はじめまして、いつも勉強させて頂いております。 バージョン管理ソフトのCVSについて質問です。 ソースをレポジトリにインポートすると「ファイル名,v」となります。 ,vが管理されていると言う事だと思うのですが、この管理している ソースを直接WEBに反映したいのですが,vがある事でもとのファイルがみつからないとのエラーがブラウザに表示されてしまいます。 CVSROOTの中(loginfo等)はそれぞれ、元のファイルと,vのファイルがあり、チェックアウトしてソースを修正して戻すと両方のファイルが 更新されています。このようにする方法は無いのでしょうか。 以上、宜しくお願いします。 |
申し訳ないです。下の質問わかりにくいですね。 例えばindex.htmlをインポートするとindex.html,vとなってしまう為 ブラウザーでindex.htmlを表示できないという事です。 宜しくお願いします。 |
>>2614 kouhei 目的は、履歴 (index.html,v) を表示することですか? それともコンテンツ (index.html) を表示することですか? |
>>2615 68user 追加。 もし後者だとしたら、リポジトリを直接ブラウザで見ようとして いるのはなぜですか? |
素早いレスありがとうございます。 目的はコンテンツ(index.html)を表示したいということです。 参考にトップページのソースを拝見させていただきました。 1行目に<!--$ID:index.html,v 〜 があるというこはindex.htmlを 管理しているという事ですよね。これはチェックアウトした物を表示 しているのですか。 私がやりたいのはインポートしたindex.htmlを表示したいという事です 以上、宜しくお願いします。 |
追加。 もしかして普通はこんな事しませんか。 テスト用サーバでcommitと同時に画面に反映されたらテストが楽に なると思ったので。動作確認ができたら本番サーバにリリースする というような事を考えていました。 実現できるのでしょうか。 |
>>2618 kouhei > テスト用サーバでcommitと同時に画面に反映されたらテストが楽に > なると思ったので。動作確認ができたら本番サーバにリリースする > というような事を考えていました。 運用の問題になりますが、commit しないとテストできないというのは 面倒ではないですか? 普通、ちょっと作ってはブラウザで確認、不具合を修正し、確認し…と 修正・確認を繰り返して、まぁ問題ないだろうというときになったら commit するものだと思います。 よって、 - CVSROOT が /home/user/cvsroot - テスト環境を置くディレクトリが /home/user/public_html/ - 本番環境を置くディレクトリが /usr/local/www/data/ だとしたら、 % cd /home/user/public_html (ここで修正・確認を繰り返す) % cvs commit % cd /usr/local/www/data/ % cvs update (本番環境に反映。あるいは再度 checkout しなおしてもよい) とするのがよいと思います。 CVSROOT/loginfo をいじれば、commit した瞬間に本番環境へ反映させる ことは不可能ではありませんが、常に本番環境に即時反映されるのも困る 場合があるんじゃないでしょうか? また、本番環境への自動反映であれば、cron で定期的に更新するという 手もあります。loginfo で凝ったことをするより、cron で小回りのきく 単純なシステムを作った方がいいかもしれません。 |
ありがとうございます。 チェックアウト先をWindowsのローカルにと考えていたのが 悪かったようです。Unix上にチェックアウトしてSambaで編集すれば 良いのですね。開発がサーブレットとjspとオラクルだったのもので 気軽にローカルでテスト環境を作るというのが難しかった為、サーバに 戻してテストしようと考えていました。 cronは便利そうですね。使った事ないですが勉強しようと思います。 以上、ありがとうございました。 |
>>2620 kouhei > 開発がサーブレットとjspとオラクルだったのもので気軽にローカルで > テスト環境を作るというのが難しかった為 なるほど。 でも、開発を各マシン上で行えると便利ですよ。 開発環境は各マシンで Windows+JBuilder+Tomcat+PostgreSQL 用 JDBC ドライバ (テスト用サーバで PostgreSQL が稼働) テスト & 本番環境は UNIX+Tomcat+Oracle てな感じで やっているところを見たことがあります。 Oracle と Tomcat を違いではまらないように、開発者は SQL を 直接書かず、DB 担当者が SQL を一括管理していましたが、そのかわり 「今から開発マシン落としま〜す」 「なんだ開発できねぇじゃねーか」 とかいうことがなくなりますし、同じファイルを同時にいじくって しまう危険もないですね。 まあ、ある程度の規模にならないとメリットも出てこないので、 kouhei さんの環境でもそうするべきかどうかはわかりませんが、 参考まで。 |
2つのファイルの比較について、 hogeとfooという2つのファイルが場合、 この2つのファイルから、同一の内容)行を出力するコマンドは どのようなものがありますか? |
2つのファイルの比較について、 hogeとfooという2つのファイルがある場合、 この2つのファイルから、同一の内容の行を出力するコマンドは どのようなものがありますか? |
下記で同じ質問をしたところ、回答をいただいて解決しました。 http://www.parkcity.ne.jp/~chaichan/qanda/qa2652.htm |
マルチポストですか・・・>あやの |
お世話になってます。すみませんがもう一つ質問させてください。 CVSでコミットと同時にメールで複数人に通知したいのですが、設定がよくわかりません。 一応、以下の内容をloginfoに加えればメールは送られるのですが コミットに1分以上、時間がかかってしまい使えません。 ALL (echo ""; id; echo %{sVv}; date; cat) | mail メールアドレス パールを使う以下の方法も試したのですがパールの中でエラーが出てしまいます。 DEFAULT /usr/local/lib/cvs/contrib/log %s -m メールアドレス -f $CVSROOT/CVSROOT/commitlog エラー内容は 〜/user/local/lib/cvs/contrib/log line 172. です。 ----------------------------------------------------------- /user/local/lib/cvs/contrib/log ----------------------------------------------------------- close(OUT); die "Write to $logfile failed" if $?; close(MAIL); die "Pipe to $mailcmd failed" if $?; ← 172行目 ----------------------------------------------------------- 環境はLINUXです。 メール自動送信の方法をご伝授して頂けないでしょうか。 宜しくお願いします。 |
>>2626 kouhei > コミットに1分以上、時間がかかってしまい使えません。 > ALL (echo ""; id; echo %{sVv}; date; cat) | mail メールアドレス 普通に考えると、commit に時間がかかる場所は mail コマンド以外には 考えられないので、まずはコマンドラインから % mail メールアドレス で試してみるべきでしょう。 > パールを使う以下の方法も試したのですがパールの中でエラーが出てしまいます。 こちらも % Mail -s 'CVS update: $modulepath メールアドレス や % /usr/local/lib/cvs/contrib/log %s -m メールアドレス -f $CVSROOT/CVSROOT/commitlog などをコマンドラインから実行して、再現するかどうか試しましょう。 うちでは http://www-vox.dj.kit.ac.jp/nishi/cvsbook/ の mailto-committers.pl.txt を 使っています。 - CVSROOT に jcode.pl を cvs add。 - CVSROOT に mailto-committers.pl を cvs add。 - CVSROOT/checkoutlist に mailto-committers.pl jcode.pl を追加し、commit。 - CVSROOT/mailto-committers.pl を以下のように変更 --- CVSROOT/mailto-committers.pl 2001/04/05 07:05:28 1.1 +++ CVSROOT/mailto-committers.pl 2001/04/17 04:12:00 1.8 @@ -1,23 +1,24 @@ #!/usr/bin/perl # -# $Id: mailto-committers.pl,v 1.1 2001/04/05 07:05:28 mat Exp $ +# $Id: mailto-committers.pl,v 1.8 2001/04/17 04:12:00 mat Exp $ # Copyright (C) 1998 Hajime BABA. All rights reserved. # -require 'jcode.pl'; +require '/MASTER/cvs/CVSROOT/jcode.pl'; -$cvs = "/usr/bin/cvs"; -$rcsdiff = "/usr/bin/rcsdiff"; -$sendmail = "/usr/sbin/sendmail"; +$cvs = "/usr/local/bin/cvs"; +$rcsdiff = "/usr/local/bin/rcsdiff"; +$sendmail = "/usr/lib/sendmail"; sub parse_args { my(@tmp, $tmp); - $CVSROOT = ENV{'CVSROOT'}; + $CVSROOT = $ENV{'CVSROOT'}; + $CVSROOT =~ s/.*://; print $ARGV[0], "\n" if $debug; $ARGV[0] =~ s/ - New directory//go; @@ -49,6 +50,7 @@ sub set_header { my(@h, $file, @tmp, $date); open(HISTORY, "$tail -$files $CVSROOT/CVSROOT/history |") || die; @h = <HISTORY>; close(HISTORY); @@ -84,8 +86,8 @@ sub todate { sub mail_notification { my($file, $fullname, $old, $new, $tmp); - open(MAIL, ">> /tmp/commitlog"); + open(MAIL, "| $sendmail -odb -oem -t"); print(MAIL "$subject"); print(MAIL "$header"); - loginfo に DEFAULT $CVSROOT/CVSROOT/mailto-committers.pl %{sVv} $USER メールアドレス を追加し、commit。 |
mailto-committers.plの方法を試しましたが結果は同じで1分以上待ってから送信されます。 %mail メールアドレスは普通に送信されました。 もう少し調べてみます。 |
はじめまして、メールサーバの管理をしているのですが、 最近サーバがpopユーザ数に対応しきれず、 pop.lockがかかってメールが取れない事が頻繁に発生しています。 popデーモンはqpopperをつかっています。 そこで、このロックの解除方法で疑問があります。 qpopperが起動すると、まず、/var/mai/.user-id.popファイルにコピーを作成。 無事にコピーが終わると、/var/mai/user-idはサイズ0に切り詰められる。 POPサーバーは、このコピーと、解析した結果を元にクライアントとやりとりします。 ネットで調べると、.user-id.popファイルを削除する方法をよく見かけますが、 途中でセッションが切れてロックファイルが残ってしまったような場合、 この方法では受信し切れなかった分のメールはなくなってしまうのでしょうか? ほっとけば30分でロックファイルはなくりますが、 これもただ強制的にロックファイルを削除しているだけなのでしょうか? また、popのプロセスをkillする方法もありますが、この場合のロックファイルは どう処理されるのでしょうか? ご指導、宜しくお願いします。 |
>>2629 john 一口に qpopper と言っても、2.5x 系、3.x 系、4.0.x 系 などがあります。 ちゃんとバージョンを書きましょう。 > qpopperが起動すると、まず、/var/mai/.user-id.popファイルにコピーを作成。 > 無事にコピーが終わると、/var/mai/user-idはサイズ0に切り詰められる。 > POPサーバーは、このコピーと、解析した結果を元にクライアントとやりとりします。 4.0.3 では、 認証完了 → user-id.lock 作成 → user-id を .user-id.pop にコピー → user-id を 0 バイトに → user-id.lock 削除 でした。「pop.lock」ってどのことを指してますか? あるいは本当に 「pop.lock」というファイルがあるのでしょうか? |
お世話になります、小僧です。 質問をさせてください。 あるシェルをバックグランドで実行させ、 その後Window を閉じる、という処理を行おうとしています。 過去ログなどを参照した結果、実行コマンドは nohup ???.sh & でいいと思うのですが、終了のさせかたに疑問が残ります。 と、言うのも logout コマンドは受け付けてくれるのですが、 exit コマンドは 1 回目は受け付けてくれません。 ( 2 回叩くと exit してくれます・・・) 本で調べた結果、exit は「シェルスクリプトを終了」し、 logout は「ログインシェル」を終了させると書いてありましたが、 この意味するところがわからなく、困っています。 この 2 つのコマンドの違いが分かるか方がいらっしゃいましたら、 アドバイスをお願い致します。 −−− OS は AIX 4.3 シェルは ksh 調べた本は「UNIX クイックリファレンス」 です。 宜しくお願い致します。 |
>>2631 小僧 > logout コマンドは受け付けてくれるのですが、 > exit コマンドは 1 回目は受け付けてくれません。 それはまた謎な話ですね。 % nohup sleep 100 & % exit でも再現しますか? 単に (nohup を実行せずに) % exit だと? また、「受け付けてくれない」とはどういう状況を指してますか? 何かエラーメッセージは出ますか? |
>>2632 68user お世話になります、小僧です。 早速の返信、ありがとうございます。 68user さんが記述されているコマンドを実行してみました。 以下、結果です。 ---------- Start # nohup sleep 100 & [1] 37802 # nohup の出力を nohup.out に送信します。 # exit 実行中のジョブがあります。 ---------- End 情報が足りなかったのですが、 「受け付けてくれない」というのは "実行中のジョブがあります。"メッセージが 表示されて、終了されないことを指しています。 ちなみに、上記の状態でもう一度「exit」を実行すると、 上手く画面が消えてくれます。 宜しくお願い致します。 |
>>2633 小僧 > "実行中のジョブがあります。" それはシェルが 「実行中のジョブがあるけど、本当に exit で抜けてよいのか?」 と親切に聞いてくれているのです。 これはただの警告であって、抜けようと思えばいくらでも抜けられます。 二度目の exit は 「警告したにもかかわらず再度 exit しようとした」 ということで、今度は抜けることができます。 FreeBSD や Solaris では、端末を持たないコマンド (?) をバック グラウンドで実行している場合は、素直に exit させてくれるん ですけど、AIX はそうではないようですね。 |
>>2634 68user お世話になります、小僧です。 早速の回答、ありがとうございました。 別に exit と logout のコマンドが 違う訳ではなかったのですね。 今後も宜しくお願い致します。 |
はじめまして。検索していてここに辿り着きました。よろしくお願いいたします。 SunOS 5.7 cshでファイルをテープにバックアップする時に tarでやっているのですが、ファイル数が多くなって出来なくなって しまいました(argument too long)。 echo /パス/ | xargs tar cvf としても、だめみたいです(xargsは外部コマンドでした)。 ファイル数を減らすという他に何か良い方法はないでしょうか。 お忙しいところ誠に恐縮ですが、宜しくご教示ください。 |
>>2636 Yasuo Y > echo /パス/ | xargs tar cvf > としても、だめみたいです(xargsは外部コマンドでした)。 xargs tar cvf /dev/XXX ですよね? で、「だめ」とはどういう意味ですか? 少なくとも Argument too long は 出ないはずですが。 ただしこの場合、 % tar cvf /dev/XXX file1 file2 file3 .... % tar cvf /dev/XXX file1500 file1501 file1502 .... % tar cvf /dev/XXX file4000 file4001 file4002 .... と複数回 tar が実行されますが、それでいいのですか? 解決策は tar の -I オプションじゃないかと思います。 |
>>2635 小僧 > 別に exit と logout のコマンドが違う訳ではなかったのですね。 違いますよ。logout はログインシェルを終了させるとき、exit は シェルを終了させるときに使います。ログインシェルというのは、 Login: Password: というような認証の直後に起動したシェルのことです。 |
>>2637 68user 68Userさん、ありがとうございます。 tar cvf /dev/XXX -I /パス名1 -I /パス名2 -I /パス名3 として実行してみたのですが、変な文字がコンソールにいっぱい出てきて すぐ止めました。 それから、Argument Too Longも相変わらず出ています。 せっかく教えていただいたのに解決できませんでした……。 たくさんあるファイルをテープにバックアップしている ところは、一体どうやってやっているんでしょうか?? |
>>2639 Yasuo Y > tar cvf /dev/XXX -I /パス名1 -I /パス名2 -I /パス名3 man tar しました? -I の意味を調べました? あと、別解としては、 % echo * | xargs tar rvf /dev/XXX かなぁ。うまくいくかどうかはわかりませんが。 |
はじめまして UNIXについて質問なのですが、a.txt と b.txt というファイルがあり aの中には abcdefg という内容があり bの中には hijklmn という内容があります。そこで a の中に b の内容をコピーしたいのですが、どのようにコピーしたらよいのですか、教えてください。 行のコピーの仕方ってあるんですか? |
>>2640 68user とりあえずうまくいってるようです。 Cシェルの実行中に出てきたエラーメッセージなのですが、 Argument Too longは、他のところで出ているもののようでした。 どうもお騒がせしました。 |
ども初めまして。 http://x68000.startshop.co.jp/%7E68user/cgi-bin/<script>alert("----")</script> のエラーページでいま話題のクロスサイトスクリプティングの脆弱性を確認出来ました。 たぶん、error.cgiの原因と思われます。 私も利用させてもらっていますがperlのことは分かりませんので Fixされるようお願いします。 |
>>2643 ある厨 なるほど。外部からの情報をちゃんとチェックしてないな。 ふむふむ。賢い |
File System full で、しばらくこのサーバにアクセスできない状態に なってました。 >>2643 ある厨 > のエラーページでいま話題のクロスサイトスクリプティングの脆弱性を確認出来ました。 ご指摘ありがとうございます。< > を < > に置換するようにしました。 あと、Host: ヘッダにも全く同じ脆弱性がありましたので直しました。 http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/error.cgi >>2641 あき いまいちやりたいことがわかりません。例をあげて説明して下さい。 |
はじめまして。 UNIXを始めたばかりの初心者なんですが、 あるフ゜ロク゛ラムから、その日の日付の入ったファイル名を持つファイルを 自動生成させたいのですが、 どうもうまく出来ないんです。 というのも、僕はdateの情報をcutもしくは、date +%y%m%d"などで、 その日の日付を抜き取り、変数に入れた後、 touch $[変数名] と、そんな感じでやってみたんですが、 これって、パイプを使っても変数の中に日付って入らないですよね? 出来れば、[日付入りファイル名]の作り方を教えて頂けませんか? ぜんぜん違うアプローチでその方法があるならそちらでも一向に構いませんのでm(__)m |
>>2646 knockout 言語は何ですか。 |
返答どうもです。 ksh見たいです(w |
返答ありがとうございます。 えっと、「echo $SHELL」と入力して、 /usr/bin/ksh と出ますので、kshですね。 すいません、こんなふざけた返答で(^^; |
>>2648 knockout nowdate=`date +%y%m%d` echo $nowdate と `` を使います。 パイプを使うこともできなくはありませんが、無駄に長くなります。 複数行を処理する必要がないなら `` でよいでしょう。 date +%y%m%d | while read line do echo $line done |
出来ました!! なるほど``ですね。 早速、ホンチャンのプログラムに組み込んできます。 ありがとうございましたm(__)m |
度々すいません。 えっと、さっきの返答してもらった最後の記述 date +%y%m%d | while read line do echo $line done は、何を行っているんでしょうか? 僕の解釈ではdateで表示したのを、変数lineに代入、 その後がいまいち理解が、 echo $lineは分かるんですけどね、 doとdoneを使っている意味が はっきり分からないんです。 「それぐらい調べろ」っていわれそうですが、 どうか一つ宜しくお願いします(^^; |
はじめまして。LINUXをはじめたばかりのものです。 c言語用FTPクライアントのプログラムを ダウンロードしたのですが、 実行方法がいまいちわかりません。 他のサイトでサーバ、クライアントのファイルは それぞれで実行すればよかったのですが、 今回の分はFTPサーバを自分で作らなければ ダメなのでしょうか? かなり初歩的な質問だと思いますが 教えてください。 |
リンク先があるかどうか知るにはどうすればいいですか? 具体的には他人に書き込んでもらったアドレスの、 例えばhttp://www.a.com/a/a.gifの絵があるかどうか知りたいのです。 それと、絵の大きさも知りたいです。 それで大きすぎたら表示しないようにしたいのですが。 よろしくお願いします。 |
はじめまして、apexと申します。 今、Cシェル(OSは、ソラリス8)で、簡単なプロセス管理ツールを作成しています。 この時、以下のことでうまく動作せず悩んでおります。 もし、おわかりになれば教えてください。 1:Cシェル内で、rootユーザになる方法。 要するに、パスワードをシェル内に記述して、コマンドラインに渡せ るかどうか? 2:awkにて、プロセスを切り出す方法 「ps -ef | grep ABC」からABCを認識させ、ABCプロセスが存在しな ければ、起動する。 この時、ps-efコマンドを実行した時の、第2パラメータが ”root”で、第9パラメータが”ABC”であるものを切り出したい。 以上、お手数ですが、よろしくお願いします。 |
>>2655 apex 1についてですが、 expectというコマンドがあれば、これを使ってみてはどうでしょうか。 ここにサンプルがありますね。 http://www.math.s.kobe-u.ac.jp/~kodama/tips-expect.html |
>>2652 knockout > doとdoneを使っている意味がはっきり分からないんです。 while 〜 do 〜 done でひとまとまりのループです。なぜループを使うかと 言うと、複数行の出力を1行ずつ取り出して処理しているからです。 >>2653 H.M > c言語用FTPクライアントのプログラムをダウンロードしたのですが、 > 実行方法がいまいちわかりません。 http://X68000.startshop.co.jp/~68user/net/c-ftp-1.html ですか? このページに書いてある通りに実行すれば、引数で指定した FTP サーバに接続しにいくはずですが…。 >>2654 田中 > 具体的には他人に書き込んでもらったアドレスの、 > 例えばhttp://www.a.com/a/a.gifの絵があるかどうか知りたいのです。 リンクチェッカやダウンローダを使います。 > それと、絵の大きさも知りたいです。 ヘッダを解析します。各種ライブラリやコマンドを使ってもいいです。 > それで大きすぎたら表示しないようにしたいのですが。 if 文で判断します。 # 環境も何もわからないと、この程度のことしか言えません。 >>2655 apex > パスワードをシェル内に記述して、コマンドラインに渡せるかどうか? できなくはないです。 >>2573 68user を参照。 が、コマンドラインからだと (端末を握っている場合、という意味) うまく いかないので、やめといた方がよいでしょう。sudo や expect を使うのが 一番いいです。 > この時、ps-efコマンドを実行した時の、第2パラメータが”root”で、 > 第9パラメータが”ABC”であるものを切り出したい。 ps -ef | awk '$2=="root" && $9=="ABC" {print}' ps -ef | awk '$2~/^root$/ && $9~/^ABC$/ {print}' あたりでしょうか。 |
2654番の田中です。 お答え有難うございました。 言葉足らずですいません。 perlでcgiを勉強しながら製作中です。 でもう一度、 リンク先があるかどうか知るにはどうすればいいですか? 具体的には他人に書き込んでもらったアドレスの、 例えばhttp://www.a.com/a/a.gifの絵が存在するかどうか 知りたいのです。 それと、絵の容量も知りたいです。 それで大きすぎたら表示しないようにしたいのですが。 よろしくお願いします。 |
>>2658 田中 > リンク先があるかどうか知るにはどうすればいいですか? wget などのダウンローダやリンクチェッカを使います。現在のサーバに それらのソフトが入っていなければインストールします。あるいは libwww などの perl モジュールをインストールするのもよいでしょう。 それもできないなら、 http://www.studyinghttp.net/Hyd_HTTP.html がお勧めです。 > それと、絵の容量も知りたいです。 「容量」とはファイルサイズのことですか? 前の質問では「大きさ」と あったので縦横のサイズかと思ったのですが。 ファイルサイズなら Content-Length ヘッダを見ます。Content-Length ヘッダが付かない場合もあるので、その際は実際にダウンロードして そのサイズを調べる)。 縦横のサイズなら、file コマンドや ImageMagick 付属の identify コマンドを使います。 % file hoge.jpg hoge.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), 72 x 72 % identify hoge.jpg hoge.jpg JPEG 25x40 DirectClass 8-bit 912b 0.0u 0:01 > それで大きすぎたら表示しないようにしたいのですが。 「表示」というのも曖昧です。一度サーバ側にダウンロードしてから 表示させるのか、あるいは <img src="..."> を出力するだけなのか。 どちらにせよ、ファイルサイズなり縦横のサイズなりを if 文で 判断すればよいでしょう。 |
>>2658 田中 また無駄な回答をしてしまった。 http://script.lovely.to/bbs/infolng.cgi?print+200204/02040010.txt もうこないでね。 |
大学でUNIXを勉強しているのですが… ただ教授の命令どおりにコマンドを入力して実行しているだけで、 何をやってて何をするためにUNIXを勉強しているのか分かりません。 大体パソコンをかまうのにも慣れてない自分は、 「この〜〜〜を、〜〜〜して」 ※〜〜〜→聞きなれない英語 といわれ続けちんぷんかんぷんです。 どうしたら上手くUNIXを学べれるのでしょうか? もしアホでも分かるお勧めの本とかあれば紹介していただきたいのですが… |
>>2661 しなくろ 興味がなければ学ばない。でも単位を落とさないように暗記だけする。 ってのがいいんじゃないでしょうか。興味がわかないことを勉強しても 時間の浪費にしかならないと思います。 興味はあるけどわからないって場合は…どうしたもんでしょうかねぇ。 |
Fixども。 設定完了しましたのでお礼まで。 |
はじめまして。とても参考になります。 telnetのところでWindowsではtelnetでホームページはみれないのでしょうか? |
>>2664 なは > telnetのところでWindowsではtelnetでホームページはみれないのでしょうか? http://x68000.startshop.co.jp/~68user/net/win-telnet.html では どうでしょうか。 と言っても Windows 2000 の telnet.exe では設定方法が違う んですけどね。 |
perlについてですが、無名のハッシュ又は配列のレファレンスに、配列要素を追加する方法を教えてください。ついでに配列の参照の仕方も教えもらえると有りがたいです。 以下のソースは変数を@line_0 .. 9までと変数を9個使っていますが、これを$line_{0} .. {9}と一つの変数にさせたいと思っています。 while (<IN>) { local($date) = (split /<>/)[0]; push (@{'line_'.$date},$_); } foreach (0..9) { foreach $line (@{'line_'.$_}) { print $line; } } |
>>2666 a-jmj ん〜、$line_{2} で 2 行目のデータが得られればいいのですか? そのとき得たいデータは日付 ($date) と行全体? |
説明不足ですいません。 1<>aaaa<> 1<>bbbb<> 2<>cccc<> というデータがあったとしたら、 $line_{1}[0] = '1<>aaaa<>' $line_{1}[1] = '1<>bbbb<>' $line_{2}[0] = '2<>cccc<>' といった風にしたいのですが、以下のソースではエラーが出てしまいます。 open(IN,"file"); while (<IN>) { local($date) = (split /<>/)[0]; push (@line_{$date},$_); } colse(IN); これをする目的は下のように全体のデータを何度も回転させたくないので、 データを分別しときたいのです。 open(IN,"file"); @lines = <IN>; colse(IN); foreach (0..9) { print $_; foreach $line (@lines) { my($i,$data) = split /<>/,$line; print $data if ($i == $_); } } 無名のリファレンスを使いたい理由としては、@{'line_'.$date}といった感じの変数を使いたくないのと、効率を考えたらリファレンスが使えないことです。 |
>>2668 a-jmj こんな感じでしょうか。 open(IN,"file"); while (<IN>){ chomp; local($date) = (split /<>/)[0]; push(@{$line_{$date}}, $_); } close(IN); foreach $date (sort keys %line_ ){ foreach (@{$line_{$date}}){ print "$_ "; } print "\n"; } 実行結果: 1<>aaaa<> 1<>bbbb<> 2<>cccc<> |
どうもありがとうございます。 ええそうです、求めていたのはこれです。 無名も普通のリファレンスみたいに使うのですね。 なかなかリファレンスを詳しく書いた資料がないものですね。 実際の運用には8桁の日付で、分別させているのですが、以前の方法でしたら、 use strict;を使おうにも変数名が不規則なうえ、指定してやらなければ成らな い変数が膨大な数になってしまうことが問題でした。 その他に良い分別方法があったら教えていただけたら、幸いです。 |
>>2670 a-jmj > その他に良い分別方法があったら教えていただけたら、幸いです。 データ構造を変えていいなら、各行に一意の番号を付けて $data{123}{DATE} = '20020101'; $data{123}{NAME} = 'hoge'; $data{123}{MAIL} = 'foo@bar'; などとするのが好みです。 データ構造を現行のままにするなら案の通り $data{20020101}[0] = '1<>aaaa<>' とするのも悪くないでしょう。 あるいは最初に <> を解析しておいて $data{20020101}[1]->{NAME} といった形でアクセスできるようにするという手もあります。以下サンプル。 my %data; open(IN,"file"); while (<IN>){ chomp; my ($date,$name,$mail,$content) = split /<>/; my %hash; $hash{NAME}=$name; $hash{MAIL}=$mail; $hash{CONTENT}=$content; push(@{$data{$date}}, \%hash); } close(IN); foreach $date (sort keys %data ){ print "$date: "; foreach my $ref_hash (@{$data{$date}}){ print "$ref_hash->{NAME} $ref_hash->{MAIL} $ref_hash->{CONTENT} "; } print "\n"; } print "おまけ: $data{20020101}[1]->{NAME}\n"; データファイルの内容: 20020101<>名前1<>メールアドレス1<>発言内容1 20020101<>名前2<>メールアドレス2<>発言内容2 20030203<>名前3<>メールアドレス3<>発言内容3 実行結果: 20020101: 名前1 メールアドレス1 発言内容1 名前2 メールアドレス2 発言内容2 20030203: 名前3 メールアドレス3 発言内容3 おまけ: 発言内容2 ただし、perl でちょっと凝ったリファレンスを使い出すと、とてつもなく ソースが汚くなるので、クラスを使いたくなるかもしれません。そして クラスを使い出すと、perl の OO に嫌気がさして ruby を使い出すかも しれません。 なので、ほどほどのところでやめておく方がいいのかも。 |
始めまして。C-CGI システム構築をHTMLのタグレベルで実現するツール の紹介ページが shino.server-club,net/index.htm にあります。皆様の 御参考になればとCMまがいの書き込みを致しました。 |
>>2672 Shino こんなもので金が取れると思ってるの?? なんか最初からあやしげな臭いがプンプンしてたけど、やっぱり。。 http://shino.server-club.net/cgi-bin/DS.cgi?COMMAND=Html&HTML=../../../../../../../etc/passwd 注:Referer。 汚染チェックしてね。 |
名無しさん様、大変失礼を致しました。 |
おひさしぶりですみません。質問です。 よく、インターネット(Web、メール)で (いわゆる)半角カナを使ってはいけないといわれますが、 この理由が、 ・インターネットは ASCII 以来、7ビットしか通さない伝送路が 使われてきたので、7ビットコードを使うのが望ましい ・日本の場合 ISO-2022-JP が標準 ・ISO-2022-JP は、4つの面に(いわゆる)半角カナ以外の コードが割り当てられている。 ・つまり、ISO-2022-JP には半角カナが「ない」 ・ないものは使ってはいけない という風に覚えていましたが、 UNIX の mule や Windows の xyzzy で ISO-2022-JP を指定して (いわゆる)半角カナを入れるときの、 「ESC)I がエスケープシーケンスで(いわゆる)半角カナ」 というコード系は、何に規定されているものなのでしょうか。 こんなの、ちょっと調べろよって話だと思うんですが、 調べ方が悪いのかこれだ、という情報に当りません、、。 |
>>2675 ふくし > 「ESC)I がエスケープシーケンスで(いわゆる)半角カナ」 > というコード系は、何に規定されているものなのでしょうか。 何にっていうのは、どの規格で定められているかってことですよね。 http://www2d.biglobe.ne.jp/~msyk/charcode/jisx0201kana/ には JUNET方式のエンコーディング方式を素直に拡張すれば、この エンコーディング方式になる。 とありますが、何をどう素直に拡張すればこうなるのか (僕の知識 不足のため) 理解できません。 http://www.kanzaki.com/docs/jis-mail.html には RFC1468には記載されていませんが、定義からESC ( I が7ビットの カタカナを指示(designate)するエスケープシーケンスとなるので、 とありますが、どこをどう読めば ESC ( I が 7bit カタカナを指示する ことになるのか これまた (僕の知識不足のため) 理解できません。 わかったら僕にも教えて下さい。 |
>>2675 ふくし > よく、インターネット(Web、メール)で(いわゆる)半角カナを > 使ってはいけないといわれますが、 おっと、見逃してた。ここで「web」を挙げているのは誤りです。 インターネット (≒ TCP/IP) は 8bit を通します。FTP も HTTP も 8bit through です。過去 7bit しか通さない実装が多かったのは SMTP で、7bit しか通らないところに日本語を通そうという苦肉の 策が、後の ISO-2022-JP につながる JUNET コードです。 よって、web で半角カナ使用禁止という話はありません。もちろん web で Content-type: text/html; charset=ISO-2022-JP としているならば半角カナは使えませんけれども。 ちなみに、個人的には半角カナは嫌いでしたが、2ch で AA を見てると、まぁ 半角カナもいいかなと思い始めていました。が、半角カナは EUC-JP と Shift_JIS でバイト長が違うため、項目長を事前に決めておかなければ ならない DB では何かとトラブルの元です。よって、やっぱり半角カナ 嫌いに戻ってしまいました。 |
そっかー。68user さんもわからないと聞いて 少なくともつまんない質問ではなかったとわかって なんかホッとしました(^o^) マルチポストになりますが、別所で聞き、なにかわかったら また書きます。ありがとうございます。 他の方も、なにかありましたらご教示ください。 |
>>2675 ふくし >>2676 68user お久しぶりです。 http://euc.jp/i18n/charcode.ja.html によると、 >終端文字と文字集合の対応は登録制になっており、 ECMAという組織が登録簿を管理して います。 (略) >・94文字集合 (略) >I > JIS X 0201カタカナ >J > JIS X 0201ローマ文字 とあります。 先にECMAが決めたのか、誰かが既に決めたのをECMAが登録したのかは、 わかりませんが。 |
>>2679 へにか なるほどなるほど。 http://www.ecma.ch/ecma1/STAND/STANDARD.HTM のどれかにその記述があるのでしょうか。PDF しかないようなので 中身は見ていませんけれども。 ちなみに G0 とかロッキングシフトなども理解してないんですが (どこの 解説を読んでもよくわからん)、初心者向けの解説がどこかにないもので しょうか。 |
へにかさん、ありがとうございます。 わたしも xyzzy ユーザーズMLで質問を投げました。 いまメーラーが使えないので、記憶でサマリーすると、 ・ふくしが ISO-2022-JP の4つの面にそれぞれ半角カナ以外の コードが入っていると思っているのはカン違いで、 ISO-2022-JP は G0 集合だけを使い、エスケープシーケンスで 切り替えて使う(G1〜G3 は使用禁止) ・そこに割り当てられるコードが (RFC 1468 より引用) > Esc Seq Character Set ISOREG > ESC ( B ASCII 6 > ESC ( J JIS X 0201-1976 ("Roman" set) 14 > ESC $ @ JIS X 0208-1978 42 > ESC $ B JIS X 0208-1983 87 の4種類で、7ビットカナ(JIS X201 の右半分)は 意図的にはずされている ・JIS X201 のコード表と、終端記号の I は、 へにかさんも書いておられますが ISO の登録簿にある。 http://www.itscj.ipsj.or.jp/ISO-IR/ で登録されているものは確認できる。 ・登録を行う=>終端記号が割り当ててもらえる、 という流れで、登録作業は ISO/IEC JTC1/SC2 の事務国である日本(!) ということだそうです。 ESC(I の歴史は ISO-2022-JP より古く、 ISO-2022 のフルセットを使えば半角カナが使えるように (だと思うんですが、、) 定義されているようです。 他にもいくつか ISO-2022-JP の半角カナ拡張はありますが (G1 集合に半角カナがあるとみなして、 往年の ISO 646 のように SI/SO で切り替えたり。 これは Microsoft Internet Mail 方式?) ・G0 のみしか使わない ・ISO の登録簿にあるコード表と終端文字を使う という点で、最も正当で自然な方法と ESC(I 式が みなされているそうです。 で、推奨される文献としては http://euc.jp/i18n/charcode.ja.html#chap4 が上げられていました。 xyzzy の ML はアーカイヴが公開されているので、 教えてくださった方との実際のやりとりはそこで読めると思います。 いかがでしょうか。 こんなところでぼくは満足ですが、、。 で、2ch の AA ってなんですか?(^^) |
もう、だめ・・・ CPU使用率の確認でsar -vってのあるんだけど、そのなかの file-szはシステムファイルテーブルの現在サイズ、および最大サイズ ってとこまではわかってるんですけど、 システムファイルテーブルって何を管理してるテーブルなの? だれかおしえて・・・ システムファイルだよっていうのは無しで。 |
>>2680 68user あいにく、僕もpdf-readerを持っていないので、代わりに以下の文書を見つけました。 http://www.io.com/~kazushi/encoding/cslist.html http://homepage1.nifty.com/emk/halfkana.html http://web.kyoto-inet.or.jp/people/tomoko-y/biwa/wnn/iso2022.html >最新のエスケープシーケンス一覧と、それに対応する各文字集合表は、 >ECMA から直接、入手可能である。スイス連邦にあるECMA の連絡先は、以下の >とおりである。 > > メールアドレス:helpdesk@ecma.ch > >住所: ECMA RUE DU RHONE 114 > CH-1204 GENEVE SUISSE また、僕は全部読んでないし、また、僕が理解できるかどうかは怪しいですが、 http://euc.jp/i18n/charcode.ja.html よりも良さそうな解説は、あいにくながら、見たことありません。 >>2681 ふくし 記憶に頼っているとはいえ、見事な纏めですね。あとでxyzzyのメーリングリスト、 あさってみますね。 |
>>2681 ふくし > で、2ch の AA ってなんですか?(^^) こんなのです。 http://members.tripod.co.jp/maruheso/aadic/ Ascii Art と言っても、全然 Ascii じゃないですけど。 >>2682 ぐっさん > システムファイルテーブルって何を管理してるテーブルなの? その時点で使用 (open) している i-node の数、じゃなかった でしょうか。違ったっけ。 |
はじめまして、サトと申します。 unixについて知識のある方、お助け下さい。。 会社のunixサーバを壊してしまいました。。 とある理由で、/usr/lib/libdl.so.1 が何者かも知らずに mv libdl.so.1 libdl.so.1.org などと実施してしまいました。 (osパッチを当てた後くらいから、コンパイルのリンクエラー でlibdl.so.1うんぬんと出てきたので、このライブラリだけ旧版に 戻してもみうと思って行ってしまいました。。) そしたら、それ以後のユーザーコマンドが一切実行できなくなりました。。 ユーザーコマンドのほとんどが libdl.soをリンクしていたようです。 よって、mvで戻そうとしてもmvもcpも起動できなくなって戻せない状態です。。 OSの再インストールを覚悟していますが、この状態で何か対処方法は ありますでしょうか? どなたかお助け下さい。。よろしくお願いします。。。 |
>>2685 サト OS は何ですか? 「UNIX」と言ってもいろいろありますので。 Solaris ならこんな感じで。 http://www.google.com/search?q=solaris+%95%9C%8B%8C+CD-ROM+mount&hl=ja また、HDD を別の UNIX マシンにつないで、適当な場所 (/hoge とか) に mount して、 # mv /hoge/lib/libdl.so.1.org /hoge/lib/libdl.so.1 などとする手もあります。 |
>>2686 68user 68user様、レス大変ありがとうございます。 どうにもならないのかと思っていたので、少し安心しましたです。 昨日から相当凹んでましたので。。 OSはソラリスで、マシンはSUNウルトラだっと思います。 (ソフト開発専門なのでマシン環境などはうとくて。。) 週明けにマシン環境の担当と相談してみます。 ありがとうございました。 |
HP−UNIXでman sarを実行したところオプションvのところで ”text-sz (該当しません)”となっていましたがtext-szは もともと何の監視のためにあったのか知ってたら教えてください。 |
お世話になります。トータルで3回目の質問になるのですが、 perl で例えば <>aa<>bb<>cc<>dd<> ←1行目 ee<>ff<>gg ←2行目 このようなデータがあった場合 <>aa <>bb <>cc <>dd <>ee <>ff <>gg のように出力させるコードを教えてください。 よろしくお願いします。 |
<> が区切り文字だと事前にわかっていれば、 chomp で改行を除き、 <> で split して、<> を改めて付加して出力、ですね。 通常のフィルターの書き方はわかりますか? chomp、split の使い方は man perlfunc か、 ラクダの本を見てください。 (どっかで日本語の man perl が公開されてたな) <>が区切り文字だとわかっていなければ、無理だと思います。 というのは、たとえば 1 行目で、<> が区切りなのか、 <>a なのか、<>aa なのか、機械には不明だからです。 |
以下はどうでしょうか? #!/usr/local/bin/perl my(@array) = ( "<>aa<>bb<>cc<>dd<>", "ee<>ff<>gg" ); foreach $aref ( @array ) { $str .= $aref; } $str =~ s/\</\n\</g; $str =~ s[ ^\n ]{}gsx; print "$str\n"; |
ふくしさん、aaaさん、 お二人のコードを参考にして解決できました。 ありがとうございました。 |
>>2691 aaa これはちょっと参考になりませんねぇ。。(aaaさんゴメン) ちょっと間違ってます。 ("[*1]<>aa<>bb<>cc<>dd<>[*2]", "[*3]ee<>ff<>gg" 与えられた配列の、*1〜3の所に項目が一つ増えただけで思ったようには動かないと思う。。 1つの変数にぶち込んだ時点で、*2 *3の区別ができなくなる。 そして、 $str =~ s[ ^\n ]{}gsx; ですが、、^\nでマッチするところは、s(単一行として扱う)が付いてるから、頭の所("\n<>aa...")の\nが取れるだけだし、、gを付ける必要は無い ここでまた一つ問題がある。。多分、motoさんの発言を見ると、*1の部分にも項目が来ると思われる。。"xx<>aa<>bb..." そうすると、1行目に<>が入らず、、 xx <>aa ... ってなる。。。 あともう一つ。@arrayは配列だって分かるから括弧を付ける必要は無い my @array = (...)こんな感じ |
自分で書いてみた。 my @target = ("<>aa<>bb<>cc<>dd<>", "ee<>ff<>gg"); my @result = map { my @tmp = split(/<>/); shift(@tmp) if $tmp[0] eq ''; @tmp; } @target; foreach (@result) { print "<>$_\n"; } |
HP-UNIXで過去の日付を表示させる方法しりませんか? ちなみにenv TZ=JST-9 dateでは1日分しかさかのぼれないので、 他の方法で知っている人がいれば教えてください。 |
>>2695 G shellutils で GNU 版 date をインストールするか、perl で localtime(time()-60*60*24) などとするのがお手軽なんじゃないでしょうか。 |
>>2696 68user 返答ありがとうございます。 なにぶん初心者なもので、アドバイスの意味があまりわからないの ですが、これから調べてやってみようと思います。 会社の環境ゆえ、インストールはできないのでperlの方を参考に させていただきます。自力でわからなかったときはまた、よろしく お願いいたします。 |
>>2689-2694 〜嫌がらせ編〜 「暗黙の初期化? 怖いけどイイ!」 while (length($a = substr("<>aa<>bb<>cc<>dd<>" . "ee<>ff<>gg", $b++, 1))) { uc($a) ne $a && length($c .= $a) == 2 && print "<>$c\n", $c = '' } 〜お気楽編〜 「パターンマッチマンセー!」 $a = "<>aa<>bb<>cc<>dd<>" . "ee<>ff<>gg"; while ($a =~ /(\w\w)/g && print "<>$1\n"){} 〜メモリ倹約編〜 「入力元即処理!」 (push @x, "<>aa<>bb<>cc<>dd<>"), push @x, "ee<>ff<>gg"; map {while ($_ =~ /(\w\w)/g && print "<>$1\n") {}} @x; #またはファイルから読み込む場合 while (<FILEHANDLE>) {while ($_ =~ /(\w\w)/g && print "<>$1\n") {}} |
よく拝見すると"Perl"とは入ってないですね 笑 >UNIX、CGI、ネットワーク、Java Servlet についての掲示板 |
はじめまして HTTPプロトコルを利用したファイル転送について教えて下さい。 私はグラフィックデザインに関わっているので、インターネットを介して 画像や映像など比較的大きなデータを日常的にやり取りしています。 今は、ICQやMSNメッセンジャーのファイル転送を利用しているのですが 相手のファイアーウォールやルーターの設定から接続出来ない事もあります。 また接続が切れてしまった場合、続きから再開できるレジューム機能についても解説して戴けないでしょうか? 宜しくお願いします。 |
はじめまして。石田と申します。 ★件名★「UNIXの部屋」公開ありがとうございます。 *現在、私はlinux(Unix)のシェルプログラミングを勉強中です。 *ところが、manコマンドでは全然分からないので、 GoogleやMLアーカイブ検索して調べていましたが、 *こちらのUNIXの部屋は非常に分かりやすく参考になります。 *分かりやすいポイントは、 1)パラメータの意味が日本語で分かりやすく書いてある 2)具体例がメッセージなど併せて書いてある。 ところが非常に分かりやすいです。 *私が今作っているスクリプトは 1)redhatのupdateのFTPサイトと自分のpcの rpmパッケージリストを持って来て、マッチングして、 2)不足分のファイル一覧を作成 この中から必要なファイルをFTPでダウンロード *とにかく、パッケージのアップデートは手間がかかるので、 なるべく自動化しようと思っています。 * これからも「UNIXの部屋」がんばってください。 |
>>2699 KL > よく拝見すると"Perl"とは入ってないですね 笑 もちろん Perl は UNIX であります (^^ >>2700 パルテノ > 続きから再開できるレジューム機能 HTTP にはレジュームのような高級な機能はありません。二回目以降の 接続時に、単にデータの開始バイトを指定しているだけです。 接続が切れた場合は、ローカルに落したファイルサイズを見て、 たとえば 1000バイトまでダウンロードできているなら GET / HTTP/1.0 Range: bytes=1000- とします (ファイル先頭は 0 バイト目)。 http://www.studyinghttp.net/rfc_ja/2616/sec14.html#sec14.35 >>2701 石田安弘 > *こちらのUNIXの部屋は非常に分かりやすく参考になります。 ありがとうございます。改善点などありましたら指摘して下さい。 |
はじめまして、くろうです C言語初心者がいきなりソケットプログラムを作っているのですが どんな本を見ても、いまいちわからないことがあるので質問します。 UNIXで最大1Mハ゛イトの可変ファイルをソケットで受信しているのですが ソケットで受信する時、recvのバッファーのサイズはどのくらいとるのが適正値なのでしょう。 char buf[4096]; rtncd = recv(sockid,buf,sizeof(buf),0); 受信したテ゛ータは連結編集してます。 よろしくおねがいします。 |
>>2703 くろう 100 バイト単位で値を変えて、転送速度を計りましょう。 それが面倒なら 4096 でいいんじゃないでしょうか。 # 僕は面倒なので 4096。 |
皆さんはじめまして。ゆくまといいます。 いつも「UNIXの部屋」を活用させて頂いております。 現在、UNIXの*について調べているのですが、 もしご存知の方がいらっしゃったら教えていただけますでしょうか? たとえば、 >ls file01.dat file02.dat >cat * としたとき、catの表示順は必ず、 file01.dat の次に file02.dat である(つまりソート順)、と決まっているのでしょうか? もしくは不定なのでしょうか。 よろしくお願いいたします。 |
>>2705 ゆくま > file01.dat の次に file02.dat である(つまりソート順)、 > と決まっているのでしょうか? はい、ソートされます。sh・csh・tcsh・bash・zsh・ksh など全てのシェルでソートされるはずです。 ただし cat *2* *1* だと file02.dat file01.dat の 順になります。 |
>>2706 68user レスありがとうございます。 これってやはり考えるまでも無い当たり前のことなんですかね。 これまで何年かUNIXを使ってきて、そうだとは思っていた のですが、改めて調べてみたところ、そのことを明記している ようなドキュメントを見つけることができなかったのです。 おそらく何らかのパブリックなドキュメントには明記してある ことだとは思うのですが。。。 ご存知の方はいらっしゃいますでしょうか? |
>2707 > おそらく何らかのパブリックなドキュメントには明記してある > ことだとは思うのですが。。。 手元にあるマニュアルを調べてみました。 FreeBSD 4.5-RELEASE の tcsh(1) ファイル名置換 単語が `*', `?', `[', `{' のいずれかの文字を含む場合、また は 先頭が `~' で始まる場合、その単語はファイル名置換 (ある いはグロブ (globbing) と呼ばれます) の候補になります。この ような単語をパターン (グロブパターン) と見なし、そのパター ンにマッチするファイル名のリストをアルファベット順で整列し たもので置き換えます。 FreeBSD 4.5-RELEASE の csh(1) ・・・発見できず Solaris2.6 の sh(1) [ファイル名の生成] コマンド実行に先立ち、各コマンドワードは、 *、?、および [ を 含んでいないかチェックされます。これらの文字のいずれかがある と、そのワードはパターンとみなされます。このワードは、パター ンと一致する、辞書編集方式の順にソートされたファイル名に置換 されます。 Solaris2.6 の csh(1) ・・・発見できず bash-2.0.5a Pathname Expansion After word splitting, unless the -f option has been set, bash scans each word for the characters *, ?, and [. If one of these characters appears, then the word is regarded as a pattern, and replaced with an alphabetically sorted list of file names matching the pattern. |
>>2708 68user > FreeBSD 4.5-RELEASE の csh(1) ・・・発見できず FreeBSD 4.5-RELEASE の sh(1) ・・・発見できず の間違いです。 |
>2708 >手元にあるマニュアルを調べてみました。 わざわざありがとうございます。 なるほど!灯台下暗しでした(申し訳有りません、、、)。 ちなみにこちらの手元も調べてみましたところ、 Solaris7 のcsh(1) [ファイル名置換] *、?、[、または { のうちのいずれかの文字を含むクォートされ てい な い ワード、または ~ で始まるワードは、以下のように アルファベット順にソートされたファイル名のリストに展開 (グ ロビングとも呼ばれる) されます。 とありました。 お手数をおかけしました。 助かりました! |
>2710 追記です。 当方のSolaris2.6のcsh(1)にもSolaris7と同じ表記が見つかりました。 ということは、68userさんの環境と異なるのでしょうか? |
HP-UXのawkコマンドのパターン指定ではシェル変数は使えないのでしょうか?下記のような条件で、いろいろ形を変えて試して見たのですがまったくうまくいきません。分かる方教えてください。 例:awk '$1<=${hensuu}{print $0}' file.txt ※${hensuu}=1,2,3,4,5・・・・・・ |
>>2711 ゆくま > 当方のSolaris2.6のcsh(1)にもSolaris7と同じ表記が見つかりました。 こちらの Solaris2.6 にも同じ記述がありました。流し読みしたので 見逃していたようです。 >>2712 G シェル変数は、シェルのための変数であって、シェル以外からはどうやっても 参照できません。よって、 % env MAX=123 awk '$1<=ENVIRON["MAX"]{print $0}' file.txt などと環境変数を使うか、 % awk -v max=123 '$1<=max {print $0}' file.txt で変数を指定しましょう。 |
>>2713 68user ありがとうございました。教えていただいたコマンドで上手くいきました。 |
こんにちは、時々見させてもらってます PerlでIO::Socketを使っているのですが、 HTTPのPersistent connectionの様な、「サーバーから一旦データが 送られてきた後のコネクションは維持しつつも無通信な状態」 といった状態をプログラム側で判別できずに困ってます この間にsysreadなどを使うとデータが送られてこないためずっと 待ってしまいますので… IO:Selectのcan_read($timeout)も試してみたのですが、 この様な状態ではしっかりとソケット識別子を返してしまう みたいで結果としてsysreadの所に行ってしまってそこで止まってしまう 様な感じでした。 何か良い知恵はないでしょうか?? まあHTTPならcontent-lengthを見て1オブジェクトの受信の終わりを判別すれば良いんでしょうけど… |
>>2715 STP > この様な状態ではしっかりとソケット識別子を返してしまうみたいで ということはないと思いますが、問題が発生する最小限の プログラムを見せていただければ何かわかるかもしれません。 # あと、OS や perl のバージョンなども。 |
こんにちは、時々見させてもらってます。 PerlでHTTPSクライアントを作成したいのですが サンプルありますでしょうか |
>>2717 よー LWP? |
>>2717 よー 何をどう書いたのか全く覚えていませんが、LWP と Crypt-SSLeay で できるようです。 >>1848 d-jiro >>1849 68user >>1854 d-jiro >>1855 68user |
Socketを用いたPerlでHTTPSクライアントのサンプルは ありませんか? |
>>2720 よー http://www.thomas-fahle.de/pub/perl/LWP/HTTP/HTTP_Get.html#https |
68userさん,こんにちは. 失礼ながらご連絡事項をこちらでお伝えします. このサーバーがポートスキャンの踏み台にされたそうです. カーネルも古いし本格的な対策は無理だと思いますが そちらでできる対策があれば試していただけませんか. > 早速ですが、サンライズシステムズ 様の配下にある > 210.249.139.22 というホストから > ポートスキャンが行われた模様との連絡が入りました。 連絡経路はTTCNパワードコムの鎌田さん->両毛の新堀さん->私の順です. |
実は5/30に胆嚢摘出の手術を受けまして,入院中なのです. 動くに動けない感じで,今も看護婦の目を盗んで携帯でつないでいます. 何かありましたらお気軽にメールください. |
>>2722 Netboy 現在対応中です。ひととおり終わりましたら作業項目を書き 込みます (メールの方がよろしければメールします)。 > 実は5/30に胆嚢摘出の手術を受けまして,入院中なのです. 大変ですね。御大事に…。 |
>>2722 Netboy メール送りました。 |
ただ今再起動しました |
利用者の方へ。 サーバを置いてあるところの管理者の方が、2002/06/02 にマシンの 電源を落とされたため、しばらくアクセスできない状態になっていました。 |
PerlでのFTP接続を行いファイル転送をしたいのですがうまくいかず 困ってます。 $proto = getprotobyname('tcp'); $port = getservbyname('ftp', 'tcp'); $iaddr = inet_aton($hostname) or die "$hostnameのアドレス取得失敗"; $paddr = pack_sockaddr_in($port,$iaddr); socket(SOCKET,PF_INET,SOCK_STREAM,$proto) or die "socket失敗"; connect(SOCKET, $paddr) or die "connect失敗"; # ファイルハンドル COMMAND をバッファリングしない select(SOCKET); $|=1; select(STDOUT); #---------- ユーザ認証 ---------------------- print SOCKET "USER $username\r\n"; print SOCKET "PASS $password\r\n"; #------------------------------------------ と、ユーザー認証まではいけるでのすがその後で エラーとなってしまいます。 ちなみにユーザーとパスともにあっているはずなんですが・・・。 情報不足かと思いますが何か思い当たることがありましたら 指導のほどお願いいたします。 |
↓のNo.2728の件です。 接続まで何とかできたのですがファイルをアップロードしたいのですが どのようにすればいいのかわからなくて・・・。 教えていただけませんか?? |
>>2729 yun 2729 は 2728 の補足ですか? それとも 2728 の件は解決したのですか? エラーが出るのですか? やり方がわからなくて先に進めないのですか? |
接続後のPUTの仕方がわからないので先にすすめないんです。 ん〜情報が少なくて申し訳ないです。 何かわかることがありましたらお願いします。 |
いつも唐突な知るもんですいません。 「日本語情報処理」という本を読んでいたら、 EUC を内部コードとして使うコンピューター(?)か ソフトウェア(?)として 「焼き獣ホスト(YKH)」というのが出てきたんですが、 焼き獣ホストで Google しても見つかりません。 これ、何かご存知の方はいらっしゃいますか? |
>>2731 yun > 接続後のPUTの仕方がわからないので先にすすめないんです。 http://X68000.startshop.co.jp/~68user/net/ftp-1.html を読んでください。 >>2732 ふくし >「焼き獣ホスト(YKH)」 これですかね。端末エミュレータみたいですね。 http://www.geocities.com/Tokyo/Flats/7725/view_info.htm YKH is a small application of this kind, that emulates Japanese VT-320 terminal under MS-DOS and is freely distributed under the terms of the GNU general public licence |
はじめまして。リュウと申します。 初心者で申し訳ないのですが、質問があります。 HP9000にHP-UX11.0のコールドインストールをしているのですが、 毎回リブート後にメニューが出るようになってしまいました。 メニューを出さずに通常に内蔵ディスクから起動されるようにするには、 どのようにしたらいいでしょうか? あと、 Interact with IPL?> で、'Y'を押して IPL> から抜け出せなくなってしまいました。 exit,quitともダメです。。。 あわせてよろしくお願いします。 乱文で申し訳ございません。 |
ほんとに初心者です、おしえてください 課題でechoサーバ及び、クライアントのプログラムをC言語とPerlで作成する。というのがでたのですが、echoサーバはこのHPでプログラムが掲載してあるのでなんとか自分でやってみようと思うのですが、この場合のクライアントとはどのようなプログラムになるのでしょうか? よろしければおしえてください。 宜しくおねがいします。 |
もう一つ質問なのですが。 課題2 ・chargenサーバ及び、クライアントのプログラムをC言語とPerlで作成する。 フリーなUnix系OSで動作する事。 chargenサーバはデーモンとして動作する事。 chargenサーバは、標準telnetコマンドとも通信可能な事。 chargenサーバは、ログ機能を有する事。 chargenクライアントは通信先がchargenサーバと判明した時点で通信を終了させる 事。 という課題もでています。初心者の僕にはまったく課題の意味がわかりません。どなたかおしえてくれないでしょうか?たびたびすいません。宜しくお願いします。 |
>>2734 リュウ せっかく「Interact with IPL」というキーワードがわかっているのですから、 それで検索しましょう。ついでにキーワードに「HP-UX」も付けておきましょう。 そしたら一発でひっかかります。 http://www.google.com/search?hl=ja&q=Interact+with+IPL+HP-UX&lr=lang_ja >>2735 だいすけ > この場合のクライアントとはどのようなプログラムになるのでしょうか? http://X68000.startshop.co.jp/~68user/net/sample/http-client.pl をちょっといじれば、echo クライアントになります。 >>2736 だいすけ chargen については RFC864 をどうぞ。 http://www.goto.info.kanagawa-u.ac.jp/~horiyuki/rfc/rfc864j.txt その他の疑問点については、まず基本となる雛型を作ってみてから、ですね。 |
たびたびすいません。このような課題のクライアントのことなのですが? どのようなプログラムになるのでしょうか? echoサーバ及び、クライアントのプログラムをC言語とPerlで作成する。 フリーなUnix系OSで動作する事。 echoサーバはデーモンとして動作する事。 echoサーバは、標準telnetコマンドとも通信可能な事。 echoサーバは、ログ機能を有する事。 以上は必須機能です。 余裕があれば、 サーバには大文字、小文字変換機能をオプションで持たせる。 クライアントは文字列をファイルから読み取り、送信するオプションを付ける。 等、面白い機能を付加して下さい。 |
ほんとうに初心者なのでchargenについてはプログラムを書き始めることもできません。どうかたすけてください。 |
仕組みやプログラムを理解する手助けならできますが、答えをそのままあげる ことはできません (おもしろくないから)。 宿題スレなら、誰かがソースを書いてくれるかもしれません。 http://pc.2ch.net/test/read.cgi/tech/1020785918/l50 てゆーか、高専生か大学生かと思っていたんですが、社会人なのですか? 自分なりにある程度調べた上で、 「ここまでは理解できたけど、この部分がわからないから教えてくれ」 という質問の仕方を身につけた方がよいと思いますが、まぁいらぬお節介でしょうね。 |
はじめまして。 UNIXのftpコマンドについて、お聞きしたいことがあります。 ftpコマンドを使用して、WinNTサーバからUNIXへデータを getしているのですが、以下の事象が発生しています。 ・対象ファイルが0バイトの時、getコマンド終了後、そのまま ftpのプロセスがハングアップしてしまうことがある。 シェル内で以下のように使用しています。 ftp -n <<EOF open [IPアドレス] user [ユーザ名] [パスワード] binary get [getするファイル名] [保存するファイル名] close quit EOF 現象を見る限り、getコマンドまでは完了してるようです。 psコマンドにて、ftpのプロセスを検索すると、 ftp -n が残ってしまっています。 UNIX側からタイマーなどでftpのセッションを切ることは可能 なのでしょうか? |
>>2741 バクモン それって、要は ftp か ftpd のバグですよね。 ftp -n < input & pid=$! sleep 300 if [ `ps -p $!` ]; then kill $! fi 的な監視をするのが普通でしょうか。 |
>>2742 68user 早速のご回答、ありがとうございます。 確かにftpプロセスの監視しかないかな、と思います。 そこで、再度質問なんですが、このftpコマンドを使用している シェルがCシェルで書かれています(すいません、先に言って おくべきでした)。 Cシェルでは直前に実行したコマンドのプロセスIDを取得する 方法はあるのでしょうか? ($!はKシェル、Bシェルのみの文法と調べたら書いてありました) |
echoサーバの 3: #include <stdio.h> 4: #include <netdb.h> 5: #include <sys/types.h> 6: #include <sys/socket.h> 7: #include <sys/uio.h> 8: #include <unistd.h> 9: #include <sys/param.h> 10: #include <netinet/in.h> 11: #include <arpa/inet.h> この部分なのですが、#include <stdio.h>はわかるのですが、 他の物は参考書も見ても掲載されていません。 なんなのでしょうか? |
昨日から、UNIXを勉強しだしました。大変、初歩的な質問かもしれないのでごめんなさい。 アクセス状態が-rw-------のファイルをmoreで表示させたいのですが、私はファイルの所有者ではないので表示させることができません。chmodは使わないでアクセスを出来るようなのですが、どうすれば良いのですか? どなたか教えてください。よろしくお願いします。 |
>>2745 シゲ すみません。解決しました。 パスワードが解ればrootで入れるんですね。 |
>>2743 バクモン > Cシェルでは直前に実行したコマンドのプロセスIDを取得する > 方法はあるのでしょうか? $status です。 >>2744 だいすけ 例えば、関数 listen を使いたい場合は、man listen として、 include すべきファイルを調べます.同様に accept や bind など、 使用している関数全てについて調べていくと、それだけのファイルを include する必要がある、ということです。 |
ここのサイトのC言語のHTTPクライアントを使わせてもらって色々勉強させてもらってます。そこで質問なのですが、imodeのURL例えば(http://mobile.yahoo.co.jp/)のレスポンスが返ってくるプログラムを作ろうとしているのですが、どうも、302 FOUND がでてしまい、うまくいきません。どのように解決したらよいでしょうか? |
>>2748 木場 Locaiton: ヘッダに示されている URL を読み込めばよいです。 |
前回のことについての質問のつづきですが 僕のもっている参考書には掲載されてないのですが、 僕のもっている参考書が古いということでしょうか? |
>>2747 68user ご回答ありがとうございます。 ただ、$statusは直前のコマンドのリターン値がセットされる と認識しています。 Cシェルで直前のプロセスIDを取得するには、プロセスをバック グラウンドで動かすようにして、その際に標準出力されるプロセス IDをテキストファイルにおとして、grepなりをする方法しか ないかな、と考えています。 そこで、以下を考えました。 ftp -n <<EOF & open [IPアドレス] user [ユーザ名] [パスワード] binary get [getするファイル名] [保存するファイル名] close quit EOF これを実行すると [1] 10161 と言った形でプロセスIDが出力されます。 ただ、これをテキストファイルに落とす方法がわかりません。 多分、リダイレクトをするのだと思っているのですが、どこに それをうめこめばいいのでしょうか? |
それとも C言語で新しくできた関数なのでしょうか? |
>>2751 バクモン ああ、そういう意味ですか。 tcsh だと $! で取れますが、csh では無理かもしれないですね。 jobs -l だと取れそうですが、どうでしょうか。 ただ、僕なら監視用プロセスを別に起こします。 例えば、 mkdir /tmp/.ftp-lock ftp -n <<EOF open .. quit EOF rmdir /tmp/.ftp-lock として、監視プロセスは n 秒前より過去に /tmp/.ftp-lock が作成されて いたら、 kill `ps -ef | grep get-file.sh | grep -v grep' する、とか。 もちっと確実にするなら ln -s $$ /tmp/.ftp-pid ftp -n <<EOF open としてプロセス番号を特定できるようにする方法もあります ($$ は sh の プロセス番号なので、$$ の子プロセスを kill する必要がありますけど)。 >>2750 だいすけ 「何が」参考書に掲載されていないのですか? netdb.h? listen? accept? ここらへんの関数については規格化されていません。よって、UNIX では 使えても Windows では関数そのものがなかったりします。 例えば 「ANSI C マニュアル」 といった書名ならば、規格化された関数については網羅しているかもしれませんが、 規格外の関数については載っていなくても不思議ではありません。 |
5: #include <sys/types.h> 6: #include <sys/socket.h> 7: #include <sys/uio.h> 8: #include <unistd.h> 9: #include <sys/param.h> 10: #include <netinet/in.h> 11: #include <arpa/inet.h これらが参考書に掲載されてないという意味だったのですが manコマンドでしれべていくのですね。 どうもありがとうございます。 |
はじめまして。 まだ、UNIXをはじめたばかりの初心者です。 いま、windows環境のマシンからtera termを使ってUNIXマシンにpostgressqlをインストールしています。そこで、「カーネルのコンフィギュレショーションファイルをチェックする」と書かれているのですが、これってどうやるのですか? どなたか教えてください。 よろしくお願いします。 |
>>2755 ビギナー > 「カーネルのコンフィギュレショーションファイルを > チェックする」と書かれているのですが、これって > どうやるのですか? OS によって違います。 http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/kernel-resources.html をどうぞ。 |
>>2756 68user ありがとうございます。 |
ご回答ありがとうございました。 今もちょっとわからないとこがあるのですが、 もうちょっと考えてわからなかったら、 聞きにきます。 |
再び質問です。 先ほどの質問と症状は似ているのですが、imodeのURLで(http://mobile.yahoo.co.jp/yahoo/index.html)のリクエストを出すと HTTP1.0 302 FOUND DATE Location http://mobile.yahoo.co.jp/error/404.html Conection: close のレスポンスが返ってきて、locationの部分を入れても実際のimodeのURLがゲットできなくて困っています。どのようにC言語のHTTPクライアント(1) のソースをいじればちゃんとしたレスポンスが得られるでしょうか? よろしくお願い致します。 |
初めまして黒木と申します。UNIX初心者です。 /usr/dict/words という辞書ファイルからEが2個以上出て、AとDとTがそれ ぞれ1個以上出て、最初がLで始まる単語が書かれてる行を見つけるには、 どういう1行コマンドを書けばよいでしょうか?よろしくお願いします。 (但し、文字は全て大文字・小文字を区別しない) *ファイルは何でも良いので、見つける方法が知りたいのです。 |
>>2759 きば > imodeのURLで(http://mobile.yahoo.co.jp/yahoo/index.html)の > リクエストを出すと ブラウザで http://mobile.yahoo.co.jp/yahoo/index.html を 見ると、404 not found になるので、 > Location http://mobile.yahoo.co.jp/error/404.html 当然そうなると思いますよ。 どこからこの URL が出てきたのでしょうか? >>2760 黒木 grep -i 'E.*E' /usr/dict/words | grep -i A | grep -i D | grep -i T | grep -i '^L' でどうでしょう。 |
すばやいレスありがとうございます。 http://mobile.yahoo.co.jp/yahoo/index.html ↑はimodeの使える携帯端末で見ることの出来るヤフーのカテゴリ検索のサイトです。 上記のURLのリクエストを送ったら携帯端末で見ることの出来るサイトをレスポンスしてくれるようにしたいのです。 imode専用のHTTPクライアントを68userさんのC言語のHTTPクライアント(1)を参考に作ろうと思っていて、とりあえず上記のURLで実験して作ろうと試みているのですが、なかなかうまくいかないので、68userさんの力をかして頂きたいと思う次第です。 |
>>2762 きば i-mode 端末のみで利用可能なページということですね? なら、 http://www.nttdocomo.co.jp/p_s/imode/tag/s2.html を参考にして、 GET /yahoo/index.html HTTP/1.0 User-Agent: DoCoMo/1.0/N209i などなど。 |
はい。imodeのみ利用可能なページです。 なるほど、、 urlをみてもうちょっとがんばってみます。 貴重なご意見ありがとうございます。 |
>>2761 68user 有難う御座いました。これで良いですね。 |
>>2753 68user ご回答ありがとうございます。 以下のようにロジックを変更しようかと思います。 ・ftpをバックグランドで動かす ・jobs -lの結果をテキストファイルに落とす ・5分sleepする(※1) ・grepとawkを使用して、テキストファイルからftpのプロセスIDを取得する ・ps -p にて取得したプロセスIDのプロセス生存を確認 ・ps -p のリターンコードが0以外であればkillするif文をおこなう(※2) こんな感じかな、と考えています。 怖い部分は※1,2です。 ※1:とりあえずユーザさんには現在の環境でgetが3分を越えることは ないといわれているので、安全を見て5分sleepさせるようにしたが 本当に大丈夫か? >>ユーザさんがOKと言っているので、問題なし・・・かな。 ※2:ps -p [プロセスID]でHITしなかった場合、リターンコードは必ず 0以外となる。逆にHITした場合は、必ず0となる。 >>このハンドリングは正しいのか、ちょっと自信なし。 色々とご回答ありがとうございました。 |
はじめまして。 私は、最近linuxを使い出した初心者です。 最近、仕事でpostgresqlをインストールしました。 インストールには成功したようなのですが、 $ pg_ctl startで起動をするとpostgresql(postmaster?)は起動します。 しかし $ postmasterでは、 DEBUG ... DEBUG ... DEBUG ... DEBUG ... と出力され、その後エラーメッセージも何も出なくて、反応が無くなってしまいます。(いつも、ctrl+cで抜けています) どうしてでしょうか? どなたかご存知の方、ご教授ください。 |
書き忘れていました。 バージョン:postgresql-7.11 環境:open blocksというlinuxマシンです。 (redhatでも同様でした) |
>>2767 ユウ > $ postmasterでは、 引数なしで実行したのですか? データベースクラスタの場所はどうやって 指定しているのですか? 環境変数 PGDATA? > DEBUG ... この ... というのは省略したのですか? 本当に ... と表示されたのですか? > その後エラーメッセージも何も出なくて、反応が無くなってしまいます。 それはフォアグラウンドで起動しているだけで、正常起動じゃないんでしょうか? http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/postmaster-start.html > サーバを起動する一番簡単な方法例は、 > postmaster -D /usr/local/pgsql/data > となり、サーバをフォアグラウンドで走らせます。 > バックグランドでpostmasterを起動する には通常のシェルの構文を使います。 また、 % sh -x pg_ctl start として、pg_ctl 内で実行される postmaster の引数を確認するのも よいでしょう。 >>2766 バクモン > ※2:ps -p [プロセスID]でHITしなかった場合、リターンコードは必ず > 0以外となる。逆にHITした場合は、必ず0となる。 > >>このハンドリングは正しいのか、ちょっと自信なし。 問題ないと思いますが、それでも心配なら % ps -p [pid] | grep スクリプト名 などなど。 |
はじめまして。 ネットワークプログラミングの知識を参考にさせてもらっています。 で、ひとつ作りたいプログラムがあって質問させてください。 現在PERLを利用して、TERATERMのマクロのようにプログラムの出力結果を分析して、 次のバッチの投入のような監視?ツールを作りたいと思っています。 で、ソケットをつかってポート23にアクセスしに行くのですが、 固まってしまいます。ポート80や110にはここのサイトの見本をまねて アクセスすることは出来るのですが・・・。 shでやるというのも考えられるのですが、suではパスワードを聞いてきますし、 別のアプリ実行しても制御が完全にアプリ側に移るんで無理ですよね? ポート23にアクセスして結果をやり取りするにはどうしたらよいのでしょうか? どなたかお分かりでしたらヒントをお願いします。 |
>>2769 68user お返事ありがとうございます。 質問の書き方が下手で、申し訳がありません。 PGDATA=/usr/local/pgsql/dataを設定していて $ postmaster は引数なしで実行しています。(pg_ctl startもそうです) DEBUG...はDEBUGのあとの出力を省略させていただきました。 UNIXに関しても、パソコンに関しても本当に初心者で、何がどうなってるのかわからない状態なのですが、長くなりますが詳しく書かせていただきます。 $pg_ctl startを実行すると postmaster successfully started と出力されたあとに DEBUG...(省略しています)と5行でて、そこでreturnキーを押下すると [postgres@AAAServer postgres]$ と次のコマンド入力が可能になります。 しかし $ postmasterを実行しても postmaster successfully started というメッセージは出ないで、 DEBUG...(省略しています)と5行でてreturnキーを押下しても [postgres@AAAServer postgres]$ とはならず、改行されるだけです。 (以上は、openblocks,redhat両方共の環境です) いろいろ試してみると、 redhat環境では、/usr/local/pgsql/data/postgresql.confに silent_mode = on tcpip_socket = on syslog = 2 と追記して $ postmasterを実行すると DEBUG...(省略します)とは出力されないで、 [postgres@AAAServer postgres]$ となり、postgresqlは起動しました。 そこで、openblocksでpostgres.confを上記のように変更して $ postmasterを実行しました。すると FATAL 1: 'silent' is not valid option name とエラーが帰ってきました。 $pg_ctl startで実行した結果も、 postmaster successfully started と出力された後に、同様のエラーが帰ってきました。 (postgres.confの変更内容のsilentをコメント化したらsilentの下に追記した、tcpip_socketで同様のエラーが起きます。) 申し訳がありませんが、ご教授ください。 |
お返事ありがとうございます。 質問の書き方が下手で、申し訳がありません。 PGDATA=/usr/local/pgsql/dataを設定していて $ postmaster は引数なしで実行しています。(pg_ctl startもそうです) DEBUG...はDEBUGのあとの出力を省略させていただきました。 UNIXに関しても、パソコンに関しても本当に初心者で、何がどうなってるのかわからない状態なのですが、長くなりますが詳しく書かせていただきます。 $pg_ctl startを実行すると postmaster successfully started と出力されたあとに DEBUG...(省略しています)と5行でて、そこでreturnキーを押下すると [postgres@AAAServer postgres]$ と次のコマンド入力が可能になります。 しかし $ postmasterを実行しても postmaster successfully started というメッセージは出ないで、 DEBUG...(省略しています)と5行でてreturnキーを押下しても [postgres@AAAServer postgres]$ とはならず、改行されるだけです。 (以上は、openblocks,redhat両方共の環境です) いろいろ試してみると、 redhat環境では、/usr/local/pgsql/data/postgresql.confに silent_mode = on tcpip_socket = on syslog = 2 と追記して $ postmasterを実行すると DEBUG...(省略します)とは出力されないで、 [postgres@AAAServer postgres]$ となり、postgresqlは起動しました。 そこで、openblocksでpostgres.confを上記のように変更して $ postmasterを実行しました。すると FATAL 1: 'silent' is not valid option name とエラーが帰ってきました。 $pg_ctl startで実行した結果も、 postmaster successfully started と出力された後に、同様のエラーが帰ってきました。 (postgres.confの変更内容のsilentをコメント化したらsilentの下に追記した、tcpip_socketで同様のエラーが起きます。) 申し訳がありませんが、ご教授ください。 |
>>2770 せと > で、ソケットをつかってポート23にアクセスしに行くのですが、 > 固まってしまいます。 要は telnet クライアントを作りたいと。 接続後、telnet プロトコルに従ってネゴシエーションをする 必要があります。詳細は http://www.faqs.org/rfcs/rfc318.html perl のモジュールを使うなら Net::Telnet がよいでしょう。 ただし、telnet クライアントができても、文字の送信/文字の 受信が可能になるだけです。エラー発生の判断などはやはり プログラム側で行わなくてはいけません。 というわけで、素直に > プログラムの出力結果を分析して、次のバッチの投入のような監視?ツール を行うスクリプトを作った方がよいでしょう。 > suではパスワードを聞いてきますし、 > 別のアプリ実行しても制御が完全にアプリ側に移るんで無理ですよね? 危惧しておられることがよくわからないのですが、普通はスクリプトなどを 書けば実現可能です。 >>2772 ユウ > $ postmasterを実行しても > postmaster successfully started > というメッセージは出ないで、 > DEBUG...(省略しています)と5行でてreturnキーを押下しても > [postgres@AAAServer postgres]$ > とはならず、改行されるだけです。 それはそれで正常です。キーの入力をそのアプリが奪うような状況を 「フォアグラウンドで動作している」と言います。逆に、アプリが 裏で動いているような状況を「バックグラウンドで動作している」 と言います。 http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/postmaster-start.html にある通り、postmaster を実行すると、単にフォアグラウンドで 動くという仕様になっているだけです。postmaster を実行した後、 別ウィンドウで psql を実行すると、ちゃんと接続できるはずです。 > $ postmasterを実行しても > postmaster successfully started > というメッセージは出ないで、 postmaster successfully started という文字列を表示をしているのは pg_ctl だからです。 postmaster をバックグラウンドで動かすには、 - postmaster & として起動する。 - postgresql.conf を修正して silent_mode=true とする。 - postmaster -S とする。 - postmaster -c silent_mode=true とする。 などの方法があります (true と on は同じ)。全てマニュアル http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/runtime-config.html に書いてあります。 > FATAL 1: 'silent' is not valid option name 'silent_mode' is ... ならわかりますが、`silent' is ... となるということは、 postgresql.conf に silent=true などと書いていませんか? > tcpip_socketで同様のエラーが起きます。 ということは、その上にある行がおかしい可能性もあります。 とにかく、まずは postgresql.conf への追加時に修正ミスをしていないかを 疑うべきでしょう。 あとは、OpenBlockS にインストールされている PostgreSQL のバージョンと RedHat にインストールされている PostgreSQL のバージョンが違うとか。 |
>>2773 68user ご指摘の通りでした。 silent_mode,tcpip_socketにのエラーは直りましたが、syslogでエラーが出る状態です。なぜか解らないですけど、redhatで成功しているpostgresql.confをコピーしてきます。 ありがとうございました。 |
初めて投稿します。Solarisでハードウェアの診断をする機能があると聞きました。旧SUN OSでは、ダイアグというそうですが、オンボードやHDDの状態を診断して、異常個所をリストアップしてくれるような機能があれば、教えてちょんまげ!何卒よろしくお願いします。 |
echoサーバ(C言語)でのことですが #include <sys/uio.h> #include <unistd.h> #include <sys/param.h> #include <netinet/in.h> #include <arpa/inet.h> これらがなくても正常にコンパイルできるのですが、必要なのでしょうか? |
ご指摘の通りでした。 silent_mode,tcpip_socketにのエラーは直りましたが、syslogでエラーが出る状態です。なぜか解らないですけど、redhatで成功しているpostgresql.confをコピーしてきます。 ありがとうございました。 |
#2776 >これらがなくても正常にコンパイルできるのですが、必要なのでしょうか? windowsでならば必要ないと思います。 |
こんばんは。 最近はお一人で回答をしておられるようでおつかれさまです >68user とかいいつつ私も質問しに来てるんですが…。 で早速ですがどなたか知恵をお貸しください。 現在P4マシン上でRedhat7.1.94を利用しており、100BASEカードを使って LAN経由でインターネットにアクセスしています。 IPはDHCPサーバから割り振られているのですが、Netscapeなど、 どうやらgethostbynameを呼んでいると思われるプログラムが 名前解決できずに困っています。 ただしnslookupやhostコマンドでは正しく名前解決できる上、 Netscape等からも数字のIPを直に打てばアクセスできています。 試しに/etc/hostsに[216.239.33.101 www.google.co.jp]を記述すると、 Netscapeからもアクセスできました。 dhcpのクライアントにはdhcpcd-1.3.18を[/sbin/dhcpcd -n eth0]で 起動していて、自ホストのIPは正しく取得できているようです。 /etc/host.confには[order hosts,bind]のみを記述しており、 resolve.confにはWin2k動作時に調べておいたLAN内DNSサーバの指定 [nameserver 192.168.0.1]を記述しています。 自分なりに無い知識をいくらかでも埋めようとgoogleで探し回ったのですが 全てに目を通すほどパワーが続きませんでした。 どうぞよろしくお願いします。 |
はじめまして。 あまりにも簡単な質問のようで申し訳ないのですが、 「ソケット」っていうのは、「IPアドレスとポート番号を組み合わせたもの」でしょうか? どこで読んだのか、「ポート番号とプロセスIDを組み合わせたもの」という考えが頭を離れず、 自分でもいろいろ調べたのですが、解答は見つかりませんでした。 もしかしたら見当違いな質問なのかもしれませが、 ソケットの知識をお持ちの方がおりましたら、ご教授願います。 どうぞよろしくお願い致します。 |
>>2779 has ども。最近会社でもやる気ゼロなので、回答なぞしてるんですわ。 もしかして Netscape を起動した後に dhcp クライアントを起動 してません? もしそうなら順番を逆にしてみるとか。 そうでないなら、tcpdump の結果を見せてくださいな。 あと、あらゆる gethostbyname が失敗してますか? % perl -e "use Socket;print inet_ntoa(inet_aton('www.jp.freebsd.org'))" もダメですか? >>2780 aozora > 「ソケット」っていうのは、「IPアドレスとポート番号を組み合わせたもの」 > でしょうか? 「IP アドレスとポート番号を組み合わせたもの」は相手を一意に特定するための 識別子で、たとえるなら電話番号です。 # ただし、それは IP の話。UNIX ドメインソケットでは、ファイルが識別子です。 「ソケット」は、通信路の端点で、たとえるなら電話機です。 これを同じものと考えてしまうと、例えば bind(2) が理解できなく なります。bind(2) はたとえるなら電話機に電話線をつなぐという 感じでしょうか。 > 「ポート番号とプロセスIDを組み合わせたもの」 違います。1プロセスから複数のソケットを使うことができますから。 |
初めて書き込みをします。 UNIXは、まだ初心者です。 お聞きしたい事を書き込みます。 現在、「share」コマンドでディレクトリを共有した後、「dfmount」コマンドで共有されたディレクトリにアクセス中のクライアント名を取り出そうとしています。 「dfmount」コマンドで情報が取れないのですが、どうしてなのでしょうか? 「share」の情報を書き込みます。 > /usr/sbin/share - /share rw=client "File Service" - /home rw=nini:gp7000s,root=gp7000s "File Service" - /shared rw=osl:gp7000s,root=gp7000s "File Service" > |
はじめて書き込みます。 UNIXの初心者シドです。 少し教えてほしいことが有ります。 知っていられる方は、お教え願えないでしょうか? 「share」コマンドを実行して、「dfmounts」コマンドを実行すると何も表示されません。なぜでしょうか? 「share」の情報と「dfmounts」コマンドを実行したときの表示部分を書きます。 > /usr/sbin/share - /share rw=client "File Service" - /home rw=nini:gp7000s,root=gp7000s "File Service" - /shared rw=osl:gp7000s,root=gp7000s "File Service" > /usr/sbin/dfmounts > |
UNIX初心者(パソコンも初心者です)の私にどうか教えてください。 telnetを使って、redhat環境のマシンに接続して操作をしています。 $shutdown -r now で再起動をしました。 すると、立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、立ち上がって普通は [ユーザ名(マシン名)カレントディレクトリ]$ と出るところで、マシン名がnone(本来はmizuho)になっていました。そして、書き込み可能(-wrxwrxwrx)のファイルを操作しようとすると、読取専用とエラーメッセージが出て操作できなくなってしまいました。(全ファイルそうです) いろいろやってみた結果、 $mount -o remount, rw /dev/hda5 / で、書き込み可能にはなりましたが、再起動をすると読み込み専用に戻ってしまいます。 (boot.log,messageを見てみましたが、snmpd shutdown failedと出ています。これって関係ありますか?) どなたか直し方を教えてください。 お願いします。 それと今、boot画面のメッセージをチェックしようとしているのですが、1行ずつ進める方法があるらしいです。これってどうやるのですか? |
はじめまして。 現在どうしても解決できない問題があり、書き込みました。 どなたかご存知の方いらっしゃいましたら、レスよろしくお願いします。 WEBサーバにおいてLocationヘッダで指定したURLへリダイレクトさせて、 かつリダイレクト先へのHTTPリクエストにCookieを設定したいのですが、 設定できない状態になっています。 --------------------------------------------------------- HTTP/1.1 302 Found\n Set-Cookie: test=a; domain=www.hogehoge.co.jp; path=/\n Location: http://www.hogehoge.co.jp\n\n --------------------------------------------------------- のようなレスポンスを返却するCGIを作成したのですが、上記レス ポンスを返すサーバとリダイレクト先のサーバが異なる場合、次の リクエストにCookieが付加されてきません。 Cookieを設定できるのは、自分と同じドメインのみなのでしょうか。 当たり前の事だったら申し訳ありません。 よろしくお願いします。 |
>>2785 うみ > Set-Cookie: test=a; domain=www.hogehoge.co.jp; path=/\n cookie で domain をセットしたことがないのでよく知りませんが、 無理なんじゃないでしょうか。これができるなら、任意のサーバの cookie を外部からセットできることになります。 http://www2.studyinghttp.net/cookies.html を見ると、 server-1.hogehoge.co.jp で Set-Cookie: test=a domain=hogehoge.co.jp という cookie を吐くと server-1.hogehoge.co.jp や server-2.hogehoge.co.jp に送り返されるようになる。 ということではないかと思います。 もし、「Location なしだとうまくいくが、Location ありだとダメ」 ということなら、上記の認識は間違っているんでしょうけど。 >>2784 シゲ > 立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、 このときコンソールには何が出力されていますか? 症状からすると 何かしらのエラーが発生して、Read-only で mount され、シングル ユーザモードで起動しているように見えますが、根本原因がコンソール に表示されていると思います。 >>2783 シド >>2775 レイラ 僕には全くわからない分野なので、お役に立てないようです。 |
>>2786 68user >> 立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、 > 何かしらのエラーが発生して、Read-only で mount され、シングル > ユーザモードで起動しているように見えますが あ、10分待てば起動するのなら違うのかなぁ。 > snmpd shutdown failedと出ています。これって関係ありますか? shutdown 時のエラーなので関係ないと思います (実は関係あったり するのかもしれませんけど)。 > 1行ずつ進める方法があるらしいです。 少なくとも FreeBSD では、Scroll Lock を押せばスクロールが止まり、 カーソルキーで移動できます。Linux ではどうなのかはわかりません。 |
>>2781 68user ソケットについてのご教授、ありがとうございました。 かなり間違って理解していたようですが、 お陰様でソケットの考え方について理解できるようになりました。 |
>>2786 68user お返事ありがとうございます。 早速、scroll lockで画面と止めながら(出来ました!)エラーを見てみました。 Updating /etc/fstab failed to open /proc/partitions:No such file or directory Flushing all current rules and user defined chains:ipachains:incompatible with this kernel Clearing all current rules and user and user defined chains:ipchains:Incompatible with this kernel Starting system logger Errot:MM:mm:core:failed to open semaphore file(read-only file system):OS:No such file or directory mount:special device LABEL=/boot does not exisist Starting crond:crond:can't open or create /var/run/crond/pid:Read-only file system と7箇所でエラーが出てました。 これを見て私がわかったのは、 /proc/partitionsがない /bootの何かがない と言うことです。 見てみると、/proc,/boot両ディレクトリの中がまったく存在しませんでした。 何じゃコリャ! UNIX初心者(パソコンも)にはまったく解りません。 どうか、ご教授ください。 |
こんばんは。 お仕事大変ですな。まあそう腐らずに頑張ってください >68user さてガキの使いですんません。宿題やってきました。 まずdhcpcdですが、psで確認しても起動時から動いているようなので、 Netscapeの方が先ということはなさそうです。 次にperlスクリプトですが、残念ながら、 Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at -e line 1. と表示されます。要は正引きが失敗しているようです。 逆引きは引数の渡し方がわかりませんでした。 # なんせlinuxからはweb検索にも支障をきたしているもので(^^;) 最後にtcpdumpの出力です。tcpdumpを動かしてから、 % host www.jp.freebsd.org のコマンドと、netscapeにてhttp://www.jp.freebsd.org、 http://210.157.158.42/へのアクセスなどをしてみました。 # が、記録に残っているかは私にはわかりませんでした # /usr/sbin/tcpdump tcpdump: listening on eth0 01:47:38.943528 192.168.0.39.3044 > 143.90.129.198.http: . ack 1226176673 win 8576 (DF) 01:47:38.943528 192.168.0.40.32797 > 192.168.0.1.domain: 29608+ PTR? 198.129.90.143.in-addr.arpa. (45) (DF) 01:47:38.963528 192.168.0.39.3276 > 143.90.129.198.http: S 22004303:22004303(0) win 8192 <mss 1460,nop,nop,sackOK> (DF) 01:47:38.983528 43.242.210.37.6699 > 192.168.0.33.1190: . 3236267430:3236268764(1334) ack 2911899325 win 17252 (DF) 01:47:38.983528 192.168.0.33.1190 > 43.242.210.37.6699: . ack 4294960438 win 17520 <nop,nop,sack sack 1 {4294961772:1334} > (DF) 01:47:38.993528 211.129.12.43.domain > 192.168.0.40.32797: 29608 1/2/2 (141) 01:47:38.993528 192.168.0.40 > 211.129.12.43: icmp: 192.168.0.40 udp port 32797 unreachable [tos 0xc0] 01:47:38.993528 211.129.14.134.domain > 192.168.0.40.32797: 29608 1/2/2 (141) 01:47:38.993528 192.168.0.40 > 211.129.14.134: icmp: 192.168.0.40 udp port 32797 unreachable [tos 0xc0] 01:47:39.003528 143.90.129.198.http > 192.168.0.39.3044: . 5897:6433(536) ack 0 win 32767 01:47:39.013528 192.168.0.39.3044 > 143.90.129.198.http: . ack 1 win 8576 (DF) 01:47:39.013528 143.90.129.198.http > 192.168.0.39.3044: . 6433:6969(536) ack 0 win 32767 01:47:39.013528 192.168.0.39.3044 > 143.90.129.198.http: . ack 1 win 8576 (DF) 01:47:39.023528 43.242.210.37.6699 > 192.168.0.33.1191: . 3298096123:3298097457(1334) ack 2981221337 win 17235 (DF) 01:47:39.023528 143.90.129.198.http > 192.168.0.39.3276: S 1909102369:1909102369(0) ack 22004304 win 536 <mss 536> 01:47:39.023528 192.168.0.39.3276 > 143.90.129.198.http: . ack 1 win 8576 (DF) 01:47:39.023528 192.168.0.39.3276 > 143.90.129.198.http: P 1:43(42) ack 1 win 8576 (DF) |
困っています。誰か助けてください。 UNIXのファイルシステムと他のファイルシステムの切り分けをどのコマンドを使用すればいいのかわかりません。(他のファイルシステムは、SafeFile/Globalファイルシステムです。)はじめは、fstypコマンドを使用すれば、良いと思ったんですが、UFS(UNIXファイルシステム)しか、出てきません。それにデバイス中です。と言うエラーが発生して、困っています。解決策を知っている方は、お教え願えないでしょうか? |
echoサーバ(Perl)の5行目の 5: use Socket; この文はどういう意味なのでしょうか? おしえてください。 |
echoサーバのほうはプログラムに解説してくださっているので、読んでみてなんとか理解できそうなのですが、クライアントのほうを書けそうにありません。クライアントのほうもおしえていただけないでしょうか? |
>>2786 68user お騒がせしました。出来ちゃいました。 boot画面を見ていると can't execute rc.sysinit となっていたので、rc.sysinitを見てみるとアクセス権が -rw-r-xr-x となっていました。これでは実行権がないので -rwx-r-xr-x とするとできました。 出来てしまえば簡単なことでした。 ありがとうございました。 |
初めまして。大学の授業で初UNIXに相当困り果ててるものです・・・。どうか教えてください。 /usr/dict/words とうゆうファイルは単語の先頭の文字をアルファベット順に並べたものですよね??これを単語のおしまいで分類したものだすようにしたいのです。1行コマンドで・・・。ちなみに大文字と小文字は区別しないで!!! よろしくお願いします(><) |
>>2790 has > 最後にtcpdumpの出力です。 Query 投げてないですねぇ。普通は 23:36:51.920878 192.168.0.5.2275 > 192.168.0.1.domain: 4+ A? www.jp.FreeBSD.org. (36) 23:36:52.003329 192.168.0.1.domain > 192.168.0.5.2275: 4 1/4/5 A updraft.jp.FreeBSD.ORG (251) こんな感じのが流れるはずです。念のため、 % strace dig www.jp.FreeBSD.org で流れを追ってみてください。うちの FreeBSD では (*BSD は truss) % truss dig www.jp.FreeBSD.org|egrep 'socket|connect' socket(0x2,0x2,0x0) = 3 (0x3) connect(0x3,{ sa_len = 48, sa_family = 120, sa_data = } },16) = 0 (0x0) となりますが、そちらではどういう結果になりますか? もし socket さえ行っていないようなら、/etc/host.conf とか /etc/resolv.conf の解析あたりでこけているような気がします。 なお、nslookup や host は /etc/hosts や /etc/host.conf を 参照せず、必ず DNS サーバに Query を投げるので、原因の 切り分けの際はご注意を。 > resolve.confにはWin2k動作時に調べておいたLAN内DNSサーバの指定 > [nameserver 192.168.0.1]を記述しています。 DHCP クライアントは /etc/resolv.conf を上書きすると思いますが、 上書き後の内容はどうなっていますか? あとは、DHCP をやめて、手で IP アドレスなどを設定してみると何かに 気づくかも…という役に立たないアドバイスしかないです。 >>2793 だいすけ > 5: use Socket; > この文はどういう意味なのでしょうか? Socket モジュールを使うという宣言です。利点は http://x68000.startshop.co.jp/~68user/net/perl4.html をどうぞ。 >>2793 だいすけ > クライアントのほうを書けそうにありません。 何がわからないのかわからないので、 http://x68000.startshop.co.jp/~68user/net/ を読んでくださいとしか言えません。 >>2795 飴 > これを単語のおしまいで分類したものだすようにしたいのです。 > 1行コマンドで・・・。ちなみに大文字と小文字は区別しないで!!! じゃあヒントだけ。rev というコマンドがあるならそれを 使います。rev がない UNIX なら、わかりません (perl を 使えばできるけど、問題の趣旨とは違うような気がする)。 |
あるログファイルに1行出力されるごとに、その行に特定のキーワードが あるかどうかを判断して、あった場合はその行を別のログに出力する といったことをUNIXコマンドでできないかと調べています。 イメージとしては、「tail -f」と「grep」の組み合わせみたいな 感じですが、二つのコマンドをパイプで結合してもダメでした。 何か良い手はないでしょうか? ご存知の方がいたら教えてください。 よろしくお願いします。 |
>>2797 HIDE tail -f log | grep foo でできる環境もあります。FreeBSD と Solaris2.6/8 あたりはできるはず。 というか、できない環境をしらないのでアドバイスはできませんが、tail が バッファリングしてるのかな? tail 自体それほど複雑な機能ではないので、さくっと perl などで 自作するのがいいかもしれません。 |
>>2798 68user ご回答いただきまして、ありがとうございます。 >tail -f log | grep foo でできる環境もあります。FreeBSD と>Solaris2.6/8あたりはできるはず。 こちらの環境はSolaris2.6です。 tail -f log | grep foo だと意図した形で画面に表示されるのですが、 tail -f log | grep foo >> log2 とやるとlog2には何も出力されないんです・・・・・・ 何か環境が変なのかな? >tail 自体それほど複雑な機能ではないので、さくっと perl などで >自作するのがいいかもしれません。 そうですね。実はこの処理は大容量の性能関連のログから必要な 行を抽出/判定するための使用しようとしているのですが、Perl で作ったらログの行が多いからか、逆にそのツールが動いている 時間はCPUが100%になってしまったのでUNIXコマンドでできないかと 調べている次第です。(Perlはあまり詳しくないので私の作り方が マズイだけかもしれませんが) |
>>2799 HIDE > tail -f log | grep foo >> log2 なるほど。grep が出力をバッファリングしてるからですね。ちょっと調べて みた限りでは、/dev/stderr にリダイレクトしてもダメだし、バッファリング ありにするオプションはないようなので、 % tail -f log | perl -ne '$|=1;print if m/foo/' >> log2 てな感じで。 でも、grep でなんとかなりそうな気もするなぁ…。 |