Linux cp命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux cp命令相关的知识,希望对你有一定的参考价值。
Linux系统中cp(copy)命令是用来复制文件或者目录的。
man cp可以获得cp的详细描述
命令格式:
cp [OPTION]... [-T] SOURCE DEST //cp [选项]…[-T]源目的
cp [OPTION]... SOURCE... DIRECTORY // cp [选项]…源…目录
cp [OPTION]... -t DIRECTORY SOURCE... // cp [选项]…-t 目录 源…
功能:
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
//将源文件复制至目标文件,或将多个源文件复制至目标目录。
参数:
-a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。
-d 拷贝时保留链接:若源文件为连接文件的属性(linkfile),则复制连接文件属性而非文件本身
-f 强制的意思,删除已经存在的目标文件而不提示。 (慎用)
-i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。(最常用)
-p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。(备份常用)
-r 递归持续复制,用于目录的复制行为:若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。
-l 不作拷贝,只是链接文件,而非复制文件本身。
-s 复制成符号链接文件(symbolic link),即“快捷方式”文件
-u 若目标比来源文件旧时,才更新,常用于“备份”工作
命令示列:
1.-i参数示例
[[email protected] ~]# cp ~/.bashrc /tmp/bashrc 复制和更名操作 [[email protected] ~]# cp -i ~/.bashrc /tmp/bashrc 由于已经复制,加入-i参数后,覆盖前会做提示 cp: overwrite `/tmp/bashrc‘? y 按y表示确认
2.-a参数示例
[[email protected] ~]# cd /tmp 进入/tmp目录 [[email protected] tmp]# cp /var/log/wtmp . 要想复制到当前目录,最后要加"." [[email protected] tmp]# ls -l /var/log/wtmp wtmp -rw-rw-r--. 1 root utmp 24960 Apr 6 14:06 /var/log/wtmp -rw-r--r-- 1 root root 24960 Apr 6 14:39 wtmp
在不加任何参数的情况下,某些属性/权限会改变
文件的创建时间也不同了
如果要将文件的所有特性都一起复制过来,可以加上-a,如下所示
[[email protected] tmp]# cp -a /var/log/wtmp wtmp3 [[email protected] tmp]# ls -l /var/log/wtmp wtmp3 -rw-rw-r--. 1 root utmp 24960 Apr 6 14:06 /var/log/wtmp -rw-rw-r--. 1 root utmp 24960 Apr 6 14:06 wtmp3
整个数据特性完全一样,这就是-a的特性
由于具有这个特性,因此当我们在进行备份的时候,某些需要特别注意的特殊权限文件, 例如密码档 (/etc/shadow) 以及一些配置档,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p 等等可以完整复制文件权限的选项才行!另外,如果你想要复制文件给其他的使用者, 也必须要注意到文件的权限(包含读、写、运行以及文件拥有者等等), 否则,其他人还是无法针对你给予的文件进行修订的动作喔!注意注意!
3.-r示例,将目录下的所有目录包括子目录陆续复制到另外一个目录
[[email protected] tmp]# cp /etc/ /tmp cp: omitting directory `/etc/‘ 如果是目录,不能直接复制 [[email protected] tmp]# cp -r /etc/ /tmp 要加入-r才能复制目录 [[email protected] tmp]#
4.-s,-l示例
[[email protected] tmp]# ls -l bashrc -rw-r--r-- 1 root root 206 Apr 6 14:24 bashrc [[email protected] tmp]# cp -s bashrc bashrc_slink 创建软链接,就是一个快捷方式 [[email protected] tmp]# cp -l bashrc bashrc_hlink 创建硬链接 [[email protected] tmp]# ls -l bashrc* -rw-r--r-- 2 root root 206 Apr 6 14:24 bashrc 源文件i-node,是2 -rw-r--r-- 2 root root 206 Apr 6 14:24 bashrc_hlink 硬链接i-node,是2 lrwxrwxrwx 1 root root 6 Apr 6 15:07 bashrc_slink -> bashrc 软链接i-node,还是1
5.-u示例,若~./bashrc比/tmp/bashrc新才复制过来
[[email protected] tmp]# cp -u ~/.bashrc /tmp/bashrc 常用于备份工作
6.-d示例,将bashrc_slink复制成为bashrc_slink_1与bashrc_slink_2
[[email protected] tmp]# cp bashrc_slink bashrc_slink_1 [[email protected] tmp]# cp -d bashrc_slink bashrc_slink_2 [[email protected] tmp]# ls -l bashrc bashrc_slink* -rw-r--r-- 2 root root 206 Apr 6 14:24 bashrc lrwxrwxrwx 1 root root 6 Apr 6 15:22 bashrc_slink -> bashrc -rw-r--r-- 1 root root 206 Apr 6 15:22 bashrc_slink_1 与源文件相同 lrwxrwxrwx 1 root root 6 Apr 6 15:22 bashrc_slink_2 -> bashrc 是连接文件
这个例子也是很有趣喔!原本复制的是连结档,但是却将连结档的实际文件复制过来了
也就是说,如果没有加上任何选项时,cp复制的是原始文件,而非连结档的属性!
若要复制连结档的属性,就得要使用 -d 的选项了!如 bashrc_slink_2 所示。
7.使用zdw用户,完整复制
[[email protected] ~]$ cp -a /var/log/wtmp /tmp/zdw_wtmp [[email protected] ~]$ ls -l /var/log/wtmp /tmp/zdw_wtmp -rw-rw-r-- 1 zdw zdw 24960 Apr 6 14:06 /tmp/zdw_wtmp -rw-rw-r--. 1 root utmp 24960 Apr 6 14:06 /var/log/wtmp
由于zdw的身份并不能随意修改文件的拥有者与群组,因此虽然能够复制wtmp的相关权限与时间等属性,但是与拥有者、群组相关的,原本zdw身份无法进行的动作,即使加上
-a 选项,也是无法达成完整复制权限的!
8.把多个数据一次复制到指定目录下
[[email protected] tmp]# cp ~/.bashrc ~/.bash_history /tmp 可以填写多个数据,复制到一个目录下
以上操作,完全参照鸟哥的私房菜一书
本文出自 “写给自己的博客” 博客,请务必保留此出处http://zhaodongwei.blog.51cto.com/4233742/1760888
以上是关于Linux cp命令的主要内容,如果未能解决你的问题,请参考以下文章