每天学一个 Linux 命令(11):cp

Linux 的 cp 命令用于复制文件或目录。以下是其常见用法和选项的详细说明:


基本语法

cp [选项] 源文件 目标文件
cp [选项] 源文件... 目标目录

常用选项

选项 说明
-r-R 递归复制目录(用于复制目录及其子内容)。
-i 交互模式,覆盖前询问用户确认。
-f 强制覆盖,不提示(若与 -i 冲突,-f 优先)。
-p 保留文件属性(权限、时间戳等)。
-a 归档模式,相当于 -dR --preserve=all(保留所有属性并递归复制)。
-v 显示详细输出(显示复制过程)。
-u--update 仅复制源文件比目标文件新或目标不存在的文件。
--preserve 保留特定属性(如 mode, ownership, timestamps)。
-d 保留符号链接(不复制指向的文件)。
-l 创建硬链接而非复制内容(节省空间)。
-s 创建符号链接而非复制内容。

常见用法示例

  1. 复制文件到目标路径

    cp file.txt /path/to/destination/
    
    • 若目标路径是目录,文件会复制到该目录下。
    • 若目标路径是文件名,则文件会被复制并重命名。
  2. 递归复制目录

    cp -r dir1/ dir2/
    
    • dir2 存在,dir1 会作为子目录复制到 dir2 内。
    • dir2 不存在,则创建 dir2 并将 dir1 的内容复制进去。
  3. 保留文件属性(权限、时间戳)

    cp -p source.txt target.txt
    
  4. 归档模式(完全备份目录)

    cp -a project/ project_backup/
    
  5. 仅复制新文件(增量复制)

    cp -u *.log /backup/
    
  6. 强制覆盖(跳过确认)

    cp -f old.txt new.txt
    
  7. 复制符号链接本身

    cp -d symlink symlink_copy
    
  8. 显示复制过程

    cp -v *.jpg images/
    

注意事项

  • 覆盖行为:若系统别名设置了 cp -i,默认会询问覆盖,可用 \cp-f 强制覆盖。
  • 目录存在性:目标目录必须存在(除非递归复制到新目录)。
  • 权限问题:普通用户可能需要 sudo 写入系统目录,且保留权限需足够权限。
  • 符号链接:默认复制链接指向的文件,使用 -d-P 保留链接本身。

应用场景

  • 备份文件cp -a 保留所有属性。
  • 同步更新cp -u 仅复制更新的文件。
  • 创建硬链接cp -l 节省空间(修改任一文件会影响另一个)。
  • 快速创建符号链接cp -s 生成软链接。

掌握这些用法,可以高效管理文件复制任务!