linux之文件系统、inode和动静态库制作和发布

一、背景

1.没有被打开的文件都在磁盘上 --- 磁盘级文件

2.对磁盘级别的文件,我们的侧重点

单个文件角度 -- 这个文件在哪里,有多大,其他属性是什么?

站在系统角度 -- 一共有多少文件?各自属性在哪里?如何快速找到?可以存储多少个文件?如何快速找到指定文件?如何对此磁盘文件进行分门别类的存储,用来支持更好的存取!

3.磁盘文件

磁盘是一个外设 + 还是计算机上唯一的一个机械设备

4.磁盘结构

磁盘盘片、磁头、伺服系统、音圈马达....

5.磁盘的存储结构

如何找到一个扇区 (CHS寻址)

1.在哪一个面上

2.在哪一个磁道上(柱面)

3.在哪一个扇区上

我们有了CHS,能找到任意一个扇区,那么所有的扇区我们就都能找到了。

二、inode

如何找到文件:找到了inode编号 -> 分区特定的Bg -> inode -> 文件属性 -> 文件内容

linux中,inode属性里面,没有文件名这种说法。

知识提及:

1.一个目录下,可以保存很多文件,但是这些文件没有重复的文件名!

2.目录是文件 -> 目录需要自己的inode,有自己的Data block, data block存 文件名和inode的映射关系。文件名和inode 互为key值!

创建文件,系统做了什么:

删除文件,系统做了什么:

查看文件,系统做了什么:

inode是固定的,datablock是固定的

三、软硬链接

unlink :解除链接,相当于删除

软硬链接有什么本质区别:有无独立的inode。

软链接有自己独立的inode -> 软连接是一个独立的文件

硬链接无自己独立的inode -> 硬链接不是一个独立的文件

1.软链接

1> 特性:软连接的文件内容,是指向的文件对应的路径

2> 应用:相当于快捷方式

2.硬链接

1> 特性:创建硬链接,不意味创建新文件。就是在指定的目录下,建立了 文件名 和 指定inode 的映射关系。

默认创建目录,引用计数(硬链接)为什么是呢?

是因为 自己目录名:inode 自己目录内部. :idnoe 。都有对应。

acm 文件的三个时间:

Access 最后访问时间

Modify 文件内容最后修改时间

Change 属性最后修改时间

四、动静态库

1.如何编写库(编写库的角度)

1> 静态库:.a

1> 编写静态库

这是头文件都没有使用了共享库,为了省事,所以添加了-shared选项,就能编译通过形成可执行文件。

这个libhello.a就是静态库

注:ar:gnu归档文件,r:替换, c:create,库名前面必须是lib,静态库后缀必须是.a

那么如何发布库呢,这是Makefile

2> 发布静态库

形成了hello的目录,文件内容如下图

接下来就可以把这个静态库发布给别人了

头文件gcc的默认搜索路径是: /usr/include

库文件的默认搜索路径是: /lib64

方法一:拷贝到系统路径下。但是不太建议第三方库拷贝到系统默认路径下,会造成污染

自己所写的库是第三方库,要标注这个第三方库才能编译通过

我们拷贝库到系统的默认路径下,就叫做库的安装。

方法二:相对路径

-I(大i) 头文件搜索路径 -L 库文件搜索路径 -l(小L) 在特定的路径下,使用哪一个库

2.>动态库:.so

1> 制作动态库

由于库内容与静态库重合,前面提及,此处不在论。

2> 发布动态库

如果只有静态库,gcc只能采用静态库

如果动静态库同时存在,gcc默认是采用动态库的

而我们想要使用静态库时,只需编译时后面加上 -static就行。

3> 给动态库导环境变量
1.内存级的导入环境变量

退出就会没有

LD_BIBRARY_PATH : 是导引库的环境变量

2.修改配置文件

是一个永久方案。

打开vim后,把动态库文件的路径粘贴进去就行。

最后在 sudo ldconfig,更新让配置的文件生效

解除的话删掉这个文件就好了,然后再更新

3.软链接

解除软链接:

4.写登录脚本

...(大部分都是去搞环境变量)

vim .bashrc

而.bashrc是通过.bash_profile中调用的,这里面也可以导环境变量。

相关推荐
Johny_Zhao1 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
YuMiao15 小时前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
chlk1232 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件2 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
碳基沙盒2 天前
OpenClaw 多 Agent 配置实战指南
运维
深紫色的三北六号2 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash2 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI3 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行3 天前
Linux和window共享文件夹
linux