scpでのファイル転送
概要
scp はSSHの通信路を使って、ローカルPCとRaspberry Piの間で安全にファイル転送するコマンドです。
実習では「Pythonファイルを送る」「ログや結果を持ち帰る」場面で頻繁に使います。
手順
1. ローカルPCから送る
- ターミナルでファイルのある場所に移動する。
scp ローカルファイル ユーザ名@IPアドレス:保存先を実行する。- SSHログインして
lsで転送結果を確認する。
2. Raspberry Piから受け取る
- SSHでログインする。
lsで転送されたファイルを確認する。catやpython3でファイル内容/実行を確認する。
3. Raspberry Piからローカルへ取得する
- ローカル側のターミナルで実行する。
scp ユーザ名@IPアドレス:リモートファイル .を使う。
4. ディレクトリごと転送する
-rオプションを使う。- 送受信後に
lsで構成を確認する。
コード
# ローカル -> Raspberry Pi
scp led.py user@192.168.1.10:
# コメント: 末尾の : は「ホームディレクトリへ保存」の意味
# Raspberry Piへログインして確認
ssh user@192.168.1.10
ls
cat led.py
# Raspberry Pi -> ローカル(現在フォルダへ保存)
scp user@192.168.1.10:led.py .
# コメント: 最後の . は「いまいるフォルダ」を表す
# ディレクトリごと送る(-rが必要)
scp -r project user@192.168.1.10:~/
# ディレクトリごと受け取る
scp -r user@192.168.1.10:~/project .
# ポート指定の例(授業では通常不要)
scp -P 22 led.py user@192.168.1.10:
解説
scpは単発転送に向いており、実習では最も使いやすい方法です。- パスを明示すると、どこに保存されたか迷いにくくなります。
- 転送後に
lsで確認する習慣をつけると、デバッグが速くなります。 scpは原則ローカルPC側で実行します(SSH接続中の別マシンではない)。- ディレクトリ転送時は
-rがないと失敗します。
よくあるミス
- 送信側/受信側のターミナルを取り違える。
:や.を書き忘れて構文エラーになる。- ファイル名の大文字小文字を間違える。
- 転送元パスを引用符で囲まず、空白入りパスで失敗する。
- 転送後の確認をせず、古いファイルを実行してしまう。
ミニトラブルシュート
No such file or directoryが出る。- ローカル/リモートのどちらで見つからないのかを確認する。
Permission deniedが出る。- 保存先ディレクトリの権限とユーザを確認する。
- 転送が遅い。
- 画像や大容量ファイルが含まれていないか確認し、必要なファイルだけ転送する。