Linux ln(英文全称:link files)命令,用于为某个文件在另外一个位置建立一个同步的链接。
当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都复制一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用 ln 命令链接(link)它就可以,不必重复的占用磁盘空间。
目录:
创建一个名为 LINK_NAME 的指向 TARGET 的链接:
ln [OPTION]... [-T] TARGET LINK_NAMELinux 文件系统中,链接分为两种:硬链接(hard link)与软链接(symbolic link)。默认情况下 ln 命令生成硬链接。
不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁盘空间。
在当前目录创建名为 file2 的硬链接指向 file1:
ln file1 file2硬链接是指两个文件具有相同的 inode 号码,即两者为同一 inode 号码的别名。在 Linux 的文件系统中,所有保存在磁盘分区中的文件均对应一个 inode 索引节点,并且 Linux 允许多个文件名指向同一索引节点。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的 inode 号码与 B 的 inode 号码相同,即两者对应同一索引节点,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。
硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以起到防止 “误删” 的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的链接。只删除一个链接并不影响索引节点本身和其它的链接,只有当最后一个链接被删除后,文件的数据块及目录的链接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬链接文件均被删除。
在当前目录创建名为 file2 的软链接指向 file1:
ln -s file1 file2
[root@localhost dir]# file *
file1: empty
file2: symbolic link to `file1'符号链接(Symbolic Link),也叫软链接。软链接文件类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode 索引节点,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是 “主从” 关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
硬链接:
- 具有相同 inode 号的多个文件互为硬链接文件;
- 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除;
- 只有删除了源文件和所有对应的硬链接文件,文件实体才会被删除;
- 硬链接文件是文件的另一个入口;
- 可以通过给文件设置硬链接文件来防止重要文件被误删;
- 硬链接文件是普通文件,可以用 rm 删除;
- 对于静态文件(没有进程正在调用),当硬链接数为 0 时文件就被删除。注意:如果有进程正在调用,则无法删除或者即使文件名被删除但空间不会释放。
缺点:
- 不可以在不同文件系统的文件间建立链接,因为同一个 inode 不可以被两个不同文件系统里的文件共用;
- 只有超级用户才可以为目录创建硬链接。
软链接:
- 软链接类似 Windows 系统的快捷方式;
- 软链接里面存放的是源文件的路径,指向源文件;
- 删除源文件,软链接依然存在,但无法访问源文件内容;
- 软链接和源文件是不同的文件,文件类型也不同,inode 号也不同;
缺点:
- 因为链接文件包含有源文件的路径信息,所以当源文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷;
- 此外软链接还需要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。