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

导读:本篇文章讲解 Linux命令—— 复制指令 cp、移动指令 mv、删除指令 rm,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

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:

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

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

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

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

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

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

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

重要提示:

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

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

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

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

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

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

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

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

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

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

用到参数:

-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:

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

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

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

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

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

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

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

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

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

注意:由于 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复制的文件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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:

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

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/15956.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!