|
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を使用するように設定変更可能なものであれば、設定変更して動作検証したいと思います。 もし、ご存知でしたらご教授いただきたいと思います。 |