linux知识点,一天一个之cp

cp  
[root@linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination)    
[root@linux ~]# cp [options] source1 source2 source3 …. directory    
参数:    
-a :相当于 -pdr 的意思;    
-d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;    
-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;    
-i :若目的檔(destination)已经存在时,在覆盖时会先询问是否真的动作!    
-l :进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;    
-p :连同档案的属性一起复制过去,而非使用预设属性;    
-r :递归持续复制,用于目录的复制行为;    
-s :复制成为符号连结文件 (symbolic link),亦即『快捷方式』档案;    
-u :若 destination 比 source 旧才更新 destination !    
最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是『目录』才行!

范例:  
范例一:将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc    
[root@linux ~]# cd /tmp    
[root@linux tmp]# cp ~/.bashrc bashrc    
[root@linux tmp]# cp -i ~/.bashrc bashrc    
cp: overwrite `basrhc’? n    
# 重复作两次动作,由于 /tmp 底下已经存在 bashrc 了,加上 -i 参数,    
# 则在覆盖前会询问使用者是否确定!可以按下 n 或者 y 呢!    
# 但是,反过来说,如果不想要询问时,则加上 -f 这个参数来强制直接覆盖!

范例二:将 /var/log/wtmp 复制到 /tmp 底下  
[[email protected] tmp]# cp /var/log/wtmp . <==想要复制到目前的目录,最后的 . 不要忘    
[[email protected] tmp]# ls -l /var/log/wtmp wtmp    
-rw-rw-r– 1 root utmp 71808 Jul 18 12:46 /var/log/wtmp    
-rw-r–r– 1 root root 71808 Jul 18 21:58 wtmp    
# 注意到了吗?!在不加任何参数的情况下,档案的所属者会改变,连权限也跟着改变了~    
# 这是个很重要的特性!要注意喔!还有,连档案建立的时间也不一样了!    
# 如果您想要将档案的所有特性都一起复制过来,可以加上 -a 喔!    
[[email protected] tmp]# cp -a /var/log/wtmp wtmp_2    
[[email protected] tmp]# ls -l /var/log/wtmp wtmp_2    
-rw-rw-r– 1 root utmp 71808 Jul 18 12:46 /var/log/wtmp    
-rw-rw-r– 1 root utmp 71808 Jul 18 12:46 wtmp_2    
# 瞭了吧!整个资料特性完全一模一样ㄟ!真是不赖~这就是 -a 的特性!

范例三:复制 /etc/ 这个目录下的所有内容到 /tmp 底下  
[[email protected] tmp]# cp /etc/ /tmp    
cp: omitting directory `/etc’ <== 如果是目录,不能直接复制,要加上 -r 的参数    
[[email protected] tmp]# cp -r /etc/ /tmp    
# 还是要再次的强调喔! -r 是可以复制目录,但是,档案与目录的权限会被改变~    
# 所以,也可以利用 cp -a /etc /tmp 来下达指令喔!

范例四:将范例一复制的 bashrc 建立一个连结档 (symbolic link)  
[[email protected] tmp]# ls -l bashrc    
-rw-r–r– 1 root root 395 Jul 18 22:08 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 395 Jul 18 22:08 bashrc    
-rw-r–r– 2 root root 395 Jul 18 22:08 bashrc_hlink    
lrwxrwxrwx 1 root root 6 Jul 18 22:31 bashrc_slink -> bashrc    
# 那个 bashrc_slink 是由 -s 的参数造成的,建立的是一个『快捷方式』,    
# 所以您会看到在档案的最右边,会显示这个档案是『连结』到哪里去的!    
# 至于那个 bashrc_hlink 有趣了!建立了这个档案之后, bashrc 与 bashrc_hlink    
# 所有的参数都一样,只是,第二栏的 link 数改变成为 2 了~而不是原本的 1 喔!    
# 这两种连结的方式的异同,我们会在下一章里面进行介绍的!

范例五:若 ~/.bashrc 比 /tmp/bashrc 新才复制过来  
[[email protected] tmp]# cp -u ~/.bashrc /tmp/bashrc    
# 这个 -u 的特性,是在目标档案与来源档案有差异时,才会复制的。    
# 所以,比较常被用于『备份』的工作当中喔! ^_^

范例六:将范例四造成的 bashrc_slink 复制成为 bashrc_slink_2  
[[email protected] tmp]# cp bashrc_slink bashrc_slink_2    
[[email protected] tmp]# ls -l bashrc_slink*    
lrwxrwxrwx 1 root root 6 Jul 18 22:31 bashrc_slink -> bashrc    
-rw-r–r– 1 root root 395 Jul 18 22:48 bashrc_slink_2    
# 这个例子也是很有趣喔!原本复制的是连结档,但是却将连结档的实际档案复制过来了    
# 也就是说,如果没有加上任何参数时,复制的是源文件,而非连结文件的属性!    
# 若要复制连结文件的属性,就得要使用 -d 或者 -a 的参数了!

范例七:将家目录的 .bashrc 及 .bash_history 复制到 /tmp 底下  
[[email protected] tmp]# cp ~/.bashrc ~/.bash_history /tmp    
# 可以将多个数据一次复制到同一个目录去!    
这 个 cp 的功能很多,而由于我们常常在进行一些数据的复制,所以也会常常用到这个指令的。 一般来说,我们如果去复制别人的数据 (当然,该档案您必须要有 read 的权限才行啊! ^_^) 时, 总是希望复制到的数据最后是我们自己的,所以,在预设的条件中, cp 的来源档与目的档的权限是不同的,目的档的拥有者通常会是指令操作者本身。举例来说, 上面的范例二中,由于我是 root 的身份,因此复制过来的档案拥有者与群组就改变成为 root 所有了! 这样说,可以明白吗?! ^_^

由于具有这个特性,因此,当 我们在进行备份的时候,某些需要特别注意的特殊权限档案, 例如密码文件 (/etc/shadow) 以及一些设定档,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p 等等可以完整复制档案权限的参数才行!另外,如果您想要复制档案给其它的使用者,也必须要注意到档案的权限(包含读、写、执行以及档案拥有者等等),否 则,其它人还是无法针对您给予的档案进行修订的动作喔!注意注意!

至于上面的范例当中,第四个范例是最有趣的,使用 -l 及 -s 都会建立所谓的连结档 (link file),但是这两种连结档确有不一样的展现情况。这是怎么一回事啊? 那个 -l 就是所谓的 hard link ,至于 -s 则是 symbolic link ,鸟哥这里先不介绍, 因为这个涉及 i-node 的相关知识,我们还没有介绍到,下一章再来讨论这个 link 的问题喔! 总之,由于 cp 有种种的档案属性与权限的特性,所以,在复制时,您必须要清楚的了解到:    
? 是否需要完整的保留来源档案的信息?    
? 来源档案是否为连结档 (symbolic link file)?    
? 来源档是否为特殊的档案,例如 FIFO, socket 等?    
? 来源文件是否为目录?

需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。

时间: 2024-08-29 00:35:39

linux知识点,一天一个之cp的相关文章

每天一个linux命令(8):cp 命令

cp 命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在, 就会询问是否覆盖,不管你是否使用-i参数.但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖.这说明命令行和shell脚本的 执行方式有些不同. 1.命令格式: 用法: cp [选项]... [-T] 源 目的 或:cp [选项]... 源... 目录 或:cp [选项]... -t 目录 源... 2.命令功能: 将源文件复

linux知识点,一天一个之diff

diff 命 令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版 本的diff还支持二进制文件.diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将 a.c的文件内容更新为b.c.diff是svn.cvs.git等版本控制工具不可或缺的一部分. 1.命令格式: diff[参数][文件1或目录1][文件2或目录2] 2.命令功能: diff 命

理解 Linux shell 中的一个方言:2&gt;&amp;1

理解 Linux shell 中的一个方言:2>&1 2016-11-14 杜亦舒 前言 在使用 linux 命令或者 shell 编程时,这个用法常会遇到 2>&1 如果是刚开始接触Linux,这个东西的确不好理解,因为他没有直观的含义,不像一个命令,例如 cp是 copy 的简写,很好记. 我以前刚用Linux时就对这个东西迷糊了一段时间,今天刚好看到一篇文章介绍他,感觉很有必要总结出来,分享给还不是很理解这个方言的朋友. 下面看一个命令示例,然后分析下他是如何工作的: l

在linux下的使用复制命令cp,不让出现“overwrite”(文件覆盖)提示的方法。(转)

在linux下的使用复制命令cp,不让出现"overwrite"(文件覆盖)提示的方法. 一般我们在使用cp命令时加上-f选项,希望不让出现"overwrite"的提示(文件覆盖的提示).如:# cp -rf sourcefile targetdir 或#cp -r -f sourcefile targetdir-r的意思是递归复制,也就是复制文件夹及其下所有文件.-f的意思是遇到同名的文件时不提示,直接覆盖. 但是为什么加上-f了,还出现"overwri

关于linux shell编程,alias rm=&#39;cp [email&#160;protected] ~/backup; rm [email&#160;protected]&#39;

书上的这个例子需要在ubuntu的低版本的系统才支持,现在基本上都不支持了,想实现也很简单自己写一个脚本先备份再删除. alias也只是做了一次替换alias rm='cp [email protected] ~/backup; rm [email protected]' rm text.txt被转换成了cp  [email protected] ~/backup; rm [email protected] text.txt即cp  ~/backup; rm  text.txt可以看到text.

linux中如何清空一个文件的内容

方法1: echo "" > /www.jbxue.com /xxx.log 方法2: echo "" >> /www.jbxue.com /xxx.log 方法3: 此命令能与“echo > /var/log/big.log”达到相同效果,不过,命令执行后,需要用“Ctrl + d”结束 方法4: clear > /opt/log/big.log 此命令会把big.log文件内容清空,而不删除文件 方法5: 同样的效果,用true.f

Linux基础概念-----touch一个新文件背后发生的事情

一个普通用户在Shell下执行了一条命令,这背后发生了什么事情,是个人的一些总结,如果有不对的地方欢迎搭建指正,谢谢! touch /tmp/test.txt ####################################################################################### tom在Shell中执行这条命令,Shell将命令发给内核,并且判断命令是否存在,通过文件系统上的元数据判断tom是否有权限执行,内核从内存中加载出mkdir的指令

linux服务器中了一个liun2.3的木马

昨天公司一台服务器突然之间不能ping,ssh无法登陆,从IDC反馈说服务器往外发包,数量巨大,CPU状态显示200%.通过ps aux查看以下进程文件是异常文件: ./liun2.3 /tmp/liun2.3 /tmp/liun2.3h zzta.pl 刚开始以为kill掉这些进程和删掉执行文件就可以了,可是过了几分钟,这个程序又继续执行. 那好吧,就去crontab -l 看有没有定时任务,没有. more /etc/crontab 查看有没在这里定义定时任务.也没有 想了下,既然要执行文件

在Linux中定时执行一个程序的方法之at命令

/*********************************************************************  * Author  : Samson  * Date    : 04/29/2014  * Test platform:  *              3.11.0-12-generic #19-Ubuntu  *              GNU bash, version 4.2.45  * ****************************

Linux 下查看某一个程序所使用的内存方法介绍

Linux 下查看某一个程序所使用的内存方法介绍 在 Linux 上进行开发和运营维护的时候,免不了要查看某一个程序所占用内存的情况.常用方法总结如下(注意第四种方法): 第一种:ps -aux | grep process_name 举例如下:现打算监控/usr/bin/sshd所占的内存,首先需找到pid,然后使用top进行有目标的监控,RES即为内存值,见下两图: top -p 1231,截图如下:    第二种:top -p pid 查看程序的情况 如上图所示! 第三种:cat /pro