WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

FTPコマンドを使ってローカルホストからリモートホストへファイルを転送する

      2012/12/10

FTPコマンドの基礎

FTPコマンドを利用することで、ローカルホストから別ホストに接続し、相互にファイルの転送をすることができます。

FTPコマンドインタプリタの起動とリモートホストへの接続

以下のように”ftp”コマンドを実行すると、FTPがコマンドインタプリタとして起動し、ユーザからのコマンドが送られるまで待機します。
FTPがユーザからのコマンドを待機している状態では”ftp>”というプロンプトが表示されます。

[root@centos ~]   ftp
ftp>

続いて、リモートホストに接続する場合は”open”コマンドを利用します。

ftp> open linuxserver.jp    ※引数にリモートホストを指定
Connected to linuxserver.jp (118.110.1.36).
220 (vsFTPd 2.0.5)
Name (linuxserver.jp:user1): user1    ※ユーザ名応答
331 Please specify the password.
Password:    ※パスワード応答(入力しても表示はされません)
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

また、下記の様にftpコマンドの引数にリモートホストを指定した場合は、ftpはすぐにそのホスト上のFTPサーバと通信を確立しようと試みます。

[root@centos ~]   ftp linuxserver.jp
Connected to linuxserver.jp (118.110.1.36).
~ 以下省略 ~

転送モードの切り替え ~アスキーモード、バイナリーモードの違い~

FTPにおけるファイルの転送モードに関しては、”アスキーモード”と”バイナリーモード”の2種類があります。

“アスキーモード”と”バイナリーモード”では、改行コードの処理の仕方が違います。
改行コードには
・UNIX系のOSで主に利用されている”ラインフィード(LF)”
・MacOS(バージョン9まで)などで利用されている”キャリッジリターン(CR、復帰)”
・Windowsなどで主に利用されている”CR+LF”
の3種類があり、システムによって利用される改行コードが異なります。
したがって、同じ文字コード(例:UTF-8やShift-JIS)を使用していたとしても、改行コードは異なる場合があるため、異なるシステム間でのデータのやりとりをする際には注意する必要があります。

FTPでは、転送モードに”アスキーモード”を利用すれば、異なるシステム間の改行コードを自動的に相互変換してくれます。
一方、”バイナリーモード”では改行コードの変換を行わずにファイルを転送します。

基本的に、HTMLやCSSなどのファイルやPHPやCGIなどのスクリプトファイルなどのテキストベースで扱われたり実行されたりするファイルに関しては”アスキーモード”、拡張子が、.gif/.jpeg/.pngなどの画像や拡張子が.zipなどの圧縮ファイルは”バイナリーモード”でそれぞれ転送します。

現在の転送モードを確認するには”type”コマンドを使用します。

ftp> type
Using binary mode to transfer files.    ※バイナリーモード使用中であることが表示される

転送モードを”アスキーモード”に切り替える場合は”ascii”コマンドを実行します。

ftp> ascii
200 Switching to ASCII mode.    ※アスキーモードに変更した旨のメッセージが出力される
ftp> type    ※転送モード確認
Using ascii mode to transfer files.

転送モードを”バイナリーモード”に切り替える場合は”binary”コマンドを実行します。

ftp> binary
200 Switching to Binary mode.    ※アスキーモードに変更した旨のメッセージが出力される
ftp> type    ※転送モード確認
Using binary mode to transfer files.

ディレクトリ操作

リモートホストの現在のディレクトリのパスを確認するには”pwd”コマンドを実行します。

ftp> pwd
257 "/home/user1"

リモートホストのディレクトリを変更するには”cd”コマンドを、現在のディレクトリのファイル一覧を表示するには”ls”コマンドをそれぞれ実行します。

ftp> cd public_html
250 Directory successfully changed.
ftp> pwd
257 "/home/user1/public_html"
ftp> ls
drwxr-xr-x    3 0        0            4096 Feb 21 08:43 datadir
-rw-r--r--    1 0        0            2369 Jan 19 13:22 form.php
-rw-r--r--    1 500      500             7 Mar 25 10:58 index.html
drwxr-xr-x    3 500      500          4096 Mar 10 09:26 testdir

一方、ローカルホストの現在のディレクトリのパスを確認するには”!pwd”コマンドを実行します。
リモートホストでの”pwd”コマンドと違って頭に”!”が必要となるので注意が必要です。

ftp> !pwd
/home/user1

ローカルホストのディレクトリを変更するには”lcd”コマンドを、現在のディレクトリのファイル一覧を表示するには”!ls”コマンドをそれぞれ実行します。
こちらも”!pwd”コマンド同様、リモートホストでのコマンドと違い、頭に”!”や”l”が必要になります。
“lcd”コマンドの頭文字の”l”はLocalの略です。

ftp> lcd /home/user1
Local directory now /home/user1
ftp> !pwd
/home/user1
ftp> !ls
memo.txt  public_html  src

ファイル転送の実行

ローカルホストからリモートホストへファイルを転送する場合は”put”コマンドと”mput”コマンドを実行します。
ひとつのファイルを転送する場合は”put”を、複数のファイルを転送する場合は”mput”をそれぞれを使用します。

ftp> put test.php    ※ひとつのファイルを転送する場合
ftp> mput test.php test2.php test3.php    ※複数のファイルを転送する場合

逆にリモートホストのファイルをローカルホストに転送する場合は”get”コマンドと”mget”コマンドを実行します。
ひとつのファイルを転送する場合は”get”を、複数のファイルを転送する場合は”mget”をそれぞれを使用します。

ftp> get test.php    ※ひとつのファイルを転送する場合
ftp> mget test.php test2.php test3.php    ※複数のファイルを転送する場合

なお、上記のコマンド(“put”,”mput”,”get”,”mget”)は同名のファイルが存在する場合は警告なしに上書きするので注意が必要です。

 - FTPサーバ構築 , , , ,