时间:2017.11.16
作者:李强
参考:man,info,magedu讲义
声明:以下英文纯属个人翻译,英文B级,欢迎纠正,盗版不纠,才能有限,希望不误人子弟为好。
1、使用目的与场景
2、官方说明
make links between files
3、写在前面
不管是说cp,mv.rm,还有文件的权限管理来说,都离不开对数据的元数据和数据基本的inode的操作,我们要先了解文件存放在磁盘空间的形式是inode表与数据存放块的表,目录也是文件,只不过它的date里存放的是文件名与子目录对应的inode号而已。关于link和symlink,硬链接和软链接的概念可以自行 man 2 link 和man 2 symlink 查看。
4、修改文件及涉及的环境变量
5、用法
<code>提要:</code>
<code> </code><code>ln</code> <code>[OPTION]... [-T] TARGET LINK_NAME (1st form)</code>
<code> </code><code>ln</code> <code>[OPTION]... TARGET (2nd form)</code>
<code> </code><code>ln</code> <code>[OPTION]... TARGET... DIRECTORY (3rd form)</code>
<code> </code><code>ln</code> <code>[OPTION]... -t DIRECTORY TARGET... (4th form)</code>
<code>参数描述:</code>
<code> </code>
<code> </code><code>--backup[=CONTROL] 为每一个存在的目标文件生成一个备份</code>
<code> </code>
<code> </code><code>-b 类似--backup 但是不接收参数</code>
<code> </code>
<code> </code><code>-d, -F, --directory 允许超级用户尝试硬链接目录 </code>
<code> </code><code>(注意: 由于系统制约, 可能会失败即使是超级用户) </code>
<code> </code><code>-f, --force 移除存在的目标文件?</code>
<code> </code>
<code> </code><code>-i, --interactive 提示是否移除目标</code>
<code> </code>
<code> </code><code>-L, --logical 对符号链接的源文件生成一个硬链接</code>
<code> </code><code>-n, --no-dereference </code>
<code> </code>
<code> </code><code>-P, --physical 生成一个符号链接的硬链接,相当于备份一下符号链接</code>
<code> </code><code>-s, --symbolic 生成一个symbolic link(符号链接/软链接),而不是硬链接 </code>
<code> </code>
<code> </code><code>-S, --suffix=SUFFIX 重写通常的备份后缀名</code>
<code> </code><code>-t, --target-directory=DIRECTORY 指定要在其中创建硬链接的目录</code>
<code> </code><code>-T, --no-target-directory 将 LINK_NAME 作为普通文件处理</code>
<code> </code><code>-</code><code>v</code><code>, 显示创建的链接的过程</code>
<code> </code>
<code> </code><code>注意:</code>
<code> </code><code>备份默认后缀是</code><code>"^"</code><code>,除非指定-S --suffix=SUFFIX或者--backup[=control]</code>
<code> </code><code>使用-s创建软链接时-LP是无效的,没有-s时,看LP谁在后谁生效。</code>
6、命令背后的哪些事(原理解析)
此处应该插入图片的更直观,我还没想好用什么工具怎么画,以后再搞。
ln 是针对inode表的一个操作,所以无法跨分区的磁盘的,因为inode是针对分区而言唯一的,
ln 创建一个硬链接的过程就是在这个link_name文件的父目录的inode表中添加一项内容link_name↘TARGET文件的inode号。
ln -s 创建一个符号链接的过程呢就是在symbolic_link_name的父目录下建立一项内容symbolic_link_name↘symbolic_link_name_inode,而symbolic_link_name_inode的内容写的是TARGET pathname,这里的pathname可以相对路径(target file相对symbolic_link_name的相对路径)也可以是绝对路径。
总而言之,link改变的是磁盘空间,symbolic link 改变的是磁盘空间和inode数量。
7、cp,rm,mv和软硬连接的哪些事
<code> </code><code>cp</code><code>: </code>
<code> </code><code>cp</code> <code>[OPTION]... [-T] SOURCE DEST</code>
<code> </code><code>cp</code> <code>[OPTION]... SOURCE... DIRECTORY</code>
<code> </code><code>cp</code> <code>[OPTION]... -t DIRECTORY SOURCE...</code>
<code> </code>
<code> </code><code>-l --link 生成一个硬链接而不是目录的副本,</code>
<code> </code><code>-s --sysmbolic-link 生成一个软链接而不是目录的副本, </code><code>source</code><code>从/开始,写绝对路径</code>
<code> </code><code># -l -s 后面都不能加目录,跟上目录都是复制的效果,相当于sl的功能是失效的。</code>
<code> </code><code>-d 复制符号链接而不是链接的源文件</code>
<code> </code><code>-P 后面接的是</code><code>source</code><code>是符号链接,复制链接符号本身而不是链接文件</code>
<code> </code><code>-H 当</code><code>cp</code><code>指定的参数是一个symbolic-link的时候,复制的是symbolic-link的源文件而不是</code>
<code> </code><code>symbolic-link 目录里面的sl不会做操作,只对第一层进行操作 </code>
<code> </code><code>-L 和-H有啥区别?-L在源里面的sl文件复制到目标文件里是真实的文件内容,但是名字不变</code>
<code> </code><code>还是sl的名字,-L操作的文件里没有符号链接文件了。dest也是一个文件而不是sl文件。</code>
<code> </code><code>递归进行操作。</code>
<code> </code>
<code> </code><code>#ps. 此处应该插入测试图片更直观。</code>
本文转自 lajifeiwomoshu 51CTO博客,原文链接:http://blog.51cto.com/lajifeiwomoshu/1982281