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で接続できるようにしておくだけだ。事前に試しておけば、何かあったときに、高速にファイルコピーができ、助かることがある。
この連載の記事
-
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 - この連載の一覧へ