
FTPでエラーメッセージについて質問です。
UNIX上でFTPコマンドを発行するのですが、
open localhost
user aaa bbb
でログインした後、以下の2つのコマンドを発行します。
sssというディレクトリはありません。
lcd sss
cd sss
ftp> lcd sss
sss: ファイルもディレクトリもありません。
ftp> cd sss
550 sss: No such file or directory.
となり、英語と日本語が混在してしまいます。
シェルでは、エラーメッセージの一部をgrepして
トラップさせているのですが、日本語もあるためうまくいきません。
そこで、export LANG=ja_JP.UTF-8
だったのを export LANG=C
に変えたところ
ftp> lcd sss
sss: No such file or directory
ftp> cd sss
550 sss: No such file or directory.
となり英語になりました。
そこで質問です。
(1)LANG=UTF8にしてる時、cd sss は何故lcd sssのエラーと異なり
英語なのでしょうか。
(2)cd sssは550のコードを返すのに何故 lcd sssはコードを
かえさないのでしょうか。
ご教示ください。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
HTTPでも404 File not found と返したり、404 NOT FOUND と返したり、サーバに依りますよね?FTPでも文言は一意ではありません。
判定方法ですが、3桁のコードはRFCで規格化されています( http://jbpe.tripod.com/rfcj/rfc-959.ej.sjis.txt /35ページ以降)ので、このコードを使ってはどうでしょうか?
例えば、cdコマンドが成功した場合には、250 CWD command successful のような数字+メッセージが表示されると思います。
200番台なら肯定的な完了コード、500番台はサーバ側エラーコードです。
この回答への補足
ありがとうございます。
結局レスポンスコードをとって対応するようにしたのですが
PUT、GET文の成功時は226番が返ってきます。
226番がGREPできない時はエラーとするように修正したのですが
コマンドの中で「LS ファイル名」も発行しており、これも成功すると226番が返ってきます。
PUTは失敗したけど、LSコマンドが成功するとやはり226番がかえるので
この時が問題になってしまいます。
226のカウントをとったりする方法しかないでしょうか。
今はそれはレアなケースなので対応しなくてもいいかなと思ってもいます。
No.2
- 回答日時:
550というエラーコードは、FTPクライアントとサーバ間での取り決めです。
ローカル側のファイル操作に対しては、サーバと通信しません。http://jbpe.tripod.com/rfcj/rfc-959.ej.sjis.txt
FTPクライアントで cd というコマンドを打つと、CWDコマンドに翻訳されてFTPサーバに通信し、その結果がサーバから返されると思います。
lcd コマンドに対するメッセージは、ftpのバイナリファイルに組み込まれたものだと思います。( strings /usr/bin/ftp )
ありがとうございます。
通信するコマンドとそうでないので、異なるということですね。
言語が同じならばエラーメッセージは同じになるけど
FTPサーバを返せば、コードが頭についてくる 所が
違うのですね。
納得しました。
また、下記の補足に便乗ですが、質問をしましたので
宜しければご教示下さい。

No.1
- 回答日時:
lcdはローカル側のディレクトリ変更です。
ローカルのOS上でディレクトリ変更のシステムコールが実行され、
OSからはLANGで指定されたロケールの言語でエラーメッセージが返されます。
要するに、シェル上で
cd sss
とやったのとまったく同じことです。
またこれはFTPプロトコルを介しません。
cdはサーバ側のディレクトリ変更です。
システムコールはサーバ側のOSで実行され、
そのOS上のロケールでエラーメッセージが返され、それを
FTPサーバーがクライアントに伝えてきます。したがって、
サーバ側のロケールのメッセージとなります。
要するに、このメッセージは、サーバ側のシェルで
cd sss
とやったときと同じです。クライアント側のLANGの影響は一切受けません。
またこれはFTPプロトコルを介すので、
プロトコル上のエラーコード550がつきます。(これをエラーコードごと表示するかどうかはFTPクライアント次第)
この回答への補足
皆様ありがとうございます。納得です。
FTPコマンド内にlcdやls がある場合はFTP通信に関係
ないのでローカルの言語に依存する と理解していいでしょうか?
これとは別で、FTP通信によって発生したエラーメッセージ
が日本語だったり、英語だったりするのは、相手側のFTPデーモン
の言語によって変わると理解してよいでしょうか?
また別なのですがエラートラップを文字列のgrepによってやってるのですが(FTP結果に対しgrep -i "Unknown host" 等)
日本語で帰ってきた場合スルーしてしまいます。(全てのエラーにひっかからなくなった場合、正常終了する仕様)
正常以外はなにかのエラーとして最後にトラップをつけたいのですが
日本語でも英語でもうまくいくやり方はないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Mac OS PATHを使ってcdなどで簡単に移動できるようになりたい 3 2023/05/13 14:22
- UNIX・Linux AWSのEC2のZabbixユーザーでawscliコマンドが実行できない状態を解決する 1 2022/12/06 22:17
- その他(プログラミング・Web制作) Arduinoに関する質問 4 2023/08/07 21:19
- UNIX・Linux bashでブランク(空白)を検索文字列として指定する方法 1 2022/04/13 22:29
- 画像編集・動画編集・音楽編集 DVD Styler トラブル解決方法 6 2022/10/29 16:00
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- 教えて!goo 教えて、goo ランキング 10 2023/03/18 13:59
- 教えて!goo えっ、、、どういう事?? 5 2023/05/11 18:08
- その他(プログラミング・Web制作) MicroPythonコード 1 2023/07/05 15:20
- UNIX・Linux Linuxの実行結果を修正したいです。 6 2022/11/22 12:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
net use /d の強制実行
-
Linuxのスラッシュ,ピリオドの...
-
FTPのエラーメッセージで質問で...
-
Windowsのローカルディレクトリ...
-
ディレクトリを移動したい
-
Linuxのバイナリファイル参照方法
-
tarで纏める際に、複数場外した...
-
Apache2.4のダウンロードについて
-
ソフトのインストール場所?
-
cygwin(bash?)でlsしたときのデ...
-
コマンドの出力結果の比較
-
tarで圧縮したファイルの解凍時...
-
ls -1R の結果をフルパスで欲しい
-
Isコマンドについて
-
makeというコマンドに関する質問
-
SFS の起動が出来ません
-
ln ハードリンクをワイルドカー...
-
特定のディレクトリでコマンド...
-
コマンドプロンプトでコマンド...
-
所有者不明のディレクトリやフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
net use /d の強制実行
-
tarで纏める際に、複数場外した...
-
Windowsのローカルディレクトリ...
-
tar.bz2ファイルのインストール...
-
Apache2.4のダウンロードについて
-
誤って/home配下を削除してしま...
-
tarでフォルダに上書き
-
ls -1R の結果をフルパスで欲しい
-
コマンドプロンプトでコマンド...
-
zshのコマンド履歴がヒストリフ...
-
フォルダのreadonly属性の解除方法
-
バッチファイルについて
-
rc.d や init.d の 「.d」の意味
-
ImageMagickの使い方を教えて下...
-
コマンドプロンプトで何故パラ...
-
シェルスクリプトを使ったSCPの...
-
絶対パスでアーカイブされたフ...
-
コマンド スペースを含むディ...
-
tarで圧縮したファイルの解凍時...
-
cygwin(bash?)でlsしたときのデ...
おすすめ情報