Linux 下有两种连接文件的方式,即硬连接和符号连接(软连接)。
ln 是创建连接文件的命令;
硬连接
硬连接是通过文件系统的inode连接来产生新的文件名,而不是产生新文件。inode 是记录文件属性的,一个文件有一个 inode,相当于文件的ID,查找文件的时候,要先找到 inode,然后才能读出文件的内容。
硬连接是多个文件都指向同一个 inode;
ll -i
ll --inode //print the index number of each file
具有相同 inode 的多个文件互为硬连接文件,创建硬连接相当于文件实体多了入口;
对于硬连接文件,只有在删除了源文件以及所对应的所有硬连接文件,文件实体才会被删除,根据硬连接的特点,可以为文件创建硬连接防止文件误删;
不论修改原文件还是连接文件,另一个文件的数据都会被改变;
修改 hello1.c 的内容如下:
由于 hello.c 与 hello1.c 互为硬连接文件,仅仅修改 hello1.c 的内容也会导致 hello.c 的内容发生的改变;
硬连接不能跨文件系统,也不能连接到目录,由于以上这些限制,硬连接其实是不常用的。
符号连接(软连接)
符号连接类似于 Windows 中的快捷方式,符号连接相当于创建了一个独立的文件,这个文件会让数据读取指向它连接的那个文件的文件名;
创建符号连接时,源文件的路径一定要使用绝对路径,可以防止出错,若不使用绝对路径,拷贝的时候会出问题。
ln -s //创建软连接的命令
ln -s /home/zsw/hello hello2 //这里是原文件的路径 /home/zsw/hello
//拷贝的时候要加 -d 若属于link file,则复制为link file,而非文件本身
cp -d hello2 lntest/
符号连接文件通过 -> 来指示具体的连接文件;
删除原文件后,连接文件也打不开了;
不同于硬连接的是,符号连接可以连接到目录,也可以跨文件系统。