ローカル環境で開発を進めるにあたって「本番環境やステージ環境に置いてあるファイルをローカルでも使いたい」みたいことがあると思います。そんな時に役立つLinuxのscpコマンドを簡単に紹介します。
やりたいこと
Webサーバーに置いてあるファイルを、ローカル環境(今回はMacBook)にダウンロードしたい。
→ターミナルからscpコマンドを叩くことで簡単に実現できます。
scpコマンドとは?
scpコマンドは、リモートマシンとローカルマシンでファイルをコピーするLinuxコマンドです。(もちろんリモート同士でもOK)
この時の通信プロトコルにはsshを使用し、データ転送の通信を暗号化します。
このため前提としてWebサーバに対してssh接続できるようにしておく必要があります。
基本的な使い方
$scp [オプション] コピー元のパス 保存先のパス
実際にやってみる
ユーザ名@ホスト名でサーバーにssh接続できる前提で、/homeにある対象のディレクトリをコピー(ローカルマシンにダウンロード)してみたいと思います。
$ scp -i ~/.ssh/id_rsa -r ユーザ名@ホスト名:/home/'ディレクトリ名' ~/Downloads/'ディレクトリ名'
これでサーバーの/homeにあったディレクトリを、ローカルの/Downloadsにコピーすることができました。
-iオプションで秘密鍵ファイルを渡し、ディレクトリごと再帰的にコピーできるよう-rオプションを指定しています。
ファイルをダウンロードする場合は-rオプションは付けずに、ディレクトリ名の部分にファイルを指定すればOKです。
その他、使えるオプションもいくつかあって、
| 付けるオプション | 内容 |
|---|---|
| -i 秘密鍵ファイル | 秘密鍵ファイル(identityファイル)を指定する |
| -P ポート番号 | ポート番号を指定する |
| -C | 通信を圧縮する |
| -p | コピー元の更新時間とモードを維持する |
| -r | ディレクトリ内を再帰的にコピーする |
| -1 | SSHのプロトコルバージョン1を使用する |
| -2 | SSHのプロトコルバージョン2を使用する |
| -4 | IPv4を使用する |
| -6 | IPv6を使用する |
などがあります。
個人的にはリモートのDBをdumpして、それをローカル環境での開発でテスト用に使いたいというシーンが多いかなと思いますが、いざというときにスッと使えるように各種オプションも含めて身に付けておきたいものですね。