文章目录

  • 文件的软硬链接
    • 软链接
    • 硬链接
    • 软硬链接对比
    • 软硬链接应用
    • 软硬链接注意事项
    • 总结

文件的软硬链接

本篇文章将重点讲解文件系统中的一个重要的知识点:
即文件的软硬链接。

软链接

对于软链接的讲解,我们先来使用一个指令看看效果:ln -s 被软链接的文件 链接的文件
在这里插入图片描述
运行代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[]) {if (argc != 2) {fprintf(stderr, "Usage: %s <directory>\n", argv[0]);exit(EXIT_FAILURE);}DIR *dir = opendir(argv[1]); // 系统调用,自行查阅if (!dir) {perror("opendir");exit(EXIT_FAILURE);}struct dirent *entry;while ((entry = readdir(dir)) != NULL) { //系统调用,自行查阅// Skip the "." and ".." directory entriesif (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {continue;}printf("Filename: %s, Inode: %lu\n", entry->d_name, (unsigned long)entry->d_ino);
}closedir(dir);return 0;
}

我们在当前目录下,使用该指令,把当前目录下的TestDir目录进行软链接,链接的名为DIR,我们打开查看当前目录下的文件,发现多了一个文件叫做DIR。
而且,这个文件的类型标识符是l,表示是一个链接文件。
我们试着使用一下这个链接文件:
在这里插入图片描述
我们发现,是可以把这个DIR当作成可执行文件来用的,因为链接的就是一个可执行文件!

我们来看看被链接的文件和链接文件的区别:
在这里插入图片描述
我们会发现,软链接文件DIR是有独立的inode编号的!也就是说,它是一个独立的文件!

硬链接

有软链接,就有硬链接。
使用指令ln 被链接文件 链接文件即可完成对文件的硬链接:
在这里插入图片描述
硬链接文件是DIR_HARD。我们发现,这个文件和被链接文件的inode编号都是一样的,都是666187,这说明:硬链接的文件本质上就不是一个独立的文件!因为没有独立的inode编号!

软硬链接对比

前面我们讲解了软硬链接的使用,也介绍了软硬链接的一些特点,接下来,我们来对比一下:

首先,软硬链接的本质区别就是:
软链接的文件具有独立的inode编号!所以是一个独立的文件。而硬链接的文件不是。


对于软链接,它里面的内容是什么呢?
其实就是保存了被软链接的文件的路径!在别的地方进行软链接,调用的时候通过这个保存的路径来找到文件并且做相应操作。

这不就是Windows系统下的快捷方式吗?
在这里插入图片描述
这个所谓的目标,其实就是运行该软件的可执行程序!

因为这些可执行程序有可能会藏得很深,如果每次运行都要去找是很麻烦的。所以,就可以使用软链接的方式,保存目标文件路径。使用的时候就是通过这个路径来使用。


而硬链接,由于它没有独立的inode,所以硬链接的文件不是独立的文件。那它是什么呢?
其实就是当前目录下和被硬链接文件所处目录下都添加了一份:inode和硬链接文件的名的映射关系罢了,只不过这个inode,是和被链接文件一样的!

所以,这个行为本质上就是在给文件做副本。删除文件时,通过引用计数来判断当前inode使用的次数,来决定是否需要完全删除文件。

所以,硬链接是可以用来做备份工作的!

软硬链接应用

这里来讲一个我们一直在用,但是却不知道其中管理的内容。
当前目录.上级目录..

其实所谓的当前目录.上级目录..就是目录的硬链接罢了!
我们来验证一下:

验证当前目录.
在这里插入图片描述
验证上级目录..
在这里插入图片描述


经过验证,确实发现,文件系统其实对当前目录.上级目录..进行了硬链接操作。也就是说,保存了当前目录下的内容和上级目录的内容。

这也就是为什么我们使用当前目录.上级目录..可以正常操作当前目录和上级目录了!效果和直接使用目录名一致!

软硬链接注意事项

但是,这里要说的是:
在Linux系统下,是不允许用户对目录进行硬链接的!
在这里插入图片描述

但是,当前目录.上级目录..就是对目录进行的硬链接。这是操作系统自动进行的!其余情况下,不允许用户进行对目录的硬链接。


这里我们来稍微解释一下:

其实是因为,系统中的文件搜索路径是一个文件树!如果对目录进行硬链接的话,那么会导致形成路径环!假设现在搜索某个文件,对搜到了一个硬链接的目录。这时候就麻烦了,如果硬链接到根目录,搜着搜着就回到了根目录下去了。

这严重影响了操作系统对于文件的搜索效率!但是,操作系统对上级目录和当前目录进行硬链接,不也是形成路径环吗?
这不用担心,这两个硬链接文件名字非常特殊,判断后做特殊处理即可。

操作系统选择硬链接当前路径和上级路径,其实是为了用户能够操作起来更加方便!

总结

至此,到这里我们就把Ext2文件系统的绝大部分相关知识介绍完了。当然,Linux系统下还存在着多个文件系统,如Ex3,Ext4,xfs…
但是,对于Ext系列的文件系统来说,主要逻辑还是相通的,只是在个别地方的操作会有进行优化。其它的文件系统如果感兴趣也可以上网查阅资料。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90290.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90290.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90290.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java SE:类与对象的认识

Java中的类与对象&#xff1a;构建程序世界的基石 在Java编程的世界里&#xff0c;类与对象是面向对象编程&#xff08;OOP&#xff09;的核心概念&#xff0c;它们就像构建大厦的砖瓦&#xff0c;支撑起整个程序的结构。理解类与对象&#xff0c;是掌握Java编程的关键一步。 类…

Hexo - 免费搭建个人博客03 - 将个人博客托管到github,个人博客公开给大家访问

导言我的博客&#xff1a;https://q164129345.github.io/ 既然要将个人博客托管到github&#xff0c;首先我们肯定要有一个github账户。另外也需要在电脑上安装另外一个著名的代码管理工具git。 一、创建github仓库二、在Hexo设置部署的内容# Deployment## Docs: https://hexo.…

一次Oracle集群脑裂问题分析处理

问题描述 填写问题的基础信息。 系统名称 数据库集群 IP地址 xxxxxx 操作系统 Linux 数据库 Oracle 11.2.0.4 症状表现 问题的症状表现如下 4月26号晚22点02分左右&#xff0c;HIS集群发生脑裂&#xff0c;十几分钟后&#xff08;22.18&#xff09;一节点集群率先获…

0基础法考随手笔记 02(刑诉法专题04 辩护与代理)

0基础法考随手笔记 02&#xff08;刑诉法专题04 辩护与代理&#xff09; 1.值班律师相关权力义务2. 3. 4.什么是强制医疗 注意&#xff1a;为强制医疗指派的律师&#xff0c;是诉讼代理人&#xff0c;不是辩护人&#xff0c;因为此人不会被追究刑事责任。 “强制医疗” 是刑事诉…

HF86611_VC1/HF86611Q_VC1:多通道USB HiFi音频解码器固件技术解析

引言随着音频技术的不断发展&#xff0c;多通道音频处理和多接口兼容性成为现代音频设备的重要需求。本文将介绍一款基于XMOS XU316技术的多通道USB HiFi音频解码器固件——HF86611_VC1/HF86611Q_VC1&#xff0c;这是一款专为多接口HiFi音频应用设计的软件解决方案。产品概述HF…

python---列表(List)

文章目录创建列表基本操作访问元素&#xff08;索引&#xff09;切片操作修改列表常用方法列表推导式多维列表列表是 Python 中最基本、最常用的数据结构之一&#xff0c;它是一个有序的可变集合&#xff0c;可以包含不同类型的元素。创建列表 # 空列表 empty_list [] empty_…

ESP32-S3学习笔记<3>:UART的应用

ESP32-S3学习笔记&#xff1c;3&#xff1e;&#xff1a;UART的应用1. 头文件包含2. UART的配置2.1 uart_num的选择2.2 uart_config的设定2.2.1 baud_rate/波特率设置2.2.2 data_bits/数据位数设置2.2.3 parity/奇偶校验位设置2.2.4 stop_bits/停止位设置2.2.5 flow_ctrl/流控位…

【Vue3】加载高德地图案例

官方API:展示地图-入门教程-地图 JS API 2.0 | 高德地图API 1、获取高德Key 参考&#xff1a;准备-地图 JS API 2.0 | 高德地图API 2、创建工程 npm create vitelatest 3、下载依赖集运行项目 npm install npm i amap/amap-jsapi-loader --save npm run dev 4、编写核心…

【工具】Pycharm隐藏侧边灯泡提示

问题描述 在Pycharm中&#xff0c;每行前面很容易出现一个小灯泡&#xff0c;有时候很影响操作&#xff0c;需要将其取消掉设置方法打开设置 按 CtrlAltS 打开设置对话框或者通过菜单 File → Settings&#xff08;在 macOS 上是 PyCharm → Preferences&#xff09;导航到外观…

XSS相关理解

由于本人对一小部分dom型xss、原型链污染和存储型xss理解不够透彻&#xff0c;因此在本篇文章中原型链污染和存储型xss偏重进行概念理解或简单的代码理解&#xff0c;随后会慢慢补充 文章目录1 XSS概述1.1 什么是XSS&#xff1f;1.2 XSS主要分三种类型2 XSS基础2.1 XSS基础练习…

Odoo:免费开源的金属制品行业ERP管理软件

引言开源智造Odoo数字化解决方案专家团队意识到&#xff0c;在当今全球市场中&#xff0c;将盈利能力和竞争力最大化的机会促使许多金属制品制造商投资于推进业务发展的新技术。金属制品会计软件是企业用来处理他们业务和增加利润的解决方案。某金属制品加工工艺流程图&#xf…

Ubuntu22.04配置GTest测试框架

前言 鸿蒙系统的代码仓库使用GTest作为单元测试的工具。特性开发时&#xff0c;需要写demo以验证开发思路。因此有必要搭建GTest开发环境配合鸿蒙特性开发做开发demo。 我测试环境是wsl2 Ubuntu22.04 LTS。 搭建过程 安装必备C组件 sudo apt install -y unzip g gcc cmake …

学习日志15 python

1 filter() 函数filter(function, iterable)filter函数是python中的高阶函数, 第一个参数是一个筛选函数, 第二个参数是一个可迭代对象, 返回的是一个生成器类型, 可以通过next获取值。filter() 函数是 Python 内置的高阶函数&#xff0c;其主要功能是对可迭代对象中的每个元素…

Linux 环境下安装 MySQL 8.0.34 二进制 详细教程 附docker+k8s启动

文章目录Linux 环境下安装 MySQL 8.0&#xff08;二进制&#xff09;详细教程准备工作安装依赖包下载并解压 MySQL下载 MySQL 二进制包解压 MySQL移动目录并创建 MySQL 用户配置 MySQL配置数据目录与日志目录编辑配置文件 /etc/my.cnf初始化 MySQL 数据库配置启动脚本与环境变量…

HTML ISO-8859-1: 完全解析

HTML ISO-8859-1: 完全解析 引言 ISO-8859-1,又称为 Latin-1,是一种广泛使用的字符编码标准,特别是在HTML文档中。本文将详细介绍ISO-8859-1编码的特点、应用场景以及如何在使用HTML时正确地使用ISO-8859-1编码。 ISO-8859-1编码概述 定义 ISO-8859-1编码是一种单字节编…

c++学习第3篇编辑器——centos7.9.2009系统离线安装clion软件并成功调试c++程序

远程linux服务器安装clion0 前提2个&#xff1a;1 下载CLion-2021.1.1.tar.gz安装包2 上传到linux系统并解压3 修改linux系统里的/etc/ssh/sshd_config文件中的X11UseLocalhost 注释去掉并设为no4 安装xauth5 安装MobaXterm软件并使用ssh组件打开clion5.1 如果打不开clion,报错…

20250722解决在Ubuntu 24.04.2下编译RD-RK3588开发板的Android13出现找不到lz4的问题

20250722解决在Ubuntu 24.04.2下编译RD-RK3588开发板的Android13出现找不到lz4的问题 2025/7/22 15:21缘起&#xff1a;在Ubuntu 24.04.2下编译RD-RK3588开发板的Android13。 报错&#xff1a;/bin/sh: 1: lz4: not found为了简单起见&#xff0c;直接在 荣品的技术支持QQ群的 …

加载用户设置时遇到错误找到一个带有无效“icon“的配置文件。将该配置文件默认为无图标。确保设置“icon“时,该值是图像的有效文件路径“

"C:\Users\Yourname\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json 修改所有icon字段位none 如&#xff1a;{"guid": "{bf61c995-08cc-4a56-b781-5dba411ef19c}","hidden": false,"icon&…

如何提升连带消费?从新零售“人-货-场”模型拆解

目录 一、分析背景 二、新零售分析思路和分析方法 1.具体分析思路 2.分析方法 三、新零售“人-货-场”分析的实操步骤 1.数据收集 2.数据处理 3.图表制作 四、总结 想让线上引来的顾客&#xff0c;在店里多买几件&#xff1f; 连带消费可是实体店赚钱的“秘密武器”&a…

Java异常处理核心原理与最佳实践

Java异常处理核心原理与最佳实践 场景&#xff1a; 你开发的文件处理工具在读取用户上传的文件时突然崩溃&#xff0c;控制台抛出FileNotFoundException。用户的操作被中断&#xff0c;数据丢失。这种糟糕的体验正是异常处理机制要解决的核心问题——如何在程序出错时优雅地恢复…