linux连接文件两种方式
Linux有两种连接文件:符号连接(软连接)和硬链接,符号链接类似Windows下的快捷方式。硬链接通过文件系统的inode连接来产生新文件名,而不是产生新文件。
inode: inode 是 UNIX 操作系统中的一种数据结构,其本质是结构体,它包含了与文件系统中各个文件相关的一些重要信息。在 UNIX 中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了 inode 表。他用于记录文件属性,一个文件一个inode。inode 相当于文件ID,查找文件的时候要先找到inode,然后才能读出文件的内容。
硬链接
硬链接是多个文件都指向同一个inode。具有相同inode,的多个文件互为硬链接文件,创建硬链接相当于文件实体多了入口。对于硬链接文件,只有删除了源文件以及对应的所有硬连接文件,文件实体才会被删除。根据硬链接文件的特点,我们可以通过给文件创建硬连接的方式来防止文件误删除。不论修改源文件还是连接文件,另一个文件的数据都会被改变。
硬连接不能跨文件系统,不能连接到目录。因为这些限制,硬链接其实不常用。
下面对测试的C文件编译后可执行文件进行建立硬链接。
新建test.c文件,输入代码:
#include "stdio.h" int main(){ printf("hello_Word!\n"); }
然后进行编译
gcc test.c -o test
输入ls命令进行查看,此时已经生成了test可执行文件。
然后进行建立硬连接,在终端中输入以下指令:
ln test test1
然后再键入ls查看,发现已经建立了硬链接test1。
此时运行test1,可以正常运行。
键入以下代码进行查看连接的inode,
ls -l -i
如图所示,连接的两个inode相同,证明硬链接正常建立。
此时移除test的可执行文件可以正常执行test.c的代码功能。
符号连接(软连接)
符号连接类似Windows 下的快捷方式,符号链接也叫做软连接,软连接要用的多。符号连接相当于创建了一个独立的文件,这个文件会让数据读取指向它连接的哪个文件的文件名。
软连接可以连接到目录。可以跨文件系统。删除源文件以后,软连接文件也就“打不开了"。符号连接文件通过->来指示具体的连接文件。
在终端中输入以下指令进行建立软连接:
ln -s test test2
此时终端如下:
test2可执行文件标红,尝试执行test2无法正常执行。
这是因为输入需要建立的连接是test 这里找不到test所以也就无法进行连接。当重新进行编译生成test的可执行文件,此时可以正常建立软连接:
同时可以正常执行: