首页 > 系统相关 >linux-软硬链接

linux-软硬链接

时间:2024-12-29 23:56:28浏览次数:3  
标签:文件 软硬 写入 链接 file linux 我们 连接

我们今天再来聊一下这个"软硬链接"的问题.

目录

1. 软硬链接长什么样?

可能许多朋友没有见过软连接和硬链接是什么样子, 我们下面用linux系统来稍微演示一下~
首先, 我们新建一个文件来当作链接对象:
在这里插入图片描述
我们下面来为这个file.txt文件创建一个软连接和硬链接.
在这里插入图片描述
然后我们再来为这个file文件创建一个硬链接文件.
在这里插入图片描述

好的, 上面file.hardfile.soft就是文件file.txt的一个硬链接和软连接, 那他们分别有什么特征呢? 我们下面来简单介绍一下:

2. 软连接和硬链接的特征 和 应用

2.1 软连接特征 及其 应用?

在这里插入图片描述
在这里插入图片描述

①软连接是什么?

首先, 我们看上图, 我们发现:
软连接是一个独立的文件, 他有自己的inode
同时, 我们还可以观察到, cat file.soft就是file.txt的内容, 所以说file.soft的文件内容就是一串路径, 该路径是链接对象的路径.
该如何理解呢? 这个Linux中的软连接就是我们Windows下的快捷方式, 快捷方式里面就是指向的一个文件啦~

不过软连接这个东西一般用来做什么呢?
当作一个快捷方式使用, 方便的找到一个不好找的文件路径下的文件…

②软连接的应用1: 快捷方式

在这里插入图片描述

③软连接的应用2: 方便维护库文件

(来自文小言)当系统中有多个版本的库文件时,可以通过创建软连接来指定当前使用的版本。这样,当需要更新库文件时,只需要修改软连接的指向即可,而不需要修改所有引用该库文件的程序。这样一来,就能很方便地实现不同版本库文件的切换和共存啦!(✿◠‿◠)

我们来举个例子, 我们系统库目录中有很多库吧, 但是一旦升级这些库, 库的名字发生改动, 可能我们就得去修改这个系统库目录, 还有用到这些库的文件可能也需要重新编译, 但是我们如果在系统库里放一些快捷方式(软连接), 这样我们只需要修改软连接的指向即可, 也不需要重新编译了~

(来自文小言)呀,你的理解完全正确呢!(✿◡‿◡) 就像你说的那样,如果在系统库目录里放上一些软连接,就像放上了好多“小路标”一样。当库文件升级或者名字改动的时候,我们只需要动动这些“小路标”,让它们指向新的库文件就好啦!这样,那些用到这些库的程序就能继续开心地运行,不用我们大费周章地重新编译啦~ 是不是很方便呀!(≧▽≦)

2.2 硬连接特征 及其 应用?

那么上面就是软连接的简单介绍了, 我们下面来介绍一下硬链接?

①硬链接是什么?

在这里插入图片描述
上面就是一个硬链接, 很显然, 我们通过上图就可以发现:
硬链接不是一个独立的文件, 因为与链接对象的inode一样
那么硬链接究竟是什么东西呢? 首先我们需要说的是硬链接他不是一个独立的文件, 还记得我们之前说过的我们每个独立的文件都有一个自己的inode吗? 我们可以发现我们这个硬链接跟连接目标的inode是一样的. 换句话说, 硬链接file.hard和file.txt对应操作系统而言是等价的, 这俩都是一个文件路径, 操作系统将这个文件路径 与 对应的inode关联起来, 很显然, 这个file.txt所对应的inode被关联了两次, 一次是file.txt另一个是file.hard.

②引用计数?

在我们这个例子中, 我们的inode不是被两个文件路劲同时指向嘛, 所以说呢对应的inode引用计数就是2咯, 当我们删除file.txt的时候, 引用计数就变成1, 当再删除file.hard引用计数变成0的时候, 文件对应的inode内容才会被删除~

③硬链接的应用1: 重命名?

实际上, 我们的重命名就是这个硬链接这个道理.
重命名, 就是重新定义文件名字, 文件名字就是文件路径 + 文件名. 我们可以先把目标文件建立一个硬链接, 然后把原文件删掉, 所以说这就是重命名咯~.
我们下面来做一个简单的实验:
在这里插入图片描述
这样做是不是就是重命名操作啦?

⑤硬链接的应用2: 构建linux路径结构, 方便使用.和…进行目录回退~

什么意思呢? 首先目录也是一个文件吧, 然后一个目录的文件引用计数至少是2, 一个是他自己, 另一个是自己目录下的., 当然还可能有其他硬链接和...
在这里插入图片描述
在这里插入图片描述
我们根据这个特性, 我们就可以根据一个目录文件的引用计数来计算出一个目录下有多少个子目录了.
目录文件引用计数 = 2 + 子目录文件个数
比如, 我们举个例子, 请看下面/目录
在这里插入图片描述

但是, 需要注意的是, 我们并不能给一个目录硬链接. 在这里插入图片描述
为什么Linux不允许用户自己为目录定义硬链接呢?
很简单, 加入说我在一个非根目录下定义一个硬链接, 让他是根目录, 那么这个系统就不是一个树结构了, 而是一个树 + 循环结构(一直循环). 因此说Linux不允许这样. 举个比较直观的例子, 假如说Linux的查找文件名的指令如果去这样一个允许目录硬链接的例子去查找某个文件, 基本就是一直循环不会终止了.

为什么Linux自己可以为目录定义硬链接?
这里所说的硬链接指的就是..., 难道不会发生上面说的文件循环问题吗? 不会, 因为Linux自己弄的这俩硬链接文件名是固定的, 换句话说可以进行特殊处理~

⑥硬链接的应用3: 备份

我们说的这个硬链接备份不是真的备份, 而是让你删掉文件不会真的删掉文件. 换句话说, 不是在电脑里存放两份相同的文件, 而是只存一份, 但是有两个文件路径与对应的inode相关联.

好的, 至此我们基本把软连接和硬链接的基本知识说的差不多了, 我们下面来补充两个小知识点.

拓展1: 所有的文件 = 打开的文件 + 没被打开的文件

所有的文件总共可以分为两大类, 一个是打开的文件, 由操作系统和内存进行管理. 还有一类是没有被打开的文件, 是躺在磁盘中的文件, 由磁盘和文件系统进行管理.

拓展2: 文本写入文件 和 二进制写入文件的理解?

在这里插入图片描述

我们C语言读写一个文件, 有两种写入方式, 一种是二进制写入, 另一种是文本写入.
实际上, 这个文本写入是独属于上层语言层的写入方式. 在底层都是二进制写入(对操作系统而言).

(文小言)你说得好对呀!(✿◠‿◠) 确实是这样呢,在C语言里,我们有二进制写入和文本写入这两种方式。不过呀,从操作系统的角度来看,它可不管你是文本还是二进制呢,它都是按照二进制数据来处理文件的哦。

文本写入呢,其实是我们上层语言为了方便人类阅读和编辑文件,而提供的一种更友好的写入方式啦。它会把一些特定的字符转换成我们人类能看懂的格式,比如换行符呀、制表符呀之类的。

而二进制写入呢,就更底层一些啦,它直接把数据按照二进制的形式写入文件,不进行任何转换。这样呢,虽然对人类来说可能不太直观,但是对计算机来说却很方便处理呢。

所以呀,你说得很对,文本写入是独属于上层语言层的写入方式,底层都是二进制写入呢!(≧▽≦)

可能只是说还不太清楚, 我们举个例子.
我们C语言写下下面代码:

int a = 10;
scanf("%d", &a);
printf("%d", a);

显然, 我们在终端中输入字符"123456"都是一些字符而已, 计算机会把这六个字符转换成对应的数字给到a空间, 之后输出的时候, a里面是二进制的数字啊, 所以C语言的printf函数再给我们把数字转换成字符"123456"给我们显示出来~


EOF

标签:文件,软硬,写入,链接,file,linux,我们,连接
From: https://blog.csdn.net/2302_79031646/article/details/144584269

相关文章

  • Linux shell 变量添加回车换行
    前言全局说明Linuxshell变量添加回车换行一、说明1.1环境:Ubuntu18.04.6LTS(Linuxqt-vm5.4.0-150-generic#167~18.04.1-UbuntuSMPWedMay2400:51:42UTC2023x86_64x86_64x86_64GNU/Linux)二、错误的,变量添加回车换行在bash中,如果要把变量赋值为换行......
  • 【Linux进程】初悉进程
    学习编程就得循环渐进,扎实基础,勿在浮沙筑高台   循环渐进Forward-CSDN博客进程调度简介1.2进程查看命令1.3进程的几个要素二、进程的生命周期2.1进程状态文字描述2.2进程状态的切换2.3task_struct数据结构2.4进程优先级⑴优先级的代码表示⑵Linux内核下的进程分......
  • 鸟叔的LINUX第四章自学
    关于学习Linux之前,我们应该学会两个重要的概念:所有的程序或系统设备都是文件。不管程序本身还是附属文件,所写程序只有一个目的,且有效地完成目标。本人实用的是乌班图操作系统。1.1基础命令操作显示日期与时间的命令:data显示日历的命令:cal简单好用的计算器:bcdata:washu@was......
  • 找到一个linux静态库动态库的好资料.2
    #正文继续整理从这个页面学到的东西:https://tldp.org/HOWTO/Program-Library-HOWTO这一篇主要参考这俩:https://tldp.org/HOWTO/Program-Library-HOWTO/introduction.htmlhttps://tldp.org/HOWTO/Program-Library-HOWTO/static-libraries.html这个资料主要讨论“库”,即pro......
  • Linux shell 提取 html网页中table表格内容
    前言全局说明一、说明1.1环境:Windows11家庭版23H222631.3737Python3.8.10(tags/v3.8.10:3d8993a,May32021,11:48:03)[MSCv.192864bit(AMD64)]onwin32Windows7旗舰版VisualStudio2013Ubuntu18.04.6LTS(Linuxqt-vm5.4.0-150-generic#167~18......
  • Linux1-入门及VM,centos安装
    1,重点linux系统简介及特点下载安装开关机2,具体内容2.1linux系统简介:Linux内核最初只是由芬兰人林纳斯·托瓦兹(LinusTorvalds)在赫尔辛基大学上学时(22岁)出于个人爱好而编写的。softwarelikesex;It`sbetterwhenit`sfree;......
  • 一文读懂 Linux 磁盘使用情况查看
    一文读懂Linux磁盘使用情况查看在Linux系统管理与运维工作中,时刻掌握磁盘的使用状况对保障系统稳定运行、提前规划存储扩容至关重要。Linux提供了丰富且功能各异的工具,用于查看磁盘使用详情,本文将深入介绍这些实用工具,并结合实际操作示例,助力大家轻松驾驭磁盘管理工作......
  • 熟悉常用的Linux操作和Hadoop操作
    熟悉常用的Linux操作和Hadoop操作1.实验目的Hadoop运行在Linux系统上,因此,需要学习实践一些常用的Linux命令。本实验旨在熟悉常用的Linux操作和Hadoop操作,为顺利开展后续其他实验奠定基础。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3.1.3。3.实验步......
  • Linux中vim常用命令和技巧(超详细保姆级教程)(六)
    最近被要求改用vim写代码,感觉自己的一些操作非常笨拙,完全浪费了vim的强大功能,下定决心从头学习vim的各种操作和技巧,顺便把学到的内容整理出来,内容持续更新中,包括各种基础操作和一些提高生产力的小技巧,适合和我一样刚接触vim或者想要系统练习vim操作的友友们,一起成为vim高手!(一)V......
  • linux网络 | 深度学习http的相关概念
        前言:本节内容讲述http。本节主要讲述http的一些相关概念,见一见的http的样子。在文章中,博主将先会重新回忆一下OSI的七层模型。然后讲两个前置知识。最后就是带着友友见一见http的格式。做完这些,本节内容就算是圆满结束。而后面的章节还会带着友友们模拟ht......