1.首先,先来理解什么是inode
inode(索引节点):每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘 ... ... )被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。
做个比喻,比如一本书,存储设备或分区就相当于这本书,Block相当于书中的每一页,inode 就相当于这本书前面的目录,一本书有很多的内容,如果想查找某部份的内容,我们可以先查目录,通过目录能最快的找到我们想要看的内容。虽然不太恰当,但还是比较形象。
2.创建硬链接文件的语法
# ln 源文件 目标文件
[longfei@localhost ~]$ vi testhard 创建一个新的文件
[longfei@localhost ~]$ ls -il testhard 显示文件的详细信息,包括inode
1933557 -rw-rw-r-- 1 longfei longfei 19 Nov 5 03:59 testhard
[longfei@localhost ~]$ ln testhard testh 为文件testhard创建硬链接文件testh
[longfei@localhost ~]$ cat testhard testh 查看两个文件中的内容,发现内容一样
test for hard file
test for hard file
[longfei@localhost ~]$ ls -il testhard testh 显示两个文件的详细信息,发现信息完全一样
1933557 -rw-rw-r-- 2 longfei longfei 19 Nov 5 03:59 testh
1933557 -rw-rw-r-- 2 longfei longfei 19 Nov 5 03:59 testhard
[longfei@localhost ~]$ vi testh 修改其中一个文件的内容,其它文件也将受到影响.
[longfei@localhost ~]$ cat testhard testh
ddd
test for hard file
ddd
test for hard file
注:硬链接文件不能为目录创建,只能为文件创建
3.创建软链接文件的语法
#ln -s 源文件或目录 目标文件或者目录
[longfei@localhost ~]$ ln -s testhard testss 为testhard创建一个软链接文件
[longfei@localhost ~]$ ls -il testhard testss
1933557 -rw-rw-r-- 2 longfei longfei 23 Nov 5 04:01 testhard
1933488 lrwxrwxrwx 1 longfei longfei 8 Nov 5 04:08 testss -> testhard testss指向testhard
[longfei@localhost ~]$ cat testss 查看testss相当于打开testhard
ddd
test for hard file
[longfei@localhost ~]$ rm -r testhard
[longfei@localhost ~]$ cat testss
cat: testss: No such file or directory
注:硬链接文件可以为文件或者目录创建
总结:
1)硬链接文件要在同一个文件系统中,软链接文件可以跨过文件系统
2)硬链接文件不管有多少个,都指向同一个inode.只要有一个硬链接文件存在,该文件就存在,类似拷贝了那个文件,但又跟一个文件的拷贝有点区别,就是只要其中一个硬链接文件被修改了,其它文件同时都会自动更新
3)软链接不直接使用i节点作为文件指针,而是使用文件路径名作为指针.所以删除链接文件对源文件毫无影响,但是删除了源文件,链接文件就找不到所指向的文件.
4)软链接文件有自己的inode,并在磁盘上有一小片空间存放路径名
5)软连接文件可以对一个不存在的文件名进行链接,只是打开的时候找不到源文件罢了
6)硬链接不可以对目录进行链接,只能针对文件;软链接却可以对目录或文件进行链接.