>>2747 68user ご回答ありがとうございます。 ただ、$statusは直前のコマンドのリターン値がセットされる と認識しています。 Cシェルで直前のプロセスIDを取得するには、プロセスをバック グラウンドで動かすようにして、その際に標準出力されるプロセス IDをテキストファイルにおとして、grepなりをする方法しか ないかな、と考えています。 そこで、以下を考えました。 ftp -n <<EOF & open [IPアドレス] user [ユーザ名] [パスワード] binary get [getするファイル名] [保存するファイル名] close quit EOF これを実行すると [1] 10161 と言った形でプロセスIDが出力されます。 ただ、これをテキストファイルに落とす方法がわかりません。 多分、リダイレクトをするのだと思っているのですが、どこに それをうめこめばいいのでしょうか? |
それとも C言語で新しくできた関数なのでしょうか? |
>>2751 バクモン ああ、そういう意味ですか。 tcsh だと $! で取れますが、csh では無理かもしれないですね。 jobs -l だと取れそうですが、どうでしょうか。 ただ、僕なら監視用プロセスを別に起こします。 例えば、 mkdir /tmp/.ftp-lock ftp -n <<EOF open .. quit EOF rmdir /tmp/.ftp-lock として、監視プロセスは n 秒前より過去に /tmp/.ftp-lock が作成されて いたら、 kill `ps -ef | grep get-file.sh | grep -v grep' する、とか。 もちっと確実にするなら ln -s $$ /tmp/.ftp-pid ftp -n <<EOF open としてプロセス番号を特定できるようにする方法もあります ($$ は sh の プロセス番号なので、$$ の子プロセスを kill する必要がありますけど)。 >>2750 だいすけ 「何が」参考書に掲載されていないのですか? netdb.h? listen? accept? ここらへんの関数については規格化されていません。よって、UNIX では 使えても Windows では関数そのものがなかったりします。 例えば 「ANSI C マニュアル」 といった書名ならば、規格化された関数については網羅しているかもしれませんが、 規格外の関数については載っていなくても不思議ではありません。 |
5: #include <sys/types.h> 6: #include <sys/socket.h> 7: #include <sys/uio.h> 8: #include <unistd.h> 9: #include <sys/param.h> 10: #include <netinet/in.h> 11: #include <arpa/inet.h これらが参考書に掲載されてないという意味だったのですが manコマンドでしれべていくのですね。 どうもありがとうございます。 |
はじめまして。 まだ、UNIXをはじめたばかりの初心者です。 いま、windows環境のマシンからtera termを使ってUNIXマシンにpostgressqlをインストールしています。そこで、「カーネルのコンフィギュレショーションファイルをチェックする」と書かれているのですが、これってどうやるのですか? どなたか教えてください。 よろしくお願いします。 |
>>2755 ビギナー > 「カーネルのコンフィギュレショーションファイルを > チェックする」と書かれているのですが、これって > どうやるのですか? OS によって違います。 http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/kernel-resources.html をどうぞ。 |
>>2756 68user ありがとうございます。 |
ご回答ありがとうございました。 今もちょっとわからないとこがあるのですが、 もうちょっと考えてわからなかったら、 聞きにきます。 |
再び質問です。 先ほどの質問と症状は似ているのですが、imodeのURLで(http://mobile.yahoo.co.jp/yahoo/index.html)のリクエストを出すと HTTP1.0 302 FOUND DATE Location http://mobile.yahoo.co.jp/error/404.html Conection: close のレスポンスが返ってきて、locationの部分を入れても実際のimodeのURLがゲットできなくて困っています。どのようにC言語のHTTPクライアント(1) のソースをいじればちゃんとしたレスポンスが得られるでしょうか? よろしくお願い致します。 |
初めまして黒木と申します。UNIX初心者です。 /usr/dict/words という辞書ファイルからEが2個以上出て、AとDとTがそれ ぞれ1個以上出て、最初がLで始まる単語が書かれてる行を見つけるには、 どういう1行コマンドを書けばよいでしょうか?よろしくお願いします。 (但し、文字は全て大文字・小文字を区別しない) *ファイルは何でも良いので、見つける方法が知りたいのです。 |
>>2759 きば > imodeのURLで(http://mobile.yahoo.co.jp/yahoo/index.html)の > リクエストを出すと ブラウザで http://mobile.yahoo.co.jp/yahoo/index.html を 見ると、404 not found になるので、 > Location http://mobile.yahoo.co.jp/error/404.html 当然そうなると思いますよ。 どこからこの URL が出てきたのでしょうか? >>2760 黒木 grep -i 'E.*E' /usr/dict/words | grep -i A | grep -i D | grep -i T | grep -i '^L' でどうでしょう。 |
すばやいレスありがとうございます。 http://mobile.yahoo.co.jp/yahoo/index.html ↑はimodeの使える携帯端末で見ることの出来るヤフーのカテゴリ検索のサイトです。 上記のURLのリクエストを送ったら携帯端末で見ることの出来るサイトをレスポンスしてくれるようにしたいのです。 imode専用のHTTPクライアントを68userさんのC言語のHTTPクライアント(1)を参考に作ろうと思っていて、とりあえず上記のURLで実験して作ろうと試みているのですが、なかなかうまくいかないので、68userさんの力をかして頂きたいと思う次第です。 |
>>2762 きば i-mode 端末のみで利用可能なページということですね? なら、 http://www.nttdocomo.co.jp/p_s/imode/tag/s2.html を参考にして、 GET /yahoo/index.html HTTP/1.0 User-Agent: DoCoMo/1.0/N209i などなど。 |
はい。imodeのみ利用可能なページです。 なるほど、、 urlをみてもうちょっとがんばってみます。 貴重なご意見ありがとうございます。 |
>>2761 68user 有難う御座いました。これで良いですね。 |
>>2753 68user ご回答ありがとうございます。 以下のようにロジックを変更しようかと思います。 ・ftpをバックグランドで動かす ・jobs -lの結果をテキストファイルに落とす ・5分sleepする(※1) ・grepとawkを使用して、テキストファイルからftpのプロセスIDを取得する ・ps -p にて取得したプロセスIDのプロセス生存を確認 ・ps -p のリターンコードが0以外であればkillするif文をおこなう(※2) こんな感じかな、と考えています。 怖い部分は※1,2です。 ※1:とりあえずユーザさんには現在の環境でgetが3分を越えることは ないといわれているので、安全を見て5分sleepさせるようにしたが 本当に大丈夫か? >>ユーザさんがOKと言っているので、問題なし・・・かな。 ※2:ps -p [プロセスID]でHITしなかった場合、リターンコードは必ず 0以外となる。逆にHITした場合は、必ず0となる。 >>このハンドリングは正しいのか、ちょっと自信なし。 色々とご回答ありがとうございました。 |
はじめまして。 私は、最近linuxを使い出した初心者です。 最近、仕事でpostgresqlをインストールしました。 インストールには成功したようなのですが、 $ pg_ctl startで起動をするとpostgresql(postmaster?)は起動します。 しかし $ postmasterでは、 DEBUG ... DEBUG ... DEBUG ... DEBUG ... と出力され、その後エラーメッセージも何も出なくて、反応が無くなってしまいます。(いつも、ctrl+cで抜けています) どうしてでしょうか? どなたかご存知の方、ご教授ください。 |
書き忘れていました。 バージョン:postgresql-7.11 環境:open blocksというlinuxマシンです。 (redhatでも同様でした) |
>>2767 ユウ > $ postmasterでは、 引数なしで実行したのですか? データベースクラスタの場所はどうやって 指定しているのですか? 環境変数 PGDATA? > DEBUG ... この ... というのは省略したのですか? 本当に ... と表示されたのですか? > その後エラーメッセージも何も出なくて、反応が無くなってしまいます。 それはフォアグラウンドで起動しているだけで、正常起動じゃないんでしょうか? http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/postmaster-start.html > サーバを起動する一番簡単な方法例は、 > postmaster -D /usr/local/pgsql/data > となり、サーバをフォアグラウンドで走らせます。 > バックグランドでpostmasterを起動する には通常のシェルの構文を使います。 また、 % sh -x pg_ctl start として、pg_ctl 内で実行される postmaster の引数を確認するのも よいでしょう。 >>2766 バクモン > ※2:ps -p [プロセスID]でHITしなかった場合、リターンコードは必ず > 0以外となる。逆にHITした場合は、必ず0となる。 > >>このハンドリングは正しいのか、ちょっと自信なし。 問題ないと思いますが、それでも心配なら % ps -p [pid] | grep スクリプト名 などなど。 |
はじめまして。 ネットワークプログラミングの知識を参考にさせてもらっています。 で、ひとつ作りたいプログラムがあって質問させてください。 現在PERLを利用して、TERATERMのマクロのようにプログラムの出力結果を分析して、 次のバッチの投入のような監視?ツールを作りたいと思っています。 で、ソケットをつかってポート23にアクセスしに行くのですが、 固まってしまいます。ポート80や110にはここのサイトの見本をまねて アクセスすることは出来るのですが・・・。 shでやるというのも考えられるのですが、suではパスワードを聞いてきますし、 別のアプリ実行しても制御が完全にアプリ側に移るんで無理ですよね? ポート23にアクセスして結果をやり取りするにはどうしたらよいのでしょうか? どなたかお分かりでしたらヒントをお願いします。 |
>>2769 68user お返事ありがとうございます。 質問の書き方が下手で、申し訳がありません。 PGDATA=/usr/local/pgsql/dataを設定していて $ postmaster は引数なしで実行しています。(pg_ctl startもそうです) DEBUG...はDEBUGのあとの出力を省略させていただきました。 UNIXに関しても、パソコンに関しても本当に初心者で、何がどうなってるのかわからない状態なのですが、長くなりますが詳しく書かせていただきます。 $pg_ctl startを実行すると postmaster successfully started と出力されたあとに DEBUG...(省略しています)と5行でて、そこでreturnキーを押下すると [postgres@AAAServer postgres]$ と次のコマンド入力が可能になります。 しかし $ postmasterを実行しても postmaster successfully started というメッセージは出ないで、 DEBUG...(省略しています)と5行でてreturnキーを押下しても [postgres@AAAServer postgres]$ とはならず、改行されるだけです。 (以上は、openblocks,redhat両方共の環境です) いろいろ試してみると、 redhat環境では、/usr/local/pgsql/data/postgresql.confに silent_mode = on tcpip_socket = on syslog = 2 と追記して $ postmasterを実行すると DEBUG...(省略します)とは出力されないで、 [postgres@AAAServer postgres]$ となり、postgresqlは起動しました。 そこで、openblocksでpostgres.confを上記のように変更して $ postmasterを実行しました。すると FATAL 1: 'silent' is not valid option name とエラーが帰ってきました。 $pg_ctl startで実行した結果も、 postmaster successfully started と出力された後に、同様のエラーが帰ってきました。 (postgres.confの変更内容のsilentをコメント化したらsilentの下に追記した、tcpip_socketで同様のエラーが起きます。) 申し訳がありませんが、ご教授ください。 |
お返事ありがとうございます。 質問の書き方が下手で、申し訳がありません。 PGDATA=/usr/local/pgsql/dataを設定していて $ postmaster は引数なしで実行しています。(pg_ctl startもそうです) DEBUG...はDEBUGのあとの出力を省略させていただきました。 UNIXに関しても、パソコンに関しても本当に初心者で、何がどうなってるのかわからない状態なのですが、長くなりますが詳しく書かせていただきます。 $pg_ctl startを実行すると postmaster successfully started と出力されたあとに DEBUG...(省略しています)と5行でて、そこでreturnキーを押下すると [postgres@AAAServer postgres]$ と次のコマンド入力が可能になります。 しかし $ postmasterを実行しても postmaster successfully started というメッセージは出ないで、 DEBUG...(省略しています)と5行でてreturnキーを押下しても [postgres@AAAServer postgres]$ とはならず、改行されるだけです。 (以上は、openblocks,redhat両方共の環境です) いろいろ試してみると、 redhat環境では、/usr/local/pgsql/data/postgresql.confに silent_mode = on tcpip_socket = on syslog = 2 と追記して $ postmasterを実行すると DEBUG...(省略します)とは出力されないで、 [postgres@AAAServer postgres]$ となり、postgresqlは起動しました。 そこで、openblocksでpostgres.confを上記のように変更して $ postmasterを実行しました。すると FATAL 1: 'silent' is not valid option name とエラーが帰ってきました。 $pg_ctl startで実行した結果も、 postmaster successfully started と出力された後に、同様のエラーが帰ってきました。 (postgres.confの変更内容のsilentをコメント化したらsilentの下に追記した、tcpip_socketで同様のエラーが起きます。) 申し訳がありませんが、ご教授ください。 |
>>2770 せと > で、ソケットをつかってポート23にアクセスしに行くのですが、 > 固まってしまいます。 要は telnet クライアントを作りたいと。 接続後、telnet プロトコルに従ってネゴシエーションをする 必要があります。詳細は http://www.faqs.org/rfcs/rfc318.html perl のモジュールを使うなら Net::Telnet がよいでしょう。 ただし、telnet クライアントができても、文字の送信/文字の 受信が可能になるだけです。エラー発生の判断などはやはり プログラム側で行わなくてはいけません。 というわけで、素直に > プログラムの出力結果を分析して、次のバッチの投入のような監視?ツール を行うスクリプトを作った方がよいでしょう。 > suではパスワードを聞いてきますし、 > 別のアプリ実行しても制御が完全にアプリ側に移るんで無理ですよね? 危惧しておられることがよくわからないのですが、普通はスクリプトなどを 書けば実現可能です。 >>2772 ユウ > $ postmasterを実行しても > postmaster successfully started > というメッセージは出ないで、 > DEBUG...(省略しています)と5行でてreturnキーを押下しても > [postgres@AAAServer postgres]$ > とはならず、改行されるだけです。 それはそれで正常です。キーの入力をそのアプリが奪うような状況を 「フォアグラウンドで動作している」と言います。逆に、アプリが 裏で動いているような状況を「バックグラウンドで動作している」 と言います。 http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/postmaster-start.html にある通り、postmaster を実行すると、単にフォアグラウンドで 動くという仕様になっているだけです。postmaster を実行した後、 別ウィンドウで psql を実行すると、ちゃんと接続できるはずです。 > $ postmasterを実行しても > postmaster successfully started > というメッセージは出ないで、 postmaster successfully started という文字列を表示をしているのは pg_ctl だからです。 postmaster をバックグラウンドで動かすには、 - postmaster & として起動する。 - postgresql.conf を修正して silent_mode=true とする。 - postmaster -S とする。 - postmaster -c silent_mode=true とする。 などの方法があります (true と on は同じ)。全てマニュアル http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/runtime-config.html に書いてあります。 > FATAL 1: 'silent' is not valid option name 'silent_mode' is ... ならわかりますが、`silent' is ... となるということは、 postgresql.conf に silent=true などと書いていませんか? > tcpip_socketで同様のエラーが起きます。 ということは、その上にある行がおかしい可能性もあります。 とにかく、まずは postgresql.conf への追加時に修正ミスをしていないかを 疑うべきでしょう。 あとは、OpenBlockS にインストールされている PostgreSQL のバージョンと RedHat にインストールされている PostgreSQL のバージョンが違うとか。 |
>>2773 68user ご指摘の通りでした。 silent_mode,tcpip_socketにのエラーは直りましたが、syslogでエラーが出る状態です。なぜか解らないですけど、redhatで成功しているpostgresql.confをコピーしてきます。 ありがとうございました。 |
初めて投稿します。Solarisでハードウェアの診断をする機能があると聞きました。旧SUN OSでは、ダイアグというそうですが、オンボードやHDDの状態を診断して、異常個所をリストアップしてくれるような機能があれば、教えてちょんまげ!何卒よろしくお願いします。 |
echoサーバ(C言語)でのことですが #include <sys/uio.h> #include <unistd.h> #include <sys/param.h> #include <netinet/in.h> #include <arpa/inet.h> これらがなくても正常にコンパイルできるのですが、必要なのでしょうか? |
ご指摘の通りでした。 silent_mode,tcpip_socketにのエラーは直りましたが、syslogでエラーが出る状態です。なぜか解らないですけど、redhatで成功しているpostgresql.confをコピーしてきます。 ありがとうございました。 |
#2776 >これらがなくても正常にコンパイルできるのですが、必要なのでしょうか? windowsでならば必要ないと思います。 |
こんばんは。 最近はお一人で回答をしておられるようでおつかれさまです >68user とかいいつつ私も質問しに来てるんですが…。 で早速ですがどなたか知恵をお貸しください。 現在P4マシン上でRedhat7.1.94を利用しており、100BASEカードを使って LAN経由でインターネットにアクセスしています。 IPはDHCPサーバから割り振られているのですが、Netscapeなど、 どうやらgethostbynameを呼んでいると思われるプログラムが 名前解決できずに困っています。 ただしnslookupやhostコマンドでは正しく名前解決できる上、 Netscape等からも数字のIPを直に打てばアクセスできています。 試しに/etc/hostsに[216.239.33.101 www.google.co.jp]を記述すると、 Netscapeからもアクセスできました。 dhcpのクライアントにはdhcpcd-1.3.18を[/sbin/dhcpcd -n eth0]で 起動していて、自ホストのIPは正しく取得できているようです。 /etc/host.confには[order hosts,bind]のみを記述しており、 resolve.confにはWin2k動作時に調べておいたLAN内DNSサーバの指定 [nameserver 192.168.0.1]を記述しています。 自分なりに無い知識をいくらかでも埋めようとgoogleで探し回ったのですが 全てに目を通すほどパワーが続きませんでした。 どうぞよろしくお願いします。 |
はじめまして。 あまりにも簡単な質問のようで申し訳ないのですが、 「ソケット」っていうのは、「IPアドレスとポート番号を組み合わせたもの」でしょうか? どこで読んだのか、「ポート番号とプロセスIDを組み合わせたもの」という考えが頭を離れず、 自分でもいろいろ調べたのですが、解答は見つかりませんでした。 もしかしたら見当違いな質問なのかもしれませが、 ソケットの知識をお持ちの方がおりましたら、ご教授願います。 どうぞよろしくお願い致します。 |
>>2779 has ども。最近会社でもやる気ゼロなので、回答なぞしてるんですわ。 もしかして Netscape を起動した後に dhcp クライアントを起動 してません? もしそうなら順番を逆にしてみるとか。 そうでないなら、tcpdump の結果を見せてくださいな。 あと、あらゆる gethostbyname が失敗してますか? % perl -e "use Socket;print inet_ntoa(inet_aton('www.jp.freebsd.org'))" もダメですか? >>2780 aozora > 「ソケット」っていうのは、「IPアドレスとポート番号を組み合わせたもの」 > でしょうか? 「IP アドレスとポート番号を組み合わせたもの」は相手を一意に特定するための 識別子で、たとえるなら電話番号です。 # ただし、それは IP の話。UNIX ドメインソケットでは、ファイルが識別子です。 「ソケット」は、通信路の端点で、たとえるなら電話機です。 これを同じものと考えてしまうと、例えば bind(2) が理解できなく なります。bind(2) はたとえるなら電話機に電話線をつなぐという 感じでしょうか。 > 「ポート番号とプロセスIDを組み合わせたもの」 違います。1プロセスから複数のソケットを使うことができますから。 |
初めて書き込みをします。 UNIXは、まだ初心者です。 お聞きしたい事を書き込みます。 現在、「share」コマンドでディレクトリを共有した後、「dfmount」コマンドで共有されたディレクトリにアクセス中のクライアント名を取り出そうとしています。 「dfmount」コマンドで情報が取れないのですが、どうしてなのでしょうか? 「share」の情報を書き込みます。 > /usr/sbin/share - /share rw=client "File Service" - /home rw=nini:gp7000s,root=gp7000s "File Service" - /shared rw=osl:gp7000s,root=gp7000s "File Service" > |
はじめて書き込みます。 UNIXの初心者シドです。 少し教えてほしいことが有ります。 知っていられる方は、お教え願えないでしょうか? 「share」コマンドを実行して、「dfmounts」コマンドを実行すると何も表示されません。なぜでしょうか? 「share」の情報と「dfmounts」コマンドを実行したときの表示部分を書きます。 > /usr/sbin/share - /share rw=client "File Service" - /home rw=nini:gp7000s,root=gp7000s "File Service" - /shared rw=osl:gp7000s,root=gp7000s "File Service" > /usr/sbin/dfmounts > |
UNIX初心者(パソコンも初心者です)の私にどうか教えてください。 telnetを使って、redhat環境のマシンに接続して操作をしています。 $shutdown -r now で再起動をしました。 すると、立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、立ち上がって普通は [ユーザ名(マシン名)カレントディレクトリ]$ と出るところで、マシン名がnone(本来はmizuho)になっていました。そして、書き込み可能(-wrxwrxwrx)のファイルを操作しようとすると、読取専用とエラーメッセージが出て操作できなくなってしまいました。(全ファイルそうです) いろいろやってみた結果、 $mount -o remount, rw /dev/hda5 / で、書き込み可能にはなりましたが、再起動をすると読み込み専用に戻ってしまいます。 (boot.log,messageを見てみましたが、snmpd shutdown failedと出ています。これって関係ありますか?) どなたか直し方を教えてください。 お願いします。 それと今、boot画面のメッセージをチェックしようとしているのですが、1行ずつ進める方法があるらしいです。これってどうやるのですか? |
はじめまして。 現在どうしても解決できない問題があり、書き込みました。 どなたかご存知の方いらっしゃいましたら、レスよろしくお願いします。 WEBサーバにおいてLocationヘッダで指定したURLへリダイレクトさせて、 かつリダイレクト先へのHTTPリクエストにCookieを設定したいのですが、 設定できない状態になっています。 --------------------------------------------------------- HTTP/1.1 302 Found\n Set-Cookie: test=a; domain=www.hogehoge.co.jp; path=/\n Location: http://www.hogehoge.co.jp\n\n --------------------------------------------------------- のようなレスポンスを返却するCGIを作成したのですが、上記レス ポンスを返すサーバとリダイレクト先のサーバが異なる場合、次の リクエストにCookieが付加されてきません。 Cookieを設定できるのは、自分と同じドメインのみなのでしょうか。 当たり前の事だったら申し訳ありません。 よろしくお願いします。 |