分页: 1 / 1

《OpenBSD手册》cp命令

发表于 : 2010-01-21 15:29
leo
CP(1) OpenBSD参考手册 CP(1)

名称
[INDENT][INDENT]cp - 拷贝文件
[/INDENT][/INDENT]
语法
[INDENT][INDENT]cp [-fip] [-R [-H | -L | -P]] source target
cp [-fip] [-R [-H | -L | -P]] source ... directory
[/INDENT][/INDENT]
描述
[INDENT][INDENT]在第一条概要格式里, cp程序将 source 文件拷贝拷贝到 target 文件。
在第二条概要格式里, cp程序将每个列出名称的 source 文件拷贝到 target 目录。
拷贝的文件名称不改变。如果cp检测出企图将一个文件拷贝到自身,则拷贝会失败。

选项如下:

-f
[INDENT][INDENT]对于已经存在的目标路径, 先删除它,再建立一个新的文件, 不提示确认信息, 也不考虑文件的权限。这个选项会推翻 -i 选项的设置。
[/INDENT][/INDENT]
-H
[INDENT][INDENT]如果 -R 选项也被指定, 则命令行上的符号链接也会被拷贝。 (但不会对链接目录遍历)
[/INDENT][/INDENT]
-i
[INDENT][INDENT]如果被拷贝的文件会覆盖一个现存的文件,输出一个标准的错误提示信息。如果得到确认的输入信息 `y', 会继续拷贝这个文件。
[/INDENT][/INDENT]
-L
[INDENT][INDENT]如果 -R 选项业被指定, 符号链接也会被拷贝。
[/INDENT][/INDENT]
-P
[INDENT][INDENT]如果 -R 选项也被指定, 不会拷贝符号链接。
[/INDENT][/INDENT]
-p
[INDENT][INDENT]根据源文件的许可保留拷贝文件的修改时间、访问时间、文件标签、文件模式,用户ID及组ID。

如果用户ID和组ID无法保留, 并没有错误信息提示,而且程序的返回值也不会改变。

如果源文件有它自己的 set-user-ID 字节,而用户ID不能保留, 则此 set-user-ID 字
节将不会保留在拷贝的许可里。 如果源文件有它自己的 set-group-ID 字节,而组ID无法保留, 则此 set-group-ID 字节也不会保留在拷贝的许可里 。如果源文件既有它自己的 set-user-ID 字节, 也有自己的 set-group-ID 字节, 无论其中哪个不能保留,则两者全不会保留在拷贝的许可里。
[/INDENT][/INDENT]
-R
[INDENT][INDENT]如果源是一个目录, cp 将拷贝这个目录及其所属的子目录。创建的目录与原目录有相同的模式, 不会被处理程序的umask修改。

这个选项会连符号链接一同拷贝, 即使followed, 并产生特殊的文件, 即使将其当作一个正常的文件来拷贝。 但是, cp拷贝硬链接文件时将其视为单独的文件,如果想保留硬链接, 请使用 pax(1) 或 tar(1) 来做。
[/INDENT][/INDENT]
如果已经存在目标文件,如果权限允许它们将被重写, 但是其模式, 用户ID以及组ID不会改变。

在第二个概要格式里, 指定的目标操作项必须存在,除非源是一个目录,而且同时使用了 -R 标签。

如果目标文件不存在, 源文件的模式将用来通过文件模式创建源码进行修改 (umask, 参 csh(1))。如果源文件上有自己的set-user-ID字节, 则这个字节会被移除,除非源文件和目标文件的所有者为同一个用户。如果源文件上有自己的set-group-ID字节, 则这个字节会被移除,除非源文件和目标文件属于同一个组,并且用户也是该组的成员。如果源文件上 set-user-ID 和 set-group-ID 字节全设置了, 需要满足上述所有条件,否则这两个字节全会被删除。

创建或重写时需要有适当的权限。

当一个源文件包含大块的0值字节, cp将尝试创建一个稀疏文件。

符号链接总是也被拷贝,除非使用了 -R 参数,它不会拷贝符号链接。 -H 或者 -L 标签 (结合 -R 标签) 则可以拷贝符号链接,见上面的描述。-H, -L 和 -P 选项将被忽略,除非指定了 -R 选项。 另外, 这些选项相互覆盖对方,命令会根据最后一个选项的设置执行。

cp程序成功时返回0, 而 >0 则表示发生错误.

[/INDENT][/INDENT]例子
[INDENT][INDENT]为文件foo制作一个拷贝,并命名为 bar:

代码: 全选

$ cp foo bar

将一组文件拷贝到 /tmp 目录:

代码: 全选

$ cp *.txt /tmp

将目录junk以及其下的所有内容拷贝 (包括所有子目录) 拷贝到 /tmp 目录:

代码: 全选

 
$ cp -R junk /tmp
[/INDENT][/INDENT]也请参阅
mv(1), rcp(1), umask(2), fts(3), symlink(7)

标准
cp程序符合IEEE Std 1003.1-2008 (``POSIX'')规范

Historic版本的cp程序还有一个 -r 选项。 规范里有这个选项;
但是, 我们很不鼓励使用这个选项, 因为它不能正确地拷贝特殊
的文件, 符号链接或FIFO。

历史
cp 命令起始于Version 1 AT&T UNIX.

OpenBSD 4.6 February 8, 2009 2