前言:在Linux中使用什么来识别一个文件呢?
我们先在终端上输入命令: ls -i 看看会有什么信息出现。
think@Ubuntu:~$ ls -i
显示的信息
1048577 bin 523 initrd.img 524289 mnt 1 sys
1179649 boot 13 initrd.img.old 655361 opt 793170
可以看到每个文件前都有一个编号,在Linux中就是靠这个编号来识别一个文件的。
那么这些编号叫啥名字呢----》索引节点号
Tiger-John总结;
可以通过命令: ls -i来查看一个文件的索引号。
那什么叫索引节点,它有什么作用呢。
一.索引节点
Linux 文件系统使用索引节点来记录文件信息,索引节点是一个数据结构,它包含文件的长度、创建时间、修改时间、权限、所属关系、磁盘中的位置等信息。每个文件或目录都对应一个索引节点,文件系统把所有的索引节点形成一个数组,系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。文件系统正是靠这个索引节点号来识别一个文件。
我们上面提到了有一种文件是链接文件,它是干么的呢,有什么作用?
1.链接
1>什么叫链接:
对一个已经存在的文件再建立一个新的链接,而不复制文件的内容得用户无论使用哪一个文件名
都可以访问到同一文件,提高了文件的共享。
2>在Linux中有硬链接和软链接(就是我们所说的符号链接)之分。
3>硬链接(hard link)就是让一个文件对应一个或多个文件名,或者说把我们使用的文件名和文件系统使用的节点号链接起来,这些文件名可以在同一目录或不同目录。一个文件有几个文件名,我们就说该文件的链接数为几。
(硬链接就好比给文件令起了一个别名而已)
缺点:
一是不允许给目录创建硬链接。
二是只有在同一文件系统中的文件之间才能创建链接。
人们始终是在不断的追求完美,因此为了克服硬链接的缺点,----->就出现了符号链接。
4>符号链接实际上是一种特殊的文件,这种文件包含了另一个文件的任意一个路径名。这个路径名指向位于任意一个文件系统的任意文件,甚至可以指向一个不存在的文件。系统会自动把对符号链接的大部分操作(如读、写等)变为对源文件的操作,但某些操作(如删除等)就会直接在符号链接上完成。
因为符号链接实际上的存放的是一个文件的路径名,因此它可以跨目录,跨文件系统。但是这一切的优点,都是要付出巨大代价的----->软链接要新建立一个索引节点 。
-----------------------------------------------------------------------------------------------------------
说了这么多我们来体验下如何用shell命令来对一个已经存在的文件建立一个链接呢?
二如何给一个文件建立一个链接
1.给一个文件建立一个硬链接
首先在终端输入命令: ln tiger.c myhlink.c
就实现了个已经存在的文件tiger.c 创建一个硬链接 myhlink.c。它们之间有什么关系呢?
(硬链接都是指向同一个文件,所以它们的索引节点号应该是相同的)
我们用命令来验证下 : ls -i 可以看看是否到底他们的索引号相同。
过程实例:
think@ubuntu:~/test$ ln tiger.c myhlink.c
think@ubuntu:~/test$ ls -i
931356 myhlink.c 931356 tiger.c
通过上面所显示的信息可以看到它们的索引号是相同的。
2.给一个文件建立一个符号链接
首先:在终端输入命令: ln -s tiger.c myslink.c
然后:输入名令: ls -i
来看看它们之间的索引号是否相同?
(因为软链接并没有指向这个文件,只是在这个文件中存了原有文件的地址,所以它们的索引号是不同的)
过程实例:
think@ubuntu:~/test$ ln -s tiger.c myslink.c
think@ubuntu:~/test$ ls -i
931346 myslink.c 931331 tiger.c
通过上面的结果可以看出它们两者的索引编号不一样。
Tiger-John总结:
1>用 shell 命令: ln filename1 filename2 可以实现给filename1 创建一个硬链接filename2。
2> 用 shell 命令:ln -s filename1 filename2 可以实现给filename1 创建一个软链接filename2。
3> 用 shell 命令: ls -i 可以查看文件的索引号