おひさしぶりです。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` は正しいと思います。なんでエラーになるんだろう。 |