Linux命令—— 复制指令 cp、移动指令 mv、删除指令 rm

目录

cp (复制文件或目录)

rm (移除文件或目录)

mv (移动文件与目录,或更名)


命令介绍:

cp  这个指令的用途较多,除了单纯的复制之外,还可以创建链接文件 (就是快捷方式),比对两文件的新旧而予以更新, 以及
      复制整个目录等等的功能呢!

mv  是移动目录与文件, 这个指令也可以直接拿来作更名 (rename) 的动作。

rm   删除。

cp (复制文件或目录)

语 法:cp [-abdfilpPrRsuvx][-S <备份字尾字符串>][-V <备份方式>][--help][--spares=<使用时机>][--version][源文件或目录][目标文件或目录] [目的目录]

补充说明:cp指令用在复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,而最后的目的地并非是一个已存在的目录,则会出现错误信息。

参数:

  -a或--archive  此参数的效果和同时指定"-dpR"参数相同。 (常用)
 -b或--backup  删除,覆盖目标文件之前的备份,备份文件会在字尾加上一个备份字符串。 
 -d或--no-dereference  当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录。 
 -f或--force  强行复制文件或目录,不论目标文件或目录是否已存在。 
 -i或--interactive  覆盖既有文件之前先询问用户。 (常用)
 -l或--link  对源文件建立硬连接,而非复制文件。 
 -p或--preserve  保留源文件或目录的属性。 (备份常用)
 -P或--parents  保留源文件或目录的路径。 
 -r  递归处理,将指定目录下的文件与子目录一并处理。 (常用)
 -R或--recursive  递归处理,将指定目录下的所有文件与子目录一并处理。 
 -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)这个指令是非常重要的,不同身份者执行这个指令会有不同的结果产生,尤其是那个-a, -p的选项, 对于不同身份来说,差异则非常的大。

例1:用root身份,将 /etc/passwd 复制到 /home/wzy/test 下,并更名为 passwd_test:

重复作两次动作,由于/home/wzy/test  下面已经存在 passwd_test了,加上 -i 选项后,则在覆盖前会询问使用者是否确定!可以按下 n (不覆盖) 或者 y (覆盖) 来二次确认。

例2:变换目录到/home/wzy/test,并将 “Linux操作命令总结.docx” 文件重新复制一份且观察属性:

注意:上面红框,在执行命令不加任何选项(参数)的情况下,文件的某些属性/权限会改变;这是个很重要的特性,要注意。还有,连文件创建的时间也不一样了!

如果想要将文件的所有特性都一起复制过来该怎办?可以加上 -a 或者 -p,如下所示:

重要提示:

一般来说,我们如果去复制别人的数据 (注意:该用户必须要有该文件读“ r” 的权限才行) 时, 总是希望复制到的数据最后是我们自己的,所以,在默认的条件中, cp 的来源文件与目的文件的权限是不同的,目的文件的拥有者通常会是指令操作者本身。举例来说, 上面的例2中,由于我是 root 的身份,因此复制过来的文件拥有者与群组就改变成为 root 所有了!

由于具有这个特性,因此当我们在进行备份的时候,某些需要特别注意的特殊权限文件, 例如密码档(/etc/shadow) 以及一些配置文件,就不能直接以 cp 来复制,而必须要加上 -a或者是 -p 等等可以完整复制文件权限的选项才行!另外,如果想要复制文件给其他的使用者, 也必须要注意到文件的权限(包含读、写、执行以及文件拥有者等等), 否则,其他人还是无法针对你给予的文件进行修订的动作。

 例3:复制 /test/ 这个目录下的所有内容到 /home/wzy/tmp 下面:

因为我现在在/home/wzy 目录,所以可以直接cp test/ ,不加参数,由于test里边还有其他文件目录,所以不能cp,因此使用到参数-r 递归处理,将指定目录下的文件与子目录一并处理。但是文件与目录的权限可能会被改变,所以也可以用 cp -a test/ tmp/ 来下达指令。如下图:

或者使用 cp -rp test/ tmp/ 下达指令:

例4:将例1复制的文件passwd_test,创建一个链接文件 :

用到参数:

-l或--link 对源文件建立硬连接,而非复制文件。 
-s或--symbolic-link 对源文件建立符号连接,而非复制文件。

先 ll pass_test 文件查看一下文件属性和权限,分别使用参数 -l 和 -s 创建链接文件,由上图发现,使用参数 -l 建立的硬链接(实体链接)passwd_link_l 和 passwd_test 的属性与权限完全一模一样,与尚未进行链接前的差异则是第二栏的link数由1变成2了。-s是符号链接,简单说 passwd_link_s 是一个“捷径”,这个捷径会链接到 passwd_test 去,所以会看到文件名右侧会有个指向(->)。

例5:将例4建立的passwd_link_s,复制成passwd_link_s01和passwd_link_s02:

仔细观察发现这俩个命令一个没有参数,一个带参数-d:

1、passwd_link_s01原本复制的是链接文件,但是却将链接文件的实际文件复制过来了也就是说,如果没有加上任何选项时,cp复制的是原始文件,而非链接文件的属性。
2、若要复制链接文件的属性,就得要使用 -d 的选项了。

例6:将test目录下Linux开头的文件 和test_dir 目录里的内容复制到 tmp文件夹里:

可以将多个数据一次复制到同一个目录去,最后面一定是目录。

如果不是用root身份,能否完成复制呢?

例7:切换user1用户,将文件“Linux操作命令总结.docx” 复制一份:

注意:由于 user1的身份并不能随意修改文件的拥有者与群组,因此虽然能够复制“Linux操作命令总结.docx” 的相关权限与时间等属性, 但是与拥有者、群组相关的,原本 user1 身份无法进行的动作,即使加上 -a 选项,也是无法达成完整复制权限的。

总结:由于 cp 有种种的文件属性与权限的特性,所以在复制时,必须要清楚的了解到:

1、是否需要完整的保留来源文件的信息?
2、来源文件是否为链接文件 (symbolic link file)?
3、来源文件是否为特殊的文件,例如 FIFO, socket 等?
4、来源文件是否为目录?

rm (移除文件或目录)

语  法:rm [-dfirv][--help][--version][文件或目录...]
补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数"-r",否则预设仅会删除文件。

参       数:

  -d或--directory  直接把欲删除的目录的硬连接数据删成0,删除该目录。 
 -f或--force  强制删除文件或目录。 (常用)
 -i或--interactive  删除既有文件或目录之前先询问用户。 (常用)
 -r或-R或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。 (常用)
 -v或--verbose  显示指令执行过程。 
 --help  在线帮助。 
 --version  显示版本信息。

例1:删除例7复制的文件

例2:删除前提示,使用参数 -i

使用-i参数时,删除会提示,rm:是否删除普通文件 "Linux新2"? 输入“y” 是确定删除,输入“n”代表不删除。

例3:删除开头为“Linux新”的文件,并且不需要任何提示,用到字符 “ * ” 和参数 -f:

例4:删除test_dir目录及其里边所有文件和目录:

因为身份是 root ,默认已经加入了 -i 的选项,所以要一直按 y 才会删除!如果不想要继续按 y ,可以按下“ [ctrl]-c ”来结束 rm 的工作。这是一种保护的动作,如果确定要删除掉此目录而不要询问,可以这样做:

在指令前加上反斜线“\”,可以忽略掉 alias 的指定选项,但是千万不要删错了!删除 /etc 系统是会挂掉的!

不使用反斜线“\”,还可以使用参数 -f 如下:

例5:删除一个带有 - 开头的文件:

touch ./-aaa-  是在当前目录建立空文件 “-aaa-”,第一个删除因为“-”是选项,系统误判了,下边系统给出建议,“-aaa-”前边加“./”,所以使用命令 rm ./-aaa- 成功删掉“-”开头的文件。文件名最好不要用“-”开头。

mv (移动文件与目录,或更名)

语  法:mv [-bfiuv][--help][--version][-S <附加字尾>][-V <方法>][源文件或目录][目标文件或目录]

补充说明:mv可移动文件或目录,或是更改文件或目录的名称。

  -b或--backup  若需覆盖文件,则覆盖前先行备份。 
 -f或--force  若目标文件或目录与现有的文件或目录重复,则不会询问而直接覆盖现有的文件或目录。 
 -i或--interactive  若目标文件 (destination) 已经存在时,就会询问是否覆盖。 
 -S<附加字尾>或
 --suffix=<附加字尾>  与-b参数一并使用,可指定备份文件的所要附加的字尾。 
 -u或--update  在移动或更改文件名时,若目标文件已存在,且其文件日期比源文件新,则不覆盖目标文件。 
 -v或--verbose  执行时显示详细的信息。 
 -V=<方法>或
 --version-control=<方法>  与-b参数一并使用,可指定备份的方法。 
 --help  显示帮助。 
 --version  显示版本信息。

例1:将test目录下的passwd_link_l 移动到tmp目录下,并且改名为passwd_link_l2:

例2:移动到tmp目录下, 已存在相同的文件名,提示是否覆盖,使用参数 “-i”:

例3:将test目录下的 file1.txt 和 file2.tar.gz 一起复制到目录 、/home/wzy/tmp 下:

如果有多个来源文件或目录,则最后一个目标文件一定是“目录”,就是将所有的数据移动到该目录(tmp/)的意思!

如有纰漏,请多多指教!/^-^\

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值