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中调用的,这里面也可以导环境变量。

相关推荐
用户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
霸道流氓气质18 小时前
领域驱动设计(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代理