Linux中的软链接和硬链接

3.jpg

微信公众号:爱问CTO
专业编程问答社区
www.askcto.com

问题出现

问题1:Linux中软链接和硬链接的区别?
问题2:Linux系统内部是通过文件名访问文件的吗?

基础铺垫

平时在Linux系统中,我们都是通过文件名打开文件。但是Linux系统内部并不使用文件名,而是通过inode即节点索引来识别文件。我们通过文件名打开文件,只是表像。实际系统会按照如下去做。

1.系统是先找到这个文件名对应的inode号码,
2.通过inode号码获取inode信息,
3.然后根据inode信息获取文件数据所在的block,读取数据。

很多时候,我们要透过现象找寻问题的本质。

什么是软链接

软链接也叫符号链接(symbolic link),符号链接是指通过创建一个特殊类型的文件来起作用,该文件包含了指向引用文件或目录的文本指针。列举个windows里面的例子就明白了,与windows系统下的快捷方式非常相似。

将内容写进符号链接里,那这些内容也会同样写入引用文件。而当删除一个符号链接的时候,删除的只是符号链接而没有删除文件本身。而如果先删除了文件,该链接依旧存在,却不会指向任何文件。但是你打开该链接,就会报错“NO such file or directory”

软链接的两个文件的inode号码是不一样的

如何创建软链接

1.首先在目录下创建fileB文件,写上i am askcto

[root@ky35z ask]# vi fileB

2.使用命令ln -s item link(item可以是文件也可以是目录)

[root@ky35z ask]# ln -s fileB fileB-sym

3.查看两个文件的inode号码

[root@ky35z ask]# ls -i fileB fileB-sym
1446188 fileB  1446185 fileB-sym

4.查看两个文件内容

[root@ky35z ask]# cat fileB
i am askcto
[root@ky35z ask]# cat fileB-sym
i am askcto

文件fileB和软链接fileB-sym的inode节点号码不一致。符号链接fileB-sym是包含了指向目标文件的文本指针。

[root@ky35z ask]# ls -l
lrwxrwxrwx 1 root root       5 Jan  7 21:14 fileB-sym -> fileB

什么是硬链接

硬链接,可以想象文件是由两部分组成的,一部分是文件内容,另外一部分是文件名称。创建硬链接时,实际上是创建了额外的名称,这些名称都指向了同一数据部分。系统会分配一系列的盘块给所谓的索引节点(inode),该节点随后与文件名称建立关联。因此,每个硬链接都指向包含文件内容的具体索引节点。

也就是说多个文件指向的是同一个inode号码,用不同的文件名访问,系统内部找到的都是相同的一个inode节点,所以访问的是同样的内容。对文件内容修改,会影响到所有文件名,但是删除一个文件名,不会影响另外一个文件的访问。

如何创建硬链接

1.首先在目录下创建fileA文件,写上i am coder

[root@ky35z ask]# vi fileA

2.使用命令ln file link

[root@ky35z ask]# ln fileA fileA-hard

3.查看两个文件的inode号码

[root@ky35z ask]# ls -i fileA fileA-hard
1446187 fileA  1446187 fileA-hard

4.查看两个文件内容

[root@ky35z ask]# cat fileA
i am coder
[root@ky35z ask]# cat fileA-hard
i am coder

软链接和硬链接的区别

1.硬链接不能引用自身文件系统之外的文件。也就是说,链接不能引用与该链接不在同一磁盘分区的文件。

2.硬链接不能引用目录。软链接即可以是文件也可以是目录。

3.上面的例子中,软链接fileB-sym是指向文件fileB的文件名,它们的节点号码不同。而硬链接fileA-hard指向的是fileA的节点号码。它们的节点号码相同。

Image placeholder
loftyet
未设置
  21人点赞

没有讨论,发表一下自己的看法吧

推荐文章
Linux中的Kdump服务

我们知道在Linux中系统分为内核态和用户态,一般用户行为都发生在用户态,内核自我管理。但如果内核出现错误崩溃了,可以使用Kdump来分析错误原因。Kdump服务提供了内核的崩溃转储机制,可以在内核崩

Fish Redux中的Dispatch是怎么实现的?

前言开源地址:https://github.com/alibaba/fish-redux我们在使用fish-redux构建应用的时候,界面代码(view)和事件的处理逻辑(reducer,effe

Java 程序员眼中的 Linux_1.0.Linux 介绍

Linux介绍 Linux这个名字 Linux的Wiki介绍:http://zh.wikipedia.org/zh/Linux Linux也称:GNU/Linux,而其中GNU的全称又是:Gnu’sN

[Java 程序员眼中的 Linux] Linux 下常用压缩文件的解压、压缩

Linux下常用压缩文件的解压、压缩 常用压缩包解压命令整理 Linux后缀为.tar.gz格式的文件-解压 命令:tarzxvfXXXXXX.tar.gz Linux后缀为.bz2格式的文件-解压

笨办法 学Linux 安装Linux

Linux学习起步 Windows,VirtualBox虚拟机(.ova格式的预配置映像) 学习Linux你需要什么 VitualBox,虚拟机播放器。 putty,终端模拟器。 预配置的Virtua

Linux/Unix 基础:什么是 Linux?

简单来讲,Linux是一个操作系统(OS)。我们都很熟悉其他操作系统,就像Microsoftwindows,AppleMacOS,iOS,Googleandroid,等等这些,linux就像它们一样,

Linux/Unix 基础:Linux 的历史

Linux的诞生 在1991年,来自芬兰Helsinki大学的学生LinusTorvalds认为市场上应该有一个比较统一的Unix版本,从此他就开始为这个项目奋斗。后来这个项目就成为了Linux操作系

别小瞧了 Linux,安卓、华为的自研系统,均源自 Linux!

众所周知,目前国内已有众多的国产系统,基本上均源自linux,以linux为基础进行二次开发。比如红旗linux、深度等等。但不知道为什么,一说起某系统是基于linux而来,很多网友就瞧不起,并且会觉

当年“你说什么,我都能实现”的软件公司,后来都是怎么死的?

在 #“我,80后,曾经靠副业的收入买车买房”# 的评论区里,有读者问,十几年前,圈内有不少软件公司,规模大小不一,遍布各个行业,但这几年似乎都没动静了,他们还活着吗?我说,撇开纯做“劳工”输出的外包

Linux Shell 脚本快速入门

shell脚本是在一个文件中写入一起执行的命令集。对于使用像dos操作系统的DOS,windows操作系统的bat,linux操作系统的files的人来说,这几乎都是相同的概念。你只需要把一串命令写

Linux 安装 Node.js

因为我用最简单yum命令安装node.js发现node的版本不是最新的所以自己手动安装了nodejs流程如下 进入服务器安装nodejs安装包 进入保存包的目录 $cddownload 下载二进制

Linux 安装 Node.js

因为我用最简单yum命令安装nodejs发现node的版本不是最新的所以自己手动安装了nodejs流程如下 进入服务器安装nodejs安装包 进入保存包的目录 $cddownload 下载二进制包

Linux Shell 脚本快速入门

shell脚本是在一个文件中写入一起执行的命令集。对于使用像dos操作系统的DOS,windows操作系统的bat,linux操作系统的files的人来说,这几乎都是相同的概念。你只需要把一串命令写入

Linux 文件同步工具之 rsync

学习背景 1.最近公司的项目在使用jenkins做自动化构建,因为jenkins在构建时是比较耗性能的,便单独使用了一台服务器做构建服务器。但是个人觉得这样成本过高,单独拿一台服务器来构建并且该服务器

笨办法学 Linux 学习文本编辑器--vim

Linux学习文本编辑器--vim 在Linux中,就像任何类Unix操作系统,一切都只是文件。而Unix哲学指出,配置文件必须是人类可读和可编辑的。在几乎所有的情况下,它们只是纯文本。所以,首先,你

笨办法学 Linux 初识less

#文本浏览器,少即是多 现在你可以编辑文本文件,这很好。但是如果你只想查看一个文本文件呢?当然,你可以使用vim,但很多时候它是过度的。还有两件事要考虑: 如果你想查看非常大的文件,你将需要在尽可能快

笨办法学 Linux Bash:Shell、`.profile`、`.bashrc`、`.bash_history`

Bash:Shell、.profile、.bashrc、.bash_history。 当使用CLI(命令行界面)来使用Linux时,你正在与一个名为shell的程序进行交互。所有你输入的都传递给she

笨办法学 Linux 学习处理文件,`pwd`,`ls`,`cp`,`mv`,`rm`,`touch`

Bash:处理文件,pwd,ls,cp,mv,rm,touch 在Linux中,一切都是文件。但是什么是文件?现在完全可以说,它是一个包含一些信息的对象。它通常定义如下: 计算机文件是用于存储信息的

工具分享:Linux tree 命令安装和使用

说明tree命令是一个比较实用文件系统查看工具,如下图,可以阶梯式地罗列某个目录下的所有子目录:如何安装?RHEL/CentOS下:#yuminstalltree-yDebian/Ubuntu, Mi

【Linux 工具】服务器文件传输利器 lrzsz

场景  服务端开发人员经常会遇到的一个场景就是将本地的文件传到服务器上,或者把服务器上的文件下载到本地,那这个时候大家一般会用ftp服务,来完成这件事。但是如果服务器上并没有安装ftp服务的时候,这个

Linux系统——架构浅析

导语:掐指一算自己从研究生开始投入到Linux的海洋也有几年的时间,即便如此依然对其各种功能模块一知半解。无数次看了Linux内核的技术文章后一头雾水,为了更系统地更有方法的学Linux,特此记录。历

这些linux技巧大大提高你的工作效率

前言linux中的一些小技巧可以大大提高你的工作效率,本文就细数那些提高效率或者简单却有效的linux技巧。命令编辑及光标移动这里有很多快捷键可以帮我们修正自己的命令。接下来使用光标二字代替光标的位置

AWS vs K8s 是新时代的 Windows vs Linux?

作者:IanMiell是开源程序员、演讲师、作家和博客写手以前……如果你与我一样,年过四十,又在IT行业工作,恐怕还记得每个人使用Windows,一小群但越来越多的人在业余时间埋头编译Linux的年代

韩国政府:放弃Windows 7,转投Linux

对于政府和企业而言,2020年4月是一个非常值得关注的时间,因为在这个时间,微软将会停止对Windows7的支持。正是只有不足一年的时间,很多政府和企业再次与微软合作,不过其中的花销相当高。韩国政府面

Linux 中删除目录的多种方法

有几种不同的方法可以删除 Linux 系统中的目录。如果您使用桌面文件管理器(如Gnome的文件管理器或KDE的Dolphin),则可以使用管理器的图形用户界面删除文件和目录。但是,如果您正在使用无头