Linux 第二十五章

🐶博主主页: @ᰔᩚ. 一怀明月ꦿ

❤️‍🔥专栏系列: 线性代数C初学者入门训练题解CC的使用文章「初学」C++linux

🔥座右铭:"不要等到什么都没有了,才下定决心去做"

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

磁盘

文件系统

软硬链接

什么是软连接?什么是硬链接?

硬链接不是一个独立的文件,硬链接是什么?

一个文件什么时候,应该被真正删除??

为什么新建普通文件的硬连接数1,而新建目录问价的硬连接数是2

为什么要有软、硬链接?应用场景区别是什么?


磁盘

主要是研究进程和文件的关系

无论用户是读还是写文件,都需要将文件从磁盘加载到内存(文件缓冲区里)

注意:语言级别的缓冲区和文件缓冲区

OS管理的是被打开的文件

没有被打开的文件一定是在磁盘上有规律存放

没有被打开的文件,要不要管理呢?

管理这些文件,是为了快速定位文件

文件的管理工作(文件系统):

1.打开的文件进行管理

2.没有被打开的文件也要在磁盘中进行管理

文件=属性+内容

方便OS操作系统进行增删查改

磁盘---硬件------物理存储结构

逻辑结构------逻辑抽象

文件系统

用户使用文件名,内核只使用inode编号

文件名<->inode编号的映射

任何文件名(目录,文件)和inode都有映射关系

注意:同一个目录下,不能存在同名文件

如果我们在一个目录里,新建,删除,修改一个文件,对于这个目录我们需要什么权限呢?W

linux中,文件名不属于文件属性

一个磁盘,被分区格式化之后,linux中要使用这个分区,要把这个分区进行挂载

cpp 复制代码
[BCH@hcss-ecs-6176 1_17]$ df -h
文件系统        容量  已用  可用 已用% 挂载点
devtmpfs        909M     0  909M    0% /dev
tmpfs           919M     0  919M    0% /dev/shm
tmpfs           919M   97M  823M   11% /run
tmpfs           919M     0  919M    0% /sys/fs/cgroup
/dev/vda1        50G  3.2G   44G    7% /
tmpfs           184M     0  184M    0% /run/user/1000
我们使用的linux服务器性能要求不高,只有一个分区,/dev/vda1挂载在根目录下的

事例

cpp 复制代码
FILE* fp=fopen("./log.txt","r")
是进程打开这个文件,CWD能够提供工作目录,然后就能找到这个文件的inode
cpp 复制代码
[BCH@hcss-ecs-6176 1_17]$ ls -l
总用量 4
drwxrwxr-x 2 BCH BCH 4096 1月  17 09:47 dir
-rw-rw-r-- 1 BCH BCH    0 1月  17 09:47 file.txt
-rw-rw-r-- 1 BCH BCH    0 1月  17 09:47 test.c
[BCH@hcss-ecs-6176 1_17]$ ls -li
总用量 4
2753466 drwxrwxr-x 2 BCH BCH 4096 1月  17 09:47 dir
2753467 -rw-rw-r-- 1 BCH BCH    0 1月  17 09:47 file.txt
2753468 -rw-rw-r-- 1 BCH BCH    0 1月  17 09:47 test.c

一般情况,一个文件一个inode编号,基本上,inode每个文件都有
在整个分区具有唯一性,linux内核中,识别文件,和文件名无关,只和inode有关

软硬链接

cpp 复制代码
[BCH@hcss-ecs-6176 1_17]$ >log
[BCH@hcss-ecs-6176 1_17]$ ln -s log log.soft.link//建立软连接
[BCH@hcss-ecs-6176 1_17]$ ll -li
总用量 0
2753466 -rw-rw-r-- 1 BCH BCH 0 1月  17 12:01 log
2753467 lrwxrwxrwx 1 BCH BCH 3 1月  17 12:02 log.soft.link -> log
[BCH@hcss-ecs-6176 1_17]$ >hello 
[BCH@hcss-ecs-6176 1_17]$ ln hello hello.hard.link//建立硬链接
[BCH@hcss-ecs-6176 1_17]$ ll -li
总用量 0
2753468 -rw-rw-r-- 2 BCH BCH 0 1月  17 12:02 hello
2753468 -rw-rw-r-- 2 BCH BCH 0 1月  17 12:02 hello.hard.link
2753466 -rw-rw-r-- 1 BCH BCH 0 1月  17 12:01 log
2753467 lrwxrwxrwx 1 BCH BCH 3 1月  17 12:02 log.soft.link -> log

软连接的文件inode和源文件不一样

硬链接的文件inode和源文件是一样的

软连接是一个独立的文件

硬链接不是,因为他没有独立的inode编号

什么是软连接?什么是硬链接?

如果我们有一个项目proj,proj目录下有bin、conf、log,形成的可执行程序myproc.exe在bin目录下。如果我们每次运行myproc.exe都需要./bin/myproc.exe这样太麻烦了,所以我们可以建立软连接

cpp 复制代码
[BCH@hcss-ecs-6176 proj]$ ln -s ./bin/myproc.exe run//建立软连接
[BCH@hcss-ecs-6176 proj]$ ls -li
总用量 12
2753475 drwxrwxr-x 2 BCH BCH 4096 1月  17 12:59 bin
2753473 drwxrwxr-x 2 BCH BCH 4096 1月  17 12:58 conf
2753474 drwxrwxr-x 2 BCH BCH 4096 1月  17 12:59 log
2753476 lrwxrwxrwx 1 BCH BCH   16 1月  17 13:07 run -> ./bin/myproc.exe
[BCH@hcss-ecs-6176 proj]$ ./run
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
现在只需要执行软连接的文件即可

软连接类似于windows的快捷方式。有独立的文件,有独立的inode,数据块放的内容:指向目标的路径

硬链接不是一个独立的文件,硬链接是什么?

就是在指定目录内部的一组映射关系:文件名<->inode映射关系

如果我们把log文件建立硬连接形成log.hard.link,然后再删除log文件,就达到了重命名的效果

一个文件什么时候,应该被真正删除??

没有文件名和inode映射时

在文件系统层面,目标文件怎么知道没有文件名指向我呢?

inode内部有一个字段,这个起到引用计数,表明有几个文件名映射关系

cpp 复制代码
[BCH@hcss-ecs-6176 1_17]$ ll -li
总用量 8
2753469 drwxrwxr-x 2 BCH BCH 4096 1月  17 12:59 1_17_1
2753468 -rw-rw-r-- 2 BCH BCH    0 1月  17 12:02 hello
2753468 -rw-rw-r-- 2 BCH BCH    0 1月  17 12:02 hello.hard.link
2753466 -rw-rw-r-- 1 BCH BCH    0 1月  17 12:01 log
2753467 lrwxrwxrwx 1 BCH BCH    3 1月  17 12:02 log.soft.link -> log
2753471 drwxrwxr-x 5 BCH BCH 4096 1月  17 13:07 proj
硬连接数,那些文件名指向该inode(第三列的数据)

为什么新建普通文件的硬连接数1,而新建目录问价的硬连接数是2

cpp 复制代码
[BCH@hcss-ecs-6176 1_17_1]$ >newfile
[BCH@hcss-ecs-6176 1_17_1]$ mkdir newdir
[BCH@hcss-ecs-6176 1_17_1]$ ls -li
总用量 4
2753477 drwxrwxr-x 2 BCH BCH 4096 1月  17 13:29 newdir
2753472 -rw-rw-r-- 1 BCH BCH    0 1月  17 13:29 newfile

[BCH@hcss-ecs-6176 1_17_1]$ cd newdir
[BCH@hcss-ecs-6176 newdir]$ ls -ali
总用量 8
2753477 drwxrwxr-x 2 BCH BCH 4096 1月  17 13:29 .
2753469 drwxrwxr-x 3 BCH BCH 4096 1月  17 13:29 ..

因为新建目录里面,还有隐藏文件.,之前这个.就是当前目录,所以.的inode和newdir的inode是一样的
..原理也是一样的

为什么要有软、硬链接?应用场景 区别是什么?

软链接

软链接(符号链接)是指向另一个文件或目录的快捷方式,它实际上是一个特殊类型的文件,其中包含指向目标文件或目录的路径。软链接具有以下特点:

* 软链接可以跨越不同的文件系统进行链接。

* 软链接可以对目录进行链接。

* 软链接可以对不存在的目标文件或目录进行链接。

软链接的应用场景如下:

* 在不同的目录中引用相同的文件或目录。

* 为便于管理,可以将配置文件或日志文件链接到其他位置。

* 为了方便访问,可以将常用命令链接到/usr/local/bin等目录中。

  1. 硬链接

硬链接是多个文件名指向同一物理文件(即inode)。硬链接具有以下特点:

* 硬链接只能在同一个文件系统中创建。

* 硬链接不能对目录进行链接。

* 如果源文件被删除,则硬链接仍然存在,直到所有硬链接都被删除。

硬链接的应用场景如下:

* 创建指向同一文件的多个文件名,以便于在不同的目录中访问文件。

* 在备份过程中创建硬链接,以便于节省存储空间。

总的来说,软链接和硬链接的主要区别在于它们指向文件的方式不同。软链接指向目标文件或目录的路径,而硬链接则直接指向目标文件或目录的inode。因此,二者应用场景各不相同,需要根据实际需求来选择适合的链接方式。
🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸

相关推荐
用户9718356334661 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 小时前
linux 拷贝文件或目录到指定的位置
linux
大树8818 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠18 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质19 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush419 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52019 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz19 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工20 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智20 小时前
ARP代理--工作原理
运维·网络·arp·arp代理