コマンドラインベース(CLI)のFTPクライアントのLFTPを見ていきます。
LFTP - sophisticated file transfer program
コマンドラインベースのFTPクライアントでは最初からftpやsftpのコマンドが入っていることが多いですが、後ほど触れますパーミッションあたりで操作が大変になりますので、パーミッションの問題を簡単に解決できるLFTPを使うことにしています。
先にFTPについて触れておきます。
FTP(File Transfer Protocol)とは、ネットワーク上でファイルを転送するための通信プロトコルです。
要約するとコンピュータ同士でファイルをやり取りするためのルールのようなものになります。
FTPはFTPサーバとFTPクライアントという2つのプログラム間でのやり取りになります。
FTPサーバはファイルを保存しているコンピュータで、クライアントからの要求を受け付け、ファイルの送受信を行います。
FTPクライアントはファイルを送受信したい側のコンピュータで、FTPサーバーに接続し、ファイルのアップロードやダウンロードを行います。
今回の内容では、FTPサーバのことをリモート(remote)と呼び、FTPクライアントのことをローカル(local)と呼ぶことにします。
今回は例として、下記の構成でLFTPを試します。
リモート(FTPサーバ)
マシン : Raspberry Pi 5 8G
OS : Raspberry Pi OS(64-bit)
ホスト : raspberrypi.local
※ホストの箇所にはIPアドレスでも構いません
ユーザ : pi
パスワード : raspberry
ローカル(FTPクライアント)
aptを使いたいのでDebian系Linuxが望ましい
※クロームブックのクロスティーニ等
ローカルでターミナルを起動し、下記のコマンドを実行します。
$ sudo apt update $ sudo apt install lftp
下記コマンドでlftpのインストールの確認を行います。
$ lftp -v
LFTP | Version 4.9.2 | Copyright (c) 1996-2020 Alexander V. Lukyanov
のような出力があれば良いです。
** 注意 **
以後の内容は、SSHで鍵認証の設定を行っている場合は接続拒否を受ける場合があります。
鍵認証を行っている場合はSFTPの設定を行ってから読み進めてください。
ローカルからlftpでリモートにアクセスしてみます。
アクセスのコマンドは
$ lftp ユーザ@ホスト
になりますので、今回であれば、
$ lftp pi@raspberrypi.local
になります。
Password:
が出力されますので、raspberry を入力してエンターキーを押します。
パスワードが正しければ、
lftp pi@raspberrypi.local:~>
のようなプロンプトに切り替わります。
動作の例として、ローカルの
/home/***/ftp/aaa/sample.txt
にあるファイルをリモートの
/home/pi/
以下のディレクトリにファイルを送信してみます。
lftp上でのファイルの送信のコマンドは
> put ローカルのファイルパス
になります。
上記の内容に従えば、
> put /home/***/ftp/aaa/sample.txt
になり、リモートの方では
/home/pi/sample.txt
のファイルパスになるように転送されます。
ローカルのファイルパスをフルパスで指定するのは面倒なので、相対パスで
> put ftp/aaa/sample.txt
にしても構いません。
相対パスで指定するのであれば、カレントディレクトリを把握する手段が必要です。
> lpwd
でカレントディレクトリを調べることが出来ます。
ローカルの方でディレクトリを移動してからputする場合は、
> lcd ftp/aaa/ lcd ok, local cwd=/home/***/ftp/aaa > put sample.txt
lcdでファイルのあるディレクトリに移動してから、putコマンドを実行します。
lftpでは、通常のコマンド(cdやpwd)の頭に l (エル)を付けるとローカルの操作になり、何も付けないとリモートでの操作になります。
次の例として、リモートの
/home/pi/ftp/bbb/remote.txt
にあるファイルをローカルの
/home/***/
以下のディレクトリにファイルを送信してみます。
lftp上でのファイルの受信のコマンドは
> get リモートのファイルパス
になります。
上記の内容に従えば、
> get /home/pi/ftp/bbb/remote.txt
になります。
リモートのファイルパスをフルパスで指定するのは面倒なので、相対パスで
> get ftp/bbb/remote.txt
にしても構いません。
相対パスで指定するのであれば、カレントディレクトリを把握する手段が必要です。
> pwd
でカレントディレクトリを調べることが出来ます。
リモートの方でディレクトリを移動してからputする場合は、
> cd ftp/bbb/ > get remote.txt
cdでファイルのあるディレクトリに移動してから、getコマンドを実行します。
> exit
でリモートとの接続を終了します。