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

2024-04-07 05:36

本文主要是介绍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中调用的,这里面也可以导环境变量。      

这篇关于linux之文件系统、inode和动静态库制作和发布的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881748

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级