lftp コマンドは、FTP・FTPS・SFTP などのプロトコルでファイル転送を行うためのクライアントです。
一般的な ftp コマンドに比べて高機能で、対話モードでの操作だけでなく、mirror によるディレクトリ同期や、スクリプトによる自動処理なども行えます。
1 回ログインして対話的に使うこともできますし、-e や -c、-f オプションを使って、
「ログイン → コマンド実行 → 自動終了」というバッチ処理的な使い方もよく行われます。
lftp [オプション] サイトURLlftp [オプション] -u ユーザ名[,パスワード] サイトURLlftp -e 'コマンド列' [オプション] サイトURLlftp -f スクリプトファイル
サイト URL としては、ftp:// や sftp:// などのスキームを含めて指定します。
ユーザ名・パスワード・ポート・ログイン後に実行するコマンドなどをオプションで指定できます。
・FTP サーバに対話モードで接続する(ユーザ名は接続後に入力)
lftp ftp://ftp.example.com
最もシンプルな使い方で、ftp.example.com に接続して対話モードに入ります。
接続後に user ユーザ名 パスワード でログインすることもできますし、匿名 FTP であればそのまま利用することもできます。
・ユーザ名とパスワードを指定して接続する
lftp -u user01,password ftp://ftp.example.com
-u ユーザ名,パスワード を指定することで、接続と同時にログインします。
パスワードをコマンドラインに残したくない場合は、-u user01 のみ指定し、
パスワード入力をプロンプトで行うか、~/.netrc などの利用を検討します。
・SFTP で接続する(SSH 鍵などを利用)
lftp sftp://user01@server.example.com
スキームとして sftp:// を指定すると、SSH を使った SFTP 接続になります。
鍵認証など SSH の設定は、基本的に ssh と同様に扱われます(~/.ssh/config など)。
・ログイン後に 1 回だけコマンドを実行して終了する(-e)
lftp -u user01,password -e "lcd /backup; cd /remote/backup; put data.tar.gz; bye" sftp://server.example.com
-e ‘コマンド列’ を指定すると、ログイン後にそのコマンドを順次実行し、bye で終了します。
この例では、ローカルディレクトリを /backup に変更し、リモートの /remote/backup に移動して data.tar.gz をアップロード、
その後に接続を終了する一連の処理を 1 行で行っています。
・コマンドを実行してすぐ終了する(-c)
lftp -c "open -u user01,password ftp://ftp.example.com; ls; bye"
-c ‘コマンド列’ を使うと、「lftp を起動 → 指定したコマンドを実行 → 終了」というバッチ処理風の使い方ができます。
スクリプトから 1 回限りの処理を呼び出したいときに便利です。
・mirror でディレクトリを一括ダウンロードする
lftp -u user01,password ftp://ftp.example.com -e "mirror /remote/data /local/data; bye"
mirror コマンドは、リモートとローカルでディレクトリをまとめて同期する高機能なサブコマンドです。
この例では、リモートの /remote/data を、ローカルの /local/data に一括ダウンロードしています。
・mirror でアップロード(ローカル → リモート)の同期を行う
lftp -u user01,password sftp://server.example.com -e "mirror -R ./public_html /var/www/html; bye"
mirror -R(Reverse)は、ローカル → リモートへの同期です。
Web サイトのファイルをまとめてアップロードするときなどに便利です。
更新差分のみを転送できるため、rsync 的な使い方もできます。
・lftp スクリプトファイルを使って定期実行する
lftp -f /usr/local/scripts/backup.lftp
-f スクリプトファイル を指定すると、そのファイルに書かれた lftp コマンドを順番に実行します。
cron などから定期的に実行する場合は、接続情報と mirror コマンドなどを 1 つのスクリプトにまとめておくと管理しやすくなります。
・デバッグ出力を有効にして詳細なログを確認する
lftp -d -u user01,password ftp://ftp.example.com
-d を付けると、接続・コマンド実行の詳細なデバッグ出力が表示されます。
接続できない/転送に失敗する場合など、原因の切り分けに役立ちます(ログが多くなるので、必要なときだけ使うのが無難です)。
・FTP サーバとの定期バックアップ
ローカル → リモート、またはリモート → ローカルのバックアップを、mirror と組み合わせて定期実行する用途でよく使われます。
古い ftp コマンドに比べて、再帰的なディレクトリ転送や差分転送が簡単に書けるのがメリットです。
・SFTP 経由でのファイル配布・回収
SSH が使える環境であれば、SFTP(sftp://)でセキュアにファイル転送できます。
鍵認証や既存の SSH 設定をそのまま活用できるため、ファイアウォール制約が厳しい環境でも扱いやすいです。
・Web サイトのアップロード・同期
静的サイトやコンテンツデータを FTP/SFTP で配布しているケースでは、
mirror -R を使ってローカルのコンテンツディレクトリをそのままサーバに反映する、といった運用に向いています。
・既存 FTP サーバとの接続保守
レガシーな FTP サーバしか用意されていない場合でも、lftp を使うことで、
スクリプトによる自動アップロード・自動ダウンロードを比較的簡単に記述できます。
lftp 自体は高機能なクライアントなので、ここで紹介したのはあくまで「入り口」となるオプションとコマンド例です。
より細かい設定(タイムアウト、再試行回数、並列数など)が必要な場合は、set コマンドや man lftp も合わせて確認してみてください。
| short option | long option | description |
|---|---|---|
| -u | --user | 接続に使用するユーザ名を指定する(ユーザ名、パスワード の形式でパスワードも指定可能) |
| -p | --port | 接続先サーバのポート番号を指定する |
| -e | --command | ログイン後に実行する lftp コマンド列を指定する(実行後もセッションは継続) |
| -c | --cmd | 新しい lftp セッションで指定したコマンド列を実行し終了する(バッチ処理向け) |
| -f | --script | 指定したスクリプトファイルから lftp コマンドを読み込んで実行する |
| -d | --debug | デバッグモードで動作させ詳細なログやデバッグ出力を表示する |
| --help | lftp コマンドの使い方(ヘルプ)を表示して終了する | |
| --version | lftp コマンドのバージョン情報を表示して終了する |
ここでは、lftp コマンド起動時に指定できる、代表的なオプションのみを TablePress の表でまとめている想定です。
実際に利用できるオプションや挙動は、lftp のバージョンやビルドオプションによって異なる場合があるため、
本番環境で使用する前に man lftp で最新の仕様を確認してください。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。
