はじめまして。 ネットワークプログラミングの知識を参考にさせてもらっています。 で、ひとつ作りたいプログラムがあって質問させてください。 現在PERLを利用して、TERATERMのマクロのようにプログラムの出力結果を分析して、 次のバッチの投入のような監視?ツールを作りたいと思っています。 で、ソケットをつかってポート23にアクセスしに行くのですが、 固まってしまいます。ポート80や110にはここのサイトの見本をまねて アクセスすることは出来るのですが・・・。 shでやるというのも考えられるのですが、suではパスワードを聞いてきますし、 別のアプリ実行しても制御が完全にアプリ側に移るんで無理ですよね? ポート23にアクセスして結果をやり取りするにはどうしたらよいのでしょうか? どなたかお分かりでしたらヒントをお願いします。 |
>>2769 68user お返事ありがとうございます。 質問の書き方が下手で、申し訳がありません。 PGDATA=/usr/local/pgsql/dataを設定していて $ postmaster は引数なしで実行しています。(pg_ctl startもそうです) DEBUG...はDEBUGのあとの出力を省略させていただきました。 UNIXに関しても、パソコンに関しても本当に初心者で、何がどうなってるのかわからない状態なのですが、長くなりますが詳しく書かせていただきます。 $pg_ctl startを実行すると postmaster successfully started と出力されたあとに DEBUG...(省略しています)と5行でて、そこでreturnキーを押下すると [postgres@AAAServer postgres]$ と次のコマンド入力が可能になります。 しかし $ postmasterを実行しても postmaster successfully started というメッセージは出ないで、 DEBUG...(省略しています)と5行でてreturnキーを押下しても [postgres@AAAServer postgres]$ とはならず、改行されるだけです。 (以上は、openblocks,redhat両方共の環境です) いろいろ試してみると、 redhat環境では、/usr/local/pgsql/data/postgresql.confに silent_mode = on tcpip_socket = on syslog = 2 と追記して $ postmasterを実行すると DEBUG...(省略します)とは出力されないで、 [postgres@AAAServer postgres]$ となり、postgresqlは起動しました。 そこで、openblocksでpostgres.confを上記のように変更して $ postmasterを実行しました。すると FATAL 1: 'silent' is not valid option name とエラーが帰ってきました。 $pg_ctl startで実行した結果も、 postmaster successfully started と出力された後に、同様のエラーが帰ってきました。 (postgres.confの変更内容のsilentをコメント化したらsilentの下に追記した、tcpip_socketで同様のエラーが起きます。) 申し訳がありませんが、ご教授ください。 |
お返事ありがとうございます。 質問の書き方が下手で、申し訳がありません。 PGDATA=/usr/local/pgsql/dataを設定していて $ postmaster は引数なしで実行しています。(pg_ctl startもそうです) DEBUG...はDEBUGのあとの出力を省略させていただきました。 UNIXに関しても、パソコンに関しても本当に初心者で、何がどうなってるのかわからない状態なのですが、長くなりますが詳しく書かせていただきます。 $pg_ctl startを実行すると postmaster successfully started と出力されたあとに DEBUG...(省略しています)と5行でて、そこでreturnキーを押下すると [postgres@AAAServer postgres]$ と次のコマンド入力が可能になります。 しかし $ postmasterを実行しても postmaster successfully started というメッセージは出ないで、 DEBUG...(省略しています)と5行でてreturnキーを押下しても [postgres@AAAServer postgres]$ とはならず、改行されるだけです。 (以上は、openblocks,redhat両方共の環境です) いろいろ試してみると、 redhat環境では、/usr/local/pgsql/data/postgresql.confに silent_mode = on tcpip_socket = on syslog = 2 と追記して $ postmasterを実行すると DEBUG...(省略します)とは出力されないで、 [postgres@AAAServer postgres]$ となり、postgresqlは起動しました。 そこで、openblocksでpostgres.confを上記のように変更して $ postmasterを実行しました。すると FATAL 1: 'silent' is not valid option name とエラーが帰ってきました。 $pg_ctl startで実行した結果も、 postmaster successfully started と出力された後に、同様のエラーが帰ってきました。 (postgres.confの変更内容のsilentをコメント化したらsilentの下に追記した、tcpip_socketで同様のエラーが起きます。) 申し訳がありませんが、ご教授ください。 |
>>2770 せと > で、ソケットをつかってポート23にアクセスしに行くのですが、 > 固まってしまいます。 要は telnet クライアントを作りたいと。 接続後、telnet プロトコルに従ってネゴシエーションをする 必要があります。詳細は http://www.faqs.org/rfcs/rfc318.html perl のモジュールを使うなら Net::Telnet がよいでしょう。 ただし、telnet クライアントができても、文字の送信/文字の 受信が可能になるだけです。エラー発生の判断などはやはり プログラム側で行わなくてはいけません。 というわけで、素直に > プログラムの出力結果を分析して、次のバッチの投入のような監視?ツール を行うスクリプトを作った方がよいでしょう。 > suではパスワードを聞いてきますし、 > 別のアプリ実行しても制御が完全にアプリ側に移るんで無理ですよね? 危惧しておられることがよくわからないのですが、普通はスクリプトなどを 書けば実現可能です。 >>2772 ユウ > $ postmasterを実行しても > postmaster successfully started > というメッセージは出ないで、 > DEBUG...(省略しています)と5行でてreturnキーを押下しても > [postgres@AAAServer postgres]$ > とはならず、改行されるだけです。 それはそれで正常です。キーの入力をそのアプリが奪うような状況を 「フォアグラウンドで動作している」と言います。逆に、アプリが 裏で動いているような状況を「バックグラウンドで動作している」 と言います。 http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/postmaster-start.html にある通り、postmaster を実行すると、単にフォアグラウンドで 動くという仕様になっているだけです。postmaster を実行した後、 別ウィンドウで psql を実行すると、ちゃんと接続できるはずです。 > $ postmasterを実行しても > postmaster successfully started > というメッセージは出ないで、 postmaster successfully started という文字列を表示をしているのは pg_ctl だからです。 postmaster をバックグラウンドで動かすには、 - postmaster & として起動する。 - postgresql.conf を修正して silent_mode=true とする。 - postmaster -S とする。 - postmaster -c silent_mode=true とする。 などの方法があります (true と on は同じ)。全てマニュアル http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/runtime-config.html に書いてあります。 > FATAL 1: 'silent' is not valid option name 'silent_mode' is ... ならわかりますが、`silent' is ... となるということは、 postgresql.conf に silent=true などと書いていませんか? > tcpip_socketで同様のエラーが起きます。 ということは、その上にある行がおかしい可能性もあります。 とにかく、まずは postgresql.conf への追加時に修正ミスをしていないかを 疑うべきでしょう。 あとは、OpenBlockS にインストールされている PostgreSQL のバージョンと RedHat にインストールされている PostgreSQL のバージョンが違うとか。 |
>>2773 68user ご指摘の通りでした。 silent_mode,tcpip_socketにのエラーは直りましたが、syslogでエラーが出る状態です。なぜか解らないですけど、redhatで成功しているpostgresql.confをコピーしてきます。 ありがとうございました。 |
初めて投稿します。Solarisでハードウェアの診断をする機能があると聞きました。旧SUN OSでは、ダイアグというそうですが、オンボードやHDDの状態を診断して、異常個所をリストアップしてくれるような機能があれば、教えてちょんまげ!何卒よろしくお願いします。 |
echoサーバ(C言語)でのことですが #include <sys/uio.h> #include <unistd.h> #include <sys/param.h> #include <netinet/in.h> #include <arpa/inet.h> これらがなくても正常にコンパイルできるのですが、必要なのでしょうか? |
ご指摘の通りでした。 silent_mode,tcpip_socketにのエラーは直りましたが、syslogでエラーが出る状態です。なぜか解らないですけど、redhatで成功しているpostgresql.confをコピーしてきます。 ありがとうございました。 |
#2776 >これらがなくても正常にコンパイルできるのですが、必要なのでしょうか? windowsでならば必要ないと思います。 |
こんばんは。 最近はお一人で回答をしておられるようでおつかれさまです >68user とかいいつつ私も質問しに来てるんですが…。 で早速ですがどなたか知恵をお貸しください。 現在P4マシン上でRedhat7.1.94を利用しており、100BASEカードを使って LAN経由でインターネットにアクセスしています。 IPはDHCPサーバから割り振られているのですが、Netscapeなど、 どうやらgethostbynameを呼んでいると思われるプログラムが 名前解決できずに困っています。 ただしnslookupやhostコマンドでは正しく名前解決できる上、 Netscape等からも数字のIPを直に打てばアクセスできています。 試しに/etc/hostsに[216.239.33.101 www.google.co.jp]を記述すると、 Netscapeからもアクセスできました。 dhcpのクライアントにはdhcpcd-1.3.18を[/sbin/dhcpcd -n eth0]で 起動していて、自ホストのIPは正しく取得できているようです。 /etc/host.confには[order hosts,bind]のみを記述しており、 resolve.confにはWin2k動作時に調べておいたLAN内DNSサーバの指定 [nameserver 192.168.0.1]を記述しています。 自分なりに無い知識をいくらかでも埋めようとgoogleで探し回ったのですが 全てに目を通すほどパワーが続きませんでした。 どうぞよろしくお願いします。 |
はじめまして。 あまりにも簡単な質問のようで申し訳ないのですが、 「ソケット」っていうのは、「IPアドレスとポート番号を組み合わせたもの」でしょうか? どこで読んだのか、「ポート番号とプロセスIDを組み合わせたもの」という考えが頭を離れず、 自分でもいろいろ調べたのですが、解答は見つかりませんでした。 もしかしたら見当違いな質問なのかもしれませが、 ソケットの知識をお持ちの方がおりましたら、ご教授願います。 どうぞよろしくお願い致します。 |
>>2779 has ども。最近会社でもやる気ゼロなので、回答なぞしてるんですわ。 もしかして Netscape を起動した後に dhcp クライアントを起動 してません? もしそうなら順番を逆にしてみるとか。 そうでないなら、tcpdump の結果を見せてくださいな。 あと、あらゆる gethostbyname が失敗してますか? % perl -e "use Socket;print inet_ntoa(inet_aton('www.jp.freebsd.org'))" もダメですか? >>2780 aozora > 「ソケット」っていうのは、「IPアドレスとポート番号を組み合わせたもの」 > でしょうか? 「IP アドレスとポート番号を組み合わせたもの」は相手を一意に特定するための 識別子で、たとえるなら電話番号です。 # ただし、それは IP の話。UNIX ドメインソケットでは、ファイルが識別子です。 「ソケット」は、通信路の端点で、たとえるなら電話機です。 これを同じものと考えてしまうと、例えば bind(2) が理解できなく なります。bind(2) はたとえるなら電話機に電話線をつなぐという 感じでしょうか。 > 「ポート番号とプロセスIDを組み合わせたもの」 違います。1プロセスから複数のソケットを使うことができますから。 |
初めて書き込みをします。 UNIXは、まだ初心者です。 お聞きしたい事を書き込みます。 現在、「share」コマンドでディレクトリを共有した後、「dfmount」コマンドで共有されたディレクトリにアクセス中のクライアント名を取り出そうとしています。 「dfmount」コマンドで情報が取れないのですが、どうしてなのでしょうか? 「share」の情報を書き込みます。 > /usr/sbin/share - /share rw=client "File Service" - /home rw=nini:gp7000s,root=gp7000s "File Service" - /shared rw=osl:gp7000s,root=gp7000s "File Service" > |
はじめて書き込みます。 UNIXの初心者シドです。 少し教えてほしいことが有ります。 知っていられる方は、お教え願えないでしょうか? 「share」コマンドを実行して、「dfmounts」コマンドを実行すると何も表示されません。なぜでしょうか? 「share」の情報と「dfmounts」コマンドを実行したときの表示部分を書きます。 > /usr/sbin/share - /share rw=client "File Service" - /home rw=nini:gp7000s,root=gp7000s "File Service" - /shared rw=osl:gp7000s,root=gp7000s "File Service" > /usr/sbin/dfmounts > |
UNIX初心者(パソコンも初心者です)の私にどうか教えてください。 telnetを使って、redhat環境のマシンに接続して操作をしています。 $shutdown -r now で再起動をしました。 すると、立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、立ち上がって普通は [ユーザ名(マシン名)カレントディレクトリ]$ と出るところで、マシン名がnone(本来はmizuho)になっていました。そして、書き込み可能(-wrxwrxwrx)のファイルを操作しようとすると、読取専用とエラーメッセージが出て操作できなくなってしまいました。(全ファイルそうです) いろいろやってみた結果、 $mount -o remount, rw /dev/hda5 / で、書き込み可能にはなりましたが、再起動をすると読み込み専用に戻ってしまいます。 (boot.log,messageを見てみましたが、snmpd shutdown failedと出ています。これって関係ありますか?) どなたか直し方を教えてください。 お願いします。 それと今、boot画面のメッセージをチェックしようとしているのですが、1行ずつ進める方法があるらしいです。これってどうやるのですか? |
はじめまして。 現在どうしても解決できない問題があり、書き込みました。 どなたかご存知の方いらっしゃいましたら、レスよろしくお願いします。 WEBサーバにおいてLocationヘッダで指定したURLへリダイレクトさせて、 かつリダイレクト先へのHTTPリクエストにCookieを設定したいのですが、 設定できない状態になっています。 --------------------------------------------------------- HTTP/1.1 302 Found\n Set-Cookie: test=a; domain=www.hogehoge.co.jp; path=/\n Location: http://www.hogehoge.co.jp\n\n --------------------------------------------------------- のようなレスポンスを返却するCGIを作成したのですが、上記レス ポンスを返すサーバとリダイレクト先のサーバが異なる場合、次の リクエストにCookieが付加されてきません。 Cookieを設定できるのは、自分と同じドメインのみなのでしょうか。 当たり前の事だったら申し訳ありません。 よろしくお願いします。 |
>>2785 うみ > Set-Cookie: test=a; domain=www.hogehoge.co.jp; path=/\n cookie で domain をセットしたことがないのでよく知りませんが、 無理なんじゃないでしょうか。これができるなら、任意のサーバの cookie を外部からセットできることになります。 http://www2.studyinghttp.net/cookies.html を見ると、 server-1.hogehoge.co.jp で Set-Cookie: test=a domain=hogehoge.co.jp という cookie を吐くと server-1.hogehoge.co.jp や server-2.hogehoge.co.jp に送り返されるようになる。 ということではないかと思います。 もし、「Location なしだとうまくいくが、Location ありだとダメ」 ということなら、上記の認識は間違っているんでしょうけど。 >>2784 シゲ > 立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、 このときコンソールには何が出力されていますか? 症状からすると 何かしらのエラーが発生して、Read-only で mount され、シングル ユーザモードで起動しているように見えますが、根本原因がコンソール に表示されていると思います。 >>2783 シド >>2775 レイラ 僕には全くわからない分野なので、お役に立てないようです。 |
>>2786 68user >> 立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、 > 何かしらのエラーが発生して、Read-only で mount され、シングル > ユーザモードで起動しているように見えますが あ、10分待てば起動するのなら違うのかなぁ。 > snmpd shutdown failedと出ています。これって関係ありますか? shutdown 時のエラーなので関係ないと思います (実は関係あったり するのかもしれませんけど)。 > 1行ずつ進める方法があるらしいです。 少なくとも FreeBSD では、Scroll Lock を押せばスクロールが止まり、 カーソルキーで移動できます。Linux ではどうなのかはわかりません。 |
>>2781 68user ソケットについてのご教授、ありがとうございました。 かなり間違って理解していたようですが、 お陰様でソケットの考え方について理解できるようになりました。 |
>>2786 68user お返事ありがとうございます。 早速、scroll lockで画面と止めながら(出来ました!)エラーを見てみました。 Updating /etc/fstab failed to open /proc/partitions:No such file or directory Flushing all current rules and user defined chains:ipachains:incompatible with this kernel Clearing all current rules and user and user defined chains:ipchains:Incompatible with this kernel Starting system logger Errot:MM:mm:core:failed to open semaphore file(read-only file system):OS:No such file or directory mount:special device LABEL=/boot does not exisist Starting crond:crond:can't open or create /var/run/crond/pid:Read-only file system と7箇所でエラーが出てました。 これを見て私がわかったのは、 /proc/partitionsがない /bootの何かがない と言うことです。 見てみると、/proc,/boot両ディレクトリの中がまったく存在しませんでした。 何じゃコリャ! UNIX初心者(パソコンも)にはまったく解りません。 どうか、ご教授ください。 |
こんばんは。 お仕事大変ですな。まあそう腐らずに頑張ってください >68user さてガキの使いですんません。宿題やってきました。 まずdhcpcdですが、psで確認しても起動時から動いているようなので、 Netscapeの方が先ということはなさそうです。 次にperlスクリプトですが、残念ながら、 Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at -e line 1. と表示されます。要は正引きが失敗しているようです。 逆引きは引数の渡し方がわかりませんでした。 # なんせlinuxからはweb検索にも支障をきたしているもので(^^;) 最後にtcpdumpの出力です。tcpdumpを動かしてから、 % host www.jp.freebsd.org のコマンドと、netscapeにてhttp://www.jp.freebsd.org、 http://210.157.158.42/へのアクセスなどをしてみました。 # が、記録に残っているかは私にはわかりませんでした # /usr/sbin/tcpdump tcpdump: listening on eth0 01:47:38.943528 192.168.0.39.3044 > 143.90.129.198.http: . ack 1226176673 win 8576 (DF) 01:47:38.943528 192.168.0.40.32797 > 192.168.0.1.domain: 29608+ PTR? 198.129.90.143.in-addr.arpa. (45) (DF) 01:47:38.963528 192.168.0.39.3276 > 143.90.129.198.http: S 22004303:22004303(0) win 8192 <mss 1460,nop,nop,sackOK> (DF) 01:47:38.983528 43.242.210.37.6699 > 192.168.0.33.1190: . 3236267430:3236268764(1334) ack 2911899325 win 17252 (DF) 01:47:38.983528 192.168.0.33.1190 > 43.242.210.37.6699: . ack 4294960438 win 17520 <nop,nop,sack sack 1 {4294961772:1334} > (DF) 01:47:38.993528 211.129.12.43.domain > 192.168.0.40.32797: 29608 1/2/2 (141) 01:47:38.993528 192.168.0.40 > 211.129.12.43: icmp: 192.168.0.40 udp port 32797 unreachable [tos 0xc0] 01:47:38.993528 211.129.14.134.domain > 192.168.0.40.32797: 29608 1/2/2 (141) 01:47:38.993528 192.168.0.40 > 211.129.14.134: icmp: 192.168.0.40 udp port 32797 unreachable [tos 0xc0] 01:47:39.003528 143.90.129.198.http > 192.168.0.39.3044: . 5897:6433(536) ack 0 win 32767 01:47:39.013528 192.168.0.39.3044 > 143.90.129.198.http: . ack 1 win 8576 (DF) 01:47:39.013528 143.90.129.198.http > 192.168.0.39.3044: . 6433:6969(536) ack 0 win 32767 01:47:39.013528 192.168.0.39.3044 > 143.90.129.198.http: . ack 1 win 8576 (DF) 01:47:39.023528 43.242.210.37.6699 > 192.168.0.33.1191: . 3298096123:3298097457(1334) ack 2981221337 win 17235 (DF) 01:47:39.023528 143.90.129.198.http > 192.168.0.39.3276: S 1909102369:1909102369(0) ack 22004304 win 536 <mss 536> 01:47:39.023528 192.168.0.39.3276 > 143.90.129.198.http: . ack 1 win 8576 (DF) 01:47:39.023528 192.168.0.39.3276 > 143.90.129.198.http: P 1:43(42) ack 1 win 8576 (DF) |
困っています。誰か助けてください。 UNIXのファイルシステムと他のファイルシステムの切り分けをどのコマンドを使用すればいいのかわかりません。(他のファイルシステムは、SafeFile/Globalファイルシステムです。)はじめは、fstypコマンドを使用すれば、良いと思ったんですが、UFS(UNIXファイルシステム)しか、出てきません。それにデバイス中です。と言うエラーが発生して、困っています。解決策を知っている方は、お教え願えないでしょうか? |
echoサーバ(Perl)の5行目の 5: use Socket; この文はどういう意味なのでしょうか? おしえてください。 |
echoサーバのほうはプログラムに解説してくださっているので、読んでみてなんとか理解できそうなのですが、クライアントのほうを書けそうにありません。クライアントのほうもおしえていただけないでしょうか? |
>>2786 68user お騒がせしました。出来ちゃいました。 boot画面を見ていると can't execute rc.sysinit となっていたので、rc.sysinitを見てみるとアクセス権が -rw-r-xr-x となっていました。これでは実行権がないので -rwx-r-xr-x とするとできました。 出来てしまえば簡単なことでした。 ありがとうございました。 |
初めまして。大学の授業で初UNIXに相当困り果ててるものです・・・。どうか教えてください。 /usr/dict/words とうゆうファイルは単語の先頭の文字をアルファベット順に並べたものですよね??これを単語のおしまいで分類したものだすようにしたいのです。1行コマンドで・・・。ちなみに大文字と小文字は区別しないで!!! よろしくお願いします(><) |
>>2790 has > 最後にtcpdumpの出力です。 Query 投げてないですねぇ。普通は 23:36:51.920878 192.168.0.5.2275 > 192.168.0.1.domain: 4+ A? www.jp.FreeBSD.org. (36) 23:36:52.003329 192.168.0.1.domain > 192.168.0.5.2275: 4 1/4/5 A updraft.jp.FreeBSD.ORG (251) こんな感じのが流れるはずです。念のため、 % strace dig www.jp.FreeBSD.org で流れを追ってみてください。うちの FreeBSD では (*BSD は truss) % truss dig www.jp.FreeBSD.org|egrep 'socket|connect' socket(0x2,0x2,0x0) = 3 (0x3) connect(0x3,{ sa_len = 48, sa_family = 120, sa_data = } },16) = 0 (0x0) となりますが、そちらではどういう結果になりますか? もし socket さえ行っていないようなら、/etc/host.conf とか /etc/resolv.conf の解析あたりでこけているような気がします。 なお、nslookup や host は /etc/hosts や /etc/host.conf を 参照せず、必ず DNS サーバに Query を投げるので、原因の 切り分けの際はご注意を。 > resolve.confにはWin2k動作時に調べておいたLAN内DNSサーバの指定 > [nameserver 192.168.0.1]を記述しています。 DHCP クライアントは /etc/resolv.conf を上書きすると思いますが、 上書き後の内容はどうなっていますか? あとは、DHCP をやめて、手で IP アドレスなどを設定してみると何かに 気づくかも…という役に立たないアドバイスしかないです。 >>2793 だいすけ > 5: use Socket; > この文はどういう意味なのでしょうか? Socket モジュールを使うという宣言です。利点は http://x68000.startshop.co.jp/~68user/net/perl4.html をどうぞ。 >>2793 だいすけ > クライアントのほうを書けそうにありません。 何がわからないのかわからないので、 http://x68000.startshop.co.jp/~68user/net/ を読んでくださいとしか言えません。 >>2795 飴 > これを単語のおしまいで分類したものだすようにしたいのです。 > 1行コマンドで・・・。ちなみに大文字と小文字は区別しないで!!! じゃあヒントだけ。rev というコマンドがあるならそれを 使います。rev がない UNIX なら、わかりません (perl を 使えばできるけど、問題の趣旨とは違うような気がする)。 |
あるログファイルに1行出力されるごとに、その行に特定のキーワードが あるかどうかを判断して、あった場合はその行を別のログに出力する といったことをUNIXコマンドでできないかと調べています。 イメージとしては、「tail -f」と「grep」の組み合わせみたいな 感じですが、二つのコマンドをパイプで結合してもダメでした。 何か良い手はないでしょうか? ご存知の方がいたら教えてください。 よろしくお願いします。 |
>>2797 HIDE tail -f log | grep foo でできる環境もあります。FreeBSD と Solaris2.6/8 あたりはできるはず。 というか、できない環境をしらないのでアドバイスはできませんが、tail が バッファリングしてるのかな? tail 自体それほど複雑な機能ではないので、さくっと perl などで 自作するのがいいかもしれません。 |
>>2798 68user ご回答いただきまして、ありがとうございます。 >tail -f log | grep foo でできる環境もあります。FreeBSD と>Solaris2.6/8あたりはできるはず。 こちらの環境はSolaris2.6です。 tail -f log | grep foo だと意図した形で画面に表示されるのですが、 tail -f log | grep foo >> log2 とやるとlog2には何も出力されないんです・・・・・・ 何か環境が変なのかな? >tail 自体それほど複雑な機能ではないので、さくっと perl などで >自作するのがいいかもしれません。 そうですね。実はこの処理は大容量の性能関連のログから必要な 行を抽出/判定するための使用しようとしているのですが、Perl で作ったらログの行が多いからか、逆にそのツールが動いている 時間はCPUが100%になってしまったのでUNIXコマンドでできないかと 調べている次第です。(Perlはあまり詳しくないので私の作り方が マズイだけかもしれませんが) |
>>2799 HIDE > tail -f log | grep foo >> log2 なるほど。grep が出力をバッファリングしてるからですね。ちょっと調べて みた限りでは、/dev/stderr にリダイレクトしてもダメだし、バッファリング ありにするオプションはないようなので、 % tail -f log | perl -ne '$|=1;print if m/foo/' >> log2 てな感じで。 でも、grep でなんとかなりそうな気もするなぁ…。 |
>>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言語で作りたいのですが可能でしょうか? また参考をなるものがありましたら教えて頂けないでしょうか。 よろしくお願いします。 |