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~]# lltotal 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.sysloglrwxrwxrwx.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~]# lsanaconda-ks.cfg ifuser.sh install.log install.log.syslog login yum.log[root@server~]# cp -r /bak/ ./[root@server~]# lsanaconda-ks.cfg bak ifuser.sh install.log install.log.syslog login yum.log[root@server~]# cd bak/[root@serverbak]# lsCentOS-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.sysloglrwxrwxrwx.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.repolrwxrwxrwx.1 root root 14 Dec 11 22:04 login ->/sh/iflogin.sh[root@server~]#
说明:复制链接文件时-d是只复制链接文件,不复制链接文件的原文件