百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

硬链接和软链接 硬链接和软链接的区别

qiyuwang 2024-10-03 06:50 9 浏览 0 评论

硬链接(Hard Link)

1. 释义

是对原文件起了一个别名。

2. 特性

(1)硬链接有相同的 inode 及 data block;

(2)只能对已存在的文件进行创建;

(3)不能交叉文件系统进行硬链接的创建;

(4)不能对目录进行创建,只可对文件创建;

(5)删除一个硬链接文件并不影响其他有相同inode号的文件。

3.创建硬链接

ln file link

软链接(Soft Link)

1. 释义

又被叫为符号链接(symbolic Link),它包含了到原文件的路径信息。

2. 特性

(1)软链接有自己的文件属性及权限等;

(2)可对不存在的文件或目录创建软链接;

(3)软链接可交叉文件系统;

(4)软链接可对文件或目录创建;

(5)创建软链接时,链接计数 i_nlink 不会增加;

(6)删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

3. 创建软链接

ln -s file link

区别


硬链接

软链接

本质

是同一个文件

不是同一个文件

跨设备

不支持

支持

inode

相同

不同

链接数

创建新的硬链接,链接数会增加,删除硬链接,链接数减少


是不同的文件,无链接数一说

目录

不支持

支持

相对路径

原始文件相对路径是相对于当前工作目录

原始文件的相对路径是相对于链接文件的相对路径

删除源文件

只是链接数减一,但链接文件的访问不受影响

链接文件将无法访问

文件类型

和原文件相同

和原文件无关

文件大小

和原文件相同

原文件的路径的长度

为什么不允许创建指向目录的硬链接?

以下内容翻译自: http://unix.stackexchange.com/questions/22394/why-hard-links-not-allowed-to-directories-in-unix-linux

1. 从inode角度谈

允许目录的硬链接可能会打破文件系统的有向无环图结构,可能创建目录循环,这可能会导致fsck以及其他一些遍历文件树的软件出错。

首先,要想理解这点必须先了解inode。文件系统中的数据保存在磁盘上的数据块中,而这些数据块由inode集合在一起。可以说inode就是文件,但是inode缺少文件名,所以就需要链接。一个链接其实就是一个指向inode的指针。目录是一个保存着这些链接的inode,目录中的每一个文件名都是一个指向inode的链接。这里提一下,UNIX系统中打开一个文件也会创建一个链接,但是它是不同类型的链接(它不是一个命名链接)。
硬链接只是一个指向inode的额外的目录项,当你使用ls -l命令查看文件时,文件权限后面的数字就是命名连接数。绝大多数文件只有一个链接。创建一个新的硬链接到一个文件会将两个文件名指向同一个inode。

xx@xx:~/test$ touch test
xx@xx:~/test$ ls -l
total 0
-rw-r--r-- 1 long long 0 Apr 16 16:56 test
xx@xx:~/test$ ln test test1
xx@xx:~/test$ ls -l
total 0
-rw-r--r-- 2 xx xx 0 Apr 16 16:56 test
-rw-r--r-- 2 xx xx 0 Apr 16 16:56 test1

现在你可以清楚的看到,实并没有什么硬链接,一个硬链接和正常的名字是一样的。在上面的例子中,test 和 test1 哪个是原始文件,哪个是硬链接?其实你并不能分辨(忽略时间戳)因为它们都是指向相同内容相同inode的链接。

xx@xx:~/test$ ls -li 
total 0
2114356 -rw-r--r-- 2 xx xx 0 Apr 16 16:56 test
2114356 -rw-r--r-- 2 xx xx 0 Apr 16 16:56 test1

使用ls -li (-i 标志让 ls 将文件的 inode 号显示在第一列)我们可以看到此时 test 和test1 有着相同的inode号。现在,如果你被允许在目录上使用硬链接,文件系统中的不同指针的不同目录项会指向相同的东西。实际上,一个子目录可以指向他的父目录从而创建一个循环。

为什么需要考虑这个循环?因为当你遍历目录树时,你没有办法检测到循环(如果您没有跟踪遍历的inode号)。比如说,你现在在使用du命令,du需要遍历所有的子目录来了解磁盘的使用情况。而du命令如何知道它遇到了个循环?这很容易发生错误。

软链接,亦称符号链接,是一个完全不同的东东,因为它们是一种特殊类型的文件(UNIX文件系统中的文件种类包括:普通文件,目录文件,块特殊文件,字符特殊文件,FIFO,套接字以及符号链接。比如通过 “ ln -s a b ” 创建的软链接,创建软链接之后文件 b 和 a 的 inode 号并不一样,也就是说此时文件 a 和 b 并不是同一文件。 此时文件 b 中存的是文件 a 的路径,当读取 b 时,系统识别出文件 b 是符号链接会自动导向其对应的文件 a。)。注意,一个符号链接可以指向一个不存在的目标,因为他们指向的只是名字而不是直接指向inode。这与硬链接不一样,因为硬链接就表示肯定有文件存在。

那么为什么du可以很轻松的处理符号链接而不能处理硬链接?我们前面讨论过,如果对目录使用硬链接和正常的目录是没有区别的,而软链接是特殊的,可检测的且可跳过的。du注意到一个目录是一个符号链接它会完全跳过它。

xx@xx:~/test$ ln -s  /home/xx/Videos test2
xx@xx:~/test$ ls -l
total 0
-rw-r--r-- 2 xx xx  0 Apr 16 16:56 test
-rw-r--r-- 2 xx xx  0 Apr 16 16:56 test1
lrwxrwxrwx 1 xx xx 17 Apr 16 17:31 test2 -> /home/xx/Videos
xx@xx:~/test$ du -ah 
0	./test
0	./test2
4.0K	.

2. 从挂载点角度谈

从挂载点角度来说,任何目录有且只有一个父目录".."。

pwd的一个方法就是检查设备:"."和".."的inode,如果它们一样,说明你已处于"/"。否则,查找父目录名称并入栈,然后比较"../."和"../..",此后比较"../../.""../../.."...。直到抵达"/"后,开始出栈并打印栈中保存的目录项名称,最后得到当前目录的完整目录名。这个算法依赖于每个目录有且只有一个父目录。

如果对目录的硬链接是允许的,".."该指向多个父目录中的哪个?这是一个“为什么不允许对目录的硬链接”比较令人信服的理由。而目录的软链接不会引发这种问题,如果一个程序需要,它可以通过对路径名进行 lstat() 来检测是否遇到的是符号链接。pwd算法会返回目标目录的正确的路径。

3. 总结

UNIX 文件系统的历史上,对目录的硬链接是可能的。但是这可能会在文件系统树中产生循环,而这会使得遍历文件系统变得混乱(在《Unix高级环境编程》中提到作者Steven在自己的系统上做过实验,结果是:创建目录硬链接后,文件系统变得错误百出)。一个目录甚至可以是自身的父目录,如下图显示,在目录foo中如果创建一个testdir 的硬链接指向 foo 本身,这样一个循环就出现了。

现代文件系统一般禁止这些混淆状态,只有根目录保持了特例:根目录是自身的父目录。ls /.. 就是根目录的内容。

相关推荐

windows开启telnet服务,检测远程服务端口是否可以连通

本文介绍windwos开启telnet服务,telnet服务一般可以用于检测远程主机的某个端口服务是否可以连通,在日常的工作中,我们经常会遇到在本地的windows检测远程服务端口是否可以连通。win...

仅在Web登录新华三交换机条件下启用设备Telnet登录方式

概述Web登录新华三交换机可以在“网络-服务”页面中启用设备Telnet服务或SSH服务,也可以在“设备-管理员”设置管理员用户的可用服务,然而,在设备Web页面中,无法设置lineVTY用户线【l...

思科交换机,路由器如何关闭telnet 开启ssh服务

SSH为建立在应用层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。今天我们就来说说思科交换机,路...

智能化弱电行业常用的DOS命令,掌握了你也能成为...

前言在做智能化弱电项目时,前端摄像头设备安装结束后,我们会对网络摄像头进行调试,调试过程中会遇到前端摄像头没有图像或者图像出来了画面卡顿的现象。我们会采用ping命令来测试网络的连通性和网络承载能力。...

「干货」eNSP模拟器之配置Telnet登录

配置说明:配置Telnet,使R2(模拟PC)通过SW1登录到R1进行管理和配置。操作步骤:system-view##进入系统视图[Huawei]sysnameR1##改名为R1[R1]int...

win11开启telnet服务怎么操作 win11打开telent指令是什么

telnet服务是我们在进行远程连接的时候,必须要打开的一项功能。但是有不少用户们不清楚在windows11系统中怎么开启telnet服务。今天小编就使用详细的图文教程,来给大家说明一下打开telen...

华三(H3C)交换机Telnet的远程登陆

一,配置交换机管理IP[SW1]vlan20//创建管理vlan[SW1]interfacevlan20//进入vlan接口[SW1-Vlanif20]ipaddress192.168....

win10 telnet命令怎么查看端口是否打开

可能大家也会遇到这个问题,win10telnet命令查看端口是否打开的步骤是什么?具体方法如下:1、键盘输入快捷键WIN+R,打开运行窗口。2、输入cmd,点击确定按钮。3、弹出cmd命令行窗...

Windows 7如何打开Telnet功能(win7系统打开telnet)

Windows7默认安装后是没有开启telnet客户端功能的,例如,我们在开始菜单中输入cmd,然后使用telnet命令,会弹出下图提示:‘telnet’不是内部或外部命令,也不是可运行程序或批处理文...

为锐捷路由器交换机开启web和telnet,实现轻松管理

笔者上一篇文章写了关于锐捷二层交换机配置教程,那么接下来讲一下锐捷的路由交换设备配置web、telnet技巧。同样,今天的教程也是基于命令行,比较简单,适合新手小白进行学习。准备工作配置前准备:con...

一文学会telnet命令的用途和使用方法

Telnet是一个古老的远程登录协议,可以让本地计算机获得远程计算机的工作能力。它采用了TCP的可靠连接方式,可以连接任何网络互通的远程计算机。不过由于它采用了明文传输方式,存在安全风险,目前已经很少...

Telnet命令是什么?如何使用?(telnet命令在哪里开启)

telnet命令是一个常用的远程登陆工具,使用它,我们可以快捷地登陆远程服务器进行操作。那么如何使用telnet命令呢?首先,我们需要打开telnet功能,任何电脑默认是关闭此功能的,开启方式如下:打...

win11系统如何开启telnet服务(拷贝版本)

  我们要知道,Telnet协议是Internet远程登陆服务的标准协议,可以使用户在本地计算机上完成远程主机的工作,不过对于一些刚接触win11中文版系统的用户来说,可能还不知道telnet服务在哪...

如何开启telnet客户端(如何开启telnet服务)

Telnet协议是TCP/IP协议家族中的一员,是Internet远程登陆服务的标准协议和主要方式,Telnet是常用的远程控制Web服务器的方法。工作中经常用到telnet客户端,但在windows...

Telnet 是什么,如何启用它?(telnet有什么用)

对于Internet等TCP/IP网络,Telnet是一个终端仿真程序。Telnet软件在您的系统上运行并将您的个人计算机链接到网络服务器。它将所有数据转换为纯文本这一事实被认为是易受...

取消回复欢迎 发表评论: