scpでのファイル転送

概要

scp はSSHの通信路を使って、ローカルPCとRaspberry Piの間で安全にファイル転送するコマンドです。

実習では「Pythonファイルを送る」「ログや結果を持ち帰る」場面で頻繁に使います。

手順

1. ローカルPCから送る

  1. ターミナルでファイルのある場所に移動する。
  2. scp ローカルファイル ユーザ名@IPアドレス:保存先 を実行する。
  3. SSHログインして ls で転送結果を確認する。

2. Raspberry Piから受け取る

  1. SSHでログインする。
  2. ls で転送されたファイルを確認する。
  3. catpython3 でファイル内容/実行を確認する。

3. Raspberry Piからローカルへ取得する

  1. ローカル側のターミナルで実行する。
  2. scp ユーザ名@IPアドレス:リモートファイル . を使う。

4. ディレクトリごと転送する

  1. -r オプションを使う。
  2. 送受信後に 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 が出る。
    • 保存先ディレクトリの権限とユーザを確認する。
  • 転送が遅い。
    • 画像や大容量ファイルが含まれていないか確認し、必要なファイルだけ転送する。

他ページへのリンク候補