cp [options] source1 source2 source3 .... directory
选项与参数:
-a :相当于 -dr --preserve=all 的意思,(常用)
-d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
-f :为强制(force)的意思,若目标文件已经存在且无法打开,则移除后再尝试一次;
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式链接(hard link)的链接文件创建,而非复制文件本身;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递回持续复制,用于目录的复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),亦即“捷径”文件;
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等属性也复制。
注意:如果来源文件有两个以上,则最后一个目的文件一定要是“目录”才行。
复制(cp)这个指令是非常重要的,不同身份者执行这个指令会有不同的结果产生,尤其是那个-a, -p的选项, 对于不同身份来说,差异则非常的大,这主要原因是只有root用户有修改权限文件和目录的拥有者等权限,当于一些普通用户-a -p 参数可能不会有作用。
1、测试一:下面的测试首先以fromheart用户登录系统,在其家目录下建立一个文件test,然后切换到root用户,不带参数 带参数-p 查看复制后文件与源文件的属性差别
touch test
su -
pwd
cp /home/fromheart/test .
cp /home/fromheart/test testp
ls -al /home/fromheart/test test testp
通过下图可以发现,当带参数-p时,系统会保持文件原来的相关属性(所有者,相关用户或组的权限)
一般来说,我们如果去复制别人的数据 (当然,该文件用户必须要有 read 的权限才行)时, 总是希望复制到的数据最后是我们自己的,所以,在默认的条件中, cp 的来源文件与目标文件的权限是不同的,目标文件的拥有者通常会是指令操作者本身。
2、测试二:下面的测试,首先在当前登录用户fromheart家目录下分别建立 1/2、3目录,然后通过 cp -r 命令将1目录(含目录下的子目录2)复制到3目录下:
mkdir -p 1/2
mkdir 3
cp 1 3 (提示错误)
cp -r 1 3
ls -alR 1 3
注意: -r 是可以复制目录,但是,文件与目录的权限可能会被改变。 这一点在备份时要尤其注意,因为备份时用户很大可能需要保持源文件的属性。上图中,由于操作用户都是在其家目录下进行,所以权限没有变化。
测试三:建立链接文件 (symbolic link)
使用 -l 及 -s 都会创建所谓的链接文件(link file),但是这两种链接文件却有不一样的情况,其中个 -l 就是所谓的硬链接(hard link),至于 -s 则是软链接(symbolic link),相当于windows 下的快捷方式。
简单来说,软链接是一个“捷径”,这个捷径会链接到源文件上去!所以用户会看到文件名右侧会有个指向(->)的符号。
硬链接目标文件和源文件属性与权限完全一模一样,与尚未进行链接前的差异则是其属性第二栏的link数由1变成2了。同时,当源文件内容发生变化,硬链接目标文件也会发生变化。
mkdir sl ll(建立两个目录,sl 存放软链接源文件sl.txt,ll存放硬链接源文件ll.txt)
touch sl/sl.txt ll/ll.txt (在上述两个文件分别建立两个空文件sl.txt ll.txt)
cp -s sl/sl.txt sl.txts (通过cp -s命令,产生软链接文件sl.txts)
cp -l ll/ll.txt ll.txtl(通过cp -l命令,产生硬链接文件ll.txtl)
ls -ali ll/ll.txt ll.txtl (查看硬链接源文件、目标文件的inode等详细信息,发现两个文件的inode相同,文件连接数变成了2,注意对于存在于不同目录下的硬链接源目标文件,用户可以通过 find / -inode命令查找)
ls -ali sl/sl.txt sl.txts(软链接源目标文件完全相同)
测试三:当源文件比目标文件新时才复制过来
格式 :cp -u 源文件名 目标文件名(常用于备份操作)
测试四:复制链接文件的实际文件(不是链接文件,即不是快捷方式)
格式: cp -d 源文件名 目标文件名
所示。
范例五:一次将多个文件复制到目录下
格式:cp [options] source1 source2 source3 .... directory
可以将多个数据一次复制到同一个目录去!最后面一定是目录!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。