在CentOS系统中,拷贝文件和目录是日常运维和管理中非常常见的操作,掌握不同场景下的拷贝命令能大幅提升工作效率,本文将详细介绍CentOS中常用的拷贝命令,包括基础命令cp
、远程拷贝命令scp
以及增量同步命令rsync
,并通过实例说明其使用方法和适用场景。
基础本地拷贝命令:cp
cp
(copy)是CentOS中最基础的文件和目录拷贝命令,主要用于本地文件系统内的数据拷贝,支持文件到文件、文件到目录、目录到目录等多种场景。
基本语法
cp [选项] 源文件或目录 目标文件或目录
常用选项及说明
选项 | 功能描述 |
---|---|
-r 或 -R |
递归拷贝目录及其所有子目录和文件(仅用于目录) |
-p |
保留源文件的权限、时间戳、所有者等信息 |
-f |
强制覆盖目标文件,不提示确认 |
-i |
覆盖前提示用户确认(默认行为,与-f 对立) |
-a |
归档模式,相当于-dpR (保留属性、递归拷贝) |
-l |
创建硬链接而非拷贝文件 |
-s |
创建符号链接而非拷贝文件 |
-u |
仅在源文件比目标文件新或目标文件不存在时拷贝 |
实用示例
-
拷贝单个文件
将/home/user/test.txt
拷贝到/tmp/
目录:cp /home/user/test.txt /tmp/
若目标文件已存在,默认会提示覆盖(需
-f
强制覆盖)。 -
递归拷贝目录
将/home/user/docs
目录及其所有内容拷贝到/backup/
:cp -r /home/user/docs /backup/
注意:若目标目录
/backup/
下已存在docs
,拷贝后/backup/docs/
会成为/home/user/docs/
的子目录(错误操作),需确保目标目录不存在或使用/backup/docs/
作为目标(末尾加表示拷贝目录内容到目标目录)。 -
保留文件属性拷贝
拷贝文件时保留权限、时间戳等信息:cp -p /home/user/config.conf /etc/
-
批量拷贝文件
使用通配符拷贝所有.log
文件到/var/log/archive/
:cp /var/log/*.log /var/log/archive/
远程拷贝命令:scp
scp
(secure copy)基于SSH协议实现加密传输,用于在本地主机与远程主机之间安全拷贝文件或目录,语法与cp
类似,但需指定远程主机地址(格式为[用户@]主机:路径
)。
基本语法
scp [选项] 源文件或目录 [用户@]主机:目标路径 scp [选项] [用户@]主机:源文件或目录 目标路径
常用选项及说明
选项 | 功能描述 |
---|---|
-r |
递归拷贝目录 |
-P |
指定远程主机的SSH端口(默认22,注意大写) |
-p |
保留文件的修改时间、访问时间和权限 |
-C |
启用压缩传输 |
-q |
静默模式,不显示传输进度 |
-l |
限制传输速率(单位:Kbit/s) |
实用示例
-
本地文件拷贝到远程主机
将/home/user/file.txt
拷贝到远程主机168.1.100
的/tmp/
目录(用户为root
):scp /home/user/file.txt root@192.168.1.100:/tmp/
首次连接会提示确认远程主机指纹(输入
yes
),之后需输入用户密码。 -
远程主机文件下载到本地
从远程主机168.1.100
的/opt/
目录下载data.zip
到本地当前目录:scp root@192.168.1.100:/opt/data.zip ./
-
递归拷贝远程目录
拷贝远程主机168.1.100
的/var/www/html/
目录到本地/backup/
:scp -r root@192.168.1.100:/var/www/html/ /backup/
-
指定端口和压缩传输
通过2222端口拷贝文件,并启用压缩:scp -P 2222 -C /home/user/largefile.zip user@192.168.1.100:/opt/
-
免密拷贝(基于SSH密钥认证)
若已配置SSH免密登录,可直接传输无需输入密码:scp -r /home/user/project/ user@remote:/opt/
增量同步命令:rsync
rsync
(remote sync)是一款强大的数据同步工具,支持本地和远程同步,核心优势是增量拷贝(仅传输变化的部分),适合大文件、目录或频繁同步场景,可保留文件属性、支持断点续传、排除特定文件等。
基本语法
rsync [选项] 源文件或目录 目标文件或目录
常用选项及说明
选项 | 功能描述 |
---|---|
-a |
归档模式,保留权限、时间戳、符号链接等(相当于-rlptgoD ) |
-v |
显示详细传输过程 |
-z |
压缩传输数据(减少网络带宽占用) |
-h |
以人类可读格式显示传输速率(如1K、2M) |
--progress |
显示传输进度条 |
--delete |
删除目标中多余文件(确保与源完全一致,谨慎使用) |
--exclude |
排除特定文件或目录(可多次使用排除多个) |
--bwlimit |
限制传输速率(单位:KB/s) |
--partial |
断点续传(保留未传输完成的文件) |
-e |
指定远程shell程序(如SSH) |
实用示例
-
本地目录同步
将/home/user/src/
同步到/home/user/dest/
,保留所有属性,仅传输变化文件:rsync -avz /home/user/src/ /home/user/dest/
注意:源路径末尾的表示拷贝
src
目录下的内容到dest
(若不加,则将src
目录整体拷贝到dest
下)。 -
远程目录同步
将本地/data/
同步到远程主机168.1.100
的/backup/data/
(使用SSH加密传输):rsync -avz -e ssh /data/ root@192.168.1.100:/backup/data/
-
排除特定文件同步
同步时排除.log
文件和temp
目录:rsync -avz --exclude="*.log" --exclude="temp" /home/user/src/ /home/user/dest/
-
删除目标多余文件
将本地/app/
完全同步到远程/remote/app/
(目标中存在但源中不存在的文件将被删除):rsync -avz --delete /app/ root@192.168.1.100:/remote/app/
⚠️ 此操作风险较高,建议先测试确认。
-
带进度限制速率同步
同步文件并显示进度条,限制速率为1MB/s:rsync -avh --progress --bwlimit=1024 /largefile.zip /backup/
命令对比与适用场景
命令 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
cp |
本地文件/目录简单拷贝 | 无需额外工具,基础操作 | 无增量传输,大文件效率低 |
scp |
本地与远程安全拷贝 | 基于SSH加密,简单易用 | 每次全量传输,无增量功能 |
rsync |
本地/远程增量同步、大文件同步 | 增量传输、保留属性、支持断点续传 | 参数复杂,首次配置稍麻烦 |
进阶技巧
-
结合
find
批量拷贝
查找最近7天修改的文件并拷贝到备份目录:find /var/log -type f -mtime -7 -exec cp {} /backup/recent_logs/ ;
-
使用
tar
打包后拷贝
对大量小文件打包减少IO,再通过scp
传输:tar -czf - /home/user/docs/ | ssh user@remote "tar -xzf - -C /opt/"
相关问答FAQs
Q1:拷贝大文件时如何避免因网络中断导致传输失败?
A:对于大文件传输,推荐使用rsync
的--partial
选项(保留未完成传输的文件)或--append
(断点续传):
rsync --partial --progress -avz /largefile.zip user@remote:/path/
若使用scp
,可通过nohup
配合screen
/tmux
后台运行,避免终端关闭中断传输:
screen -S scp_session scp /largefile.zip user@remote:/path/ # 按Ctrl+A+D分离会话,后续可通过`screen -r scp_session`恢复
Q2:如何拷贝时排除特定文件类型或目录?
A:
- 使用
cp
时,需结合find
和xargs
排除文件(如排除.tmp
文件):find /source -name "*.tmp" -prune -o -type f -print0 | xargs -0 cp -t /destination
- 使用
rsync
时,直接通过--exclude
选项指定排除模式(更简单):rsync -avz --exclude="*.tmp" --exclude="temp_dir" /source/ /destination/
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/17072.html