shell命令之cp
cp 为复制命令,实际中分为文件间的复制,目录间的复制,文件到目录的复制以及链接的复制。 文件间的复制cp file1 file2
覆盖 file2 的内容,有时候并不是所希望的
文件到目录的复制cp source_file ... target_directory
把多个 source_file 复制到 target_directory 目录中
目录间的复制目录间的复制需要带上 -R 参数 cp -R source_directory target_directory
这也有几种情况
而在 Unbuntu 12.04 版本测试下,会略微有点不同,当 target_directory 存在的时候,无论 source_directory 是否以正斜线(/)结尾,都是把 source_directory 的目录 和 内容都复制到 target_directory 中。 那么,当 target_directory 已经存在的情况下,用 链接有时候,会想在系统上维护一个文件的两个或者多个副本,可以创建链接,链接是目录上指向真实文件的占位符。 链接有两种类型
创建硬链接硬链接会创建一个独立的文件,这个文件与源文件的所有信息都相同,修改硬链接等同于修改源文件 在 Linux 下,可以用 可以看到,文件 david 和 hard_link_david 从 inode,到文件权限,到文件大小,到最近修改时间都相同。 当然,如果 hard_link_david 已经存在,系统会提示文件已经存在,所以你并不必担心覆盖的问题。我觉得应该始终保持谨慎的心态,用 创建符号链接同样 ,在 Linux 下,可以用 可以看到,符号链接文件 和 源文件 的 inode 信息不一样,这说明符号链接是一个独立的文件。同时也可以看到文件大小不一样,这说明符号链接文件并不存储源文件中的数据,只需要存储源文件的有关信息(源文件位置)。 上面例子中,是在当前目录下创建的符号链接,但是如果不是在当前目录下创建符号链接 ln -s source_file target_directory/symbolic_link_file
如果我们用
同样的,如果你用 mv 命令把当前目录下的符号链接移动到另外一个目录,也会发生同样的情况。 符号链接的复制单独复制一个符号链接文件,其实是创建一个内容与源文件相同,然而却一个独立的新文件。 copy_symbolic_link_david 虽然是 symbolic_link_david 复制过来的,但是从文件类型看是一个文件,而不是一个链接,从文件大小看,它与文件david 的大小是一样的,所以 copy_symbolic_link_david 只是一个与源文件 david 内容相同的独立文件而已。 如果把带有符号链接的目录进行复制 可以看到 dir2 目录是完全复制了 dir1 目录,只是两个符号链接指的都只是各自目录下的 david 文件,这个从 inode 信息就可以看出两个目录下的 david 文件是不一样的(只是内容相同而已)。这个系统默认行为与 硬链接复制单独复制一个硬链接,效果和符号链接一样,会创建一个新的文件( 内容相同 )。 但是如果复制的硬链接所在目录呢? 从 inode 信息可以看到,dir2 目录下的复制出来的文件硬链接不仅是一个单独的文件,而且与 dir2 目录下的文件 zhou 没有任何关系。 cp -RL-L 配合 -R 使用,可以看到,符号链接和硬链接都复制成了单独的文件。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |