FTPコマンドで、ファイル転送する方法と、FTPプロトコルについて、説明します。
telnetでファイル転送?(FTP)のページで、telnetコマンドを使ってFTPプロトコルを使おうとしましたが、ユーザ認証しかできませんでした。
そこで、コマンドモードのFTPコマンドを使って、FTPプロトコルを解析してみましょう。
コマンドモードのFTPコマンドには、-dオプションがあり、使用しているFTPプロトコルを表示することができますので、この機能を使います。
最後に、ftpコマンドによるファイルの一括転送方法を紹介します。
FTPコマンドは、ホスト名とポート番号を指定して起動します。
すると、ユーザ名とパスワードを聞いて来るので入力します。
ユーザ認証がOKの場合、各種ftpコマンドが使えます。
bye(quit/exit)コマンドで、終了します。
FTPコマンドには、以下のサブコマンドがあります。
ftpコマンド | 使用FTPプロトコル | 機能 |
---|---|---|
ftp | USER PASS SYST | FTPを起動する |
ls | PORT / PASV LIST | リモートのファイルの一覧を表示 |
pwd | PWD | リモートのカレントディレクトリを表示 |
cd | CWD | リモートのカレント作業ディレクトリを移動 |
mkdir | MKD | リモートのディレクトリ作成 |
!ls | ローカルのファイルの一覧を表示 | |
!pwd | ローカルのカレントディレクトリを表示 | |
lcd | ローカルのカレント作業ディレクトリを移動 | |
get | TYPE SIZE PORT / PASV RETR MDTM |
ファイルをダウンロード |
mget | PORT / PASV NLST *TYPE *SIZE *PORT / PASV *RETR *MDTM |
複数のファイルをダウンロード |
put | TYPE PORT / PASV STOR |
ファイルをアップロード |
mput | *TYPE *PORT / PASV *STOR |
複数のファイルをアップロード |
passive | Passiveモードの切り替え | |
bin / binary | TYPE | バイナリ転送モードに切り替え |
asc / ascii | TYPE | ASCII転送モードに切り替え |
bye / quit / exit | QUIT | FTPコマンド終了 |
各サブコマンドで使用するFTPプロトコルの対応もまとめてあります。
mgetやmputでは、*の付いたFTPプロトコルが繰り返し使われます。
ローカル側の処理を行った場合は、FTPプロトコルは使われません。
では、実際にFTPコマンドを-dオプションで使ってみましょう。
FTPプロトコルは、---< の後に表示される、英字4文字のコマンドを発行します。
また、返却値の先頭の数字3桁が、リターンコードになります。
Linux# |
まず、ユーザ名を入力します。
Name (localhost:joe): |
次に、パスワードを入力します。
今回は、annonimous FTPを使いますので、マナーとして、メールアドレスを入力します。
Password: |
cdコマンドで、カレントディレクトリをetcに移動します。
ftp> |
lsコマンドで、ディレクトリ内のファイル一覧を表示します。
ftp> |
PORTコマンドは、データ転送用のIPアドレスと、ポート番号を渡します。 最初の4桁がIPアドレスで、残りの2桁がポート番号です。 ポート番号は、1桁目 * 256 + 2桁目で計算した値です。
getコマンドで、groupというファイルをダウンロードします。
ftp> |
最後に、bye(quit/exit)コマンドで終了します。
ftp> |
このように、ftpコマンドの-dオプションを使うことにより、FTPプロトコルの送受信データの流れを見ることができます。
同じファイルを定期的に転送する場合や、複数のファイルを一括して転送する場合は、よく発生します。 このような場合には、FTPコマンドで一括転送すると便利です。 以下に、その方法を紹介します。
#!/bin/csh -f #"@(#)ftp_all.sh 1995/07/01 Copyright(C)1995 ASH" # # name: ftp all files # ftp -n host_name << _EOD user user_name password passive binary cd /directory get file_name bye _EOD |
このシェルを参考にして、以下の変数の値を変更すれば、一括転送できます。 ただし、パスワードをファイルに記述することになりますから、必ず、ファイルの参照権ははずしましょう。 _EODまでの間のコマンドが、バッチ形式で実行されます。
host_name | ホスト名 |
user_name | ユーザ名 |
password | パスワード |
diectory | ディレクトリ名 |
file_name | ファイル名 |