☰
Linux Command 命令详解:rcp 在两台 Linux 主机之间复制文件与免密配置实战
2026/10/3 16:58:33 网站建设 项目流程
  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

本指南以开源仓库 linux-command 中 command/rcp.md 文档为主体,讲解 rcp 命令在两台 Linux 主机之间复制文件的完整用法:从语法选项、远程文件名格式,到/etc/hosts、.rhosts、rsh 服务的免密环境配置,再到本地与远程之间单文件、批量文件与整目录的复制实战。读完你可以独立完成两台主机间的 rcp 免密复制环境搭建与日常文件分发任务,并理解它基于 rsh 的执行原理及其安全局限。

rcp 命令概述

rcp(remote copy)是 BSD 系列系统与早期 Linux 系统中提供的一类远程复制工具,其核心作用正如 command/rcp.md 开头所概括的:使在两台 Linux 主机之间的文件复制操作更简单。通过适当的配置,可以在两台 Linux 主机之间复制文件而无需输入密码,就像本地文件复制一样简单。

在本仓库 linux-command 中,rcp 被收录为「文件管理」类命令(见 README.md),其命令入口也同步登记在站点搜索索引 dist/data.json 中("n": "rcp", "p": "/rcp"),读者可以直接在 web 端搜索定位到本文内容。

需要特别强调的是,rcp不提示输入口令,它通过rsh命令来执行拷贝。这意味着:

  • 文件复制的认证完全依赖主机间的信任关系(.rhosts//etc/hosts.equiv);
  • 数据默认以明文在网络上传输(只有加-x选项时才加密);
  • 由于上述特性,rcp 在现代 Linux 发行版中已逐渐被scp、rsync等更安全、功能更强的工具取代(本仓库同样收录了 command/scp.md 与 command/rsync.md),但在维护老旧系统、学习经典 r 系列命令时仍有明确的查阅价值。

语法与选项详解

rcp 的通用语法为:

rcp(选项)(参数)

选项说明

选项作用
-p保留源文件或目录的属性,包括拥有者(owner)、所属群组(group)、权限(mode)与时间戳(mtime/ctime)
-r递归处理,将指定目录下的文件与子目录一并复制(复制目录时必须使用)
-x加密两台 Linux 主机间传送的所有信息,适用于对保密性有要求的传输场景
-D指定远程服务器的端口号,用于 rsh 服务监听在非默认端口(如 514)的环境

参数说明

源文件:指定要复制的源文件。源文件可以有多个,即一次命令可以同时复制多个文件到同一远程目录。

远程文件名的格式与路径规则

每个文件或目录参数既可以是远程文件名,也可以是本地文件名。远程文件名具有如下形式:

rname@rhost:path

其中:

  • rname:远程用户名。如果省略,则使用当前登录用户名;
  • rhost:远程计算机名(hostname);
  • path:远程主机上的文件路径。

关于路径有两条关键规则需要掌握:

  1. 相对路径的基准:远程主机上的相对路径以「同名用户的主目录」为基准。如果没有给出远程用户名,就使用当前用户名;
  2. 特殊字符的转义:如果远程机上的路径包含特殊 shell 字符,需要用反斜线\\、双引号""或单引号''括起来,使所有的 shell 元字符都能被远程端解释,避免被本地 shell 抢先展开。

例如,远程路径中包含空格或通配符时:

rcp test1 'webserver1:/home/root/my dir/test1'

使用前提:免密环境配置

rcp 基于 rsh 完成传输且不提示输入口令,因此在执行复制之前必须先打通两台主机之间的信任关系。按 command/rcp.md 的说明,配置过程如下(只对 root 用户生效):

  1. 配置 hosts 解析:如果系统中有/etc/hosts文件,系统管理员应确保该文件包含要与之通信的远程主机的条目。在双方的/etc/hosts文件中加入对方的 IP 与 hostname,保证主机名可以解析。

  2. 建立.rhosts信任文件:在双方 root 用户根目录下建立.rhosts文件,并将双方的 hostname 加进去。例如在主机 A 上:

# 编辑 /root/.rhosts,写入主机 B 的 hostname webserver1
  1. 启动 rsh 服务:rsh 服务在 RedHat 等发行版中默认是不启动的,它通常由 xinetd 托管。启动方法:执行ntsysv命令,在rsh选项前用空格键选中,确定退出;然后执行:
service xinetd restart
  1. 放开 root 登录限制:到/etc/pam.d/目录下,把 rsh 文件中的如下一行用#注释掉:
auth required /lib/security/pam_securetty.so

只有注释掉这一行,root 用户才被允许通过 rsh 登录,rcp 才能以 root 身份完成免密复制。

完成上述四步后,两台主机之间即可像本地复制一样执行 rcp,无需交互输入密码。

实战:将本地文件复制到远程系统

复制到远程子目录(保持原名)

将当前目录下的test1复制到名为webserver1的远程系统:

rcp test1 webserver1:/home/root/test3

这种情况下,test1被复制到远程子目录test3下,名称仍为test1。如果仅提供了远程主机名而不带路径,rcp 会把test1复制到远程主目录下,名称仍为test1:

rcp test1 webserver1:

复制并重命名

还可以在目的路径中包含文件名。例如,将文件复制到名为webserver1的系统中:

rcp test1 webserver1:/home/root/test3

当远程的/home/root/test3是目标文件名(或不存在于 root 目录)时,这条命令会把本地的test1复制到远程目录root下并命名为test3。两条示例命令形式上相同,区别在于远程路径test3在目标主机上是「已存在的目录」还是「目标文件名」——前者保持原名落入目录,后者直接重命名。这一行为与本地cp的语义一致,使用时务必先确认目标路径的类型。

实战:从远程系统复制文件到本地

从远程系统复制文件到本地目录的基本语法为:

rcp remote_hostname:remote_file local_file

例如,将远程系统webserver1中的test2复制到当前目录:

rcp webserver1:/home/root/test2 .

.是「当前目录」的简写形式。在这种情况下,远程目录中的test2被复制到当前目录下,名称仍为test2。

如果希望用新名称复制文件,请提供目标文件名。如果希望将test2复制到本地系统中的其他目录下,请使用绝对或相对路径名:

rcp webserver1:/home/root/test2 otherdir/

或者,如果希望用其他文件名将文件复制到其他目录下:

rcp webserver1:/home/root/test2 otherdir/otherfile

实战:目录的递归复制

复制目录必须同时使用rcp与-r(递归)选项,否则无法处理目录内的文件与子目录。

将本地目录复制到远程系统

基本语法:

rcp -r local_dir remote_hostname:remote_dir

如果当前目录下没有local_dir,则除本地目录名外,还需要提供相对路径名(自当前目录开始)或绝对路径名(自/顶级目录开始)。同理,如果远程主机的主目录下没有remote_dir,则remote_dir需要相对路径(自主目录开始)或绝对路径(自/开始)。

例如,要将名为work的子目录完整地复制到webserver1远程计算机中主目录下的products目录:

rcp -r work webserver1:/home/root/products

此命令会在webserver1:/home/root/products下创建名为work的目录及其全部内容(前提是/home/root/products已存在于webserver1中)。本示例假定用户处于包含work的本地目录下;否则必须提供该目录的相对或绝对路径,如/home/root/work:

rcp -r /home/root/work webserver1:/home/root/products

从远程系统复制目录到本地

基本语法:

rcp -r remote_hostname:remote_dir local_dir

例如,要将名为work的远程目录复制到当前目录:

rcp -r webserver1:/home/root/work .

.表示当前目录,将在此目录下创建work目录及其全部内容。

传输路径与执行原理小结

综合上文可以归纳出 rcp 的四类调用形态,覆盖单文件与整目录、上行与下行全部场景:

场景命令形态示例
本地 → 远程(单文件)rcp local_file remote_host:remote_pathrcp test1 webserver1:/home/root/
远程 → 本地(单文件)rcp remote_host:remote_path local_pathrcp webserver1:/home/root/test2 .
本地 → 远程(目录)rcp -r local_dir remote_host:remote_dirrcp -r work webserver1:/home/root/products
远程 → 本地(目录)rcp -r remote_host:remote_dir local_dirrcp -r webserver1:/home/root/work .

从执行原理看,rcp 本身并不维护自己的传输通道,而是委托 rsh 在远程主机上执行对应的复制操作。这也解释了为什么 rcp 无密码提示:认证是否免密,完全取决于上文.rhosts/ PAM 配置是否打通。理解了这一层,就能明白为什么 rcp 默认不加密(明文传输),以及为什么-x选项会成为敏感数据传输时的必要开关。

安全性与替代方案

需要明确的是,rcp 属于 r 系列远程命令(rlogin / rsh / rcp),其设计前提是主机间的信任网络,存在两点固有局限:

  • 明文传输:默认情况下数据与文件内容在网络中不加密,容易被嗅探;
  • 认证依赖信任文件:.rhosts一旦配置不当(如写入过多的主机名),相当于向这些主机开放免密访问,安全边界较脆弱。

因此,在现代 Linux 环境中,跨主机文件传输更推荐使用本仓库同样收录的:

  • command/scp.md:基于 SSH,数据加密传输、支持口令与密钥认证;
  • command/rsync.md:基于 SSH 或自带守护进程,支持增量同步、断点续传与权限保留。

rcp 的适用场景目前主要集中于老旧系统维护、教材学习以及对传统 r 命令生态兼容性有要求的内部网络。理解 rcp 的选项与信任机制,也有助于反向理解 scp/rsync 在设计上解决了哪些问题。

结语

本文以 command/rcp.md 为骨架,完整梳理了 rcp 的语法、选项(-p、-r、-x、-D)、远程文件名格式、基于 rsh 的免密配置四步法,以及本地与远程之间的单文件、重命名、递归目录复制等全部实战形态。无论你是查阅速查手册,还是需要维护仍依赖 rcp 的旧环境,都可以把本文作为可复制、可运行的参考。若需更安全的传输方案,请转向仓库中的 command/scp.md 与 command/rsync.md。

  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询