从心开始的CentOS学习笔记之七:文件目录操作cp rm mv basename dirname

一、cp (复制文件或目录)

cp 除了单纯的复制之外,还可以创建链接文件 ,比对两文件的新旧而予以更新。

cp (复制文件或目录)

cp [-adfilprsu] 来源文件(source) 目标文件(destination)

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时,系统会保持文件原来的相关属性(所有者,相关用户或组的权限)


从心开始的CentOS学习笔记之七:文件目录操作cp rm mv basename dirname

一般来说,我们如果去复制别人的数据 (当然,该文件用户必须要有 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

从心开始的CentOS学习笔记之七:文件目录操作cp rm mv basename dirname

注意: -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(软链接源目标文件完全相同)


从心开始的CentOS学习笔记之七:文件目录操作cp rm mv basename dirname


测试三:当源文件比目标文件新时才复制过来

格式 :cp -u 源文件名 目标文件名(常用于备份操作


测试四:复制链接文件的实际文件(不是链接文件,即不是快捷方式)

格式: cp -d  源文件名 目标文件名

所示。


范例五:一次将多个文件复制到目录下

格式:cp [options] source1 source2 source3 .... directory

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


总之,由于 cp 有种种的文件属性与权限的特性,所以,在复制操作前,用户必须要清楚的了解到:是否需要完整的保留来源文件的信息?来源文件是否为链接文件 (symbolic link file)?来源文件是否为特殊的文件,例如 FIFO, socket 等?来源文件是否为目录?来源是多个文件?


二、rm (移除文件或目录)

格式|: rm [-fir] 文件或目录

选项与参数:

-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;

-i :互动模式,在删除前会询问使用者是否动作

-r :递归删除啊!却将目录及目录下的所有内容都删除,这是非常危险的选项。

touch file1 file2

mkdir -p 1/2/3

ls

rm file1 file2

rm 1(提示1是一个目录,无法删除)

rm -p 1 (将目录1及目录1下的所有文件目录全部删除)

rm 还支持通配符操作,rm fil*

从心开始的CentOS学习笔记之七:文件目录操作cp rm mv basename dirname

注意:当删除一个带有 - 开头的文件,如rm -aaaa,系统会提示删除不成功,这是因为系统会把-开始的文件名当成命令的操作选项,因此无法删除成功。

此时用户用用可以通过以下两种方法避开首位字符是 "-" 的方法:一是在文件目录名前加上“ ./ ”即可,rm ./-aaaa; 二是 rm -- -aaa-- 也可以。

touch ./-aaa ./-aaaa

ls

rm -aaa 

rm -aaaa

rm ./-aaa

rm -- -aaaa

ls

从心开始的CentOS学习笔记之七:文件目录操作cp rm mv basename dirname

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

格式:mv [-fiu] source destination

格式:mv [options] source1 source2 source3 .... directory

选项与参数:

-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;

-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

-u :若目标文件已经存在,且 source 比较新,才会更新 (update)

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

用户也可以通过rename进行更名操作,可以通过man rename查看相关操作。


四、取得路径的文件名称basename

五、取得路径的目录名称dirname

每个文件的完整文件名包含了前面的目录与最终的文件名,而每个文件名的长度都可以到达255 个字符耶! 那么用户怎么知道那个是文件名?那个是目录名?当然就是利用斜线 (/)来分辨啊! 其实,获取文件名或者是目录名称,一般的用途应该是在写程序的时候用来判断之用的。

basename /etc/sysconfig/network

network (获取最后的文件名)


dirname /etc/sysconfig/network

/etc/sysconfig (获取的变成目录名)


上一篇:三星SAMSUNG SL-M2676N 驱动


下一篇:洛谷 P1429 平面最近点对(加强版)