"Copy" 的缩写,是一个用于复制文件或目录的命令行工具。
该命令可以将文件或目录从源路径复制到目标路径,支持单个文件复制、多个文件批量复制、目录递归复制等场景,是文件备份和迁移的核心命令。
cp [选项] <源文件/目录1> <源文件/目录2> ... <目标路径>常用选项
-i:"interactive",交互式复制,若目标文件已存在,会提示是否覆盖,例如cp -i file.txt /backup/当backup目录中已有file.txt时,会询问是否覆盖。-f:"force",强制复制,若目标文件已存在则直接覆盖,不提示确认,例如cp -f new.txt old.txt直接用new.txt覆盖old.txt。-r或-R:"recursive",递归复制目录,用于复制目录及其包含的所有文件和子目录,例如cp -r docs /tmp/将docs目录及内容复制到/tmp下。-v:"verbose",显示复制过程的详细信息,例如cp -v data.csv /archive/会输出'data.csv' -> '/archive/data.csv',便于跟踪复制进度。-p:"preserve",保留源文件的属性(包括权限、所有者、修改时间等),例如cp -p config.ini /etc/复制后config.ini的权限和修改时间与源文件一致。-a:"archive",归档模式,等同于-dR --preserve=all,保留链接、递归复制并保留所有文件属性,适合完整备份目录(如cp -a /home/user /backup/)。-l:"link",创建硬链接而非复制文件内容,例如cp -l file.txt link.txt生成file.txt的硬链接link.txt,两者指向同一文件数据。-s:"symbolic link",创建符号链接(软链接)而非复制文件,例如cp -s /usr/bin/python3 python生成指向python3的软链接python。
参考示例
示例1:复制单个文件到指定目录 执行
cp report.pdf /home/user/docs/,将当前目录的report.pdf复制到docs目录下,若目标目录中已有同名文件,会直接覆盖(默认行为,非交互式)。示例2:复制多个文件到目标目录 执行
cp *.jpg /var/www/images/,将当前目录下所有.jpg图片文件复制到Web图片目录,适合批量迁移同类文件。示例3:递归复制目录及内容 执行
cp -rv project /backup/,递归复制project目录及其所有子文件/目录到/backup下,并显示每个文件的复制过程,用于项目备份。示例4:保留属性复制配置文件 执行
cp -p /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak,复制Nginx配置文件并创建备份,保留原文件的权限和修改时间,确保备份文件属性与源文件一致。示例5:交互式覆盖复制 执行
cp -i new_config.ini /etc/app/,当/etc/app/中已有new_config.ini时,会提示是否覆盖 '/etc/app/new_config.ini'?,需手动确认后才执行复制,避免误覆盖重要文件。示例6:创建文件的软链接 执行
cp -s /opt/app/latest/bin/run.sh /usr/local/bin/run,在系统命令目录创建指向应用启动脚本的软链接,无需将脚本复制到bin目录即可直接执行run命令。示例7:归档复制目录(完整备份) 执行
cp -a /var/lib/mysql /backup/mysql_bak,以归档模式复制MySQL数据目录,保留所有文件的权限、所有者、链接关系和时间戳,确保备份与源目录完全一致,用于数据迁移或灾备。