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 !
注意:如果来源档有两个以上,则最后一个目的文件一定要是『目录』才行!
来看一些cp命令的操作实例。
例1:将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc
[root@linux tmp]# cp ~/.bashrc bashrc
[root@linux tmp]# cp -i ~/.bashrc bashrc
cp: overwrite `basrhc’? n
# 重复作两次动作,由于 /tmp 底下已经存在 bashrc 了,加上 -i 参数,
# 则在覆盖前会询问使用者是否确定!可以按下 n 或者 y 呢!
# 但是,反过来说,如果不想要询问时,则加上 -f 这个参数来强制直接覆盖!
例2:将 /var/log/wtmp 复制到 /tmp 底下
[root@linux 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 !
[root@linux tmp]# cp -a /var/log/wtmp wtmp_2
[root@linux 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 的特性!
例3,:复制 /etc/ 这个目录下的所有内容到 /tmp 底下
cp: omitting directory `/etc’ <== 如果是目录,不能直接复制,要加上 -r 的参数
[root@linux tmp]# cp -r /etc/ /tmp
# 还是要再次的强调喔! -r 是可以复制目录,但是,档案与目录的权限会被改变~
# 所以,也可以利用 cp -a /etc /tmp 来下达指令喔!
例4:将范例一复制的 bashrc 建立一个连结档 (symbolic link)
-rw-r–r– 1 root root 395 Jul 18 22:08 bashrc
[root@linux tmp]# cp -s bashrc bashrc_slink
[root@linux tmp]# cp -l bashrc bashrc_hlink
[root@linux 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 喔!
# 这两种连结的方式的异同,我们会在下一章里面进行介绍的!
例5:若 ~/.bashrc 比 /tmp/bashrc 新才复制过来
# 这个 -u 的特性,是在目标档案与来源档案有差异时,才会复制的。
# 所以,比较常被用于『备份』的工作当中喔! ^_^
例6:将范例四造成的 bashrc_slink 复制成为 bashrc_slink_2
[root@linux 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 的参数了!
例7:将家目录的 .bashrc 及 .bash_history 复制到 /tmp 底下
# 可以将多个数据一次复制到同一个目录去!
这个 cp 的功能很多,而由于我们常常在进行一些数据的复制,所以也会常常用到这个指令的。
一般来说,如果去复制别人的数据 (当然,该档案您必须要有 read 的权限才行啊! ^_^) 时, 总是希望复制到的数据最后是我们自己的,所以,在预设的条件中, cp 的来
源档与目的档的权限是不同的,目的档的拥有者通常会是指令操作者本身。
上面的示例二中,由于是 root 的身份,因此复制过来的档案拥有者与群组就改变成为 root 所有了。
由于具有这个特性,因此,当进行备份时,某些需要特别注意的特殊权限档案, 例如密码文件 (/etc/shadow) 以及一些设定档,就不能直接以 cp 来复制,而必须要加上 -a
或者是 -p 等等可以完整复制档案权限的参数才行!另外,如果您想要复制档案给其它的使用者,也必须要注意到档案的权限(包含读、写、执行以及档案拥有者等等),否则
,其它人还是无法针对您给予的档案进行修订的动作喔!注意注意!
第四个例子是最有趣的,使用 -l 及 -s 都会建立所谓的连结档 (link file),但是这两种连结档确有不一样的展现情况。这是怎么一回事啊? 那个 -l 就是所谓的 hard
link ,至于 -s 则是 symbolic link! 总之,由于 cp 有种种的档案属性与权限的特性。
在复制时,请务必了解:
1,是否需要完整的保留来源档案的信息?
2,来源档案是否为连结档 (symbolic link file)?
3,来源档是否为特殊的档案,例如 FIFO, socket 等?
4,来源文件是否为目录?
说明:
为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命
令拷贝文件时,最好使用i选项。
cp 命令
功能说明 :复制文件或目录
语法:cp[参数]源文件目录 目标文件或目录
该命令用于将一个或多个文件复制到目标目录
补充说明:
Cp指令用在复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。若同时指定
多个文件或目录,而最后的目的地并非是一个已存在的目录,则会出现错误信息。
参数:
-a或—archive 此参数的效果和同时指定“-dpR”参数相同
-b或—backup 删除,覆盖目标文件之前的备份,备份文件会在字尾加上一个备份字符串
-d或—no-dereference 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件工目录
-f或—force 强行复制文件或目录,不论目标文件或目录是否已存在
-i或-interactive 覆盖既有文件之前先询问用户。
-l或—link 对源文件建立硬连接,而非复制文件
-p或--preserve 保留源文件或目录的属性
-p或—parents 保留源文件或目录的路径
-r 递归处理,将指定目录下的文件与子目录一并处理
-s或--symbolic-link 对源文件建立符号连接,而非复制文件。
-S<备份字尾字符串>或--suffix=<备份字尾字符串> 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字尾字符串是符号"~"。
-u或--update 使用这项参数后只会在源文件的更改时间较目标文件更新时或是 名称相互对应的目标文件并不存在,才复制文件。
-v或--verbose 显示指令执行过程。
-V<备份方式>或--version-control=<备份方式> 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这字符串不仅可用"-S"参数变更,当使用"-V"参数
指定不同备份方式时,也会产生不同字尾的备份字串。
-x或--one-file-system 复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不予复制。
--help 在线帮助。
--sparse=<使用时机> 设置保存稀疏文件的时机。
--version 显示版本信息。
看了半天,其实就是手册中的内容,不过也作个记录吧。
说不好哪天会查看cp命令的参数选项呢。
一、使用sort排序
-rw------- 1 root root 0 Aug 4 19:21 ipp.txt
-rw------- 1 root root 232 Aug 4 19:23 openvpn-status.log
-rw-r--r-- 1 root root 2095419 Jul 27 14:57 nagios-plugins-1.4.15.tar.gz
-rw-r--r-- 1 root root 3215350 Mar 9 11:49 nagios-3.2.1.tar.gz
-rw-r--r-- 1 root root 626042 Apr 30 2008 lzo-2.03.tar.gz
-rw-r--r-- 1 root root 669076 Mar 17 2009 openvpn-2.0.9.tar.gz
-rw-r--r-- 1 root root 6697 Aug 2 00:39 1.tar.gz
total 6500
[root@vps ~]# ll -h | grep '^[^d]' | sort -n
-rw------- 1 root root 0 Aug 4 19:21 ipp.txt
-rw------- 1 root root 232 Aug 4 19:23 openvpn-status.log
-rw-r--r-- 1 root root 2.0M Jul 27 14:57 nagios-plugins-1.4.15.tar.gz
-rw-r--r-- 1 root root 3.1M Mar 9 11:49 nagios-3.2.1.tar.gz
-rw-r--r-- 1 root root 612K Apr 30 2008 lzo-2.03.tar.gz
-rw-r--r-- 1 root root 654K Mar 17 2009 openvpn-2.0.9.tar.gz
-rw-r--r-- 1 root root 6.6K Aug 2 00:39 1.tar.gz
total 6.4M
总结:使用sort对数字进行排序那就大错特错了!
例如:
1
2
10
19
[root@vps ~]# sort haha.txt
1
10
19
2
[root@vps ~]#
sort只会排第一个字符!
二、直接使用ls参数
total 10000
-rw-r--r-- 1 root root 3565833 Aug 5 10:07 httpd-2.2.16.tar.gz.filepart
-rw-r--r-- 1 root root 3215350 Mar 9 11:49 nagios-3.2.1.tar.gz
-rw-r--r-- 1 root root 2095419 Jul 27 14:57 nagios-plugins-1.4.15.tar.gz
-rw-r--r-- 1 root root 669076 Mar 17 2009 openvpn-2.0.9.tar.gz
-rw-r--r-- 1 root root 626042 Apr 30 2008 lzo-2.03.tar.gz
[root@vps ~]# ll -Sh
[root@vps ~]# ll -Srh ---这两个最常用
三、按时间排序
total 6500
-rw-r--r-- 1 root root 626042 Apr 30 2008 lzo-2.03.tar.gz
-rw-r--r-- 1 root root 669076 Mar 17 2009 openvpn-2.0.9.tar.gz
-rw-r--r-- 1 root root 3215350 Mar 9 11:49 nagios-3.2.1.tar.gz
-rw-r--r-- 1 root root 2095419 Jul 27 14:57 nagios-plugins-1.4.15.tar.gz
drwxrwxrwx 13 1000 users 4096 Aug 1 02:30 lzo-2.03
drwxrwxrwx 16 root root 4096 Aug 2 00:28 openvpn-2.0.9
-rw-r--r-- 1 root root 6697 Aug 2 00:39 1.tar.gz
drwxrwxrwx 16 nagios root 4096 Aug 3 20:26 nagios-plugins-1.4.15
drwxrwxr-x 15 nagios nagios 4096 Aug 3 21:08 nagios-3.2.1
-rw------- 1 root root 0 Aug 4 19:21 ipp.txt
-rw------- 1 root root 232 Aug 4 19:26 openvpn-status.log
[root@vps ~]#
注:solaris中ls的用法:ls -1RaAdCxmnlhogrtuvVcpFbqisfHLeE@ [文件],没有-S选项
按文件大小排序
ls -l|sort -n +4 -5
以上主要用到了linux命令:sort、ls、ll,建议大家好好研究下这三个命令的用法。