软(符号)连接和硬连接

Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

硬连接

硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

软连接

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

创建空文件的几种方式

touch file

vi file %借助空设备

cat /dev/null > file

echo -n > file %-n使echo不输出换行

dd if=/dev/zero of=<filename> bs=1 count=0
%借助zero设备,使用dd指令方式,通用性更强,但效率更低。(bs可以省略)
### C语言中连接硬连接的概念及区别 #### 1. 硬连接的定义实现 硬连接是通过索引节点(inode)来建立文件之间的关联。在Linux文件系统中,每个文件都会被分配一个唯一的索引节点号(inode index)。硬连接的作用是允许一个文件拥有多个有效路径名[^2]。创建硬连接时,实际上是为同一个文件数据块创建了多个目录条目,这些条目指向相同的inode。 硬连接的特点包括: - 硬连接不会创建新的文件,而是增加对同一inode的引用计数。 - 删除硬连接中的任何一个路径名,只要还有其他路径名存在,文件的数据块就不会被释放。 - 硬连接不能跨越不同的文件系统。 - 硬连接不能链接到目录。 以下是使用C语言创建硬连接的示例代码: ```c #include <stdio.h> #include <unistd.h> int main() { const char *original_file = "file.txt"; const char *hardlink_file = "hardlink.txt"; if (link(original_file, hardlink_file) == -1) { perror("link"); return 1; } printf("Hard link created successfully.\n"); return 0; } ``` #### 2. 连接的定义实现 连接符号链接)是一种特殊的文件,它包含指向另一个文件或目录的路径信息[^4]。连接并不直接指向inode,而是通过存储目标文件的路径来实现链接。 连接的特点包括: - 连接可以跨越不同的文件系统。 - 连接可以链接到目录。 - 如果目标文件被删除,连接会变为无效链接(悬空链接)。 - 连接的创建不会影响目标文件的inode引用计数。 以下是使用C语言创建连接的示例代码: ```c #include <stdio.h> #include <unistd.h> int main() { const char *original_file = "file.txt"; const char *symlink_file = "symlink.txt"; if (symlink(original_file, symlink_file) == -1) { perror("symlink"); return 1; } printf("Symbolic link created successfully.\n"); return 0; } ``` #### 3. 硬连接连接的区别 | 特性 | 硬连接 | 连接 | |-------------------|-----------------------------------------|-----------------------------------------| | 文件系统限制 | 不能跨越不同文件系统 | 可以跨越不同文件系统 | | 链接到目录 | 不支持 | 支持 | | 目标文件删除后 | 文件仍然存在 | 链接失效(悬空链接) | | inode引用计数 | 增加inode引用计数 | 不影响inode引用计数 | | 实现方式 | 直接指向inode | 存储目标文件的路径信息 | #### 4. 使用场景 - **硬连接**:适用于需要防止文件被误删的场景,例如备份重要文件。 - **连接**:适用于需要灵活链接文件或目录的场景,例如跨文件系统的链接或动态更新目标文件[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值