linux系统文件属性-硬连接、软连接

本文深入探讨Linux系统中硬链接和软链接的概念,详细解释两者之间的区别,包括inode节点的作用、硬链接防止误删的原理、软链接的实现机制以及它们在文件系统中的应用。

原文:https://www.cnblogs.com/softidea/p/5597247.html

1 硬链接概念

硬链接是指通过索引节点(Inode)来进行链接,在Linux(ext2,ext3)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号(Inode Index)简称Inode,即在系统中文件的编号。

在Linux文件系统中,多个文件名指向同一个索引节点(Inode)是正常且允许的。这种情况的文件就称为硬链接,硬链接的作用之一是允许一个文件拥有多个有效路径名(多个入口),这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据(很多硬件存储如netapp存储中的快照功能就应用了这个原理,增加一个快照就多了一个硬链接。)为什么一个文件建立了硬链接会防止误删呢?

因为文件系统(ext2)的原理是,只要文件的索引节点还有一个及一个以上的链接。只删除其中一个硬链接,并不影响索引节点本身和其它的链接,只有当文件的最后一个链接被删除后,此时如果有新数据要存储到硬盘上时或都系统通过以fsck做磁盘检查的时候,被删除文件的数据块及目录的链接都会被释放,空间被新数据占用并覆盖。此时,数据就再也无法找回了,也就是说,在linux系统中,删除文件(目录也是文件)的条件是与之相关的所有硬链接均被删除;

提示:硬链接相当于文件的另外一个入口

2 查看硬链接数

此图下面标红的显示为硬链接数,表示已有几个硬链接数;

注:目录不可创建硬链接

这里写图片描述

创建一个硬链接,查看变化。

创建的硬链接文件,他们的Inode节点是相同的。

这里写图片描述

3 软链接

软件链接相当于windos的快捷方式

Linux里的软链接文件是一个特殊的文件。在软链接中,软链接文件实际上就是一个文本文件,这个文件中包含有软链接指向另一源文件文件的位置信息内容,因此,通过访问这个“快捷方式”就可以迅速定位到软链接所指向的源文件实体。

创建的软链接,他们的inode节点不相同。
这里写图片描述

4 小结:

4.1 硬链接小结:

1)通过ls –li参数查看硬链接数

2)同一个文件可以同时有多个硬链接,但只对文件生效,硬链接不能用于目录。

3)同一个文件的多个硬链接文件inode节点相同

4)删除一个文件的一个硬链接文件,不会影响其他硬链接文件;只有删除所有硬链接文件和源文件,数据才会被删除。

5)当所有的硬链接文件和源文件都被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,数据也会被回收。

6)硬链接是一个文件的多个入口。

7)和复制不一样的是,硬链接的文件指向的都是同一个源文件,所以在任何硬链接文件做更改,直接会影响到每一个硬链接文件中。相当于时时同步

8)目录不支持创建硬链接

4.2 软链接小结:

1)软链接相当于windos的快捷方式

2)软链接和源文件的inode值不同

3)可以在不同分区对文件或目录进行创建软链接

4)通过readlink命令查看软链接文件对应的实质源文件

5)删除软链接源文件对软链接会直接影响

6)软链接和源文件是不同类型的文件,也是不同的文件。

> 7)虽然目录不能创建硬链接,但通过ls查看属性时还可以看到显示硬链接数的那一行并非为1,而是大于1的数;原因在于,每创建一个目录时,其自动给自己创建一硬链接(可查看隐藏文件),并且在目录下每创建一个子目录,都会使硬链接数加1(创建文件不增加)。默认创建空目录该值为2,因为默认包含上层目录..

这里写图片描述

这个只在目录下创建子目录才有效,如果在子目录下创建子目录就无效(原理是子目录下通过ls –al查看到有“..”对应上一目录的硬链接)
这里写图片描述
这里写图片描述

5 Linux系统文件删除及还原原理:

  1. 一个文件有两部分组成,分别为i_link和i_count。

  2. i_link为硬链接数;i_count为调用文件进程数

  3. 当i_link为0时(即删除所有硬链接和源文件),且没被其他进程调用,此文件就被删除。

  4. 当i_link为0时,但被其他进程调用时,说明i_count不为0,则文件可还原。

所以文件是否真的被删除,看i_link和i_count两个计数器决定。

这里写图片描述

6 文件时间类型

6.1 GNU/Linux的文件有3种类型的时间戳:
可通过stat 命令查看文件的三种时间
这里写图片描述

6.2 通过ls命令各参数分别查看文件时间戳
1) 通过默认的ls (ls -lt)显示的是最后修改时间
这里写图片描述

2) 通过ls –lc 显示的是状态改变时间
这里写图片描述

3) 通过ls –lu 显示的是最后访问时间
这里写图片描述

6.3 改变时间戳的几种情况
1)Touch一个已经存在的文件时会使该文件的三个时间戳都改变

2)查看文件时会改变文件的访问时间(以及其他的一些对文件属性的修改,都会便时间戳有相应的变动)

这里写图片描述

6.4 通过ls两种方法显示文件时间长格式
1)通过ls 的 –time-style=long-iso命令

[root@baiguin ~]# ls -l --time-style=long-iso wang.txt

-rw-r--r-- 1 root root 46 2014-09-25 10:43 wang.txt

2)通过ls –time-style=full-iso命令

[root@baiguin ~]# ls -l --time-style=full-iso wang.txt

-rw-r--r-- 1 root root 46 2014-09-25 10:43:13.081973883 +0800 wang.txt

http://www.cnblogs.com/wangbaigui/p/4409955.html

Linux 系统中,文件的链接分为两种:链接(Hard Link)和链接(Symbolic Link,也称符号链接)。这两种链接的创建方式不同,且在文件系统中的行为也有所区别。 ### 创建链接 链接是通过文件的 Inode 节点进行连接的。多个文件名可以指向同一个 Inode,这些文件名所对应的文件就是彼此的链接。创建链接不会占用额外的磁盘空间,因为它们共享相同的 Inode 和数据块。 要创建链接,可以使用 `ln` 命令而不带 `-s` 参数。例如,要为文件 `a.txt` 创建一个链接 `b.txt`,可以执行以下命令: ```bash ln a.txt b.txt ``` 创建后,`a.txt` 和 `b.txt` 将共享相同的 Inode,修改其中一个文件的内容会反映在另一个文件上 [^2]。 ### 创建链接 链接则类似于 Windows 中的快捷方式,它是一个指向原始文件路径的特殊文件链接可以跨文件系统,并且即使原始文件被删除,链接仍然存在,但此时它指向的是一个不存在的文件路径。 要创建链接,可以使用 `ln` 命令并带上 `-s` 参数。例如,要为文件 `a.txt` 创建一个链接 `c.txt`,可以执行以下命令: ```bash ln -s a.txt c.txt ``` 创建后,`c.txt` 是一个指向 `a.txt` 的链接,修改 `a.txt` 的内容会反映在 `c.txt` 上,反之亦然 [^2]。 ### 区别与特性 - **Inode 共享**:链接共享同一个 Inode,而链接是一个独立的文件,拥有自己的 Inode [^3]。 - **跨文件系统支持**:链接不能跨文件系统,而链接可以 [^1]。 - **删除行为**:如果删除了链接所指向的源文件,其他链接仍然有效;而如果删除了链接的源文件链接将失效 [^2]。 - **磁盘空间占用**:链接占用与源文件相同的磁盘空间,而链接仅占用少量空间用于存储路径信息 [^2]。 ### 示例代码 以下是一个简单的 Bash 脚本示例,演示如何创建链接和链接,并查看它们的属性: ```bash #!/bin/bash # 创建测试文件 echo "This is a test file." > a.txt # 创建链接 ln a.txt b.txt # 创建链接 ln -s a.txt c.txt # 查看文件信息 ls -li a.txt b.txt c.txt ``` 运行此脚本后,使用 `ls -li` 命令可以查看文件的 Inode 信息。可以看到 `a.txt` 和 `b.txt` 具有相同的 Inode 号,而 `c.txt` 有自己独立的 Inode 号 [^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值