UNIX由来のコマンドとしてftp(file transfer program、コマンド名は小文字で表記する)がある。これは、FTP(File Transfer Protocol。通常プロトコル名は大文字にする)を利用し、ファイルの転送をするものだ。
一般的には、ftpクライアントとftpデーモン(ftpdなど デーモンは、バックグラウンドで動作するプログラムでWindowsのサービスに相当する)をFTPで接続して操作する。ファイルシステムは、ftpサーバー側でアクセスするため、クライアントと異なるファイルシステム、たとえば、WindowsとLinuxなどの間でもファイル転送が正しくできる。
sftp(secure file transfer program)は、SSHが作るクライアントサーバー間の暗号化通信経路を使って、SFTP(Secure File Transfer Protocol)を動かす。
sftpコマンドは、UNIXのftpを参考にしているため、ほぼ似たコマンド体系を持つ。このため、ftpに慣れたユーザーなら利用に戸惑うことはないだろう。
SSHでは、当初からscp(secure cp)コマンドが搭載されていた。scpは、UNIXのファイルコピーコマンドであるcpをSSHで暗号化したものだ。ただし、相手はSSHサーバーになる。ローカル内でのscp利用は無意味である。
以下の表は、sftpの(サブ)コマンドを分類したもの。
sftp/ftpは、起動したのち、サブコマンドを使ってファイル転送操作をする。ただし、ファイルにコマンドを並べた「マクロ」を使うこともできる。ここでは、主要なコマンドのみ解説する。サブコマンドは、大きく、sftpコマンド、ファイル転送コマンド、リモートファイルシステム操作、ローカルファイルシステム操作の4つに分類できる。
SFTPの基本的な使い方
通常は、sftpコマンドを起動したら、サブコマンドを使って、ファイル転送をする。この操作は、利用できるコマンドがsftpのものに限定されるが、基本的には、bashなどのシェル上でのファイル操作と変わらない。
sftp内では、ローカル側に対するファイル関連サブコマンド(llsやlcdなど)と、リモート側に対するサブコマンド(lsやcdなど)がある。基本的には、ローカル用サブコマンドは、小文字のL(“l~”)で始まり、リモート側のコマンドには小文字のLは付かない。イメージ的には、リモート側でファイル操作をしており、ローカル側の操作が特別扱いされている。
なお、ローカル側での操作は、シェルに抜けることができる「シェルエスケープ」機能がある。これにより、ローカル側で、普通にコマンドが利用でき、たとえば、転送前にファイルの整形するなどの操作も可能だ。
転送は、put(ローカルファイルをアップロード)、get(リモートファイルのダウンロード)コマンドを使う。標準では、サブディレクトリやその中のファイルを含めたディレクトリ構造を転送しない。ディレクトリ構造を転送したい場合には「-R」オプションを指定する。また、-pフラグを指定することで、ファイルのパーミッションと最終更新日時もコピーされる。
-fフラグを使うことで、ファイルの転送後にfsyncコマンド(ファイルシステムの更新)もしくは同等の機能が起動される。一般にファイルシステム処理は非同期になされるため、ファイルの転送直後のファイル関連の処理(たとえば、lsコマンドや転送したスクリプトの実行など)では、ファイルシステムが更新されておらず、旧ファイルへのアクセスになってしまうことがある。
fsyncは、非同期で未実行となっている処理を起動し、ファイルシステムを最新状態にする。なお、何らかの原因でput/getコマンドが中断されたとき、reput/regetコマンドで、再開させられる。
sftpを起動する
sftpコマンド自体に指定する主なオプションを以下の表に示す。
オプションは、IPv4やIPv6利用の強制やマクロファイルの指定などがある。接続先は、SSHと同じく「ユーザー@サーバー」で指定でき、「-A」オプションを使うことで、ssh-agentを使ってログインできる。このあたりは、sshクライアントと同じ。また、いくつかのオプションは、引数がsshクライアントに直接渡される。
また、リモート側のファイルパスなとが明らかであれば、scpコマンドでファイルが転送できる。慣れているなら、こちらの方がコマンド1行で済むため、効率がいい。前述のように、scpコマンドはsftpを利用して実装されているため、セキュリティ的にも問題はない。
scpコマンドは、
scp␣[オプション]␣ソースファイル␣ターゲットファイル
とする。ソースファイル、ターゲットは、以下の形式で指定する。
[<ユーザー名>@]<ホスト名>:[<ファイルパス>]
また、scpコマンドのオプションは、以下の表に示す。
scpはデフォルトでは、SFTPの機能を利用して動作するため、多くのオプションが共通になっている。ただし、古いscpプロトコルを使うこともできる。これは、古いマシンなどで新しいバージョンのsshが利用できない場合などに利用する。
sshで接続できるホストなら、sftp/scpが必ず利用できる。コマンドラインで実行するため、エクスプローラーなどGUIでリモートファイルシステムをアクセスするよりも高速にファイル転送できる。
準備としてはsshで接続できるようにしておくだけだ。事前に試しておけば、何かあったときに、高速にファイルコピーができ、助かることがある。

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ














