UNIX/Linuxの部屋 ftpコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド ftp ファイル転送ユーティリティ このエントリーをはてなブックマークに追加

最終更新


UNIX/Linux の ftp コマンドは、ローカルホストから別のホストに接続し、ファイルを送信したり受信したりすることができるプログラムである。接続先には FTP サーバが動いている必要がある。

FreeBSD では ftp コマンドは標準でインストールされているが、Linux などではインストールされていない場合がある。その際はパッケージからインストールすること (おおむね ftp という名称のパッケージで配布されているようだ)。



ssh・scp との関係性
ftp コマンドは FTP プロトコルで FTP サーバとやりとりをするクライアントプログラムである。現在使われる FTP プロトコルは 1985年発行の RFC 959 で定義されており、とても歴史のあるコマンド・プロトコルである。しかしながら FTP の最大の欠点は、FTP プロトコルにおいて認証時のパスワードやデータ送受信の内容は一切暗号化されていないことである。よって暗号化に対応した sftp コマンドや scp コマンドを使うことが望ましい。「それはわかっているが、わたしは ftp コマンドについて知りたいんだ」というあなたはこのまま先を読み進めてほしい。

ftp コマンドの基本的な使い方
anonymous FTP サイトからファイルをダウンロードする場合は、ユーザ名に「anonymous」か「ftp」、パスワードに自分のメールアドレスを指定する。たまに「ftp」ではダメで、「anonymous」と入力しなければならない FTP サーバもある。

また、クライアントのマシンが逆引きできない (IP アドレスからホスト名への変換ができない=DNS の設定がされていない) とログインさせてくれない anonymous FTP サイトもある。

ftp://ftp.hoge.com/pub/sample/test.tgz をダウンロードする場合の操作例を以下に示す。
% ftp
ftp> open ftp.hoge.com (FTPサイトに接続)
Connected to ftp.hoge.com
220 ftp.hoge.com FTP server (UNIX(r) System V Release 4.0) ready
User (ftp.hoge.com:(none)) : ftp(あるいはanonymous)
331 Password required for ftp
Password: 自分のメールアドレス(適当に入力しても問題ないが、マナーとして正しいメールアドレスを入力する)
230 User ftp logged in
ftp> ls (カレントディレクトリのファイル・ディレクトリを表示)
(ファイル・ディレクトリ一覧が表示される)
ftp> cd pub/sample
ftp> get test.tgz
ftp> bye (FTP終了)

主要コマンド一覧
open リモートホストに接続
close リモートホストへの接続を切断
user パスワードを間違った場合は、user コマンドで再度ログインし直すことができる。
ls ファイル・ディレクトリ一覧を表示
メタキャラクタを使って、
ftp> ls *.txt
などと、拡張子が txt のファイル一覧だけを表示することもできる。
cd リモートホストのカレントディレクトリを指定したディレクトリに変更。
引数なしで実行すると、(リモートの) ホームディレクトリに移動する
lcd ローカルホストのカレントディレクトリを指定したディレクトリに変更。
引数なしで実行すると、(ローカルの) ホームディレクトリに移動する
pwd リモートホストのカレントディレクトリを表示
bye ftpを終了
get ファイルをリモートホストからローカルホストに転送する
put ファイルをローカルホストからリモートホストに転送する
ftp> pwd (リモートのカレントディレクトリは /home/remote)
257 "/home/remote" is current directory.
ftp> !pwd (ローカルのカレントディレクトリは /home/local)
/home/local
ftp> get file1
⇒ /home/remote/file1 を /home/local/file1 に転送する。
ftp> get file1 new-file1
⇒ /home/remote/file1 を /home/local/new-file1 に転送する。
ftp> get dir/file1
⇒ /home/remote/dir/file1 を /home/local/dir/file1 に転送する。この際、ローカルにも /home/local/dir/ というディレクトリが存在しないとエラーになる。
ftp> get dir/file1 new-file1
⇒ /home/remote/dir/file1 を /home/local/new-file1 に転送する。
mget 複数ファイルをget (メタキャラクタ使用可)
mput 複数ファイルをput (メタキャラクタ使用可)
get/putコマンドは、一度に1つのファイルしか転送できないが、mget/mput を使うと、一度に複数のファイルを転送できる。デフォルトでは、ファイルを1つ転送する前に、ユーザに確認を求めてくる。
ftp> ls *.gz
-rw-r--r-- 1 user group 2151 Jun 28 00:20 file1.tar.gz
-rw-r--r-- 1 user group 1716 Jun 28 00:20 file2.tar.gz
-rw-r--r-- 1 user group 3828 Jun 22 23:19 file3.gz
ftp> mget *.gz
mget file1.tar.gz? (ここでyかEnterを押すと転送する)
mget file2.tar.gz? (ここでyかEnterを押すと転送する)
mget file3.gz? (ここでyかEnterを押すと転送する)
毎回の確認にいちいち答えるのが面倒な場合は、prompt コマンドを使えばよい。
ftp> ls *.gz
-rw-r--r-- 1 user group 2151 Jun 28 00:20 file1.tar.gz
-rw-r--r-- 1 user group 1716 Jun 28 00:20 file2.tar.gz
-rw-r--r-- 1 user group 3828 Jun 22 23:19 file3.gz
ftp> prompt
Interactive mode off.
⇒ ユーザに確認しないモードになった
ftp> mget *.gz
⇒ 確認なしで3つのファイルが転送される
prompt mget,mput 使用時に各ファイルを転送するかどうか、毎回ユーザの確認を求める/求めない (トグル)。
glob mget,mput使用時にメタキャラクタを展開する/展開しない (トグル)
hash ファイルの転送状況を表示/非表示 (トグル)。
大きなファイルを転送する際は、hashをONにして、どこまで転送が終ったかがわかるようにするとよい。
ascii テキストモードで転送。改行コードを適切に変更する。
binary バイナリモードで転送。扱うファイルがテキスト以外ならこれが必要
なお、ローカルもリモートも UNIX ならば、自動的に binary モードに設定されるので、ascii/binary を気にする必要はない。
status 現在の設定を表示 (prompt など)
passive パッシブモードに切り替え
-p オプションの項を参照。
!command ローカルホストでコマンドを実行
例えば !pwd とすることで、ローカルのカレントディレクトリを表示させることができる。

ftp コマンドのオプション
-n コマンドを標準入力から読む
例えば ftpcommand.dat というファイルに
open ftp.hogehoge.ac.jp
user username passwd
binary
cd lib
lcd lib
get sample
put test
bye
などと書いておき、
% ftp -n < ftpcommand.dat
とすると、自動的にファイルのやりとりが行われる。プレインテキストにパスワードを書いておくことになるので、chmod 600としておくこと。ほかにも自動で ftp するには~/.netrc に記述しておく方法がある。
-d デバッグモード
FTP サーバとやりとりするプロトコルの内容を表示。http://X68000.q-e-d.net/~68user/net/ftp-1.html
-p パッシブモード
ftp を実行した直後に passive とタイプするのと同じである。

知っておくと便利な機能
  • ls . |command とすることで、任意のコマンドに出力を渡すことができる。
例えば、ls の出力が画面内に収まりきらない場合は
ftp> ls . |more
とすればよい。空白の場所に注意。「.」のファイル一覧を「|more」に渡す (=パイプで渡す) わけである。

最近の ftp コマンドに付いている便利な機能
以下の機能は少なくとも FreeBSD・NetBSD・OpenBSD 標準の ftp コマンドに備わっている。
  • Ctrl-D・TAB を押すことで、emacs・tcsh 風の (ローカル・リモートとも)ファイルの補完ができるようになっている。
  • Ctrl-p・Ctrl-n でヒストリを利用できる
>> Solaris10オンラインマニュアル(man) Solaris10 ftp(1)
>> FreeBSDオンラインマニュアル(man) FreeBSD ftp(1)
>> Linuxオンラインマニュアル(man) Linux ftp(1)