- 文档
- 教程
【免费下载链接】linux-command
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux
本指南以开源仓库 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:远程主机上的文件路径。
关于路径有两条关键规则需要掌握:
- 相对路径的基准:远程主机上的相对路径以「同名用户的主目录」为基准。如果没有给出远程用户名,就使用当前用户名;
- 特殊字符的转义:如果远程机上的路径包含特殊 shell 字符,需要用反斜线
\\、双引号""或单引号''括起来,使所有的 shell 元字符都能被远程端解释,避免被本地 shell 抢先展开。
例如,远程路径中包含空格或通配符时:
rcp test1 'webserver1:/home/root/my dir/test1'使用前提:免密环境配置
rcp 基于 rsh 完成传输且不提示输入口令,因此在执行复制之前必须先打通两台主机之间的信任关系。按 command/rcp.md 的说明,配置过程如下(只对 root 用户生效):
配置 hosts 解析:如果系统中有
/etc/hosts文件,系统管理员应确保该文件包含要与之通信的远程主机的条目。在双方的/etc/hosts文件中加入对方的 IP 与 hostname,保证主机名可以解析。建立
.rhosts信任文件:在双方 root 用户根目录下建立.rhosts文件,并将双方的 hostname 加进去。例如在主机 A 上:
# 编辑 /root/.rhosts,写入主机 B 的 hostname webserver1- 启动 rsh 服务:rsh 服务在 RedHat 等发行版中默认是不启动的,它通常由 xinetd 托管。启动方法:执行
ntsysv命令,在rsh选项前用空格键选中,确定退出;然后执行:
service xinetd restart- 放开 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_path | rcp test1 webserver1:/home/root/ |
| 远程 → 本地(单文件) | rcp remote_host:remote_path local_path | rcp webserver1:/home/root/test2 . |
| 本地 → 远程(目录) | rcp -r local_dir remote_host:remote_dir | rcp -r work webserver1:/home/root/products |
| 远程 → 本地(目录) | rcp -r remote_host:remote_dir local_dir | rcp -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
相关推荐
linux-command 仓库 cp 命令详解:Linux 文件复制的完整实战指南
linux command 仓库 cp 命令详解:Linux 文件复制的完整实战指南 本指南以 linux command 仓库中的 command/cp.md
文档教程linux-command 手册精读:getcap 命令详解与 Linux 文件能力(capabilities)权限机制实战
linux command 手册精读:getcap 命令详解与 Linux 文件能力(capabilities)权限机制实战 本篇技术指南围绕 Linux 命令
文档教程linux-command 项目实战:hostname 命令显示与设置系统主机名详解
linux command 项目实战:hostname 命令显示与设置系统主机名详解 本文基于 linux command 仓库的 command/hostna
文档教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考