Linux
 Computer >> コンピューター >  >> トラブルシューティング >> Linux

「scp: 通常のファイルではありません」エラーの解決方法|ステップバイステップガイド

「scp: 通常のファイルではありません(not a regular file)」というエラーメッセージは、SCPコマンドでファイルをコピーしようとした際に、指定されたコピー元またはコピー先が通常のファイルではないことを示しています。

SCPコマンドは、SSH(Secure Shell)接続を介してホスト間でファイルを安全に転送するために広く使われているツールです。利用する際にはコピー元とコピー先の両方を指定する必要があり、このエラーは主にファイルパスの指定ミスによって発生します。

なお、このエラーはLinux、macOS、BSDなどのUnix系OSをはじめ、PuTTYやCygwinなどのサードパーティ製ソフトウェアでSCPコマンドが導入されているWindows環境でも発生する可能性があります。

本記事では、このエラーを解決するためのトラブルシューティング手順を、ステップバイステップで詳しく解説します。

1. 構文の問題を確認する

Unix系およびLinuxシステムは、コマンド、シェルスクリプト、設定ファイルに対して厳密な構文規則を適用することで知られています。正しい構文に従うことは、コマンドを期待どおりに実行するために不可欠です。

構文に不備がある場合、システムは自動的にエラーを返します。今回の場合、それが「scp: 通常のファイルではありません」というエラーです。ファイルをコピーする際には、以下のポイントに注意しましょう。

1.1 ファイル名・ディレクトリ名のスペースを確認する

Unix/Linux環境では、ファイル名やディレクトリ名に含まれるスペースを確認することが重要です。先頭や末尾に余分なスペースがあると、コマンドやスクリプトの実行時に思わぬ問題が発生する可能性があります。

例えば、「/home/user」ディレクトリに「my_file.txt」というファイルがあるとします。ファイル名にスペースが含まれているかどうかを確認するには、次のコマンドを使用します。

ls -Q /home/user

-Qオプションを付けると、ファイル名やディレクトリ名が引用符で囲まれて表示されます。ファイル名にスペースが含まれている場合、このコマンドの出力でスペースを目視確認できます。

例えば、出力が次のようになった場合は、対処が必要です。

"myfile .txt"

これはファイル名にスペースが含まれていることを意味します。このような場合は、コマンドやスクリプトでファイルを扱う際に、バックスラッシュによるエスケープ処理を行うか、ファイル名を引用符で囲んで指定することをおすすめします。

なお、スペースに起因するトラブルを根本的に防ぐには、そもそもスペースを含まないファイル名・ディレクトリ名を使用するのが一般的です。

1.2 コロンの付け忘れ・過剰に注意する

SCPコマンドでは、リモートサーバー上のパスを指定する際にコロン(:)が必須です。例えば、正しい構文は「scp user@host:filepath」ですが、これを「scp user@host filepath」のようにコロンを忘れると、エラーが発生します。「scp: 通常のファイルではありません」というエラーを回避するためにも、必ず正しい構文を守りましょう。

1.3 コピー元とコピー先を取り違えない

SCPコマンドを使用する際、コピー元(source)とコピー先(destination)のパスを取り違えると、エラーや予期しない動作の原因になります。正常にファイル転送を行うには、正しい順序を守ることが重要です。

SCPコマンドの基本構文は以下のとおりです。

scp <コピー元> <コピー先>

コピー元とコピー先を誤って入れ替えると、ファイルが逆方向にコピーされたり、コピー先が無効な場合に「scp: 通常のファイルではありません」エラーが発生したりします。

例えば、ローカルマシンからリモートサーバーへ「file.txt」をコピーする場合、正しいコマンドと誤ったコマンドはそれぞれ以下のとおりです。

正しい例: scp file.txt user@remote:/path/to/destination
誤った例: scp user@remote:/path/to/destination file.txt

誤った例では、リモートサーバー上の「file.txt」をローカルマシンへコピーしようとしてしまうため、意図しない結果やエラーにつながります。スムーズなファイル転送のためにも、コマンド実行前に必ずコピー元とコピー先の順序を再確認してください。

2. ディレクトリをコピーする場合は「-r」オプションを使う

このエラーが発生するもう一つの大きな原因は、ディレクトリをコピーしようとしているのに、OSに対して「ディレクトリをコピーする」という指定をしていないケースです。

デフォルトでは、SCPは対象を通常のファイルとして扱います。そのため、ディレクトリをコピーする際には必ず「-r」オプションを付ける必要があります。「-r」オプションを指定せずにディレクトリをコピーしようとすると、「scp: 通常のファイルではありません」というエラーが表示されます。

サブディレクトリや配下のファイルも含めてディレクトリ全体をコピーしたい場合は、「-r」(recursive=再帰的)オプションを使用します。「-r」オプションがない場合、SCPは個別のファイルのみをコピーし、ディレクトリ自体はコピーできません。

以下は「-r」オプションを使用したSCPコマンドの例です。

scp -r /path/to/source_directory user@remote:/path/to/destination_directory

このコマンドを実行すると、「source_directory」の内容とすべてのサブディレクトリが、リモートサーバー上の「destination_directory」へ再帰的にコピーされます。

3. その他の確認ポイント

上記の方法でも解決しない場合は、以下の点もあわせて確認してみてください。

  • 特殊ファイルを指定していないか: /dev配下のデバイスファイル、ソケット、FIFOなどの特殊ファイルはSCPではコピーできず、同じエラーが表示されます。
  • パスの存在確認: lsコマンドなどで、コピー元のパスが正しく存在しているかを確認しましょう。
  • 代替手段の検討: ディレクトリ単位の転送が頻繁な場合は、差分同期が可能なrsyncコマンドの利用も検討するとよいでしょう。

著者について

「scp: 通常のファイルではありません」エラーの解決方法|ステップバイステップガイド

Dawood Janjua(ダウード・ジャンジュア)

Dawood Janjuaは、Windowsのトラブルシューティングとゲーム分野における豊富な知識を持つテクノロジー専門のライターです。CCNA資格を保有し、顧客への質の高いサポート実績を持っています。現在は執筆活動を行いながら、将来的なCCIE資格の取得を目指して技術力の向上に努めています。ゲームへの情熱と技術の専門性を活かし、読者のスキルアップにつながる知識を発信しています。

  1. Ubuntuのログイン画面を復元する方法:削除したパッケージを数コマンドで修復

    大量のパッケージを削除していた際に、うっかりlightdmなどの重要なパッケージまで削除してしまったことはありませんか?このパッケージはグラフィカルデスクトップへのログインを可能にするもので、多くの場合、起動時に自動的にデスクトップへ誘導してくれます。これを削除したまま再起動すると、真っ暗な画面が表示されるだけになってしまうでしょう。 しかし心配はいりません。最小限の操作でログイン画面を修復できる可能性が高いのです。作業を始める前に、可能であればイーサネットケーブルを接続し、ノートパソコンであれば充電器をつないでおきましょう。パッケージ管理を行う際には、これが最も安全な選択となります。 ubu

  2. Ubuntuで「lvmetadへの接続に失敗しました」エラーを解決する方法【原因と対処法】

    Ubuntuは、OpenStackをサポートするクラウドコンピューティング分野で広く利用されている、無料のオープンソースLinuxベースOSです。6ヶ月ごとにアップデートがリリースされ、新機能の追加やパフォーマンス向上が継続的に行われています。しかし最近、「Failed to Connect to lvmetad, Falling back to Device Scanning(lvmetadへの接続に失敗しました。デバイススキャンへフォールバックします)」というメッセージが表示され、OS自体を起動できなくなるという報告が多数寄せられています。Ubuntuで「lvmetadへの接続エラー」が発