|
>>3365 /tk > を読んだ後に cgi-ml で得た情報をコッチにも提供して欲しい気持ち。 http://script.lovely.to/bbs/infolng.cgi?print+200309/03090012.txt には報告して、こっちには報告してくれないのは嫌われている からでしょうか。 って、どうせもう読んでないだろうからどうでもいいんですが。 最近は返事がなくても、クイズのつもりで回答しています。 悟りの境地に達したのかもしれない。 >> my ($ID, $name, $old) = split($_, '<>'); > split の引数が逆ですぜ。 おっと失礼しました。 my ($ID, $name, $old) = split('<>', $_); ですね。 |
|
ftp上のlsの挙動に関する質問です。 ftpサーバのOSはSolaris9です。 Bシェルでクライアント側のプログラムを作成しています。 ftp上で下記のようにワイルドカードでファイルを指定し、その結果をlsresult.txtファイルに出力しようとしています。 ftp>ls ?????.txt lsresult.txt しかし、?????.txtに該当するファイルが無いと、クライアント側にはlsresult.txtファイルが作成されません。 様々な挙動調査の結果、lsを行うディレクトリがrootユーザーのものだとlsresult.txt自体が作成されませんが、一般ユーザーだと0バイトのlsresult.txtが作成されるという挙動の差異がありました。 lsに該当するファイルがなかった時に表示される「No such file or directory」というメッセージがlsresult.txtに出力される事を期待していますが、そのメッセージが応答されていないようです。 また、プログラムからでなく、コマンドラインから同じ事をしても同様の挙動でした。 なお、Solaris8等の他のマシンで動作確認したところ、lsに該当するファイルが無い場合には、lsresult.txtに「No such file or directory」のエラーメッセージが出力されました。 エラーメッセージの出力に関する設定、ftpdの違い、OSの違い等、疑うところはいろいろあるのですが、ftp上のls自体は機種等の環境に依存してしまうものでしょうか。 上記の説明で何が問題か分かりますでしょうか。 よろしくお願い致します。 |
|
>>3368 gaji ftp サーバの OS は Solaris9 だと言うことはわかりましたが、 クライアント側の環境は何ですか? ftp プロトコル自体には結果をファイルに落とすかどうかという やりとりはありません。よって、ファイルに落とすか処理を行なう のはクライアント側です。まずはクライアント側の環境を疑った 方がよいと思います。 > lsを行うディレクトリがrootユーザーのものだとlsresult.txt自体が > 作成されませんが、一般ユーザーだと0バイトのlsresult.txtが作成 > されるという挙動の差異がありました。 「ls を行うディレクトリ」というのは、 ftp> cd /hoge ftp> lcd /fuga ftp> ls ?????.txt lsresult.txt としたときの「/hoge」のことを指していますか? それとも「/fuga」の ことを指していますか? また、ftp クライアントを実行するユーザの違いで挙動が変わりますか? |
|
>>3369 68user 早速回答いただきましてありがとうございます。 今、お答えできる情報のみで申し訳ありませんが回答致します。 >ftp サーバの OS は Solaris9 だと言うことはわかりましたが、 >クライアント側の環境は何ですか? Solaris2.6です。 >「ls を行うディレクトリ」というのは、 > ftp> cd /hoge > ftp> lcd /fuga > ftp> ls ?????.txt lsresult.txt >としたときの「/hoge」のことを指していますか? それとも「/fuga」>のことを指していますか? /hogeの事を指しております。 クライアント側は同じ状態にしておいて、FTPサーバ側をいろいろ変えて挙動が変換するので、サーバ側の問題かと思っていましたが、クライアント側も調べてみます。 |
|
>>3370 gaji ftpのlsを調査した結果、以下の事が分かりました。 ---------Solaris8がFTPサーバの時---------------------------- ftp> ls ?????.txt local.txt 200 PORT command successful. 150 ASCII data connection for /bin/ls (192.168.122.8,45207) (0 bytes). 226 ASCII Transfer complete. local: local.txt remote: ?????.txt 49 bytes received in 0.012 seconds (3.90 Kbytes/s) ---------Solaris9がFTPサーバの時---------------------------- ftp> ls ?????.txt local.txt 200 PORT command successful. 550 ?????.txt: No such file or directory. Solaris8のケースでは、/bin/lsによって処理されて、該当ファイルが存在しなくてもlocal.txtが作成され、中にエラーメッセージが出力されました。 Solaris9のケースでは、/bin/lsを使用していない?様です。 ftpdの内部コマンドで処理されているのでしょうか。 この場合は、local.txtが作成されていません。 ちなみに、ftp上でls -a等を行うと、Solaris8,9共に/bin/lsで処理されているようです。 lsとls -aでは、FTPプロトコルはNLSTとLISTのように違うと思いますが、インターネットで調べた限りでは「ls -aやdirなどは/bin/lsで処理され、lsはftpdの内部コマンドで処理される事が多い。」との記述がありました。しかし、今回のケースではSolaris8でのlsは/bin/lsで処理されているようです。ftpのNLSTが内部コマンドを使用するか、/bin/lsを使用するかは設定可能なものでしょうか。 もし、Solaris9でのlsも/bin/lsを使用するように設定変更可能なものであれば、設定変更して動作検証したいと思います。 もし、ご存知でしたらご教授いただきたいと思います。 |
|
>>3371 gaji なるほど、ftpd の挙動が変わったのですね。 > ls -aやdirなどは/bin/lsで処理され、lsはftpdの内部コマンドで > 処理される事が多い。 そういう実装が多かった、というのは確かかもしれません。 ただ、ProFTPD のように /bin/ls に一切頼らない ftp サーバもありますので、あくまで「多かった」という程度 だと思います。 > ftpのNLSTが内部コマンドを使用するか、/bin/lsを使用するかは > 設定可能なものでしょうか。 Solaris8, Solaris9 の ftpd を見る限りでは、そのような 設定はできないようです。 http://www.freebsd.org/cgi/man.cgi?query=ftpd&&manpath=SunOS+5.8&format=html http://www.freebsd.org/cgi/man.cgi?query=ftpd&&manpath=SunOS+5.9&format=html > ftp> ls ?????.txt local.txt > 200 PORT command successful. > 550 ?????.txt: No such file or directory. もしクライアント側が LIST を発行しているとしたら (ftp -d で確認できます)、LIST に対して 550 を返すのは RFC 違反ではないかなぁと思いました。 http://hp.vector.co.jp/authors/VA002682/rfc959j.htm より引用 以下の表では、それぞれのコマンドごとの成功・失敗の応答を一覧表にしてあ る。これらは、確実に忠実でなくてはならない。サーバーは応答中の文章を変更 してもよいが、その意味、コード番号により示される動作と指定されたコマンド 応答シーケンスは変更してはならない。 コマンド応答シーケンス LIST 125, 150 226, 250 425, 426, 451 450 500, 501, 502, 421, 530 この解釈が正しいなら、Sun に文句を言えば直してくれる かもしれません。 ただ、ftp は規格が曖昧で、実装依存の塊みたいなものなので、 ls してクライアント側で grep した方が後々のためにもよい かもしれません。ファイルに落として grep するとか、 ftp> ls . "|grep ^.....\.txt$ >hoge" とするとか。 |