6.2.2 复制、删除与移动: cp, rm, mv

简介: 6.2.2 复制、删除与移动: cp, rm, mv

要复制文件,使用cp(copy)指令,移动目录与文件,使用mv(move),这个指令直接拿来作更名的动作(rename),移除是rm(remove)。

cp (复制文件或目录)

复制(cp)这个指令是非常重要的,不同身份者执行这个指令会有不同的结果产生,尤其是那个-a, -p的选项, 对于不同身份来说,差异则非常的大。

这个 cp 的功能很多,由于我们常常会进行一些数据的复制,所以也会常常用到这个指令的。一般来说,我们如果去复制别人的数据 (当然,该文件你必须要有 read 的权限才行) 时, 总是希望复制到的数据最后是我们自己的,所以,在默认的条件中, cp 的来源文件与目的文件的权限是不同的,目的文件的拥有者通常会是指令操作者本身。举例来说, 上面的范例二中,由于我是 root 的身份,因此复制过来的文件拥有者与群组就改变成为 root 所有了。


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

范例四,使用-l及-s都会创建所谓的链接文件(link file),但是这两种文件却有不同的情况。-l就是所谓的实体链接(hard link),至于-s则是符号链接(symbolic link)。


至于bashrc_hlink文件与bashrc的属性与权限完全一模一样,与尚未进行链接前的差异则是第二栏的link数由1变成2了。

例题:你能否使用 dmtsai 的身份,完整的复制/var/log/wtmp文件到/tmp下面,并更名为dmtsai_wtmp呢?答:实际做看看的结果如下:

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


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


是否需要完整的保留来源文件的信息。


来源文件是否为链接文件(symbolic link file)


来源文件是否为特殊文件,例如FIFO,socket


来源文件是否为目录。


rm(移除文件或目录)

这是移除的指令(remove),要注意的是,通常在Linux系统下,为了怕文件被 root 误杀,所以很多 distributions 都已经默认加入 -i 这个选项了!而如果要连目录下的东西都一起杀掉的话, 例如子目录里面还有子目录时,那就要使用 -r 这个选项了!不过,使用“ rm -r ”这个指令之前,请千万注意了,因为该目录或文件“肯定”会被 root 杀掉!因为系统不会再次询问你是否要砍掉。所以那是个超级严重的指令下达。得特别注意!不过,如果你确定该目录不要了,那么使用 rm -r 来循环杀掉是不错的方式。


另外,文件名最好不要使用“-”号开头,因为“-”后面接的是选项,因此,单纯的使用“rm-aaa-"系统的指令就会误判。如果使用后面会谈到的正则表达式时,还是会出问题的!所以,只能用避过首位字符是 "-" 的方法,就是加上本目录“ ./ ”即可!如果 man rm 的话,其实还有一种方法,那就是“ rm -- -aaa- ”也可以。


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

这是搬移 (move) 的意思!当你要移动文件或目录的时后,这个指令就很重要。同样的,你也可以使用 -u ( update )来测试新旧文件,看看是否需要搬移。另外一个用途就是“变更文件名!”,我们可以很轻易的使用 mv 来变更一个文件的文件名。不过,在Linux 才有的指令当中,有个 rename , 可以用来更改大量文件的文件名,你可以利用 manrename 来查阅一下。


相关文章
|
4月前
mkdir、rm、cp、mv命令
mkdir、rm、cp、mv命令
42 0
|
2月前
rm 移除文件或目录
rm 移除文件或目录。
71 5
CentOS cp 复制隐藏文件提示 cp: cannot stat ?.xxx*?. No such file or directory
执行的命令与错误信息: # cp -a /etc/skel/* /home/postgrescp: cannot stat ?.etc/skel/*?. No such file or directory 使用cp复制普通文件时,可以使用 * 号通配符,而在复制隐藏文件时,需要使用.
4276 0
|
Shell
环境变量PATH/cp命令/mv命令/文档查看cat/more/less/head/tail
  2.10 环境变量PATH 2.11 cp命令 2.12 mv命令 2.13 文档查看cat/more/less/head/tail     which  rmdir 可以查到命令的路径   例如: ls 命令是定义在/usr/bin/ls 下,可以复制cp  /usr/bin/ls   /tmp/ls2 然后执行/tmp/ls2 可以运行,但是单独执行ls2时不行的,因为没有给ls2定义环境变量。
1033 0