Linuxコマンド辞典 ftpコマンド(ネットワーク)

ファイルをFTPで転送する「ftp」コマンドの概要と使い方を記載しています。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

概要・使用方法

書式

$ ftp [オプション][FTPサーバ名[ポート]]

FTPサーバに接続して、ファイルをダウンロード/アップロードできます。接続するFTPサーバを引数に指定した場合は、特定のFTPサーバに接続できます。FTPサーバへのログインにはユーザ名とパスワードが必要ですが、誰でもログインできる特定FTP(Anonymous FTP)が有効になっているサーバであれば、ユーザ名に「anonymous」、パスワードにメールアドレスを入力すればログインできます。

FTPサーバのアカウントを持っている場合は、そのユーザ名とパスワードを入力します。FTPはログイン情報が暗号化されない平文でやりとりされるため、途中の経路で盗聴される可能性もあります。どうしてもファイル転送を安全に行う必要がある場合は、sftpなどを利用します。

また=/.netrcを用意し、FTPサーバ名とユーザ名、パスワードを用意すれば自動ログインができます。FTPサーバを引数に指定しない場合は、プロンプト「ftp>」のインタプリタが起動します。ここで「?」または「help」を入力すると、利用可能なコマンドの一覧が表示されます。一覧を終了する場合は「quit」を入力します。

クライアントからFTPサーバに接続すると、次にFTPサーバからクライアントに対してデータ通信接続を行います。しかし、ファイヤーウォールの内側にあるクライアントとFTP接続する場合はそれができません。FTPサーバへ接続後に、データ通信接続をクライアントから行うことで対応できます。これをPASVモードと呼びます。

ftpコマンドはインストールされていない可能性があるので、その場合は「yum install ftp」or 「sudo yum install ftp」マンドでインストールします。

匿名FTPサーバのパスワードにメールアドレスを使う習慣は、特定のファイルにエラーがあることをFTPサーバ管理者が発見した場合、ダウンロードしたユーザにメールで通知したためという歴史的な経緯があります。

LinuxサーバにFTPサーバを構築する場合は以下を参照

オプション

-pデータ転送にPASVモードを利用する
-i複数ファイルを転送中はプロンプトを出さない
-n自動ログインをしない。自動ログインが有効な場合、.netrcを参考にしてログインする

FTPサーバに接続する

$ ftp ホスト名

実行結果

今回は、FTPサーバのIPアドレスは、192.168.0.60としています。ホスト名はIPアドレス、ホスト、ドメイン、FQDNの指定が可能です。

[rin@centos ~]$ ftp 192.168.0.60          #←192.168.0.60サーバーに接続
Connected to 192.168.0.60 (192.168.0.60).
220 (vsFTPd 3.0.3)
Name (192.168.0.60:rin): roi              #←接続ユーザーを指定
331 Please specify the password.
Password:                                 #←パスワードを入力
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>                                      #ログインできた場合はコマンドプロンプトが表示される

利用できるFTPコマンド一覧を表示

ftp> help

実行結果

ftp> help
Commands may be abbreviated.  Commands are:

!               debug           mdir            sendport        site
$               dir             mget            put             size
account         disconnect      mkdir           pwd             status
append          exit            mls             quit            struct
ascii           form            mode            quote           system
bell            get             modtime         recv            sunique
binary          glob            mput            reget           tenex
bye             hash            newer           rstatus         tick
case            help            nmap            rhelp           trace
cd              idle            nlist           rename          type
cdup            image           ntrans          reset           user
chmod           lcd             open            restart         umask
close           ls              prompt          rmdir           verbose
cr              macdef          passive         runique         ?
delete          mdelete         proxy           send
ftp> 

FTPサイトのディレクトリを移動してファイルを取得する

ftp> cd ディレクトリ

実行結果

ftp> ls
227 Entering Passive Mode (192,168,0,60,152,35).
150 Here comes the directory listing.
drwxr-xr-x    2 1003     1003           24 Jan 23 06:38 test
-rw-r--r--    1 1003     1003            5 Jan 23 06:28 uptest.txt
-rw-r--r--    1 1003     1003          254 Jan 23 07:20 メモ.txt
226 Directory send OK.
ftp> cd test                           #testディレクトリに移動する
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,0,60,43,139).
150 Here comes the directory listing.
-rw-r--r--    1 1003     1003            5 Jan 23 06:38 uptext.txt
226 Directory send OK.
ftp> 

FTPを抜ける方法

ftp> quit

.netrcを用意して自動ログインをする

ホームディレクトリに.netrcを用意してユーザ名とパスワードを記載しておけば、FTPサーバへのログインを自動で行うことができます。

以下は.netrcの記述例です。1行目の「machine」行には特定のFTPサーバを指定します。2行目の「default」行には「login」の後にユーザ名、「password」の後にパスワードを指定すると、その上ですべてのFTPサーバに対して自動でログインを試みます。「default」行はすべての「machine」行の下に記述します。

サンプル

[rin@centos ~]$ cat .netrc
machine 192.168.0.60 login roi password p@ssw0rd
default login anonymous password roi@example.jp
[rin@centos ~]$ 
Error - .netrc file not correct permissions.

上記のエラーメッセージが表示された場合は、.netrcが誰でも読み取りできてしまうのでパーミッション的に問題があるという警告です。その場合は、chmod 600 .netrcコマンドで所有者のみ閲覧と書き込みができるようにします。

[rin@centos ~]$ chmod 600 .netrc 
[rin@centos ~]$ ls -la|grep .netrc
-rw-------   1 rin  rin     97  1月 24 11:21 .netrc
[rin@centos ~]$ 
[rin@centos ~]$ ftp 192.168.0.60
Connected to 192.168.0.60 (192.168.0.60).
220 (vsFTPd 3.0.3)
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>