cp命令的细节

简介:

          关于CP命令的用法细节

今天在写一个脚本时,要复制一个目录到另一个目录下时,怎么执行都不成功,后来一看原来忘记加参数啦,有时成功往往在于细节,希望大家以后一起注意吧,来让我们一起看看cp命令的用法吧

*cp(复制文件或目录)

cp [options]  source     destination/directory

参数:

-a:相当于-pdr的意思(常用)

---------------------------------------------------------                     -d:If source has link file attribute,so copy link file attribute

,not itself

-----------------------------------------------------                           -f:force(强制),若目标文件已existence,and can't open,则删除后再尝试一次

--------------------------------------------------                               -i:若目标文件已经存在,在覆盖时,会先询问操作的进行(常用)

------------------------------------------------------------                 -l :进行硬链接(hard link)的连接文件创建,而非复制文件本身

------------------------------------------------------------                 -p:连同文件的属性一起复制过去,而非使用文件的默认属性(备份常用)

-----------------------------------------------------                           -r:递归持续复制,用于目录的复制行为(常用)

----------------------------------------------------------

-s:复制成为符号连接文件(symbolic link)即“快捷方式”文件

----------------------------------------------------------

-u:若destination比source旧才更新

---------------------------------------------------------------

**:注意若源文件有两个以上,则最后一个目标文件一定是“目录”才行!!!

-------------------------------------------------------------

下面我们看下实例吧:

1:

[root@server53 ~]# cp ~/.bashrc  /tmp/bashrc

解析:以root身份将主文件下的.bashrc 复制到/tmp目录下并且重命名为bashrc。

**也就是说cp命令还具有重命名的功能。

-------------------------------------------------------------

2:

[root@server53 tmp]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'?  <= =询问是否覆盖

解析:加上-i,它是当目标文件已存在,询问用户是否确定覆盖,确定按下y,否则n。

-------------------------------------------------------------------               3:

将目录切换到/tmp下,并将/var/log/wtmp复制到/tmp且查看属性:

[root@server53 ~]# cd /tmp
[root@server53 tmp]# cp /var/log/wtmp .  # <="."代表当前目录
[root@server53 tmp]# ll /var/log/wtmp wtmp
-rw-rw-r-- 1 root utmp 342144 Jul 31 12:43 /var/log/wtmp
-rw-r--r-- 1 root root 342144 Jul 31 13:58 wtmp

解析:注意看两个文件的权限,属性,文件的创建时间都改变了。

**在不加任何参数的情况下,文件的某些属性/权限会改变,目标文件的所有者通常是命令操作者本身。

由于具有这个特性,因此当我们进行备份时,某些时候要特别注意特别权限文件,如密码文件(/etc/shadow)以及一些配置文件,就不能直接以cp来复制,而是加上-a 或者-p等可以完整复制文件权限,参数。

看如下:

[root@server53 tmp]# cp -a /var/log/wtmp wtmp_2
[root@server53 tmp]# ll /var/log/wtmp wtmp_2
-rw-rw-r-- 1 root utmp 342144 Jul 31 12:43 /var/log/wtmp
-rw-rw-r-- 1 root utmp 342144 Jul 31 12:43 wtmp_2

-----------------------------------------------------------------

4:复制/etc/这个目录下的所有内容到/tmp下面

[root@server53 tmp]# cp /etc/ /tmp
cp: omitting directory `/etc/'     <==
如果是目录则不能够直接复制,要加上-r的参数。

**:-r可以复制目录,但文件的权限可能会被改变,也可以用 “cp -r /etc/  /tmp”来执行,尤其是在备份时

-------------------------------------------------------------------------------

5:将1题中的bashrc创建一个连接文件

[root@server53 tmp]# ll bashrc
-rw-r--r-- 3 root root 176 Jul 31 13:53 bashrc
[root@server53 tmp]# cp -s bashrc bashrc_slink
[root@server53 tmp]# cp -l bashrc bashrc_hlink
[root@server53 tmp]# ll bashrc*
-rw-r--r-- 4 root root 176 Jul 31 13:53 bashrc
-rw-r--r-- 4 root root 176 Jul 31 13:53 bashrc_hlink
lrwxrwxrwx 1 root root   6 Jul 31 14:18 bashrc_slink -> bashrc

解析:加上-l 表示硬链接,其文件属性,权限与源文件完全相同;;加上-s 表示符号连接,其后又->,其属性权限都有所改变。

-------------------------------------------------------------                      6:将bashrc_slink复制成为bashrc_slink_1与bashrc_slink_2

[root@server53 tmp]# cp -s bashrc bashrc_slink
[root@server53 tmp]# cp bashrc_slink bashrc-slink_1
[root@server53 tmp]# cp -d bashrc_slink bashrc-slink_2
[root@server53 tmp]# ll bashrc bashrc_slink bashrc-slink*
-rw-r--r-- 4 root root 176 Jul 31 13:53 bashrc
lrwxrwxrwx 1 root root   6 Jul 31 14:31 bashrc_slink -> bashrc
-rw-r--r-- 1 root root 176 Jul 31 14:32 bashrc-slink_1
lrwxrwxrwx 1 root root   6 Jul 31 14:32 bashrc-slink_2 -> bashrc
解析:发现没?这个例子很有趣,原本复制的是连接文件,但是却将连接文件的实际文件复制过来了

也就是说不加任何参数cp复制的是源文件,而非连接文件的属性;

若要复制连接文件的属性,就要加上-d参数。

---------------------------------------------------------

用cp命令时注意:::

First:   是否要完整保留源文件的信息

Second:源文件是否是为软连接文件

Thirst: 源文件是否为目录










本文转自 kuchuli 51CTO博客,原文链接:http://blog.51cto.com/lgdvsehome/627959,如需转载请自行联系原作者
目录
相关文章
|
8月前
|
Linux
linux mv移动文件命令详解与替换强制覆盖多个文件
命令语 法 mv [-bfiuv][–help][–version][-S &lt;附加字尾&gt;][-V &lt;方法&gt;][源文件或目录][目标文件或目录]
1920 0
|
Linux
Linux下显示cp/mv进度的两种方式
Linux下显示cp/mv进度的两种方式
4968 0
Linux下显示cp/mv进度的两种方式
|
9月前
|
Linux
Linux中执行cp命令复制时候出现错误及解决方法
Linux中执行cp命令复制时候出现错误及解决方法
539 2
|
Linux
Linux 使用 cp 命令强制覆盖功能
Linux 使用 cp 命令强制覆盖功能
745 0
|
Linux 安全
Linux命令参数详细解析-cp
用法:cp [选项]... [-T] 源文件 目标文件  或:cp [选项]... 源文件... 目录  或:cp [选项]... -t 目录 源文件.
1274 0
|
关系型数据库 Shell 应用服务中间件

热门文章

最新文章