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