前へ << FTP クライアントを作ってみよう (3) | FTP クライアントを作ってみよう (5) >> 次へ |
これらのコマンドは、全てコマンドコネクションを通じて、 FTP クライアントが FTP サーバに送るものです。 データコネクション上をコマンドが送信されることはありませんし、 FTP サーバから FTP クライアントにコマンドが送信されることはありません。
FTP には、OS と同じくカレントディレクトリという概念があり、 ファイル・ディレクトリの指定には相対パスを使うことができます。 CWD・RETR・STOR・LIST・NLIST・MKD・RMD・RNFR・RNTO・MDTM など、 ファイル名やディレクトリ名を引数として受けるものは、
CWD /home/username/public_html RETR /tmp/fileなどと、絶対パスで表記してもよいですし、
LIST dir/subdir LIST . MKD ../newdirと、相対パスを使うこともできます。「.」や「..」を、 「カレントディレクトリ」、「一つ上のディレクトリ」という意味で使えます。
ここで説明する仕様は、現在の多くの FTP サーバでは使用可能だと思われますが、 正式なものではありません。例えば 「CWD コマンドの引数を省略するとホームディレクトリに移動する」は、 RFC では保証されていません。
USER username 331 Password required for username. PASS password 230 User username logged in.
RNFR a 350 File exists, ready for destination name RNTO b 250 RNTO command successful.とする。
MDTM filename 213 19990522151430この例では、ファイル filename の最終更新時刻を取得している。 19990522151430 というのは「1999年5月22日15時14分30秒」ということだが、 GMT 表記であることに注意。JST だと +9 時間 なので、「1999年5月23日0時14分30秒」を意味する。
PWD 257 "/usr/home/username/public_html" is current directory.
CWD /var/ 250 CWD command successful. PWD 257 "/var" is current directory. CWD /var/log 250 CWD command successful. PWD 257 "/var/log" is current directory. CWD .. 250 CWD command successful. PWD 257 "/var" is current directory. CWD 250 CWD command successful. PWD 257 "/usr/home/username" is current directory.
PORT 10,0,0,1,19,136 200 PORT command successful.と送信する (5000=19×256+136)。 その後 FTP クライアントが LIST やRETR コマンドを送信すると、 FTP サーバ側が 10.0.0.1 のポート 5000 に接続し、データの送受信が始まる。
PASV 227 Entering Passive Mode (10,0,0,1,156,115)と、IP アドレスとポート番号が送られてくる。 その後 FTP クライアントが LIST やRETR コマンドを送信し、 PASV のレスポンスで示された IP アドレス (10.0.0.1) + ポート番号 (40051=156×256+115) に接続すると、データの送受信が始まる。
SITE CHMOD 755 filename 200 CHMOD command successful.この例は、ファイル filename のパーミッションを 755 に変更している。
新しく作成するファイルのパーミッションを決める際には、umask という値が関わってくる。 現在の umask の値を参照するには、引数を渡さず SITE UMASK とする。
SITE UMASK 200 Current UMASK is 022umask の値を変更するには、SITE UMASK の後に設定したい umask の値を渡す。
SITE UMASK 002 200 UMASK set to 002 (was 022)詳しくは UNIX コマンドリファレンス: umask を参照してほしい。
SITE コマンドでどのような操作が可能かは、HELP SITE で知ることができる。 SITE CHMOD に対応していない FTP サーバもある。
REST 23456 350 Restarting at 23456. Send STORE or RETRIEVE to initiate transfer.とした後に RETR コマンドを使うと、ファイルの 23457 バイト目から転送が開始される。
220 Hostname FTP server (Version 6.00) ready. 226 Transfer complete. 227 Entering Passive Mode (10,0,0,1,156,92) 331 Password required for username. 500 'hoge': command not understood.レスポンスの先頭にはレスポンスコードと呼ばれる 3 桁の数字が書かれており、 この数字によって、処理が成功したか失敗したかなどを FTP クライアントが 知ることができします。
複数行のレスポンスが渡される可能性もあります。 その場合は
xyz-..... ... ... xyz ....という風に、最初に
xyz(レスポンスコード)-(ハイフン)で始まり、
xyz(レスポンスコード) (スペース)で終わる、という構造になります。例えば、 anonymous ftp ftp://ftp.jp.FreeBSD.org にログインすると、
230- Welcome to FTP.JPIX.ad.jp. ########## ######### ### 230- Located in Tokyo, Japan. # # ## # ## # (中略) 230- Please send E-mail to amaike@iri.co.jp if you have any questions 230- or problems. thanks! 230- 230 User ftp logged in. Access restrictions apply.となります。この例では途中の行も「230-」から始まっていますが、 FTP プロトコルとしては、途中の行はどのような文字から始めても構いません。
220 Hostname FTP server (Version 6.00) ready.というレスポンスが返されます。USER・PASS コマンドで認証に成功すると、
230 User Username logged in.となります。その他、PWD・CWD・PORT・PASV・LIST・RETR・STOR など、 そのコマンドが成功すると、
257 "/usr/home/zxr400" is current directory. 200 PORT command successful. 227 Entering Passive Mode (127,0,0,1,156,102) 226 Transfer complete.です。
USER username 331 Password required for username.というレスポンスが返ってきます。この後に PASS コマンドを送らなければいけません。 また、ファイル名を a から b に変更しようと RNFR コマンドを送信すると、
RNFR a 350 File exists, ready for destination nameとなります。この後、RNTO で変更したいファイル名を送らないといけません。
425 Can't build data connection: Connection refused.となります。また、長時間入力がなかった場合、タイムアウトになりますが、そのとき
421 Timeout (30 seconds): closing control connection.となります。
530 Login incorrect.となります。パーミッション的に移動できないディレクトリに CWD しようとすると、
550 dir: Permission denied.となります。その他、存在しないファイルや読めないファイルを RETR しようとしたり、定義されていないコマンドを送信すると
500 'HOGE': command not understood.などとなります。
前へ << FTP クライアントを作ってみよう (3) | FTP クライアントを作ってみよう (5) >> 次へ |
ご意見・ご指摘は Twitter: @68user までお願いします。