要复制文件,使用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 来查阅一下。