cp 命令

用途

复制文件。

语法

要将文件复制到另一个文件,请使用以下语法:

cp [ -d ] [ -e ] [ -E {force|ignore|warn} ] [ -f ] [ -h ] [ -i ] [ -p ] [ -I ] [ -S ] [ -U ] [ -- ] SourceFile TargetFile

要将文件复制到目录,请使用以下语法:

cp [ -d ] [ -e ] [ -E {force|ignore|warn} ] [ -f ] [ -h ] [ -i ] [ -p ] [[ -r | -R ] [ -H | -L | -P ]] [ -I ] [ -U ] [ -- ] SourceFile ... TargetDirectory

要将目录复制到目录,请使用以下语法:

cp [ -d ] [ -e ] [ -E {force|ignore|warn} ] [ -f ] [ -h ] [ -i ] [ -p ] { -r | -R } [ -H | -L | -P ] [ -I ] [ -U ] [ -- ] SourceDirectory ... TargetDirectory

描述

cp 命令复制由 SourceFile 参数指定的源文件到由 TargetFile 参数指定的目标文件。 如果目标文件已存在,cp 覆盖原来内容,但相关的方式、所有者和组不改变。 SourceFile 的最后访问时间和 TargetFile 的最后修改时间设置为复制进行的时间。 如果 TargetFile 不存在, cp 创建一个新文件命名为 TargetFile,它和源文件除了粘滞位未设置外有相同的方式,除非超级用户来设置它,而所有者和 TargetFile 组正是这种用户。 当 TargetFile 是另一文件的链接时,cp 用源文件内容覆盖目标链接;来自 TargetFile 的链接保留。 而且,cp 命令能复制 由 SourceFile 参数(或由 SourceDirectory 参数指定的目录)指定的源文件到由 TargetDirectory 参数指定的目录。

注: 如果其中一个源参数是目录,那么需要指定 -r-R 标志之一。

如果有目录由 cp 命令在复制过程创建,新创建的目录与相应的源目录有相同的方式。

您也能复制特殊设备文件。 实现这一点的首选选项是 -R 标志。 指定 -R 使得特殊文件在新路径名下被重新创建。 指定 -r 标志使 cp 命令尝试复制特殊文件为常规文件。

注: 可以使用 AIX_STDBUFSZ 环境变量来配置此命令生成的读写系统调用的 I/O 缓冲区大小。

标志

描述
-d 指定源文件以解密(明文)格式存储在目标上。
-e 指定如果目标文件系统为加密文件系统(EFS),那么会将源文件以加密格式存储。
-E -E 选项需要下列参数之一。 如果您省略了 -E 选项,warn 就是缺省的行为。
force
以下情况对文件的 cp 操作会失败,即如果文件的固定扩展数据块大小或空间保留不能被保存的话。
忽略
忽略任何保持范围属性中的错误。
warn
如果文件的空间保留或者固定扩展数据块大小无法保存,就发出一个警告。
-f 如果目标文件不能被写操作打开的话,指定移去目标文件。 移去操作在 cp 命令作任何复制之前执行。
-h 强制 cp 命令复制符号链接。 缺省值是跟随符号链接,也就是将文件复制到符号链接指向处。
-h 根据由指定为 SourceFile 操作数的任何符号链接引用的文件类型和内容来进行操作。
-i 提示您将被覆盖的文件名。 上述情况发生在当 TargetDirectoryTargetFile 参数含有与 SourceFileSourceDirectory 参数所指定的文件同名的文件时。 如果输入y或语言环境的等效项 ycp 命令继续。 任何其他的回答会避免 cp 命令覆盖文件。
-我 在 ACL 转换期间不显示警告消息。
-L 根据由指定为 SourceFile 操作数的任何符号链接或在遍历文件层次结构期间遇到的任何符号链接所引用的文件类型和内容来进行操作。
-p 将每个 SourceFile/SourceDirectory 的以下特征复制到相应的 TargetFile 和/或 TargetDirectory
  • 最后修改数据和最后访问的时间。 如果这一复制由于任何原因而失败,cp 命令将给标准错误写一个诊断消息。 SourceFile / SourceDirectory纳秒字段不会与上次修改时间或上次访问时间重复。
  • 用户标识和组标识。 如果这一复制由于任何原因而失败,cp 命令将给标准错误写一个诊断消息。
  • 文件许可位和 S_ISUID 和 S_ISGID 位。 如果这一复制由于任何原因而失败,cp 命令将给标准错误写一个诊断消息。

如果用户标识或组标识不能复制,那么文件许可位 S_ISUID 和 S_ISGID 被清除。

为了保存所有者标识和组标识、许可方式、修改和访问次数,用户必须有适当的文件访问许可权(用户应该是超级用户或与目标文件有相同的所有者标识)

如果不能保存这些特征,那么目标文件不能删除。

如果目标文件系统同样支持,那么保存与 SourceFile 相关联的访问控制表(ACL)。 如果源文件包含 NFS4 ACL 且目标文件系统不支持 NFS4 ACL,那么 NFS4 ACL 转换为 AIXC。

当 ACL 转换成功时,将会打印一条警告消息到 stderr。

如果源文件是加密的而且指定了 -p 标志,那么 cp 命令将保留 EFS 信息。 通常,-e-d 标志优先于 -p 标志。 如果用户请求使用 -e 标志将明文文件转换为加密格式,那么即使用户指定了 -p 标志,副本也不会保留诸如上次修改数据时间和上次访问时间等等之类的属性。 只要加密状态或解密状态保持相同,-p 标志就会保留文件属性和 EFS 信息。

-P 根据指定为 SourceFile 操作数的任何符号链接或在遍历文件层次结构期间遇到的任何符号链接来进行操作。
-r 复制由 SourceFileSourceDirectory 参数指定的文件或目录下的文件层次结构(递归复制)。 -r 标志用处理常规文件的相同方式处理特殊文件。
-R 复制由 SourceFile SourceDirectory 参数指定的文件或目录下的文件层次结构到由 TargetDirectory 参数指定的目录。 特殊文件类型,如先入先出(FIFO)文件和块及字符设备将被重新创建而非复制。 符号链接也被跟随,除非指定 -h 标志。 (-R 标志优先于 -r 标志。)
如果没有指定 -H -L-P 选项中的任何一个,那么没有指定这些选项中哪一个将用作缺省值。 请留心以下内容:
  • 如果指定了 -H 选项,那么 cp 命令将根据由指定为 SourceFile 操作数的任何符号链接引用的文件类型和内容来进行操作。
  • 如果指定了 -L 选项, cp 命令将根据由指定为 SourceFile 操作数的任何符号链接或在遍历文件层次结构期间遇到的任何符号链接所引用的文件类型和内容来进行操作。
  • 如果指定了 -P 选项,那么 cp 命令将复制指定为 SourceFile 操作数的任何符号链接和在遍历文件层次结构期间遇到的任何符号链接,但不会进行任何符号链接。
-S 如果源文件是稀疏文件,那么在您将其复制到目标文件时,请保持源文件的稀疏性。

稀疏文件是一种类型的计算机文件,当分配给该文件的块大多数为空时,将尝试更高效地使用文件系统。

-U SourceFile 中的扩展属性(EA)、访问控制表(ACL)复制到 TargetFile。 如果目标文件系统上不支持 EA,那么它将被忽略。 如果目标文件系统上不支持源 ACL 类型,那么它将转换为由目标文件系统支持的兼容的 ACL 类型。
-- 指示 --(破折号,破折号)标志之后的参数将被解释为文件名。 空标志允许以 -(减号)开始的文件名规范。
下表显示不同情况下目标文件的加密或解密状态:
cp 命令的显示标志 源文件 目标文件系统 结果
-e(加密) 非 EFS 非 EFS 错误
-e 非 EFS EFS 加密的文件
-e EFS EFS 加密的文件
-e EFS 非 EFS 错误
-d(解密) 非 EFS 非 EFS 明文文件
-d 非 EFS EFS 明文文件
-d EFS 非 EFS 明文文件
-d EFS EFS 明文文件
非显式标志 非 EFS 非 EFS 明文文件
非显式标志 非 EFS EFS 如果目标目录支持 EFS 继承,那么目标文件是加密文件。 否则,目标文件是明文文件。
非显式标志 EFS EFS 加密的文件
非显式标志 EFS 非 EFS 错误
注: 不允许使用纯文本文件覆盖加密文件,反之亦然,除非指定 -f 标志。 目标的加密状态取决于 -e-d 标志、加密继承(如果没有将 -e-d 标志与 -f 标志一起指定)以及源文件的加密状态(如果加密继承不活动)。

退出状态

本命令返回以下退出值:

描述
重大安全事件数量 所有文件成功复制。
> 0 发生错误。

示例

  1. 要在当前目录中生成文件的副本,请输入:
    cp prog.c prog.bak
    此副本prog.cprog.bak. 如果prog.bak文件尚不存在, cp 命令将创建该文件。 如果它确实存在,那么 cp 命令会将它替换为prog.c中。
  2. 要将当前目录中的文件复制到另一个目录,请输入:
    cp jones /home/nick/clients
    这将复制jones文件到/home/nick/clients/jones.
  3. 要将文件复制到新文件并保留与源文件相关联的修改日期、时间和访问控制表,请输入:
    cp -p smith smith.jr
    这将复制smith文件到smith.jr中。 系统不会创建具有当前日期和时间戳记的文件,而是提供smith.jr文件的日期和时间与smith中。 该smith.jr文件也继承了smith文件的访问控制保护。
  4. 要将目录中的所有文件复制到新目录,请输入:
    cp /home/janet/clients/* /home/nick/customers
    这仅复制clients目录到customers目录。
  5. 要将目录(包括其所有文件和子目录)复制到另一个目录,请输入:
    cp /home/janet/clients/* /home/nick/customers
    注: 无法将目录复制到其自身。
    这将复制clients目录,包括其所有文件,子目录以及这些子目录中的文件,customers/clients目录。
  6. 要将一组特定文件复制到另一个目录,请输入:
    cp jones lewis smith /home/nick/clients
    这将复制jones,lewissmith当前工作目录中的文件/home/nick/clients目录。
  7. 要使用模式匹配字符来复制文件,请输入:
    cp programs/*.c .
    这将复制programs以以下内容结尾的目录.c到当前目录,由单个目录表示.(点)。 必须在c最后一个点
  8. 要将一个文件复制到新的文件并保留与源文件关联的 ACL 和 EA,请输入:
    cp -U smith smith.jr
  9. 要在复制时保持源文件的稀疏性,请输入:
    cp -S file.c sparse_file.c

文件

/usr/bin/cp
包含 cp 命令。