cp-----copy files and directories
语法:
SYNOPSIS
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
功能:
cp命令主要用来将一个或多个源文件或者目录复制到指定目标文件或目录,它可以将单个源文件复制到一个指定文件名的具体的文件或一个已经存在的目录下。
选项:
-a:此参数效果等同于-dpR
-b: 覆盖目标文件之前,进行备份。备份文件会在字尾添加一个备份字符串,默认为:The backup suffix is ‘~’
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件工目录
-f:不论目标文件或目录是否存在,强行复制
-i:覆盖目标已有的文件前,先询问用户
-l:对源文件建立硬链接,而非复制文件
-p:保留源文件或目录的属性信息
-r|-R: 递归处理,将指定目录下文件及子目录一并处理
-s: 对源文件建立符号链接,而非复制文件
-u: 只在源文件比目的地更新时复制
案例:
1)当源是一个文件,目标(目的地)不存在
则:在目的地创建一个文件,将源文件里的内容填充进新建的文件中
[root@manager ~]# cp /etc/fstab /app/mima (目标文件/app/mima事先不存在)
[root@manager ~]# cat /app/mima
#
# /etc/fstab
# Created by anaconda on Mon Jul 31 17:19:47 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
2)当源是一个文件,目标(目的地)存在且是一个文件时,会覆盖目标文件里的内容(针对root用户,复制目标已存在的文件,会询问,cp='cp -i')
(注意:覆盖目标已存在的文件,要十分小心,或者可以额外增加-b参数,把已经存在的目标文件复制一份)
[root@manager ~]# echo "123abc">/app/a.txt
[root@manager ~]# cat /app/a.txt
123abc
[root@manager ~]# cp /etc/issue /app/a.txt
cp: overwrite `/app/a.txt'? y
[root@manager ~]# ll /app/
total 8
-rw-r--r--. 1 root root 47 Oct 19 11:05 a.txt
-rw-r--r--. 1 root root 783 Oct 19 10:47 mima
(以上操作,目标文件里的内容会被覆盖)
[root@manager ~]# echo "test134">/app/b.txt
[root@manager ~]# cp -b /etc/issue /app/b.txt
cp: overwrite `/app/b.txt'? y
[root@manager ~]# ll /app/
total 16
-rw-r--r--. 1 root root 47 Oct 19 11:05 a.txt
-rw-r--r--. 1 root root 47 Oct 19 11:06 b.txt
-rw-r--r--. 1 root root 8 Oct 19 11:06 b.txt~
-rw-r--r--. 1 root root 783 Oct 19 10:47 mima
[root@manager ~]# cat /app/b.txt
CentOS release 6.8 (Final)
Kernel \r on an \m
[root@manager ~]# cat /app/b.txt~
test134
(以上操作,添加-b参数,会把目标文件先备份一份)
3)当源是一个文件,目标存在且是一个目录时,不可以实现复制,文件无法覆盖
[root@manager app]# mkdir test/passwd -p
[root@manager app]# cp /etc/passwd test/
cp: overwrite `test/passwd'? y
cp: cannot overwrite directory `test/passwd' with non-directory
4)当源是多个文件,目的地不存在时,复制时会报错,目的地不能不存在
[root@manager app]# cp /etc/fstab /etc/issue /etc/passwd test/
cp: overwrite `test/passwd'? y
cp: cannot overwrite directory `test/passwd' with non-directory
5)当源是多个文件,目的地存在且是一个目录时,如果目录中存在与源文件同名的文件则覆盖;如果不存在与源文件同名的文件则新建并填充源文件中的内容;如果目的地目录中存在与源文件同名的目录,则不复制该源文件
[root@manager ~]# cp /etc/fstab /etc/issue /app/
[root@manager ~]# ll /app/
total 28
-rw-r--r--. 1 root root 47 Oct 19 11:05 a.txt
-rw-r--r--. 1 root root 47 Oct 19 11:06 b.txt
-rw-r--r--. 1 root root 8 Oct 19 11:06 b.txt~
-rw-r--r--. 1 root root 783 Oct 19 11:11 fstab
-rw-r--r--. 1 root root 47 Oct 19 11:11 issue
6)当源是一个目录,目标不存在的时候,则新建一个同名的目录,然后填充新的内容(复制目录,需要额外添加-r参数)
[root@manager ~]# cp -r /tmp/ /app/
[root@manager ~]# ll /app/
total 32
-rw-r--r--. 1 root root 47 Oct 19 11:05 a.txt
-rw-r--r--. 1 root root 47 Oct 19 11:06 b.txt
-rw-r--r--. 1 root root 8 Oct 19 11:06 b.txt~
-rw-r--r--. 1 root root 783 Oct 19 11:11 fstab
-rw-r--r--. 1 root root 47 Oct 19 11:11 issue
-rw-r--r--. 1 root root 783 Oct 19 10:47 mima
drwxr-xr-x. 3 root root 4096 Oct 19 11:10 test
drwxr-xr-t. 7 root root 4096 Oct 19 11:14 tmp
7)当源是个目录,目的地存在且为目录时,在目的地新建与源目录同名的内容并将源文件中的内容复制至新目录中。
[root@manager ~]# cd /app/
[root@manager app]# mkdir oldboy
[root@manager app]# cp -r /oldboy/ oldboy/
[root@manager app]# ll oldboy/
total 4
drwxr-xr-x. 2 root root 4096 Oct 19 11:16 oldboy
8)创建链接文件
软链接:
[root@manager app]# cp -s a.txt link.txt
[root@manager app]# ll link.txt
lrwxrwxrwx. 1 root root 5 Oct 19 11:17 link.txt -> a.txt
[root@manager app]# cat link.txt
CentOS release 6.8 (Final)
Kernel \r on an \m
硬链接:
[root@manager app]# cp -l b.txt soft.txt
[root@manager app]# ll soft.txt
-rw-r--r--. 2 root root 47 Oct 19 11:06 soft.txt
9)复制文件前保存源文件的属性
[root@manager ~]# ll /etc/fstab
-rw-r--r--. 1 root root 783 Oct 11 11:30 /etc/fstab
[root@manager ~]# cp -a /etc/fstab /app/
[root@manager ~]# ll /app/fstab
-rw-r--r--. 1 root root 783 Oct 11 11:30 /app/fstab