cp 命令是 Linux 系统中最基本和最常用的文件操作命令之一,用于复制文件和目录。它是 "copy" 的缩写,能够创建文件副本、备份重要数据、复制整个目录结构等。
cp [选项] 源文件 目标文件
或者复制多个文件:
cp [选项] 源文件... 目标目录
# 复制文件到当前目录
cp file.txt file_backup.txt
# 复制文件到指定目录
cp file.txt /path/to/destination/
# 复制并显示详细信息
cp -v file.txt backup.txt
# 输出:'file.txt' -> 'backup.txt'
# 复制多个文件到目录
cp file1.txt file2.txt file3.txt /target/directory/
# 使用通配符复制多个文件
cp *.txt /backup/
# 复制特定类型的文件
cp *.jpg *.png /images/
# 递归复制整个目录
cp -r source_directory/ destination_directory/
# 复制目录并保留所有属性
cp -a original_directory/ backup_directory/
# 复制目录并显示进度
cp -rv project/ project_backup/
# 交互模式(覆盖前确认)
cp -i important_file.txt backup/
# 输出:cp: overwrite 'backup/important_file.txt'?
# 强制覆盖(不提示)
cp -f config.conf /etc/app/
# 备份模式(覆盖前创建备份)
cp -b old.txt new.txt
# 如果 new.txt 存在,会创建 new.txt~ 作为备份
# 保留文件权限和时间戳
cp -p source.txt destination.txt
# 归档模式(保留所有属性,用于备份)
cp -a /home/user/documents/ /backup/user_documents/
# 验证文件属性
ls -l source.txt destination.txt
# 输出:
# -rw-r--r-- 1 user user 1024 Jan 10 10:00 source.txt
# -rw-r--r-- 1 user user 1024 Jan 10 10:00 destination.txt
# 备份重要配置文件
cp -p /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
# 备份用户数据
cp -a /home/user/documents/ /backup/user_documents_$(date +%Y%m%d)/
# 增量备份(只复制新文件)
cp -u /source/* /backup/
# 部署网站文件
cp -r website/* /var/www/html/
# 复制并设置正确的权限
cp -a application/ /opt/myapp/
chmod +x /opt/myapp/bin/*
# 批量复制资源文件
cp images/*.png css/*.css js/*.js /var/www/static/
# 备份日志文件
cp /var/log/syslog /backup/logs/syslog_$(date +%Y%m%d)
# 复制系统配置
cp -p /etc/hosts /etc/resolv.conf /backup/network/
# 创建临时工作副本
cp -r /var/lib/mysql /tmp/mysql_backup/
#!/bin/bash
# 批量复制和重命名文件
SOURCE_DIR="/data/photos"
DEST_DIR="/shared/albums"
# 为所有图片文件添加前缀
for file in "$SOURCE_DIR"/*.jpg; do
if [ -f "$file" ]; then
filename=$(basename "$file")
cp -p "$file" "$DEST_DIR/vacation_$filename"
fi
done
echo "图片复制完成"
# 批量更改文件扩展名
for file in "$SOURCE_DIR"/*.jpeg; do
if [ -f "$file" ]; then
basename="${file%.jpeg}"
cp "$file" "${basename}.jpg"
fi
done
# 使用 -t 选项明确指定目标目录
cp -t /target/directory/ file1.txt file2.txt file3.txt
# 这在脚本中特别有用
files=(*.txt)
cp -t /backup/ "${files[@]}"
# 与find命令结合使用
find . -name "*.conf" -exec cp -t /backup/configs/ {} +
# 创建硬链接(共享inode)
cp -l original.txt hardlink.txt
# 创建符号链接(软链接)
cp -s /path/to/original symlink_to_original
# 验证链接
ls -li original.txt hardlink.txt
# 输出相同的inode编号
# 使用数字备份
cp --backup=numbered important.txt backup/
# 如果 backup/important.txt 存在,会创建 backup/important.txt.~1~
# 简单备份
cp -b -S .bak file.txt destination/
# 如果目标文件存在,会创建 destination/file.txt.bak
# 带时间戳的备份
cp --backup=t file.conf /etc/
# 创建类似 file.conf.~2024-01-10~ 的备份
#!/bin/bash
# 安全的文件复制脚本
safe_copy() {
local src=$1
local dest=$2
# 检查源文件是否存在
if [ ! -e "$src" ]; then
echo "错误: 源文件 '$src' 不存在"
return 1
fi
# 检查目标目录是否可写
local dest_dir=$(dirname "$dest")
if [ ! -w "$dest_dir" ] && [ ! -w "$(pwd)" ]; then
echo "错误: 目标目录不可写"
return 1
fi
# 执行复制操作
if cp -i "$src" "$dest"; then
echo "成功复制: $src -> $dest"
return 0
else
echo "复制失败: $src -> $dest"
return 1
fi
}
# 使用函数
safe_copy "important.txt" "backup/important.txt"
# 在 ~/.bashrc 中设置别名,默认使用交互模式
alias cp='cp -i'
# 重要操作前先检查目标
ls -l destination_directory/
cp -i important_file.txt destination_directory/
# 使用备份选项
cp -b confidential.data backup/
# 复制后验证权限
cp -p source.txt dest.txt
ls -l source.txt dest.txt
# 确保敏感文件权限正确
cp secret.txt /secure/location/
chmod 600 /secure/location/secret.txt
# 复制目录时保持权限结构
cp -a sensitive_data/ backup/
| 命令 | 用途 | 特点 |
|---|---|---|
cp |
复制文件/目录 | 创建文件副本,支持各种属性保留选项 |
mv |
移动/重命名文件 | 移动文件位置或重命名,不创建副本 |
rsync |
远程同步 | 增量复制,支持网络传输,更高效 |
dd |
底层数据复制 | 块级复制,适合磁盘映像等操作 |
ln |
创建链接 | 创建文件链接,不复制实际数据 |
cp -i 作为默认别名可以防止意外覆盖文件cp -a 保留所有文件属性cp -u 可以避免不必要的复制,提高效率cp -f 可以避免交互提示cp -v 可以查看详细的复制过程rsync 以获得更好的性能cp --backup 可以在覆盖前自动备份-r 或 -a 选项-L 选项