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
scp
pre-installed, it should be confirmed. It is typically included in theopenssh-client
package. - 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 destination
Where:
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/file
For 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.txt
with the file you want to transfer. - Replace
roshan@remote_host
with 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.txt
with 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
-v
flag 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.