iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux下的链接文件是什么
  • 260
分享到

Linux下的链接文件是什么

2023-06-12 20:06:54 260人浏览 泡泡鱼
摘要

这篇文章主要介绍“linux下的链接文件是什么”,在日常操作中,相信很多人在Linux下的链接文件是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下的链接文件是什么”的疑惑有所帮助!接下来,请跟

这篇文章主要介绍“linux下的链接文件是什么”,在日常操作中,相信很多人在Linux下的链接文件是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下的链接文件是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

几个基本概念

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

inode

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

$ stat /etc/passwd  File: "/etc/passwd"  Size: 936             Blocks: 8          io Block: 4096   普通文件Device: fd00h/64768d    Inode: 137143      Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2016-08-05 23:01:39.905999995 +0800Modify: 2016-07-15 16:36:12.802999997 +0800Change: 2016-07-15 16:36:12.809000014 +0800$ ls -l /etc/passwd-rw-r--r-- 1 root root 936 7月  15 16:36 /etc/passwd

这里我们查看了/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节点区域的大小及使用情况:

# df -ih /dev/mapper/pdc_bcfaffjfaj2文件系统                    Inode 已用(I) 可用(I) 已用(I)% 挂载点                                                            /dev/mapper/pdc_bcfaffjfaj2   18M    127K     18M       1% /home

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

刚才用stat查看文件的inode信息时,我们看到输出的信息中有一行Inode: 137143,这个是/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

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

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

$ ls -ltotal 0lrwxrwxrwx 1 wjm wjm 11 Aug 10 00:51 hh -> /etc/passwd

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

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

使用链接有何好处?

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

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

$ ls -l /bin/shlrwxrwxrwx. 1 root root 4 Jul 15 11:41 /bin/sh -> bash

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

#!/bin/sh

“#!”符号表示该行指定该脚本所用的解释器。#!/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环境变量里,否则每次运行这个软件你都需要输入一长串的路径很不方便。你还可以这样做:

$ ln -s /usr/opt/Matlab/bin/matlab ~/bin/matlab

通过在你的~/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发行版也正是这样做的:

$ ls -ld /etc/init.d/lrwxrwxrwx. 1 root root 11 Jul 15 11:41 init.d -> rc.d/init.d

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

$ ls -l /etc/rc.d/total 60drwxr-xr-x. 2 root root  4096 Jul 15 16:36 init.d-rwxr-xr-x. 1 root root  2617 Nov 23  2013 rcdrwxr-xr-x. 2 root root  4096 Jul 15 16:36 rc0.ddrwxr-xr-x. 2 root root  4096 Jul 15 16:36 rc1.ddrwxr-xr-x. 2 root root  4096 Jul 15 16:36 rc2.ddrwxr-xr-x. 2 root root  4096 Jul 15 16:36 rc3.ddrwxr-xr-x. 2 root root  4096 Jul 15 16:36 rc4.ddrwxr-xr-x. 2 root root  4096 Jul 15 16:36 rc5.ddrwxr-xr-x. 2 root root  4096 Jul 15 16:36 rc6.d-rwxr-xr-x. 1 root root   220 Nov 23  2013 rc.local-rwxr-xr-x. 1 root root 19688 Nov 23  2013 rc.sysinit

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

$ ls -l /etc/rc.d/rc3.dtotal 0lrwxrwxrwx. 1 root root 19 Jul 15 11:42 K10saslauthd -> ../init.d/saslauthdlrwxrwxrwx. 1 root root 20 Jul 15 11:42 K50netconsole -> ../init.d/netconsolelrwxrwxrwx. 1 root root 21 Jul 15 11:42 K87restorecond -> ../init.d/restorecondlrwxrwxrwx. 1 root root 15 Jul 15 11:42 K89rdisc -> ../init.d/rdisclrwxrwxrwx. 1 root root 22 Jul 15 11:44 S02lvm2-monitor -> ../init.d/lvm2-monitorlrwxrwxrwx. 1 root root 19 Jul 15 11:42 S08ip6tables -> ../init.d/ip6tableslrwxrwxrwx. 1 root root 18 Jul 15 11:42 S08iptables -> ../init.d/iptableslrwxrwxrwx. 1 root root 17 Jul 15 11:42 S10network -> ../init.d/networklrwxrwxrwx. 1 root root 16 Jul 15 11:44 S11auditd -> ../init.d/auditdlrwxrwxrwx. 1 root root 17 Jul 15 11:42 S12rsyslog -> ../init.d/rsyslog... ....

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

到此,关于“Linux下的链接文件是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Linux下的链接文件是什么

本文链接: https://www.lsjlt.com/news/262850.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux下的链接文件是什么
    这篇文章主要介绍“Linux下的链接文件是什么”,在日常操作中,相信很多人在Linux下的链接文件是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下的链接文件是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-12
  • Linux下的链接文件是什么意思
    这篇文章将为大家详细讲解有关Linux下的链接文件是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。链接文件是Linux文件系统的一个优势。如需要在系统上维护同一文件的两份或者多份副本,除了保存多份...
    99+
    2023-06-27
  • Linux建链接文件的命令是什么
    本篇内容主要讲解“Linux建链接文件的命令是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux建链接文件的命令是什么”吧! ...
    99+
    2023-02-09
    linux
  • Linux下的文件链接有哪些
    本文小编为大家详细介绍“Linux下的文件链接有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux下的文件链接有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Linux 文件系统中有两种链接lin...
    99+
    2023-06-28
  • Linux下不创建文件夹的硬链接怎么实现
    这篇文章主要介绍“Linux下不创建文件夹的硬链接怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux下不创建文件夹的硬链接怎么实现”文章能帮助大家解决问题。Linux 系统中有软链接和...
    99+
    2023-06-27
  • linux下core文件是什么
    这篇文章将为大家详细讲解有关linux下core文件是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。core文件简介:Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进...
    99+
    2023-06-28
  • Linux硬链接和软链接的概念是什么
    这篇文章主要介绍“Linux硬链接和软链接的概念是什么”,在日常操作中,相信很多人在Linux硬链接和软链接的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux硬链接和软链接的概念是什么”的疑...
    99+
    2023-06-28
  • Linux软链接和硬链接的区别是什么
    本篇内容主要讲解“Linux软链接和硬链接的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux软链接和硬链接的区别是什么”吧!导读我们知道文件都有文件名与数据,这在 L...
    99+
    2023-06-05
  • Linux中怎么链接文件类型
    今天就跟大家聊聊有关Linux中怎么链接文件类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。硬链接硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为 ...
    99+
    2023-06-16
  • CMake编译中的库文件和头文件链接是什么
    这篇文章主要介绍了CMake编译中的库文件和头文件链接是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CMake编译中的库文件和头文件链接是什么文章都会有所收获,下面我们一起来看看吧。外部库文件、头文件链接...
    99+
    2023-06-29
  • linux硬链接不能链接目录的原因是什么
    今天小编给大家分享一下linux硬链接不能链接目录的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。原因:引入了对目...
    99+
    2023-07-04
  • Linux下memcpy需要的头文件是什么
    小编给大家分享一下Linux下memcpy需要的头文件是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!memcpy指的是C和C++使用的内存拷贝函数,用于 把...
    99+
    2023-06-28
  • Linux系统中软链接和硬链接的区别是什么
    Linux系统中软链接和硬链接的区别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分...
    99+
    2023-06-05
  • LINUX硬链接数的含义是什么
    这篇文章主要介绍LINUX硬链接数的含义是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!打开LINUX操作系统,可以使用UBUNTU。找到左边任务栏的终端窗口并且打开。改变为桌面目录,然后查看文件和目录的具体信息...
    99+
    2023-06-10
  • Linux下的符号链接怎么使用
    本篇内容主要讲解“Linux下的符号链接怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下的符号链接怎么使用”吧!在 Linux 底下的连结档有两种,一种是类似 Windows ...
    99+
    2023-06-28
  • linux下u盘所在的文件夹是什么
    这篇文章主要介绍“linux下u盘所在的文件夹是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux下u盘所在的文件夹是什么”文章能帮助大家解决问题。 ...
    99+
    2023-03-19
    linux
  • linux下phpmyadmin的配置文件是什么意思
    这篇文章主要介绍linux下phpmyadmin的配置文件是什么意思,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!发现问题:linux下的phpmyadmin的配置文件Alias&n...
    99+
    2022-10-19
  • linux的软连接和硬链接的作用是什么
    软链接和硬链接都是用于创建文件或目录的引用。它们的作用是:1. 软链接(Symbolic Link):也被称为符号链接或symlin...
    99+
    2023-10-12
    linux
  • Linux怎么建立静态链接库.lib文件
    这篇文章主要讲解了“Linux怎么建立静态链接库.lib文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux怎么建立静态链接库.lib文件”吧!  主要有两步:  1.编译源码  2...
    99+
    2023-06-13
  • vue的导航链接组件是什么
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。vue的导航链接组件是“router-link”。vue 组件router-link介绍<router-link>组件支持用户在具有路由功能的应用中点击导航。...
    99+
    2023-05-14
    Vue 组件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作