【初心者向け】FTP PUT コマンド入門!ファイル送信の方法

はい、承知いたしました。「初心者向け】FTP PUT コマンド入門!ファイル送信の方法」について、約5000語の詳細な記事を作成します。


【初心者向け】FTP PUT コマンド入門!ファイル送信の方法

ファイル転送、特にインターネットを通じてコンピューター間でファイルをやり取りすることは、私たちのデジタルライフにおいて欠かせない操作です。ウェブサイトの公開、サーバーへのデータバックアップ、共同作業者とのファイル共有など、さまざまな場面でファイル転送が必要になります。

ファイル転送のためのプロトコル(通信規約)はいくつか存在しますが、その中でも古くから広く使われているのが FTP (File Transfer Protocol) です。FTPは、シンプルながらも強力なファイル転送機能を提供します。

本記事では、このFTPを使ってあなたのコンピューター(ローカルコンピューター)からインターネット上のサーバー(リモートコンピューター)へファイルを送信するための最も基本的なコマンドである PUT コマンド に焦点を当て、その使い方を初心者の方にも分かりやすく徹底的に解説します。

「コマンドラインって難しそう…」と感じる方もいるかもしれません。しかし、FTPのコマンドは比較的直感的で、基本的な操作を覚えればすぐに使いこなせるようになります。本記事では、予備知識がなくても理解できるよう、FTPの仕組みから丁寧に説明していきますので、ご安心ください。

この記事を読むことで、あなたは以下のことができるようになります。

  • FTPの基本的な仕組みを理解する。
  • コマンドラインFTPクライアントの準備方法を知る。
  • FTPサーバーに接続する。
  • サーバー上のディレクトリを移動したり、ファイル一覧を表示したりする。
  • PUT コマンドを使って、ローカルコンピューターからサーバーへファイルを送信する。
  • 複数のファイルをまとめて送信する (MPUT)。
  • ファイル送信時の一般的な問題とその対処法を知る。

さあ、FTPのPUTコマンドを使ったファイル送信の世界へ、一緒に足を踏み入れてみましょう!

1. FTP (File Transfer Protocol) とは何か?なぜファイル転送が必要なの?

1.1 ファイル転送の必要性

インターネットが普及する以前は、ファイルを他のコンピューターに渡すには、フロッピーディスクやCD-ROMなどの物理的なメディアを使うのが一般的でした。しかし、ネットワークが発達した現代では、これらの物理メディアを使わずに、ネットワークを通じて瞬時にファイルを転送するのが当たり前になっています。

ファイル転送が必要な主なケースとしては、以下のようなものがあります。

  • ウェブサイトの公開: あなたが作成したウェブサイトのHTMLファイル、CSSファイル、画像ファイルなどを、レンタルサーバーなどのウェブサーバーにアップロードする必要があります。
  • データのバックアップ: 大切なファイルをリモートのストレージサーバーにコピーして、万が一の事態に備えることができます。
  • ファイルの共有: 離れた場所にいる共同作業者と大きなファイルを共有したい場合などです。メール添付では送れないような大きなファイルも、サーバーを介してやり取りできます。
  • サーバー管理: サーバーの設定ファイルをアップロードしたり、プログラムファイルを配置したりする場合などです。

これらのファイル転送を、安全かつ確実に行うための「ルール」や「手順」を定めたものが、ファイル転送プロトコルです。

1.2 FTPの誕生と役割

FTPは、1970年代に開発された非常に古いプロトコルです。インターネットの黎明期から存在し、現在に至るまで広く利用されています。その主な役割は、その名の通り「ファイル転送」を行うことです。

FTPを使うことで、異なるオペレーティングシステム(Windows, macOS, Linuxなど)を使っているコンピューター間でも、互換性の問題を気にすることなくファイルをやり取りできます。FTPは、ファイルの一覧表示、ディレクトリの作成・削除、ファイルの名前変更・削除など、ファイル管理に関する基本的な機能も提供します。

2. FTPの仕組みを理解しよう:クライアントとサーバー

FTPは、「クライアント/サーバーモデル」と呼ばれる仕組みで動作します。

  • FTPサーバー: ファイルを保管しており、クライアントからの要求に応じてファイルの送信や受信を行うコンピューターです。インターネット上のサーバーは、通常このFTPサーバーソフトウェアが動作しています。
  • FTPクライアント: ファイルを転送したいユーザーが操作するコンピューターです。FTPサーバーに接続し、「このファイルをください」「このファイルを送ります」といった要求を送信します。私たちが普段使っているPCやスマートフォンがこれにあたります。

ファイル転送を行うには、まずFTPクライアントがFTPサーバーに接続する必要があります。接続が確立されると、クライアントはサーバーに対して様々なコマンド(命令)を送信し、サーバーはそれに応じて処理を実行します。

2.1 コントロールコネクションとデータコネクション

FTPの大きな特徴の一つに、2つの異なるコネクション(通信路)を使用するという点があります。

  1. コントロールコネクション (制御接続): クライアントとサーバーの間で、コマンド(例: “ファイルを送って”, “ディレクトリを見せて”)や応答(例: “OKです”, “エラーが発生しました”)をやり取りするために使用されます。通常、サーバー側のポート番号21を使用します。このコネクションは、FTPセッションが終了するまで基本的に開いたままです。
  2. データコネクション (データ接続): 実際のファイルデータや、ファイル一覧の情報といったデータを転送するために使用されます。データの転送が必要になるたびに確立され、転送が完了すると閉じられます。使用するポート番号は、アクティブモードかパッシブモードかによって異なります。

なぜこのように2つのコネクションに分かれているのでしょうか? これは、データ転送に時間がかかっている間でも、コントロールコネクションを使って転送を中断したり、別のコマンドを実行したりできるようにするためです。例えば、大きなファイルを転送している最中に、コントロールコネクションを使って転送の進捗を確認したり、あるいは転送をキャンセルしたりすることができます。

2.2 アクティブモードとパッシブモード

データコネクションをどちら側(クライアントかサーバーか)が確立するかによって、FTPにはアクティブモードパッシブモードの2つの動作モードがあります。この違いは、特にファイアウォール環境で重要になります。

  • アクティブモード (Active Mode):

    • 制御接続: クライアントがサーバーのポート21に接続します。
    • データ接続: クライアントは、データ転送用に利用可能なポート番号をサーバーに通知します。サーバーは、そのポート番号に向けてサーバー側からクライアントへデータ接続を確立します。
    • 問題点: サーバー側からクライアントへの接続が行われるため、クライアント側にファイアウォールがある場合、その接続がブロックされてデータ転送ができないことがあります。
  • パッシブモード (Passive Mode):

    • 制御接続: クライアントがサーバーのポート21に接続します。
    • データ接続: クライアントがデータ転送コマンド(PUTやGETなど)を送信すると、サーバーはデータ転送用に利用可能なポート番号をクライアントに通知します。クライアントは、その通知されたポート番号にクライアント側からサーバーへデータ接続を確立します。
    • 利点: データ接続もクライアント側からサーバーへの接続になるため、多くのファイアウォール構成(特にクライアント側)において、アクティブモードよりも接続が成功しやすいという利点があります。

初心者の方へ: どちらのモードを使えば良いか迷ったら、ほとんどの場合、パッシブモードを選択すればうまくいきます。 多くのFTPクライアントはデフォルトでパッシブモードを使用します。コマンドラインクライアントの場合も、後述するコマンドでモードを切り替えることができます。もしアクティブモードでデータ転送がうまくいかない場合は、パッシブモードを試してみてください。

2.3 FTPクライアントの種類

FTPクライアントには、主に以下の2種類があります。

  1. コマンドラインクライアント: OSに標準搭載されているか、別途インストールして、コマンドプロンプトやターミナルからコマンドを入力して操作する形式です。本記事では主にこちらを扱います。テキストベースですが、FTPの仕組みを理解するのに役立ちます。
  2. GUIクライアント: FileZilla, WinSCP, Cyberduckなどのように、ウィンドウとボタン、ドラッグ&ドロップ操作で直感的にファイルを管理できる形式です。初心者の方にとっては、こちらの方が使いやすいと感じるかもしれません。基本的な考え方はコマンドラインと同じですが、操作方法が異なります。

コマンドラインクライアントは、OSに標準で含まれていることが多く、すぐに始められるという利点があります。また、この記事で学ぶPUTコマンドのような基本は、GUIクライアントの内部でも使われています。コマンドラインでの操作を理解することは、FTPの動作原理を深く知る上で非常に有効です。

3. コマンドラインFTPクライアントの準備

本記事では、Windowsのコマンドプロンプト、またはmacOS/Linuxのターミナルで利用できる標準的なFTPコマンドラインクライアントを前提に説明を進めます。

3.1 コマンドプロンプトまたはターミナルの起動

FTPコマンドを実行するためには、まずコマンドプロンプト(Windows)またはターミナル(macOS/Linux)を起動する必要があります。

  • Windows:
    • スタートメニューを開き、「cmd」と入力して「コマンドプロンプト」を選択するか、「Windows PowerShell」を選択します。
  • macOS:
    • 「アプリケーション」フォルダの中の「ユーティリティ」フォルダを開き、「ターミナル」をダブルクリックします。
  • Linux:
    • アプリケーションメニューから「ターミナル」または同等のものを選択します。デスクトップ環境によって場所は異なりますが、通常はアクセサリやユーティリティの中にあります。

黒い画面に文字が並ぶウィンドウが表示されれば準備完了です。これが「コマンドラインインターフェース (CLI)」と呼ばれる操作環境です。

3.2 FTPクライアントの確認

多くのOSには、ftp という名前のコマンドラインFTPクライアントが標準で搭載されています。コマンドプロンプトまたはターミナルで、以下のコマンドを入力してEnterキーを押してみてください。

bash
ftp

もしFTPクライアントが起動すれば、以下のような表示になるはずです。(具体的な表示はOSによって多少異なります)

ftp>

このように ftp> というプロンプトが表示されれば、FTPクライアントが起動しています。このプロンプトが表示されている間は、FTPクライアントのコマンド(open, put, get など)を実行できます。

もし ftp コマンドが見つからない、またはエラーになる場合は、お使いのOSによっては標準搭載されていないか、有効になっていない可能性があります。その場合は、別途FTPクライアントをインストールする必要がありますが、本記事では標準クライアントを前提とします。Windowsの新しいバージョンでは、FTPクライアントがデフォルトでインストールされない場合がありますが、機能の追加で有効にできます。(Windows 10/11の場合、「設定」->「アプリ」->「オプション機能」->「機能を追加」で「FTPクライアント」を探してインストールします。)

FTPクライアントを終了するには、ftp> プロンプトで bye または quit と入力してEnterキーを押します。

ftp> bye

4. FTPサーバーへの接続 (open)

FTPコマンドラインクライアントを起動したら、次に行うのはFTPサーバーへの接続です。接続には、open コマンドを使用します。

4.1 open コマンドの基本構文

open コマンドの最も基本的な使い方は以下の通りです。

bash
open [ホスト名またはIPアドレス]

  • [ホスト名またはIPアドレス]:接続したいFTPサーバーのインターネット上の住所を指定します。例えば、ftp.example.com のようなホスト名や、192.168.1.100 のようなIPアドレスを指定します。

実行例:

例えば、ftp.example.com というホスト名を持つFTPサーバーに接続する場合、ftp> プロンプトで以下のように入力します。

bash
ftp> open ftp.example.com

Enterキーを押すと、FTPクライアントは指定されたホスト名またはIPアドレスのFTPサーバー(デフォルトではポート21番)に接続を試みます。

4.2 接続時の認証(ユーザー名とパスワード)

接続が成功すると、サーバーは通常、ユーザー名とパスワードによる認証を要求してきます。

Connected to ftp.example.com.
220 ProFTPD 1.3.7a Server (ProFTPD Default Installation) [192.0.2.1]
User (ftp.example.com:(none)):

User (ftp.example.com:(none)): と表示されたら、サーバーにログインするためのユーザー名を入力してEnterキーを押します。

User (ftp.example.com:(none)): your_username

次に、パスワードの入力を求められます。

331 Password required for your_username
Password:

Password: と表示されたら、パスワードを入力してEnterキーを押します。パスワードを入力しても画面には表示されませんが、実際には入力されていますので、落ち着いて正確に入力してください。

ユーザー名とパスワードが正しければ、ログイン成功のメッセージが表示されます。

230 User your_username logged in

これで、FTPサーバーへの接続とログインが完了し、ファイル転送や管理を行う準備ができました。

4.3 Anonymous FTP (匿名FTP)

一部のFTPサーバーは、認証なしで誰でも接続して特定の公開ファイルにアクセスできる「Anonymous FTP (匿名FTP)」を許可しています。この場合、ユーザー名として anonymous または ftp を入力し、パスワードとしてはあなたのメールアドレスを入力するのが慣例です。(最近はメールアドレスの入力を求められない場合もあります。)

4.4 ポート番号の指定

FTPサーバーが標準のポート21番以外を使用している場合は、open コマンドでポート番号を指定する必要があります。

bash
open [ホスト名またはIPアドレス] [ポート番号]

実行例:

もしFTPサーバーがポート2121番を使用している場合:

bash
ftp> open ftp.example.com 2121

4.5 接続時の一般的なエラーと対処法

接続時にエラーが発生する可能性もあります。代表的なエラーとその原因・対処法をいくつか紹介します。

  • “ftp: Can’t connect to [ホスト名]: Connection refused” または “接続を拒否されました”

    • 原因: 指定したホスト名/IPアドレスにFTPサーバーが起動していないか、ファイアウォールによって接続がブロックされています。
    • 対処法: ホスト名/IPアドレスが正しいか確認してください。サーバー側でFTPサービスが起動しているか、ファイアウォール設定でポート21(または指定したポート)が開放されているか確認してもらってください。
  • “ftp: Can’t connect to [ホスト名]: Operation timed out” または “タイムアウトしました”

    • 原因: サーバーが応答しません。ネットワーク経路の問題か、サーバーが停止している可能性があります。
    • 対処法: 指定したホスト名/IPアドレスが正しいか確認してください。ネットワーク接続に問題がないか(他のウェブサイトは見られるかなど)確認してください。時間をおいて再度試すか、サーバー管理者に問い合わせてください。
  • “530 Login incorrect.” または “認証失敗”

    • 原因: 入力したユーザー名またはパスワードが間違っています。
    • 対処法: ユーザー名とパスワードをもう一度、大文字・小文字の間違いに注意して正確に入力してください。パスワード入力時は画面に表示されないため、特に注意が必要です。

5. PUTコマンドの前に知っておくべきFTPサーバー上での操作

FTPサーバーに接続したら、ファイルを送信する前に、サーバー上のどこにファイルを置くか(どのディレクトリにアップロードするか)を指定することが重要です。そのためには、サーバー側のファイルシステムを操作する基本的なコマンドを知っておく必要があります。

5.1 カレントディレクトリの確認 (pwd)

現在、FTPサーバー上のどのディレクトリにいるかを確認するには、pwd (Print Working Directory) コマンドを使用します。

構文:

bash
pwd

実行例:

bash
ftp> pwd
257 "/" is the current directory

この例では、サーバーのルートディレクトリ(/)にいることがわかります。

5.2 ディレクトリの移動 (cd)

サーバー上の別のディレクトリに移動するには、cd (Change Directory) または cwd (Change Working Directory) コマンドを使用します。

構文:

bash
cd [移動先のディレクトリパス]

  • [移動先のディレクトリパス]:移動したいディレクトリの名前を指定します。絶対パス(例: /home/user/public_html)または相対パス(例: webdata, ../images)で指定できます。

実行例:

例えば、現在のディレクトリから public_html というサブディレクトリに移動する場合:

bash
ftp> cd public_html
250 CWD command successful
ftp> pwd
257 "/home/user/public_html" is the current directory

一つ上の階層のディレクトリに戻るには、相対パス .. を使います。

bash
ftp> cd ..
250 CWD command successful
ftp> pwd
257 "/home/user" is the current directory

サーバー上に存在しないディレクトリを指定すると、エラーになります。

bash
ftp> cd non_existent_directory
550 Failed to change directory.

5.3 ファイルおよびディレクトリの一覧表示 (ls, dir)

現在のサーバー上のディレクトリに含まれるファイルやサブディレクトリの一覧を表示するには、ls または dir コマンドを使用します。

構文:

“`bash
ls

または

dir
“`

実行例:

bash
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for file list
-rw-r--r-- 1 owner group 1234 Jun 01 10:00 index.html
drwxr-xr-x 2 owner group 4096 Jun 01 09:30 images
-rw-r--r-- 1 owner group 567 Jun 01 10:15 styles.css
226 Transfer complete.

この出力は、Unix/Linuxのようなファイルシステム形式で表示されます。各行はファイルまたはディレクトリを表し、権限、所有者、グループ、サイズ、更新日時、そしてファイル名/ディレクトリ名が含まれます。行頭が - ならファイル、d ならディレクトリです。

lsdir は、ファイルをアップロードする際に、同じ名前のファイルが既に存在しないか確認したり、アップロード先のディレクトリが正しいか確認したりするのに役立ちます。

5.4 ローカルコンピューター側のカレントディレクトリ確認 (lpwd)

FTPクライアントは、サーバー側だけでなく、ローカルコンピューター側にも「カレントディレクトリ」を持っています。これは、PUTGET コマンドでファイルを指定する際に、特に相対パスで指定する場合の基準となります。

ローカルコンピューター側のカレントディレクトリを確認するには、lpwd (Local Print Working Directory) コマンドを使用します。

構文:

bash
lpwd

実行例:

bash
ftp> lpwd
Local directory C:\Users\YourUsername

この例では、ローカルコンピューター側のカレントディレクトリが C:\Users\YourUsername であることがわかります。

5.5 ローカルコンピューター側のディレクトリ移動 (lcd)

ローカルコンピューター側のカレントディレクトリを変更するには、lcd (Local Change Directory) コマンドを使用します。

構文:

bash
lcd [移動先のディレクトリパス]

  • [移動先のディレクトリパス]:ローカルコンピューター上のディレクトリパスを指定します。

実行例:

アップロードしたいファイルが C:\Users\YourUsername\Documents\website ディレクトリにある場合、以下のように移動します。

bash
ftp> lcd C:\Users\YourUsername\Documents\website
Local directory now C:\Users\YourUsername\Documents\website

これで、ローカルのカレントディレクトリが変更され、このディレクトリにあるファイルを簡単に指定できるようになります。

6. 【本題】FTP PUT コマンドの詳細

いよいよ本題の PUT コマンドです。PUT コマンドは、ローカルコンピューターにある指定したファイルを、FTPサーバーの現在のディレクトリ(または指定したディレクトリ)に送信するために使用します。

6.1 PUT コマンドの基本的な構文

PUT コマンドの基本的な構文は以下の通りです。

bash
put [ローカルファイル名] [リモートファイル名]

  • [ローカルファイル名]:送信したいローカルコンピューター上のファイル名を指定します。ローカルのカレントディレクトリにあるファイルであればファイル名だけでOKです。別のディレクトリにあるファイルの場合は、絶対パスまたは相対パスで指定します。
  • [リモートファイル名]:サーバー上に保存する際のファイル名を指定します。この引数は省略可能です。

6.2 PUT コマンドは何をするのか?

PUT コマンドを実行すると、FTPクライアントは以下の手順でファイル送信を行います。

  1. クライアントは、指定されたローカルファイルを開きます。
  2. クライアントは、サーバーに STOR コマンド(FTPの内部コマンドで「保存」を意味します)と、保存したいリモートファイル名を送信します。
  3. サーバーは、ファイルを受け入れる準備ができたことを応答し、データコネクションの確立を指示します(パッシブモードの場合、ポート番号を通知)。
  4. データコネクションが確立されます。
  5. クライアントは、開いたローカルファイルの内容を読み込み、データコネクションを通じてサーバーに送信します。
  6. サーバーは受信したデータを指定されたリモートファイルとして保存します。
  7. データ転送が完了すると、データコネクションは閉じられます。
  8. サーバーは転送完了の応答を返します。

6.3 ローカルファイル名の指定

PUT コマンドで送信したいファイルを指定する方法です。

  • ローカルのカレントディレクトリにあるファイル:
    ローカルクライアントのカレントディレクトリにあるファイルであれば、ファイル名だけで指定できます。
    bash
    # ローカルのカレントディレクトリに index.html がある場合
    ftp> put index.html

  • 絶対パスでの指定:
    ローカルのどこにあるファイルでも、絶対パスを指定することで送信できます。
    “`bash
    # Windowsの場合
    ftp> put C:\Users\YourUsername\Documents\report.pdf

    macOS/Linuxの場合

    ftp> put /home/yourusername/documents/report.pdf
    “`

  • 相対パスでの指定:
    ローカルクライアントのカレントディレクトリからの相対パスで指定することもできます。
    bash
    # ローカルのカレントディレクトリの1つ上の階層にある config.txt を指定する場合
    ftp> put ../config.txt

    相対パスを使う場合は、事前に lcd コマンドでローカルのカレントディレクトリを適切に移動しておくと便利です。

6.4 リモートファイル名の指定

サーバー上に保存するファイル名を指定する方法です。

  • リモートファイル名を省略した場合:
    PUT [ローカルファイル名] のようにリモートファイル名を省略した場合、サーバー上にはローカルファイル名と同じ名前でファイルが保存されます。
    bash
    # ローカルの index.html を、サーバーの現在のディレクトリに index.html という名前で保存
    ftp> put index.html

  • リモートファイル名を指定した場合:
    PUT [ローカルファイル名] [リモートファイル名] のようにリモートファイル名を指定すると、サーバー上には指定した名前でファイルが保存されます。ファイル名を変更してアップロードしたい場合に便利です。
    bash
    # ローカルの old_index.html を、サーバーの現在のディレクトリに index.html という名前で保存
    ftp> put old_index.html index.html

    リモートファイル名には、保存先のディレクトリパスを含めることもできます。
    * 相対パスでの指定:
    サーバーの現在のディレクトリからの相対パスで指定します。
    bash
    # ローカルの photo.jpg を、サーバーの現在のディレクトリの images サブディレクトリに photo.jpg という名前で保存
    # サーバーの現在のディレクトリに images ディレクトリが事前に存在している必要がある
    ftp> put photo.jpg images/photo.jpg

    * 絶対パスでの指定:
    サーバーのルートディレクトリからの絶対パスで指定します。
    bash
    # ローカルの backup.tar.gz を、サーバーの /backup ディレクトリに full_backup.tar.gz という名前で保存
    # サーバーの /backup ディレクトリが存在し、書き込み権限がある必要がある
    ftp> put backup.tar.gz /backup/full_backup.tar.gz

    リモートファイル名にパスを含める場合、指定したディレクトリがサーバー上に存在しないとエラーになります。必要であれば、事前に mkdir コマンドでディレクトリを作成しておきましょう。

6.5 実行例と出力

具体的な PUT コマンドの実行例を見てみましょう。

まず、ローカルのカレントディレクトリをアップロードしたいファイルがある場所へ移動します。(例: C:\website_files

bash
ftp> lcd C:\website_files
Local directory now C:\website_files

次に、サーバーに接続し、アップロード先のディレクトリへ移動します。(例: /public_html

bash
ftp> open ftp.example.com
... (接続・認証) ...
ftp> cd public_html
250 CWD command successful
ftp> pwd
257 "/public_html" is the current directory

ローカルのカレントディレクトリにある index.html ファイルを、サーバーの /public_html ディレクトリに index.html という名前でアップロードします。

“`bash
ftp> put index.html
200 PORT command successful. # または 227 Entering Passive Mode (…)
150 Opening ASCII mode data connection for index.html

ファイルデータが転送される間の進捗表示(クライアントによる)

226 Transfer complete.
ftp: 1234 bytes sent in 0.12 seconds (10.00 KB/s) # 転送結果のサマリー
“`

出力されるメッセージは、サーバーやクライアントの種類によって多少異なりますが、重要なのは 150 Opening ... でデータ転送が開始され、226 Transfer complete. で転送が完了したというメッセージです。最後に転送されたバイト数や時間、速度が表示されることもあります。

次に、ローカルの style.css を、サーバーの /public_html/css ディレクトリに main.css という名前でアップロードする場合を考えます。サーバーの /public_html にいる状態で、/public_html/css ディレクトリが既に存在すると仮定します。

“`bash

ローカルのカレントディレクトリは C:\website_files のまま

ftp> put style.css css/main.css
200 PORT command successful. # または 227 Entering Passive Mode (…)
150 Opening ASCII mode data connection for css/main.css

ファイルデータ転送

226 Transfer complete.
ftp: 567 bytes sent in 0.05 seconds (11.34 KB/s)
“`

このように、リモートファイル名にパスを含めることで、サーバーの他のディレクトリにファイルをアップロードすることも可能です。

6.6 ファイルの上書き

もし、アップロード先のサーバーのディレクトリに、指定したリモートファイル名と同じ名前のファイルが既に存在する場合、PUT コマンドはデフォルトでは既存のファイルを上書きします。

注意: 誤って重要なファイルを上書きしてしまわないように注意が必要です。

prompt コマンドを使うと、ファイル転送(PUTだけでなくGETやMPUT/MGETも)を行う際に、ファイルごとに上書きして良いか確認を求めるように設定できます。

prompt コマンドを実行するたびに、プロンプトの状態(オン/オフ)が切り替わります。

bash
ftp> prompt
Interactive mode OFF. # 確認が無効になった
ftp> prompt
Interactive mode ON. # 確認が有効になった

prompt が ON の状態で put コマンドを実行し、上書きが発生する場合:

bash
ftp> put index.html
200 PORT command successful.
150 Opening ASCII mode data connection for index.html
? C:\website_files\index.html -> index.html: (Y/n)

? ... (Y/n) と表示されたら、y を入力してEnterキーを押すと上書きして転送が実行されます。n を入力するとそのファイルの転送はスキップされます。何も入力せずにEnterキーを押すと、通常はデフォルト(Y)になります。

6.7 転送モード (ascii, binary) の重要性

FTPでは、ファイルを転送する際に、データの扱い方を示す「転送モード」を指定する必要があります。主なモードは以下の2つです。

  1. ASCIIモード: テキストファイルを転送する場合に使用します。異なるOS間での改行コードの違いを自動的に変換しながら転送します。(Windowsでは CR+LF、Unix/Linuxでは LF が一般的です)。
  2. Binaryモード (Imageモードとも呼ばれます): テキスト以外の、すべてのバイナリファイル(画像ファイル、実行ファイル、圧縮ファイル、動画ファイルなど)を転送する場合に使用します。データのビット列をそのまま(無加工で)転送します。

モードの切り替えコマンド:

現在の転送モードを確認したり、切り替えたりするには、ascii または binary コマンドを使用します。

“`bash
ftp> ascii
200 Type set to A # ASCIIモードに設定された

ftp> binary
200 Type set to I # Binary (Image) モードに設定された
“`

多くのFTPクライアントのデフォルトはASCIIモードになっていることがあります。

転送モードを間違えるとどうなるか?

  • テキストファイルをBinaryモードで転送: ほとんどの場合問題ありません。改行コードがそのまま転送されるだけなので、受信側OSのテキストエディタによっては改行が正しく表示されないことがありますが、ファイルの内容自体は壊れません。
  • バイナリファイルをASCIIモードで転送: これは深刻な問題を引き起こします。 ASCIIモードは改行コードの変換など、ファイル内容を加工する処理を行います。画像、プログラム、圧縮ファイルなどのバイナリデータは、特定のビット列が改行コードと見なされて勝手に変換されてしまうと、ファイル構造が壊れてしまい、正しく開けなくなったり、実行できなくなったりします。

したがって、画像(.jpg, .png, .gifなど)、動画(.mp4, .aviなど)、音声(.mp3, .wavなど)、圧縮ファイル(.zip, .tar.gzなど)、実行ファイル(.exe)、ドキュメントファイル(.pdf, .doc, .xlsなど)といったテキスト以外のファイルを転送する際は、必ず binary モードに設定してから put コマンドを実行してください。**

ウェブサイトを構成するファイルでも、.html, .css, .js はテキストファイルなのでASCIIモードで問題ありませんが、画像ファイルはBinaryモードが必要です。

FTPセッション中にモードを一度切り替えれば、次にモードを切り替えるまでそのモードが維持されます。 複数のファイルをアップロードする場合、テキストファイルならASCII、バイナリファイルならBinaryに切り替えてからそれぞれのファイルをPUTします。

7. 高度なPUTコマンドの利用:複数のファイルを一度に送信 (mput)

PUT コマンドはファイルを一つずつ送信するのに便利ですが、複数のファイルをまとめて送信したい場合は手間がかかります。このような場合に役立つのが MPUT (Multiple PUT) コマンドです。

7.1 MPUT コマンドの構文と使い方

MPUT コマンドの基本的な構文は以下の通りです。

bash
mput [ローカルファイル名...]

  • [ローカルファイル名...]:送信したいローカルファイル名を複数指定します。

実行例:

ローカルのカレントディレクトリにある file1.txt, file2.html, image.jpg の3つのファイルをサーバーに送信する場合:

bash
ftp> mput file1.txt file2.html image.jpg

MPUT コマンドは、指定されたそれぞれのファイルに対して個別に PUT コマンドを実行するのと同じように動作します。それぞれのファイルは、サーバーの現在のディレクトリに、元のファイル名と同じ名前でアップロードされます。(MPUTでは、アップロード時にリモートファイル名を変更することはできません。常にローカルファイル名と同じになります。)

7.2 ワイルドカードの利用

MPUT コマンドの最も強力な使い方は、ファイル名の指定にワイルドカードを利用することです。ワイルドカードを使うと、複数のファイルを一度に指定できます。

よく使われるワイルドカードは以下の通りです。

  • *: 任意の0文字以上の文字列にマッチします。
  • ?: 任意の1文字にマッチします。

実行例:

  • ローカルのカレントディレクトリにある、拡張子が .html のすべてのファイルを送信する場合:
    bash
    ftp> mput *.html
  • ローカルのカレントディレクトリにある、名前が image で始まり、拡張子が .jpg または .png のファイルをすべて送信する場合:
    bash
    ftp> mput image*.jpg image*.png
  • ローカルのカレントディレクトリにある、名前が data で始まり、その後に1文字だけが続き、拡張子が .txt のファイルを送信する場合 (data1.txt, dataA.txt など):
    bash
    ftp> mput data?.txt

7.3 MPUTprompt コマンド

前述の prompt コマンドは、MPUT コマンドにも適用されます。

  • prompt が ON の場合: MPUT で指定したファイルリストの中から、各ファイルを実際に送信するかどうかをファイルごとに確認されます。
    bash
    ftp> mput *.txt
    ? index.txt (Y/n) y # index.txt を送信
    ? readme.txt (Y/n) n # readme.txt はスキップ
  • prompt が OFF の場合: MPUT で指定したファイルは、確認なしで次々と送信されます。

デフォルトでは prompt は ON になっていることが多いですが、多数のファイルをまとめて送信したい場合は、先に prompt off と入力しておくと便利です。ただし、上書きされたくないファイルがないか十分に注意してください。

“`bash
ftp> prompt off
Interactive mode OFF.
ftp> mput *.jpg

確認なしで全JPGファイルを送信


ftp> prompt on
Interactive mode ON. # 終わったら戻しておくと安全
“`

7.4 MPUT の注意点

  • リモートファイル名は変更できない: MPUT で送信されたファイルは、常にローカルファイル名と同じ名前でサーバーに保存されます。アップロード時に名前を変えたい場合は、個別に PUT コマンドを使用する必要があります。
  • ディレクトリは送信できない: MPUT コマンドはファイルのみを対象とします。ディレクトリをまるごと送信する機能は、標準のFTPコマンドラインクライアントにはありません。ディレクトリ構造を維持したまま転送したい場合は、ファイルを一つにまとめて(zipやtarなどで圧縮して)から送信し、サーバー側で解凍するか、GUIクライアントや別の転送プロトコル(SFTP/SCPなど)を使用する必要があります。

8. PUTコマンド実行時の注意点とトラブルシューティング

FTPでファイルを送信する際に、いくつかの問題に遭遇することがあります。ここでは、特によくある問題とその原因、対処法を初心者向けに解説します。

8.1 権限の問題 (Permission denied)

ファイルをアップロードしようとしたときに、権限関連のエラーが発生することがあります。

  • エラーメッセージ例:
    550 Permission denied.
    553 Could not create file.

  • 原因:

    • サーバー側のディレクトリの書き込み権限がない: FTPサーバー上の、ファイルをアップロードしようとしているディレクトリに対して、あなたがログインしているユーザーアカウントに書き込み権限が与えられていない場合に発生します。
    • ローカルファイルの読み取り権限がない: 稀ですが、ローカルコンピューター上で、送信しようとしているファイルに対してFTPクライアントが読み取り権限を持っていない場合にも発生し得ます。(通常、これは個人利用では問題になりません)
  • 対処法:

    • サーバー側の権限確認: アップロード先のディレクトリが正しいか確認してください。そのディレクトリに対してあなたのFTPユーザーが書き込み権限を持っているか、サーバー管理者に確認してもらう必要があります。ウェブサイト公開の場合、通常 public_htmlhtdocs といったディレクトリには書き込み権限がありますが、ルートディレクトリ(/)や他のユーザーのディレクトリなどには権限がないのが普通です。
    • ディレクトリの移動: 適切な書き込み権限があるディレクトリに cd コマンドで移動してから put コマンドを実行してください。
    • ファイル名の問題: サーバー側のファイルシステムによっては、ファイル名に使用できない文字があったり、大文字・小文字を区別したりする場合があります。確認してください。

8.2 ディスク容量の問題

FTPサーバーのディスク容量が不足している場合、ファイルのアップロードに失敗します。

  • エラーメッセージ例:
    552 Disk full - please upload later
    552 Insufficient storage space.

  • 原因:
    FTPサーバーの、あなたの割り当てられたディスク容量(クォータ)を超えたか、サーバー全体のディスク容量が満杯になっている場合に発生します。

  • 対処法:

    • サーバーの容量確認: FTPサーバーのディスク使用量を確認してください。(コマンドラインFTPクライアントでは直接確認しにくい場合があります。GUIクライアントやサーバーの管理画面で確認できることが多いです。)
    • 不要ファイルの削除: もしサーバー上に不要なファイルがある場合は、delete コマンドなどで削除して容量を確保してください。
    • サーバー管理者に問い合わせ: 容量を追加してもらう必要があるか、管理者に相談してください。

8.3 ネットワークの問題

ネットワークの不安定さやファイアウォール設定によって、ファイル転送がうまくいかないことがあります。

  • 転送中に止まってしまう、異常に遅い、接続が切れる:
    • 原因: ネットワーク回線の問題、サーバーの負荷が高い、ファイアウォールによるデータコネクションのブロックなど。特に、アクティブモードFTPを使用している場合にクライアント側のファイアウォールがデータコネクション(サーバーからクライアントへの接続)をブロックしている可能性が高いです。
    • 対処法:
      • 転送モードの切り替え: まずはパッシブモードを試してください。ftp> プロンプトで passive と入力し、Enterキーを押します。(Passive mode on. と表示されれば成功)。その後、再度 put コマンドを実行してください。パッシブモードはデータコネクションもクライアントからサーバーへの接続になるため、ファイアウォールを通過しやすいです。
        bash
        ftp> passive
        Passive mode on.
        ftp> put large_file.zip
      • ネットワーク接続の確認: お使いのネットワーク接続が安定しているか確認してください。
      • 時間帯を変える: サーバーの負荷が低い時間帯に転送を試す。
      • ファイアウォール設定の確認: ご自身のコンピューターやネットワークにファイアウォールがある場合、FTP通信(特にデータコネクション)が許可されているか確認してください。サーバー側でファイアウォールが適切に設定されているかも重要です。

8.4 ファイル名の問題(文字コード、特殊文字)

ファイル名に使用している文字が、サーバーのファイルシステムや文字コードと互換性がない場合に問題が起きることがあります。

  • 原因: 全角文字、特定の記号、OS間で互換性のない文字コードなどがファイル名に含まれている。
  • 対処法: ファイル名は半角英数字と一部の記号(-, _, .など)のみを使用するのが最も安全です。アップロード前にファイル名を変更することを検討してください。

8.5 転送モード(ASCII/Binary)の間違い

前述の通り、これは特にバイナリファイルのアップロードで深刻な問題となります。

  • 原因: バイナリファイルをASCIIモードで転送した。
  • 結果: アップロードされたファイルが壊れており、開けない、実行できない、画像が表示されないなどの問題が発生します。ファイルサイズが変わってしまうこともあります。
  • 対処法: アップロードするファイルの種類に合わせて、事前に ascii または binary コマンドで適切なモードに切り替えてから put コマンドを実行してください。もし間違えてしまった場合は、一度サーバー上の壊れたファイルを削除し、正しくモードを設定してから再度アップロードし直す必要があります。

9. セキュリティに関する考慮事項

FTPは非常に古いプロトコルであり、設計上の重要な欠陥があります。それは、ユーザー名、パスワード、そして転送されるファイルの内容を含むすべての通信が、ネットワーク上を暗号化されずに平文(まる見えの状態)で流れる という点です。

これは、もし悪意のある第三者がネットワーク上の通信を傍受(盗聴)した場合、あなたのログイン情報や、送信・受信したファイルの内容が簡単に読み取られてしまう可能性があることを意味します。

初心者の方へ:

  • 機密性の高い情報(個人情報、会社の機密データなど)の転送には、FTPを単独で使用することは絶対に避けてください。
  • 安全なファイル転送が必要な場合は、代わりに以下のプロトコルを検討してください。
    • SFTP (SSH File Transfer Protocol): SSHという安全なトンネル内でファイル転送を行います。認証情報もファイルデータもすべて暗号化されます。ポート22を使用するのが一般的です。FTPとは全く異なるプロトコルです。
    • FTPS (FTP over SSL/TLS): FTP自体にSSL/TLSという暗号化層を追加したものです。認証情報やデータ転送が暗号化されます。通常、ポート990(Implicit FTPS)を使うか、ポート21で接続後に暗号化を開始(Explicit FTPS)します。FTPの拡張機能です。

多くのレンタルサーバーやクラウドサービスでは、セキュリティ上の理由から、通常のFTP接続よりもSFTPやFTPSを推奨、あるいは必須としています。コマンドラインクライアントでも、sftp コマンドや、OpenSSLに対応した ftp クライアントなどでFTPSを利用できる場合がありますが、初心者の方にはGUIクライアント(FileZillaなど)の方がSFTP/FTPSを利用しやすいでしょう。

本記事で解説したFTPコマンドラインクライアントは、基本的に暗号化に対応していないと考えてください。したがって、このクライアントは、公開情報のみを扱う場合や、信頼できる閉じたネットワーク内でのみ使用するのが安全です。

10. PUT以外の主要なFTPコマンド(補足)

PUTコマンド以外にも、FTPクライアントでよく使う基本的なコマンドをいくつか紹介します。これらのコマンドは、ファイルの受信や管理を行う上で役立ちます。

  • get [リモートファイル名] [ローカルファイル名]: サーバーからローカルコンピューターへファイルをダウンロードします。リモートファイル名は必須です。ローカルファイル名を省略すると、リモートファイル名と同じ名前でローカルカレントディレクトリに保存されます。put の逆の操作です。
  • mget [リモートファイル名...]: サーバーから複数のファイルをまとめてダウンロードします。ローカルファイル名を指定することはできません。ワイルドカードも使用可能です。
  • delete [リモートファイル名]: サーバー上の指定したファイルを削除します。
  • mdelete [リモートファイル名...]: サーバー上の複数のファイルをまとめて削除します。ワイルドカードも使用可能です。実行前に確認を求められることが多いです (prompt の設定による)。
  • mkdir [ディレクトリ名]: サーバー上の現在のディレクトリの下に、新しいディレクトリを作成します。
  • rmdir [ディレクトリ名]: サーバー上の現在のディレクトリの下にある、空のディレクトリを削除します。ディレクトリ内にファイルやサブディレクトリがある場合は削除できません。
  • rename [元のファイル名] [新しいファイル名]: サーバー上のファイルやディレクトリの名前を変更します。
  • status: 現在のFTPクライアントの状態(接続先、ログインユーザー、転送モードなど)を表示します。
  • help [コマンド名]: 指定したコマンドの簡単な説明を表示します。コマンド名を省略すると、利用可能なコマンド一覧を表示します。
  • !: FTPクライアントを終了せずに、ローカルコンピューターのシェルコマンドを一時的に実行できます。(例: !dir!ls でローカルのファイル一覧を確認)
  • bye または quit: FTPサーバーとの接続を閉じ、FTPクライアントを終了します。

これらのコマンドを組み合わせることで、FTPサーバー上での基本的なファイル管理を行うことができます。

11. まとめと次のステップ

本記事では、FTPの基本的な仕組みから始め、コマンドラインクライアントを使ったサーバーへの接続方法、そして最も重要なファイル送信コマンドである PUTMPUT の詳細な使い方を解説しました。

PUT コマンドを使えば、ローカルのファイルをサーバーの指定した場所にアップロードできます。ファイル名を指定したり、パスを含めたりすることで、柔軟なアップロードが可能です。MPUT とワイルドカードを使えば、複数のファイルを効率的に一括送信できます。

ファイル転送モード(ASCII/Binary)の重要性や、権限、容量、ネットワーク、ファイル名などのトラブルシューティングについても触れました。特にバイナリファイルの転送時には、必ずBinaryモードを使用することを忘れないでください。

また、FTPのセキュリティ上の懸念点(平文転送)についても説明しました。機密性の高い情報を扱う場合は、より安全なSFTPやFTPSといった代替手段を強く推奨します。

FTPコマンドラインクライアントは、慣れるまで少し敷居が高く感じるかもしれませんが、一度基本的なコマンド(open, cd, pwd, ls, put, get, bye など)を覚えてしまえば、手軽にファイル転送を行うことができます。

次のステップとして、ぜひ実際に手を動かしてFTPクライアントを使ってみてください。

  1. テスト環境の準備: もし可能であれば、練習用に使えるFTPサーバー(レンタルサーバーのFTPアカウントなど)を用意してください。ローカルネットワーク内にFTPサーバーを構築してみるのも良い学習になります。
  2. 接続練習: open コマンドで接続し、ユーザー名とパスワードを入力してログインしてみましょう。
  3. サーバーの探索: 接続できたら、pwd で現在の場所を確認し、ls でファイル一覧を表示し、cd で様々なディレクトリに移動してみましょう。
  4. PUT練習: 小さなテキストファイルや画像ファイルをいくつか作成し、lcd でそのディレクトリに移動してから、put コマンドでサーバーにアップロードしてみましょう。ファイル名を変えてアップロードしたり、サブディレクトリを指定してアップロードしたりする練習も有効です。
  5. MPUT練習: 複数の練習用ファイルを準備し、prompt off にしてから mput でまとめてアップロードしてみましょう。ワイルドカードも試してみてください。
  6. モード切り替え練習: テキストファイルと画像ファイルを準備し、それぞれASCIIモード、Binaryモードでアップロードしてみて、正しく転送できているか確認してみましょう。(Binaryモードでテキストファイルをアップロードしても大きな問題にはなりませんが、ASCIIモードでバイナリファイルをアップロードするとファイルが壊れることを確認できます。)

コマンドラインFTPクライアントでの操作に慣れてきたら、次はGUIクライアント(FileZillaなど)を試してみるのも良いでしょう。GUIクライアントは見た目で分かりやすく、SFTP/FTPSにも対応しているものが多いため、実用性が高いです。しかし、コマンドラインで学んだFTPの仕組みやコマンドの概念は、GUIクライアントを使う上でも必ず役に立ちます。

FTP PUTコマンドは、サーバーへファイルを送り出すための扉です。この扉の開け方を知ることで、あなたはファイル転送の基本的なスキルを習得しました。この知識を活かして、様々なファイル転送の場面で自信を持って操作できるようになってください!


コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール