位置: 编程技术 - 正文

Linux下的链接文件详解(linux链接分为什么和什么)

编辑:rootadmin

推荐整理分享Linux下的链接文件详解(linux链接分为什么和什么),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux链接分为什么和什么,linux怎么打开链接文件,linux中链接,linux中链接,linux的链接文件,linux中链接,linux中链接的作用,linux的链接文件,内容如对您有帮助,希望把文章链接给更多的朋友!

几个基本概念

Linux下的链接文件可以分为硬链接(hard link)与软链接(soft link)。要理解它们,必须先要理解几个基本概念。

inode

文件除了纯数据本身之外,还必须包含有对这些纯数据的管理信息,如文件名、访问权限、文件的属主以及该文件的数据所对应的磁盘块等等,这些管理信息称之为元数据(mata data),保存在文件的inode节点之中。我们可以通过stat命令查看一个文件的inode信息:

这里我们查看了/etc/passwd文件的元数据信息。ls -l命令也会列出一些文件的元数据信息(由左至右分别为:权限、硬链接数、属主、属组、文件大小、最近更改时间、文件名),但相比之下,stat命令输出的信息更加完整。我们注意到,stat输出的信息中,文件有三个时间戳:最近访问、最近更改和最近改动,对应于英文分别为Access、Modify和Change。 Access time比较好理解,当每次访问这个文件的数据(注意,不是元数据),这个时间就会更新。比如用cat或者more命令读取文件内容时,会更新access time,而用ls或者stat命令,由于只是访问了文件的inode,所以不会更新access time值。Modify time是文件数据最后一次被修改时间,比如用vim编辑文件后保存文件,此时就会更新该文件modify time。Change time是文件元数据(即inode)最后一次被修改的时间,比如用chown命令修改文件的属主,此时就会更新文件的change time。

其实最初当我们创建分区并用mkfs.ext4等命令创建文系统的时候,就已经在文件系统的固定区域保留了inode节点区。我们可以通过df -i命令查看某文件系统inode节点区域的大小及使用情况:

可以看到,在笔者的Linux Mint.3系统中,分区/dev/mapper/pdc_bcfaffjfaj2共保留了M的inode区域,这个区域目前已经使用了K。有没有可能出现某分区尚有空间而inode区域已用完的情况呢?有的。当小文件特别多的时候就会出现这种情况!这个时候即使文件系统还有空间可用,但我们仍然无法继续在这个文件系统内创建新的文件了。那假如在我的应用环境中真的小文件非常多该怎么办?其实我们在建立ext4文件系统时候是可以手动指定inode区域所占的比例大小的,可以man mkfs.ext4查看相关的参数和选项,这里不再详述。

刚才用stat查看文件的inode信息时,我们看到输出的信息中有一行Inode: ,这个是/etc/passwd文件的inode号。每个inode都有一个全文件系统唯一的inode号,操作系统内核正是通过inode号而非文件名来识别不同的文件。文件名仅仅是为了方便用户使用而已,内核是通过文件名找到inode,然后通过inode访问实际文件数据的。有没有可能有多个文件名对应于同一个inode呢?有的,这样就产生了所谓硬链接文件。

dentry

虽然每个文件对应了唯一的inode号,但inode号是杂乱而毫无意义的,不方面用户记忆和使用,我们希望对每个文件取一个有意义的文件名。现代文件系统提供的一个基本功能是按名存取,所以我们还需要建立文件名到inode号的对应,这就引出了目录项(directory entry即dentry)的概念。在Linux文件系统中有一类特殊的文件称为“目录”,目录就保存了该目录下所有文件的文件名到inode号的对应关系,这里的每个对应关系就称为一个dentry。而Linux把所有的文件和目录构建成了一个倒立的树状结构,这样,我们只要确定了根目录的inode号,就可以对整个文件系统进行按名存取了。

hard link

硬链接的实质是现有文件在目录树中的另一个入口。也就是说,硬链接与原文件是分居于不同或相同目录下的的dentry而已,它们指向同一个inode,对应于相同的磁盘数据块(data block),具有相同的访问权限、属性等。简而言之,硬链接其实就是给现有的文件起了一个别名。如果把文件系统比喻成一本书的话,硬链接就是在书本的目录中,有两个目录项指向了同一页码的同一章节。

硬链接的优点是几乎不占磁盘空间(因为仅仅是增加了一个目录项而已),但是这一优点相对于软链接其实并不明显(因为软链接占用的磁盘空间也很少)。另外,硬链接有以下一些局限:1、不能跨文件系统创建硬链接。原因很简单,inode号只有在一个文件系统内才能保证是唯一的,如果跨越文件系统则inode号就可能重复。2、不能对目录创建硬链接。原因我在稍后解释。正因为硬链接的这些局限,加之软链接更加易于管理,所以软链接更加常用。这一点在本文中举的例子也可以看出,几乎都是软链接的例子。

soft link

Linux下的链接文件详解(linux链接分为什么和什么)

软链接又称为符号链接(symbolic link),简写为“symlink”。与硬链接仅仅是一个目录项不同,软连接本身也是文件,不过这个文件的内容是另一个文件名的指针。当Linux访问软链接时,它会循着指针找出含有实际数据的目标文件。我们还以书本来打比方,软链接是书本里的某一章节,不过这一章节什么内容都没有,只有一行字“转某某章某某页”。

软链接可以跨越文件系统指向另一个分区的文件,甚至可以跨越主机指向远程主机的一个文件,也可以指向目录。在ls -l输出的文件列表中,第一个字段有“l”字样者表示该文件是符号链接。

我们看到,软链接的权限为,即所有权限都是开放的,实际上你也无法使用chmod命令修改其权限,但是实际文件的保护权限仍然起作用。

另外,符号链接可以指向不存在的文件(可能是原来指向的文件被删除了,或者指向的文件系统尚未挂载,或者最初建立该符号链接的时候就指向了一个不存在的文件等等),我们称这种状态为“断裂”(broken)。与之相对的是,硬链接是不能指向一个不存在的文件的。

使用链接有何好处?

我们在此总结使用链接文件的以下几个的好处:

保持软件的兼容性 例如,在RHEL6中我们看下面这条命令的输出:

我们看到,/bin/sh文件其实是一个指向/bin/bash的符号链接。为什么要这样设计?因为几乎所有的shell script的第一行都是下面这样:

“#!”符号表示该行指定该脚本所用的解释器。#!/bin/sh表示使用Bourne Shell作为解释器,这是一个早期的Shell。在现代的Linux发行版中通常采用Bourne Again Shell即bash,bash是对sh的改进和增强,而早期的Bourne Shell在系统的中根本不存在。为了能够顺利的运行脚本而不必修改shell script,我们只需要创建一个软链接/bin/sh让其指向/bin/bash。如此一来,就可以让bash来解释原本针对Bourne Shell编写的脚本了。

方便软件的使用 比如我们安装了一个大型软件Matlab,它可能默认安装在/usr/opt/Matlab目录下,它的可执行文件位置在/usr/opt/Matlab/bin目录下,除非你在这个路径加入到PATH环境变量里,否则每次运行这个软件你都需要输入一长串的路径很不方便。你还可以这样做:

通过在你的~/bin下创建一个符号链接(~/bin系统默认已经包含在PATH环境变量里的),今后在命令行下无需输入完整路径,只需输入matlab即可。

维持旧的操作习惯 比如在SuSE中,启动脚本的位置是放在/etc/init.d目录下,而在RedHat的发行版中,是放在/etc/init.d/rc.d目录下。为了避免因为从SuSE转换到RedHat系统而导致管理员找不到位置的情况,我们可以创建一个符号链接/etc/init.d使其指向/etc/init.d/rc.d即可。事实上,RedHat发行版也正是这样做的:

方便系统管理 最让人印象深刻的一个例子应该是/etc/rc.d/rcX.d目录下的符号链接了(X为0~7数字)。

在init.d/目录下有许多用于启动、停止系统服务的脚本,如sshd、crond等。这些脚本可以接受一个参数,代表要启动(start)或停止(stop)服务。为了决定在某个运行级别运行哪些脚本及传递给这些脚本哪些参数,RedHat设计了一个额外的目录机制,即rc0.d到rc6.d的7个目录,每个目录对应一个运行级别。如果在某运行级别下需要启动某服务或者需要停止某服务,就在对应的rcX.d目录下建立一个符号链接,指向init.d/目录下的脚本。如:

这里列出了在运行级3下需要运行的服务脚本及对应的参数,其中符号链接的第一个字母S和K分别表示传递参数start和stop,后面跟着的两位数字表示脚本运行的先后顺序。这样一来,只要在rcX.d目录下新增或者移除链接,就可以控制各个runlevel需要运行哪些服务脚本;而如果需要修改某个服务脚本,只需要编辑init.d/目录下的文件(“本尊”),而它可以影响所有rcX.d目录下的软链接(“分身”)。这是多么简洁而巧妙的设计!

使用awk的next命令的方法 在awk系列文章中,我们来看一下next命令,它告诉awk跳过你所提供的所有剩下的模式和表达式,直接处理下一个输入行。next命令帮助你阻止运行命令执行

在Linux上如何管理加密密钥?管理加密密钥的最佳体验 存储SSH的加密秘钥和记住密码一直是一个让人头疼的问题。但是不幸的是,在当前这个充满了恶意黑客和攻击的世界中,基本的安全预防是必不可少的

Linux下网络故障诊断 由于实现网络服务器的层次结构比较多,因此当网络出现故障时,解决起来比较复杂。下面由我来为大家详细介绍Linux系统中可能出现的一些网络问题,

标签: linux链接分为什么和什么

本文链接地址:https://www.jiuchutong.com/biancheng/360555.html 转载请保留说明!

上一篇:linux系统下安装dovecot方法(linux系统怎样安装)

下一篇:使用awk的next命令的方法(awk中执行命令)

  • 三代税款手续费退费申请
  • 为什么要交税钱
  • 微信企业版支付
  • 超过缴款期限缴纳税款
  • 医疗器械商贸企业成本核酸
  • 在建工程转固定资产需要什么附件
  • 房地产开发企业预收款预缴增值税
  • 什么情况下征税
  • 委托代销收取手续费账务处理
  • 代扣代缴个人所得税计入哪个科目
  • 土地罚款可以计入成本吗?
  • 企业盈利后又亏损怎么算
  • 投资收益所得税表怎么填
  • 附加税没有计提会计分录
  • 公司招待客户买的水果怎么入账
  • 建筑成本百分比如何确定?
  • 企业集团内部各所属单位之间
  • 如何查看windows10
  • 个人汇算清缴已经做了公司怎么改申报
  • 华为p50新款
  • 商标注册费用
  • cpu天梯图2022最新版1240p
  • 因有减免税款不退怎么办
  • PHP:oci_result()的用法_Oracle函数
  • 在win7系统中将打开窗口拖到屏幕顶端
  • xp系统可以安装cad吗
  • 个税这个月多交了下个月减回来
  • Mtdacq.exe - Mtdacq是什么进程 有什么用
  • 如何清理电脑浏览器
  • 离职补偿金的会计实务处理
  • wordpress使用
  • 转让居民企业的股权所得交企业所得税吗
  • 存货核算的会计分录怎么写
  • 小规模纳税人增值税免税政策
  • 如何用php做到页数显示
  • php中函数定义没有返回值类型
  • 农产品抵扣进项税额的规定
  • 新准则土地使用权计入固定资产还是无形资产
  • 员工预支款计入什么科目
  • 兼职算受雇吗
  • 固定资产清理年末余额怎么处理
  • 给境外公司代扣代缴税款
  • Python支持向量能干什么
  • 织梦cms要钱吗
  • 取得发票没有加税怎么办
  • 机关党建经费提取比例
  • 摘要概括增值税专用发票的基本联次
  • 零申报企业所得税的资产总额怎么填写
  • mysql 锁详解
  • 个人所得税是全国联网的吗
  • 房租押金可以要回来吗
  • 哪些情况属于
  • 印花税申报成功怎么撤回
  • 定期定额户用财务制度备案吗
  • 购车贷款分期利率
  • 营改增后建筑企业税负
  • 制造费用可以计提吗
  • 酒店代金券是什么意思
  • 费用报销单干嘛用
  • 利息收入和应收利息
  • 企业外币折算的方法包括
  • 电子发票开票方怎么做账?
  • 最新版手机
  • mac如何整理桌面图标
  • linux中使用最多的命令
  • Win7笔记本突然wifi功能没了
  • win7系统怎么创建虚拟网络
  • linux 查找语句
  • win8.1 下 eclipse+android 开发环境配置带图详细教程
  • unity3d基础操作
  • unity游戏开发简历
  • unity优化技巧
  • android自学
  • android 动态化方案
  • 税务非正常户解除申请怎么写
  • 专票开出去了多长时间必须打入账户
  • 消费税要把增值税算进去吗
  • 已经开具的电子专票怎么重新下载
  • 新四板企业哪里可以查询
  • 怎么查询车船税缴费记录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设