cp复制文件或目录
1、命令格式cp[OPTION]... SOURCE... DIRECTORY
2、命令说明
cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。这说明命令行和shell脚本的执行方式有些不同。
将源文件复制到目标文件,源文件可以有多个,目标文件只能有一个
3、命令参数
-a:等于-dR选项一起用,保持所有属性
-b:当目标文件存在时则备份目标文件,然后把新文件复制过去
-d:当源为链接文件时,复制链接文件本身而非指向的源文件
-p:复制文件或目录的时候保持文件的元数据信息,时间戳,属主,属组
-f:强制复制,如果文件存在则强制覆盖不询问管理员(不好用)
-i:如果文件存在,则询问管理员是否覆盖
-L:复制链接文件时,总是复制链接文件的源文件
-r|-R:复制目录及目录中的内容
-n:复制文件时不会覆盖现有文件
-t:用于源文件有多个的情况下,此时目标文件在前,源文件或目录在后
-u:复制文件时如果目标文件比源文件新,则不复制
-v,--verbose:显示详细信息
--help:帮助
--version:显示命令版本
4、常用实例
1、复制单个文件到目标目录中,目标目录文件不存在
命令:cp login /bak[root@server~]# ll
total 48
-rw-------.1 root root  1442 Dec  7 21:28 anaconda-ks.cfg
-rw-r--r--.1 root root   322 Dec 11 21:45 ifuser.sh
-rw-r--r--.1 root root 27312 Dec  7 21:28install.log
-rw-r--r--.1 root root  7572 Dec  7 21:27 install.log.syslog
lrwxrwxrwx.1 root root    14 Dec 11 21:21 login-> /sh/iflogin.sh
-rw-------.1 root root     0 Dec  9 20:39 yum.log
[root@server~]# ll /bak/
[root@server~]# cp ifuser.sh /bak/
[root@server~]# ll /bak/
total 4
-rw-r--r--.1 root root  322 Dec 11 21:46 ifuser.sh
[root@server~]#
提示:在没带-p参数时时间是不一样的,在带-p参数后时间是一样的,并且属主属组也一样,-a参数是在-p参数的基础上在加上-d的功能,-d是复制链接文件时,复制链接文件并非原文件。
例2:复制文件存在时,询问是否覆盖[root@server~]# ll /bak/
total 20
-rw-r--r--.1 root root 1926 Nov 27  2013CentOS-Base.repo
-rw-r--r--.1 root root  638 Nov 27  2013 CentOS-Debuginfo.repo
-rw-r--r--.1 root root  630 Dec  8 20:43 CentOS-Media.repo
-rw-r--r--.1 root root 3664 Nov 27  2013 CentOS-Vault.repo
-rw-r--r--.1 root root  322 Dec 11 21:46 ifuser.sh
[root@server~]# cp ifuser.sh /bak/
cp:overwrite `/bak/ifuser.sh'? y
[root@server~]# cp -f ifuser.sh /bak/
cp:overwrite `/bak/ifuser.sh'? y
[root@server~]#
说明:目标文件存在时,会询问是否覆盖。这是因为cp是cp -i的别名。目标文件存在时,即使加了-f标志,也还会询问是否覆盖。
例3:复制整个目录
命令:cp -r /bak ./[root@server~]# ls
anaconda-ks.cfg  ifuser.sh install.log install.log.syslog  login  yum.log
[root@server~]# cp -r /bak/ ./
[root@server~]# ls
anaconda-ks.cfg  bak ifuser.sh  install.log  install.log.syslog  login yum.log
[root@server~]# cd bak/
[root@serverbak]# ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo  CentOS-Vault.repo  ifuser.sh
[root@serverbak]#
提示:./表示当前目录,复制目录时,如果目标目录不存在则创建,如果目标目录存在则把原文件复制到目标目录中
例4:复制链接文件
命令:cp -d login /bak/[root@server~]# ll /bak/
total 16
-rw-r--r--.1 root root 1926 Nov 27  2013CentOS-Base.repo
-rw-r--r--.1 root root  638 Nov 27  2013 CentOS-Debuginfo.repo
-rw-r--r--.1 root root  630 Dec  8 20:43 CentOS-Media.repo
-rw-r--r--.1 root root 3664 Nov 27  2013CentOS-Vault.repo
[root@server~]# ll
total 48
-rw-------.1 root root  1442 Dec  7 21:28 anaconda-ks.cfg
-rw-r--r--.1 root root   322 Dec 11 21:45 ifuser.sh
-rw-r--r--.1 root root 27312 Dec  7 21:28install.log
-rw-r--r--.1 root root  7572 Dec  7 21:27 install.log.syslog
lrwxrwxrwx.1 root root    14 Dec 11 21:21 login-> /sh/iflogin.sh
-rw-------.1 root root     0 Dec  9 20:39 yum.log
[root@server~]# cp -d login /bak/
[root@server~]# ll /bak/
total 16
-rw-r--r--.1 root root 1926 Nov 27  2013CentOS-Base.repo
-rw-r--r--.1 root root  638 Nov 27  2013 CentOS-Debuginfo.repo
-rw-r--r--.1 root root  630 Dec  8 20:43 CentOS-Media.repo
-rw-r--r--.1 root root 3664 Nov 27  2013CentOS-Vault.repo
lrwxrwxrwx.1 root root   14 Dec 11 22:04 login ->/sh/iflogin.sh
[root@server~]#
说明:复制链接文件时-d是只复制链接文件,不复制链接文件的原文件