link 和 ulink 这两个命令的参数都及其简单
--help display this help and exit
--version output version information and exit
link的作用就是我们下面要说的创建硬链接,unlink就是取消硬链接。
但我们创建一个文件,并写入内容,此时会发生什么?
[root@localhost ziqiang]# echo "This is a file." > file1.txt [root@localhost ziqiang]# cat file1.txt This is a file.
当一个文件被创建的时候,操作系统写一些字节到磁盘上并用file1.txt这个名字链接到磁盘上这块数据。如果我们把file1.txt的名字改了,磁盘上的数据并不会改变,只是指向磁盘上数据的信息变了。其逻辑如下:
link命令的作用,可以允许我们手动创建一个链接指向磁盘上已存在的数据(操作系统尚未标记为可用)。link的常见用法:
![](/qrcode.jpg)
link file_name linkname
file_name 这个文件,他对磁盘上的数据正式我们想要链接的
linkname 这个文件,是我们即将创建的链接名
[root@localhost ziqiang]# link file1.txt file2.txt
现在file1.txt和file2.txt指向磁盘上相同的数据
[root@localhost ziqiang]# cat file1.txt This is a file. [root@localhost ziqiang]# cat file2.txt This is a file.
然而我们并没有创建磁盘上数据的拷贝,file1.txt和file2.txt这两个文件都指向相同的磁盘数据。其逻辑图如下:
如果通过file1.txt和file2.txt两个文件中的一个改变磁盘上存储的你内容,另一个文件也会跟着改变。追加点内容看看是不是这样
[root@localhost ziqiang]# echo "It points to data on the disk." >> file1.txt [root@localhost ziqiang]# cat file1.txt This is a file. It points to data on the disk. [root@localhost ziqiang]# cat file2.txt This is a file. It points to data on the disk.
file1.txt和file2.txt分享磁盘上同一块数据,改变一个另一个也跟着变。但是如果删除一个文件呢?会不会都删除呢?如果我们删除这些文件,只是删除指向磁盘数据的链接而已。由于前面手动创建了一个链接,在用户层面(user-level)我们依然还有一个指向磁盘数据的链接,所以如果我们删除一个文件
[root@localhost ziqiang]# rm file1.txt rm: remove regular file ‘file1.txt’? y
叫 file1.txt 这个名字的文件就永远不存在了
[root@localhost ziqiang]# cat file1.txt cat: file1.txt: No such file or directory
但是我们手动创建指向磁盘数据的那个链接还在,我们依然可以访问数据
[root@localhost ziqiang]# cat file2.txt This is a file. It points to data on the disk.
正如你所看到那样,即使在文件被删除后,磁盘上的数据依然还在(因为我们删除的仅仅是指向磁盘上数据的一个链接)。只要还有链接存在,我们就能访问磁盘上的数据。我们说的rm一个文件(删除一个文件)仅仅是是利用unlink使磁盘上的数据不可链接,磁盘上的数据依旧还在。对操作系统而言,只是会被标记为可用,以便将来使用。
自此,讨论的仅仅是硬链接。硬链接(eg. file1.txt )和他链接的数据必须存放在相同的文件系统上。例如,你不能用一个分区上的硬链接 指向 存储在另一个分区上的数据。还有,不能创建硬链接指向一个目录(符号链接可以)。
ln和link有啥区别?
默认情况下,ln创建硬链接,这个link一样。下面命令等价
ln file1.txt file2.txt link file1.txt file2.txt
但是ln可以利用-s参数创建软连接
[root@localhost ziqiang]# ln -s file1.txt file2.txt [root@localhost ziqiang]# ll *txt -i 70 -rw-r--r--. 1 root root 16 Jun 12 22:15 file1.txt 71 lrwxrwxrwx. 1 root root 9 Jun 12 22:16 file2.txt -> file1.txt
创建了一个软连接名字为file2.txt,指向file1.txt。其逻辑如下:
关于符号链接
符号链接,有时也被称为软连接。与硬链接不通,硬链接指向磁盘上的文件,而软连接指向另一个链接。软连接有几样好处:
软连接可以连接到目录
允许数据存在一个一个磁盘或分区,而软连接在另一个磁盘或分区
与硬链接不通,一处软连接指向的 文件/目录 ,将会打破这种链接关系
创建file1.txt,file2.txt指向file1.txt
[root@localhost ziqiang]# echo "This is a file." > file1.txt [root@localhost ziqiang]# ln -s file1.txt file2.txt [root@localhost ziqiang]# cat file1.txt This is a file. [root@localhost ziqiang]# cat file2.txt This is a file.
但是如果删除file1.txt,磁盘上的数据就永远不可访问了
[root@localhost ziqiang]# rm file1.txt -rf [root@localhost ziqiang]# cat file2.txt cat: file2.txt: No such file or directory
这个报错信息可能会令人困惑,因为file2.txt依然还在啊,ls也看得到
[root@localhost ziqiang]# ls file2.txt version-check.sh
然而,对于file2.txt而言,这是个不完整的链接,他指向的东西不存在了。操作系统顺着这个软连接找下去,正常应该找到file1.txt,但是没找到,因此返回错误信息。