在 Linux 中使用 scp 命令:解释 10 个实际示例
以下是一些实用且重要的 scp 命令示例,展示如何在远程 Linux 系统之间安全地复制文件。
您可能已经熟悉 Linux 中的 cp 命令,该命令用于在 Linux 中复制文件。 cp 命令只能在本地计算机上使用。
但是从远程 Linux 系统复制文件又如何呢?要将文件从远程服务器复制到远程服务器,可以使用名为 scp 的命令。
冷知识:scp 是 Secured Copy 的缩写。
scp命令语法
scp 命令的语法和用法与 cp 命令类似,您很快就会在这些 scp 命令示例中看到它。
但首先让我们看一下 scp 命令的语法:
scp <options> source_path destination_path
根据要复制的文件的来源,来源可以是客户端或服务器。如果源是客户端,则目标是服务器,反之亦然。
但这听起来太简单了,不是吗? scp 命令的主要重点是使用正确的源或目标路径格式。
服务器上文件或目录的典型路径用以下格式表示:
<username>@<ip_address_of_system>:<path_to_the file/directory>
实际上,您也可以在 scp 命令中使用 user@hostname,但更有可能最终出现错误“无法解析主机名”。
这是因为将主机名与 IP 地址相关联取决于服务器网络的网络配置。使用实际的 IP 地址可以省去您的麻烦。
使用 scp 命令之前要记住的事项
在 Linux 系统上使用 scp 命令之前,您需要满足以下几个条件:
确保 ssh 已安装并在客户端和服务器计算机上运行,因为 scp 命令内部使用 ssh。如果未安装 ssh,请在基于 Debian 的计算机上使用命令“sudo apt install ssh”或使用发行版的相应包管理器来安装它。
您需要知道远程系统的 IP 地址或主机名(如果是同一子网)。
您需要知道远程系统的用户名和密码。系统将提示您输入远程主机的密码。 仅当您输入远程主机的正确密码时,您的文件传输才会开始。
在 Linux 中使用 scp 命令:10 个实际示例
现在我们已经了解了 scp 命令的语法和指定服务器路径的格式,现在让我们看看如何使用 scp 命令。
1.使用scp命令复制文件到远程系统
要将单个文件从本地计算机复制到远程主机,请指定文件的路径作为源路径和要复制文件的远程主机中的路径。
scp abc.txt xyz@<ip_address_of_xyz>:/home/xyz/Desktop
2.使用scp命令从远程系统复制文件
将文件从远程系统复制到本地系统几乎是相同的。您只需指定远程系统上文件的完整路径和本地系统上的路径。
因此,要将文件从远程系统复制到当前目录,只需按以下方式使用命令:
scp xyz@<ip_address_of_xyz>:/remote/user/home/abc.txt .
3.使用scp命令复制多个文件
要将多个文件从本地计算机复制到主机,只需指定文件名作为源路径即可。
scp abc.txt def.txt xyz@<ip_address_of_xyz>:/home/xyz/Desktop
4.使用scp命令复制整个目录
使用 scp 复制目录也与 cp 命令相同。您可以使用 -r 选项并将文件夹名称指定为源路径。这称为递归模式。
scp -r ~/Desktop/test xyz@<ip_address_of_xyz>:/home/xyz/Desktop
您还可以指定多个目录并通过一个命令将它们全部复制。
5. 在输出中查看文件传输详细信息
如果您想知道复制时幕后发生了什么,可以使用 -v 选项查看执行的所有进程,包括调试、退出状态、加密、解密等。这称为详细模式。
scp -v abc.txt xyz@<ip_address_of_xyz>:/home/xyz/Desktop
6. 跨两个远程主机复制文件
到目前为止,您已经了解了如何从本地计算机复制到远程计算机。
要将文件从一台远程计算机复制到另一台远程计算机,请按照上面讨论的方式以远程计算机的格式指定源路径和目标路径。
scp abc@<ip_address_of_abc>:<path_of_file_or_folder> xyz@<ip_address_of_xyz>:<path_of_file_or_folder
不用说,您需要知道这里两个系统的密码。
7. 压缩复制文件[减少传输时间]
如果您尝试将一堆文件复制在一起,则比传输大小相当于所有单个文件总和的单个文件花费更多的时间。
如果您觉得需要提高传输文件的速度,可以使用-C选项压缩文件并传输文件。
最好的事情是压缩仅在传输时发生。传输完成后,文件将以原始形式存储。您不会看到 arhcive 文件,而是看到远程服务器上的所有单独文件。
scp -C abc.txt xyz@<ip_address_of_xyz>:/home/xyz/Desktop
8.限制文件传输带宽
如果您认为文件传输占用了大部分带宽,您可以使用 -l 选项减少文件传输的带宽,然后使用新的带宽速率。
scp -l 800 abc.txt xyz@<ip_address_of_xyz>:/home/xyz/Desktop
请注意,您在命令中指定的带宽以千位每秒为单位,但在传输文件时,scp 命令输出将显示传输速率(以千字节每秒为单位)。
由于 1 字节=8 位,因此命令参数中的 8300 KB/秒在命令输出中变为 100 KB/秒。
9. 保留复制文件的原始属性
如果需要保留原始文件属性,例如文件权限和所有权、文件时间戳等,请使用 -p 选项。
scp -p abc.txt xyz@<ip_address_of_xyz>:/home/xyz/Desktop
10.隐藏scp命令的输出
如果您对 scp 命令的冗长输出不满意,可以使用 -q 选项来避免该命令的输出。这称为安静模式。
它甚至隐藏了复制文件的进度。
scp -q abc.txt xyz@<ip_address_of_xyz>:/home/xyz/Desktop
在上面的示例中,您已经了解了如何将文件从本地计算机复制到远程主机。如果需要将文件从远程主机复制到本地计算机,请将要从远程主机复制的文件/文件夹的路径作为源路径,将要粘贴到本地计算机的文件/文件夹的路径作为目标路径路径。
结论
有关 scp 命令的更多详细信息,请参阅其手册页。
我希望您现在了解如何充分利用 scp 命令在计算机之间安全地复制文件。就我个人而言,我更喜欢使用 rsync 命令而不是 scp,因为 rsync 有更多功能。
但是,与 docker cp 命令一样,scp 也遵循与常见 cp 命令类似的语法。这使得它成为许多 Linux 用户的有吸引力的选择。
如果您遇到任何问题,请随时在下面的评论部分提出问题。如果您知道任何其他很棒的 scp 命令提示,请在这里与我们其他人分享。