Linux logo

What is SCP Command in Linux?

The Unix/Linux command scp (which stands for “secure copy protocol”) is a simple tool for submitting or downloading files (or directories) to/from a remote computer.

The transfer is done on top of SSH, which is how it preserves its familiar options (like specifying identities and qualifications) and ensures a protected connection. It’s truly handy to be able to move around files between any system that supports SSH.

Even if you do not already understand how to use the scp command, the scp ought to be a bit more familiar to you thanks to its similarity to ssh. The most significant differences come with specifying file/directory paths.

With scp, you can copy a file or directory:

  • From your local system to a remote system.
  • From a remote system to your local system.
  • Between 2 remote systems from your local system.
Syntax for using the scp command

The general syntax of the Linux scp command with various options is:

 scp [OPTION] [user@]Source_Host:]file1 [user@]Destination_Host:]file2

The following options can be used:

–r In order to copy directories recursively, use this option.
–q This option will disable the progress meter.
–P port Specifies the port to connect on the remote host.
–p Preserves modification times, access times, and modes from the original file.
–S program Name of the program to use for the encrypted connection. The program must understand ssh(1) options.
–v Verbose mode. This is helpful in debugging connection, authentication, and configuration problems.

Let us have a look at the usage of scp command now.

An example of Copy the file from a remote host to the local host

The following command will copy the test.txt from the remote system to the local host:

$ scp /test/local/directory
The command example of local host to a remote server

This command will upload the test.txt file from the local host the remote server.

$ scp test.txt
Can I move/copy files from remote to remote systems?

Yes of course, you may use the scp command to copy the file from one remote system to the other. See an example command below:

$ scp \

This will copy the test.txt file from one remote server to another.

Further Reading:  What is Linux ls command?
Uploading multiple files example to the remote server

This command will upload or copy two files from the local host to the home directory of remote system:

$ scp test1.txt test2.txt
Downloading a Directory example using –r option

In this use-case, we wish to utilize scp to download a directory from a remote server to our local machine. To accomplish this, we’ll utilize the -r option, which tells scp to recursively copy all of the directory’s contents to our machine.

$ scp -r /path/to/local/dest

You’ll be prompted for your password on the source system. The command won’t work unless you provide the correct password.

Uploading a folder’s contents using -r

The very same exact concepts as downloading a directory site use here as well. You’ll most likely see that the only difference is where we specify the source directory within the actual command.

$ scp -r /path/to/local/src
Specifying a port example command

As mentioned earlier, you may use the –P option to speicfiy the port. See an example command below:

$ scp -P 2264 test.txt


Best Practices for Using SCP Command in Linux

  1. Secure Data Transfer: Always remember that SCP operates over SSH, ensuring secure and encrypted data transfer. Leverage SCP for confidential or sensitive information to maintain data integrity.
  2. Syntax Precision: Adhere to the correct syntax to specify source and destination paths accurately. Misplacing colons, usernames, or host details can lead to errors or unintended transfers.
  3. Recursive Copy with Caution: When copying directories, use the “-r” option cautiously. Ensure you intend to copy the entire directory and its contents to avoid unintentional data transfer.
  4. Port Specification for Connectivity: If your SSH server operates on a non-default port, use the “-P” option to specify the port number. This ensures a successful connection to the remote host.
  5. Verbose Mode for Troubleshooting: When troubleshooting connection or authentication issues, utilize the “-v” option for verbose mode. This provides detailed information about the transfer process, aiding in problem identification.
  6. Preserve File Attributes with -p: When it’s crucial to preserve modification times, access times, and modes from the original file, employ the “-p” option. This is particularly useful when maintaining file integrity is a priority.
  7. Progress Meter for Transparency: Disable the progress meter using the “-q” option if unnecessary. However, keeping it enabled provides transparency during file transfers, especially for larger files.
  8. Efficient File Transfer Paths: Utilize SCP for various scenarios, such as transferring files from local to remote, remote to local, or even between two remote systems. Understand the flexibility SCP offers in diverse file transfer scenarios.
  9. Double-check Remote-to-Remote Transfers: When copying files directly between two remote systems, ensure that SSH key configurations and permissions are appropriately set on both systems. Double-check connectivity and authentication to avoid interruptions.
  10. Credential Management: Consider using SSH keys for authentication to enhance security and streamline the SCP process, especially for automated or scripted transfers.
Further Reading:  How to Check Disk Space in Linux OS


Troubleshooting and FAQs for SCP Command in Linux

  1. SCP Connection Issues:
    • Issue: If you encounter connection issues, ensure that the remote host is reachable and SSH is properly configured.
    • Solution: Check network connectivity, SSH service status, and verify correct host addresses and usernames.
  2. Permission Denied Errors:
    • Issue: Permission denied errors may occur due to insufficient privileges or incorrect SSH key configurations.
    • Solution: Verify user permissions on both local and remote systems, and check SSH key settings for proper authentication.
  3. Incorrect Syntax Usage:
    • Issue: Errors in command syntax can lead to unsuccessful transfers.
    • Solution: Double-check the SCP command syntax, including correct usage of usernames, host addresses, and file paths.
  4. File Not Found or Path Errors:
    • Issue: If SCP cannot locate the specified file or path, it may result in failures.
    • Solution: Ensure the existence of the specified file or directory and provide accurate paths in the SCP command.
  5. SCP Prompting for Password:
    • Issue: SCP prompting for a password may indicate SSH key authentication issues.
    • Solution: Verify SSH key configurations, permissions, and consider using SSH-agent for key management.
  6. Progress Meter or Verbose Mode Issues:
    • Issue: Progress meter or verbose mode not working as expected.
    • Solution: Check the SCP command for the correct usage of options like “-q” for disabling the progress meter or “-v” for verbose mode.
  7. Port Specification Problems:
    • Issue: If SCP fails to connect on a specified port, there might be port-related issues.
    • Solution: Confirm that the specified port is open, and the SSH server is configured to use the designated port.
  8. SCP Taking Too Long for Large Files:
    • Issue: SCP may take longer for large files or directories.
    • Solution: Consider compressing files or directories before transferring using SCP, and monitor network bandwidth for optimization.


  1. Can SCP Transfer Multiple Files?
    • Yes, SCP can transfer multiple files using a space-separated list of files in the command.
  2. How to Transfer Files Between Two Remote Systems?
    • Use the SCP command with the appropriate source and destination paths for both remote systems.
  3. What Is the Purpose of the “-r” Option?
    • The “-r” option is used to copy directories recursively, allowing the transfer of directory contents.
  4. Why Use the “-P” Option in SCP?
    • The “-P” option specifies the port to connect on the remote host, useful when SSH operates on a non-default port.
  5. How to Troubleshoot SCP Verbose Mode?
    • Enable verbose mode (“-v” option) to debug connection, authentication, and configuration issues during SCP transfers.
Further Reading:  Rename Directory/Folder in Linux


Summary: Mastering SCP Command in Linux

In this comprehensive guide, we covered the SCP (Secure Copy Protocol) command in Linux, explaining its functionality and providing a thorough understanding of its usage.

Key Concepts Covered:

  1. Introduction to SCP: Defined as the “secure copy protocol,” SCP facilitates secure file transfers between local and remote systems, leveraging SSH for a protected connection.
  2. Versatility of SCP: Explored the diverse applications of SCP, including copying files or directories between local and remote systems, as well as transferring files between two remote systems.
  3. Syntax Overview: Provided a clear breakdown of the SCP command syntax, detailing options such as “-r” for recursive copying and “-P” for specifying ports.
  4. Common Usage Examples: Illustrated practical usage through examples, including copying files from local to remote systems, vice versa, and even between two remote systems.
  5. Advanced Features: Explored advanced features such as preserving file attributes, disabling progress meters, and using verbose mode for debugging.
  6. Troubleshooting and FAQs: Addressed common troubleshooting scenarios, ensuring users can resolve issues related to authentication, connection problems, and syntax errors. Additionally, answered frequently asked questions to enhance user proficiency.
  7. Best Practices: Emphasized best practices, such as specifying ports, utilizing recursive copying for directories, and understanding how to upload or download multiple files.

By mastering the SCP command, users can confidently navigate secure file transfers in Linux, optimizing efficiency and ensuring the integrity of their data. Whether copying files within local environments or orchestrating transfers between remote systems, the SCP command proves to be an invaluable tool for Linux users.