>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 を使う」が解でしょうか。 |
はじめまして。 考えても考えてもわからないことが ありますのでご教授下さい。 あるファイルに aaaaああああaaaa いbbbbbbbbbbbい のような行があって、 各行から2バイトの文字だけを 抜き出したいのですがどうすれば できるのでしょうか? イメージとしては上のファイルを このように出力したいのです。 ああああ いい どうしてもわからないので よろしくお願いします。 |
>>3067 68user 私もcompress→uncompressと試してみました。 解凍後のファイルサイズも一致しており、上手くいっているようです。 とても助かりました。ありがとうございます。 実はもうひとつ教えていただきたいことがありまして・・・ cshellで文字列操作は可能なのでしょうか? 下記を解決する方法があれば教えて下さい。 Q1.指定したディレクトリからファイル名を変数に取得。 Q2.上記Q1でAAA_YYYYMMDD.txtと言う名前を取得できたとして、 YYYYMMDDのみを切り出して、shell内で用意した日付と大小を 比較出来るのでしょうか? ご存知の方、教えて下さい(T_T) |
>>3074 68user ありがとうございました。 環境が整ったときにtcshで確認しようと思います。 |
親プロセスで子プロセスをforkするC言語プログラムがあります。 子プロセスは複数作成され、処理が終わると自動的に消滅します。 親プロセスで現在存在している子プロセスの数を把握したいのですが、簡単な方法はありますでしょうか。 子プロセスの数だけ分かれば良いです。 子プロセス数カウンタを設け、forkでインクリメントし、子プロセスの終了を検知してデクリメントする方法もあるかと思いますが、もっと簡単な方法があれば教えていただけますでしょうか。 よろしくお願いします。 |
>>3075 美春 考え方を変えて、日本語以外を除くとするなら % sed 's/[a-zA-Z0-9]//g' < file など。本当に日本語だけを拾いたいなら http://www.din.or.jp/~ohzaki/perl.htm#JP_Match を参考に perl でやるのがよいでしょう。 >>3076 山田 > cshellで文字列操作は可能なのでしょうか? foreach file (AAA_*.txt) set date=`echo $file | sed 's/^AAA_\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*/\1/'` echo '$file -> $date' if ( $date < '20020114' ) then echo $date endif end 仕事や課題を丸投げされると答える側もつまらないです。質問するなら もっとおもしろい質問をしてください。 お金を払っていただけるなら、(お仕事として) つまらん質問にも 答えますけど。 >>3078 koko > 親プロセスで現在存在している子プロセスの数を把握 > したいのですが、簡単な方法はありますでしょうか。 簡単、というか適当な調べ方でよいなら、ps して、親プロセスが 自分であるプロセス一覧を取得、などがあると思いますが、 ps しているプロセスは除くとか余計な処理をしなきゃいけない と思うので、結果的にはあまり簡単じゃないと思います。 - 親がいろんな仕事をするのなら、fork するときに インクリメントして、SIGCHLD を受けるたびに デクリメント (>>2988 を参照) - 親は子の終了を待つだけなら、fork するときに インクリメントして、wait して、wait から戻って きたらデクリメント。 でいいんじゃないでしょうか。 |
>>3079 68user やはり、ご指摘の方法が妥当なところのようですね。 この方法で対応する事とします。 ありがとう御座いました。 |
>>3076 山田 ご回答ありがとうございます。 >仕事や課題を丸投げされると答える側もつまらないです。質問するなら >もっとおもしろい質問をしてください。 了解しました。 先日、ほぼ一日調査してたのですが出来なかったもので。。。 申し訳ないです。。 |
>>3067 68user うまくいきました。 本当にありがとうございました。 perlの方も挑戦してみます。 度々の質問で申し訳ありませんが、 grepの正規表現で"'"(シングルクォーテーション) を出さないようにしたいのですが、 うまくいきません。 grep '[\']' <file> だとダメみたいです。 どうすればよいのでしょうか? 初心者の質問ですみません。 よろしくお願いします。 |
>>3082 美春 grepは行単位で処理するので、シングルクォートを含む行を表示しない、 という処理は可能です。grepに-vをつけると、条件に合わない行のみを 出力するので、 % grep -v "'" filename とすればfilenameファイル内のシングルクォートを含まない行のみを 出力してくれます。 もしシングルクォートを文字単位で削除したいのであれば、 % sed -e "s/'//g" < filename とすればよいと思います。 |
No. 3083 has 感動してしまいました。 manで調べろと怒られるかと 思ったのにご丁寧に ありがとうございました。 |
こんにちは、山田です。 shellにワイルドカードを含んだ引数を文字列として渡したいのですが上手くいきません。 例えば、 aaa.sh zz*.txt や aaa.sh zz\*.txt と渡すとローカルにある対象となるtxtファイルを全て引数としてもってきてしまいます。 aaa.sh zz'\''*'.txt などとしてもダメなようです。 出来ないのでしょうか? 申しわけありませんが、教えて下さい。 |
>>3085 山田 さん、 シェルはなんでしょうか? zsh だと > echo *.txt aaa.txt bbb.txt ccc.txt > echo '*.txt' *.txt のようになりました。 |
>>3086 ふくし 様、ご回答ありがとうございます。 cshです。 やりたいことは、 aaa.sh ZZ*.txt と指定した時にshell内で、 set filename = arg[1]とし、 filenameに"ZZ*.txt"という文字列をセットしたいのです。 |
>>3087 山田 さん 下で書いたつもりだったんですが (^^;;; 引数「ZZ*.txt」全体をシングルクォート '' で囲んだらどうなります? |
>>3086 ふくし 様 >引数「ZZ*.txt」全体をシングルクォート '' で囲んだらどうなります? やはりカレントの該当するファイルが引数に入ってしまいます。 arg[1]の内容が"ZZa.txt ZZb.txt ZZc.txt"というような感じです。 んー、こまっております(^^;) |
>>3089 山田 % cat hoge set filename='*.c' echo $filename % csh -fx hoge set filename=*.c echo *.c a.c b.c c.c d.c というわけで、csh では ただの文字列として set しても、 glob 展開されます。よって、参照するたびに echo "$filename" とダブルクォートで囲むか (面倒)、あるいは set noglob で変数を展開しないようにする、と。 もっとよいのは perl や ruby などに乗り換えることです。 |
>>3089 山田 さん、 知らぬこととはいえ失礼しました。 そんな致命的な非互換があろうとは、、。 シュバング行で #! /bin/sh と書いてしまって、Bourne Shell で書き直すってのは どうでしょうね。 コマンドを手入力するのは csh 系が、 シェルスクリプトを組むのは Bsh 系がいいって聞いた気がします。 (気のせいか? ;;; もっぱら私はちょっとでも論理のあることは Perl にするのでどっちも知りませんが、、。 |
始めましてopといいます。 ・・・いきなり質問で申し訳ないのですが、 掲示板を作っていて コメントを書き込んだ後に更新をすると、 前のコメントが追加されてしまいます これを回避する為にはいったいどんなコードに 書けがよいのでしょうか? 宜しければアドバイスの程お願いします。 |
>>3092 op 書き込み後に↓こんなHTMLを表示すればいいのでは。 <html><head><title>書きこみました。</title><meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"><meta content=5 http-equiv=refresh></head><body>書きこみが終わりました。<br><br>画面を切り替えるまでしばらくお待ち下さい。<br><br></body></html> 別のページに移動させたければ、 <meta content=5 http-equiv=refresh> ではなく、 <meta content=5;URL=../homepage/index.html http-equiv=refresh> としてみる。 ・・・といった方法ではどうでしょう。 |
以前にBASIC認証の質問のご回答を頂きありがとうございました。 おかげさまで認証を行うサイトへのアクセスが出来るようになりました。 現在はPOSTが行えるクライアントを作成中です。 POST及びchunkedに関する質問ですが、 あるサイトにアクセスした際に Content-type: text/x-hdml; Charset=Shift_JIS Transfer-Encoding: chunked 省略 postmethod="post" postdata="xxxxxxx" 省略 とのレスポンスがあり print SOCKET "POST /$path HTTP/1.1\r\n"; print SOCKET "Host: $host\r\n"; print SOCKET "User-Agent等リクエストヘッダ" $message = "xxxxxxx"; $len = length($message); print SOCKET "Content-length: $len"."\r\n\r\n"; print SOCKET "$message"; にてPOSTを行っているのですが、POSTされません。 原因としてはどういった事が考えられますでしょうか。 chunkedでエンコードされ送られたデータはPOSTする際もchunkedで エンコードして送り返さなければいけないのでしょうか。 もしエンコードしたデータをPOSTしなければいけない場合はchunkedの エンコード方法をお教え下さい。 宜しくお願い致します。 |
>>3093 DQN..cc様 早速のレス有難う御座います♪ なるほど・・・。 確かにこういった処理をする掲示板なんどか見かけた事がありました 本来の意味はこういう事?だったのですね(多分 それと、また質問で恐縮なのですが リフレッシュ以外にも他の方法なんかありますかね?(^^; |
>>3095 op ここの掲示板では書き込みのたびに書き込み内容のMD5を作成し、 キャッシュしておいた最新数件分のMD5と同一の場合には記録しない、 という方式を採用しています。 詳しくはここの掲示板のソースを参照してみてください。 |
>>3094 しん >chunkedでエンコードされ送られたデータはPOSTする際もchunkedで >エンコードして送り返さなければいけないのでしょうか。 そんなことは無いです。 >もしエンコードしたデータをPOSTしなければいけない場合はchunkedの >エンコード方法をお教え下さい。 要するにデータを細切れ(例えば1024byte毎)にして、 サイズ(16進) データ サイズ(16進) データ … 0 とすればいいだけです。(see http://www.studyinghttp.net/rfc_ja/2616/sec3.html#sec3.6.1) で、解決方法ですが、とりあえずHTTP/1.0で送ってみて下さい。 それでも失敗した場合は、とりあえずチャンク周りが原因ではありません。 |
>>3096 has様 MD5ですかぁ〜レベルが一気に上がったような気がしますが、 これからさっそく勉強していきたいと思います(苦笑 ほんとにhasさん、DQN..ccさん有難う御座いました。 |
Linux User という本に5つのディストリビューションが一気に 付録についてるので慌てて買ったんですけど、 よく考えるとコレ(よく考えなくても)CD じゃなくて DVD なんですよね、、。 会社で遊んでるマシンが1個あって、ただし会社のマシン管理のヒトが バックアップしてくれないから、バックアップデバイス兼ねて この機会に DVD-RAM を入れようかなあと思ったんですが、 Linux で読める DVD-RAM ドライブってあるんでしょうかね。 じっさいにはネットワーク経由で Debian(woody)を入れたので、 もう雑誌の付録は必要なくなったんですが、、 |
>>3099 ふくし > Linux で読める DVD-RAM ドライブってあるんでしょうかね。 FreeBSD でも DVD-RAM を読み書きできるくらいですから、 できなくはないでしょうけど、具体的な機種名などは わかりません。 検索すると DVD-RAM 対応カーネルパッチが云々などと いうのが引っかかるのですが、Linux 事情に疎いので それが最新の情報なのか判断できないです。 # てゆーか、DVD-RAM どころか CD-R さえ使ったことが # ないので。 |
findコマンドについて教えてください。 find . -user root とするとカレントディレクトリ以下の 所有者がrootになっているファイルが引っかかるかと思い ます。 それではなくて、所有者がrootになっていないファイルを 引っ掛けたいと思うのですが、その場合findコマンドはどの ように使えばいいでしょうか? 宜しくお願いします。 |