Linux / Mac 下 基本的 bash shell 命令详解(3)

在文件系统中将文件和目录从一个位置复制到另一个位置就需要使用cp命令。
最基本用法里,cp需要两个参数,源对象和目标对象:

cp source destination

当source的destination参数都是文件名时,cp命令将源代码复制到一个新文件,并且以destination命名。新文件就像全新的文件一样,有新的创建时间和修改时间。如果目标文件已经存在了,那么cp命令将会提示你是否要覆盖已有文件。

同大多数命令一样,cp命令也有一些可以提供帮助的命令行参数(当前其中部分命令行在Mac下面并没有效果):

参数描述
-a   归档文件,并保留它们现在的属性(linux文件归档的意思是为文件或目录备份,建立归档文件)  
-b   创建已存在目录文件的备份,而非覆盖它  
-d   保留  
-f   强制覆盖已存在的目标文件,不提示  
-i   在覆盖目标文件之前提示  
-l   创建文件链接而非复制文件  
-p   如果可能保留文件属性  
-r   递归的复制文件  
-R   递归的复制目录  
-s   创建一个符号链接而非复制文件  
-S   覆盖默认的备份文件的后缀(默认是~)  
-u   仅在源文件比目标文件新的情况下复制(相当于更新)  
-v   详细模式,解释到底发生了什么  
-x   仅限于当前文件系统的复制(这句话的背景是:Linux可同时挂在多个不同的文件系统类型的存储设备)  
链接文件 cp -l cp -s

链接文件下面的两个参数只针对Linux有用,Mac上进过测试没有这几个命令参数。
你可能已经注意到,cp命令的许多参数都是针对链接文件的。这是Linux文件系统的一个优点。
如需要在系统上维护同一文件的的两份或者多份副本,除了保存多份单独的物理文件副本之外。还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就被称为链接。链接是目录中指向文件真实位置的占位符。在Linux中有两种不同类型的文件链接:

符号链接,即软链接;

硬链接
硬链接会创建一个独立文件,其中包含了源文件的信息以及位置。引用硬链接文件文件等同于链接了源文件:

cp -l test1 test4

-l参数创建了一个指向test1的硬链接test4。在文件列表可看出,文件test1和test4的索引节点号是相同的,这表明,实际上它们是同一个文件。还要注意,链接计数表示当前这两个文件都有两个链接了。
只能在同种存储媒体上的文件之间创建硬链接,不能在不同挂载点下的文件间创建硬链接。在后一种情况下,可以使用软链接。

-s参数可以创建一个符号链接,即软链接:

cp -s test1 test5

首先,新建的test5文件有了一个不同于test文件的索引节点号,这说明Linux系统把它当做一个单独的文件。
其次,文件变小了。链接文件只需要存储源文件的信息,并不需要存储源文件中的数据。

在复制文件链接时需要注意,如果用cp命令来复制一个链接到到另一个源文件的文件,那么你复制的其实是源文件的另一个副本,而不是链接文件的。这点很容易混淆。可以创建一个指向源文件的新链接,而不用复制链接文件。可以创建指向同一文件的多个链接,但不要创建指向其他符号链接文件的多个符号链接。这样会生成一个链接文件链,不但容易混淆,还容易断掉,造成各种各样的问题。

重命名文件 mv

在Linux中,重命名文件称为移动(moving)。mv命令就是用来将文件和目录移动到另一个位置的:

mv test1 test2 mv test1 ../Desktop/

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14684.html