ln使用

ln:英文名link,链接的意思。

Linux 系统中有软链接和硬链接两种特殊的“文件”。

硬链接(俩个相同文件同步更改)特征:

  1. 硬链接文件跟源文件拥有相同的i(inode)节点和存储block块, 它们可以看作是同一个文件。
  2. 可通过i节点进行识别(i节点相同)。
  3. 链接文件和源文件必须在相同的分区,不能跨分区。
  4. 不能针对目录创建硬链接。 (这个虽然Linux ln命令帮助说明里说可以用"ln -d"创建目录的硬链接, 但是本人实测不可行,本人在网上搜索出来了一段详细解释说明, 具体说明请看文章最下边的"特别说明"。)
  5. 修改任意一个文件,另外一个文件的内容都会改变。
  6. 当源文件被删除时,硬链接文件还可以正常使用。

软链接(俩个不同文件,一个映射,一个源文件)特征:

  1. 软链接文件作用跟windows系统的快捷方式作用相同。
  2. 软链接拥有自己的i节点和存储block块, 但是此数据块中保存的信息是源文件的i节点和文件名信息, 并不会保存实际的文件数据内容。
  3. 用"ll"命令查看时,软链接文件前面都是"lrwxrwxrwx", 其中第一位的字母"l"即表示此文件为软链接文件, 软链接文件的真实权限取决于源文件的权限。
  4. 修改任意一个文件,另外一个文件的内容都会改变。
  5. 当源文件被删除时,软链接文件将不能使用。

命令格式:

ln [选项] 源文件或目录 目标文件或目录

常用选项:

ln -b 如果目标目录中已经有同名的文件,那么在覆盖之前先进行备份 ln -f 如果目标目录中已经有同名的文件,无需提示,直接覆盖 ln -i 人机交互,如果目标目录中已经有同名的文件,则提示是否进行覆盖 ln -n 把软链接视为一般目录(说明:范例中我会详细解释) ln -s 创建软链接 ln -v 详细显示操作进行的步骤。(v为verbose的意思)

特别说明:

  1. 创建软链接时,如果软链接文件跟源文件不在同一个目录,那么源文件地址必须为绝对路径,否则创建出来的软链接无法使用。

  2. 不能针对文件创建硬链接。

  3. linux系统中的硬连接有两个限制:不能跨越文件系统和不允许普通用户对目录作硬连接。

附加:

ls -l 查看链接文件

  1. 对任何一个目录用ls -l 命令都可以看到其连接数至少是2,也说明了系统中是存在硬连接的
  2. 命令ln -d 也可以让超级用户对目录作硬连接,说明了系统限制对目录进行硬连接只是一个硬性规定,并不是逻辑上不允许或技术上的不可行。
  3. 限制普通用户的原因
  4. 如果引入了对目录的硬连接就有可能在目录中引入循环,那么在目录遍历的时候系统就会陷入无限循环当中。
  5. 符号连接不也可以引入循环吗,那么为什么不限制目录的符号连接呢?
    1. 原因就在于在linux系统中,每个文件(目录也是文件)都对应着一个inode结构
    2. 其中inode数据结构中包含了文件类型(目录,普通文件,符号连接文件等等)的信息
    3. 也就是说操作系统在遍历目录时可以判断出符号连接,既然可以判断出符号连接当然就可以采取一些措施来防范进入过大的循环了
    4. 系统在连续遇到8个符号连接后就停止遍历,这就是为什么对目录符号连接不会进入死循环的原因了。
  6. 但是对于硬连接,由于操作系统中采用的数据结构和算法限制,目前是不能防范这种死循环的。