The scp (secure copy) command in Linux is a powerful and widely used tool for transferring files and directories securely between remote and local systems or between two remote systems. Leveraging SSH (Secure Shell), SCP ensures that your file transfers are encrypted, making it a reliable and secure option for file movement.

This user guide provides a detailed overview of the scp command in Linux, including its syntax, available options, practical examples, and tips.
Prerequisites
To use scp command, the following conditions must be met:
- SSH Access: You must have SSH access to the remote machine (either as a user or root).
- SCP Installed: While most Linux distributions come with
scppre-installed, it should be confirmed. It is typically included in theopenssh-clientpackage. - Network Connectivity: Both the source and destination systems must be reachable over the network (i.e., they should be connected via TCP/IP).
- Authentication Details: You should have the correct credentials (username and password or SSH key) to authenticate on the remote system.
The scp Command Syntax
The basic syntax of the scp command in Linux is as follows:
scp [options] source destinationWhere:
source: The file or directory you want to copy. It could be a local file or a remote file.destination: The target location where you want to copy the file. It can also be local or remote.
Format for remote files:
username@hostname:/path/to/fileFor example:
- Local to remote:
scp file.txt user@192.168.1.2:/remote/path/ - Remote to local:
scp user@192.168.1.2:/remote/path/file.txt /local/path/
Use Most Common scp Command Options
The following are the most common scp command options:
| Option | Description |
|---|---|
-P | Specifies the port to connect on the remote host. |
-p | Preserves the original file’s modification times, access times, and modes. |
-r | Recursively copies entire directories. |
-q | Quiet mode; suppresses non-error messages. |
-C | Enables compression. |
-l | Limits the bandwidth used during the transfer. |
-v | Quiet mode suppresses non-error messages. |
-i | Sets the private key location to use with a public key for authentication |
Check Out | Master head Command in Linux: Easy Guide with Examples
Transfer Files and Directories Using SCP
Transferring files and directories securely over a network is a common task in Linux environments. The scp command in Linux simplifies this process by leveraging SSH for encrypted file transfers. Whether you need to copy a single file or entire directories, scp provides an easy and efficient way to securely move data between local and remote systems or between two remote machines.
Here’s how to do it seamlessly:
Transfer a Local File to a Remote Server
To copy a file from your local machine to a remote server, use the following command:
scp /path/to/local/file.txt roshan@remote_host:/path/to/remote/directory/- Replace
/path/to/local/file.txtwith the file you want to transfer. - Replace
roshan@remote_hostwith your remote server’s username and IP address, or hostname. - Replace
/path/to/remote/directory/with the destination directory on the remote server.
Transfer a Remote File to Your Local Machine
To copy a file from a remote server to your local machine:
scp roshan@remote_host:/path/to/remote/file.txt /path/to/local/directory/- Replace
roshan@remote_host:/path/to/remote/file.txtwith the file path on the remote server. - Replace
/path/to/local/directory/with your local directory.
Copy a Directory Recursively
To copy an entire directory, including its contents, from your local machine to a remote server, use the -r option:
scp -r /path/to/local/directory roshan@remote_host:/path/to/remote/directory/This copies the entire directory and all of its files to the remote server.
Copy a Directory from Remote Server to Local Machine
Similarly, you can copy a directory from a remote server to your local system:
scp -r roshan@remote_host:/path/to/remote/directory /path/to/local/directory/This command copies the remote directory to your local machine.
Using SSH Key for Authentication
If you use an SSH key for authentication, specify it with the -i option:
scp -i /path/to/private_key /path/to/local/file.txt roshan@remote_host:/path/to/remote/directory/Replace /path/to/private_key with the location of your private SSH key.
Limit Bandwidth During Transfer
To limit the transfer speed, use the -l option followed by the bandwidth in kilobits per second:
scp -l 500 /path/to/local/file.txt roshan@remote_host:/path/to/remote/directory/This limits the bandwidth to 500 kbps, useful for managing network load.
Best Practices and Tips
- Use SSH Keys for Authentication: Instead of using passwords, SSH keys offer a more secure and convenient way to authenticate, especially when automating transfers.
- Be Cautious with Permissions: When copying files to remote systems, ensure that the user you’re copying to has the necessary write permissions for the destination directory.
- Check for Firewall Restrictions: If you’re unable to connect to the remote server, check if any firewall is blocking port 22 (default SSH port) or if SSH is configured on a non-default port.
- Use Verbose Mode for Debugging: If you encounter issues, use the
-vflag to enable verbose output. It will provide detailed information about the transfer process, which can help diagnose problems. - Secure Transfers with Firewalls: If you’re transferring sensitive information, consider using additional security measures such as VPNs or firewalls to restrict access to the server.
Conclusion
The scp command in Linux is an essential tool in any Linux user’s toolkit, enabling secure and efficient file transfers over the network. Whether you’re moving individual files or entire directories, the flexibility of scp makes it an ideal choice for most scenarios. By mastering its syntax, options, and best practices, you can ensure that your file transfers are fast, secure, and reliable.