cp命令的细节

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:

          关于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,如需转载请自行联系原作者
目录
相关文章
|
10月前
|
开发工具
vim软件的常见指令
vim软件的常见指令
77 0
|
IDE 程序员 Linux
学习vim有这一篇就足够了
学习vim有这一篇就足够了
|
Linux
linux mv移动文件命令详解与替换强制覆盖多个文件
命令语 法 mv [-bfiuv][–help][–version][-S &lt;附加字尾&gt;][-V &lt;方法&gt;][源文件或目录][目标文件或目录]
3096 0
|
10月前
LabVIEW使用VI脚本向VI添加对象
LabVIEW使用VI脚本向VI添加对象
110 2
|
10月前
|
网络协议
​LabVIEW从另一个VI或通过VI服务器访问正在运行的可执行文件
​LabVIEW从另一个VI或通过VI服务器访问正在运行的可执行文件
106 0
|
6月前
|
Linux
深入理解Linux中的cp命令:文件与目录的复制利器
深入理解Linux中的cp命令:文件与目录的复制利器
|
Linux
Linux下显示cp/mv进度的两种方式
Linux下显示cp/mv进度的两种方式
9211 0
Linux下显示cp/mv进度的两种方式
|
Shell Linux 程序员
linux(十二)文件和目录相关命令cp和mv
接下来,我们来看一下linux系统中的移动mv和复制cp命令。 复制粘贴命令的使用频率相对就高很多了。毕竟程序员的键盘磨损最严重的三个按键就是ctrl、c、v键了。开个玩笑。
116 0
|
Linux 编译器 开发工具
vim的安装以及基础使用方法;
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人(大佬们)把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
135 0
|
Linux
linux学习之vi文件编辑命令
如果文件为只读则无法使用普通用户编辑,需要切换到root用户,具体名称可参考: https://www.cnblogs.com/huangwei1992/p/9493443.html vi文件编辑命令如下: :w 保存文件但不退出vi:w file 将修改另外保存到file中,不退出vi:w! 强制...
1156 0