Linux の ftp コマンドは、FTP(File Transfer Protocol)サーバに接続し、ファイルをアップロード/ダウンロードするためのコマンドラインクライアントです。
リモートの FTP サーバにログインして、get / put / mget / mput などのサブコマンドを使ってファイル操作を行います。
ただし、通常の FTP は通信内容が暗号化されません(ID・パスワードやファイル内容が平文で流れる)ので、インターネット越しの利用には向きません。
実運用では、可能であれば sftp / scp / ftps / lftp など、暗号化が効く方式の利用を検討した方が安全です。
ftp [オプション] ホスト名
コマンドを実行すると、指定した FTP サーバに接続し、ftp> という対話モードのプロンプトが表示されます。
その後は、user・ls・cd・get・put・bye といったFTP サブコマンドを入力して操作します。
一部の実装では、ftp コマンドに対してバッチファイルを読み込ませるなど、非対話モードで使うこともできますが、ここでは基本的な対話操作を中心に説明します。
・FTP サーバに接続して、ユーザ名/パスワードでログインする。
ftp ftp.example.com
接続すると、Name (ftp.example.com:ユーザ名): のようなプロンプトが表示されるので、
FTP サーバ側で設定されているユーザ名とパスワードを入力してログインします。
・接続時にユーザ名を指定してログインする。
ftp ftpuser@ftp.example.com
ホスト名の前に ftpuser@ を付けると、そのユーザ名でログインを試みます。
パスワードだけ聞かれる形になるため、ユーザ名を毎回入力したくない場合に便利です。
・匿名 FTP(anonymous FTP)で接続する。
ftp ftp.example.com
サーバ側が anonymous FTP を許可している場合、ユーザ名に anonymous や ftp を指定してログインできます。
パスワード欄にはメールアドレスなどを入力する運用もありますが、最近はセキュリティ上の理由から anonymous FTP 自体を無効にしている環境も多いです。
・パッシブモード(PASV)を有効にして接続する。
ftp -p ftp.example.com
-p オプションを付けると、データ転送に パッシブモードを使用します。
クライアント側がファイアウォールや NAT 越しにいる場合、パッシブモードでないと接続できないケースが多いため、
問題がある場合はまず -p を試すことが多いです。
・接続時の自動ログイン(.netrc)を無効にして起動する。
ftp -n ftp.example.com
-n は、自動ログイン機能を無効にするオプションです。
ホームディレクトリの ~/.netrc に接続先情報が書かれている場合でも、それを使わずに手動でログインします。
・複数ファイル転送時に確認プロンプトを出さない(バッチ向き)。
ftp -i ftp.example.com
-i を付けると、mget や mput など複数ファイル転送時の「本当に転送しますか?」という確認が無効になります。
スクリプトから ftp を使う場合や、まとめて大量のファイルを転送したい場合に利用します。
以下は、対話モード(ftp> プロンプト)に入った後で使う「FTP サブコマンド」の例です。
・リモート側のカレントディレクトリを確認する。
ftp> pwd接続している FTP サーバ上の、現在のディレクトリを表示します。
・リモート/ローカルのディレクトリを移動する。
ftp> cd /remote/pathftp> lcd /local/path
cd はリモート側、lcd はローカル側のカレントディレクトリを変更します。
ファイル転送前に、送信元/送信先のディレクトリをそれぞれ合わせておきます。
・リモートからファイルを 1 つダウンロードする。
ftp> get remote.txt
リモートの remote.txt をローカルへダウンロードします。
ローカル側のファイル名を変えたい場合は get remote.txt local.txt のように 2 つ指定します。
・ローカルからファイルをアップロードする。
ftp> put local.txt
ローカルの local.txt を、リモートのカレントディレクトリにアップロードします。
リモート側のファイル名を変えたい場合は put local.txt remote.txt のように指定します。
・複数ファイルをまとめてダウンロード/アップロードする。
ftp> mget *.logftp> mput *.txt
mget は複数ファイルのダウンロード、mput は複数ファイルのアップロードを行います。
デフォルトでは各ファイルごとに確認されますが、ftp 起動時に -i を付けると確認なしで実行されます。
・転送モード(ASCII / バイナリ)を切り替える。
ftp> asciiftp> binary
テキストファイルを対象にする場合は ascii、バイナリファイル(画像・アーカイブなど)は binary を指定します。
誤ってテキストモードでバイナリファイルを転送すると、内容が壊れることがあるため注意が必要です。
・現在の接続を終了して ftp コマンドを終了する。
ftp> bye
bye(または quit)で、FTP セッションを終了して ftp コマンド自体も終了します。
・レガシーな FTP サーバとのファイル授受
古い機器やアプライアンス製品など、FTP しかサポートしていない機器とのファイル授受で、
やむを得ず ftp コマンドを使うケースがあります。
・閉じたネットワーク内での簡易ファイル転送
VPN 内や社内ネットワーク内など、暗号化を別のレイヤーで担保している環境では、
簡易的なファイル転送手段として FTP を利用しているところもあります。
・自動化のためのバッチスクリプト
-n / -i オプションと、バッチファイルを組み合わせて、
毎日決まったディレクトリからログを回収するなどのバッチを組むこともありますが、
セキュリティの観点からは、同様の処理を sftp や scp で置き換えることが推奨されます。
繰り返しになりますが、通常の FTP は暗号化されておらず、インターネット越しでの利用には向きません。
可能であれば sftp / scp / ftps / lftp など、暗号化されたファイル転送手段を利用することをおすすめします。
| short option | long option | description |
|---|---|---|
| -v | --verbose | 接続や転送時の詳細なメッセージを表示する(冗長モード) |
| -d | --debug | デバッグ情報を表示する(プロトコルレベルのやり取りを確認したいときに使用) |
| -n | --norc | 自動ログイン(~/.netrc を使った自動ログイン)を行わない |
| -i | --interactive | 複数ファイル転送時の確認プロンプトを無効にする(mget/mput で確認なしに実行) |
| -g | --noglob | ローカル側でのファイル名グロブ(ワイルドカード展開)を無効にする |
| -p | --passive | データ転送にパッシブモード(PASV)を使用する |
| -P | --port | 接続先のポート番号を指定する(デフォルトは 21 番ポート) |
| -t | 制御接続にタイムアウト時間を設定する(実装依存) | |
| -u | 一部実装で、非対話モード用の接続情報ファイルを指定するオプションとして使われることがある(実装依存) | |
| -h | --help | ftp コマンドの簡単な使い方(ヘルプ)を表示して終了する |
| -V | --version | ftp コマンドのバージョン情報を表示して終了する |
ここでは、Linux で一般的な ftp クライアントに共通する、よく使う起動オプションのみを TablePress の表にまとめています。
実際に利用できるオプションはディストリビューションや ftp 実装(inetutils 版 / netkit 版など)によって異なる場合があるため、
詳細は各環境の man ftp もあわせて確認してください。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。
