Linux相关概念和重要知识点(3)(yum、gcc、动静态库)

ops/2024/9/19 13:21:47/ 标签: linux, 运维, 服务器

1.yum

(1)yum是什么?有何背景?

Linux是一个开源系统,人们可以在此基础上进行一些开发。有人开发一个项目,希望给更多人使用,于是将它编译成一个软件包(不乏一些有趣的小软件),将这个软件包放到服务器上,我们可以直接去这个服务器上下载到自己的Linux里。yum就是Linux里面的应用商店。apt也是这种包管理器。

Linux中软件的常见安装方式:yum/apt(编译好的,直接安装),.rpm(下载安装包),源码安装(针对一些开源项目软件,将源码移植到自己的设备,自己编译成可执行程序)

这个存放数据包的云服务器在哪?像CentOS这种大公司就会搭建自己的官网和服务器,有人专门管理和维护。那钱从哪来呢?事实上,开源是一种商业模式。其它公司可以通过CentOS进行开发,与此同时使用该系统的公司会有各种援助、捐赠或者订阅,以获得企业级的技术支持和安全维护,而这笔钱又会用于CentOS和服务器等的维护。因为你在别人的基础上开发,它倒闭了你也受损。对于普通用户而言,这就是免费的,我们可以做出自己的软件上传到别人的服务器上而不需要花钱,别人用也不需要花钱。如此一来Linux社区活跃度提高,论坛数量增加,也会有越来越多的企业和优秀开发者看到这个系统。

并且像CentOS官方有详细文档说明,有自己的用户画像(用户是学生为主还是企业为主?CentOS企业居多,Ubantu学生居多,这也决定论坛里面讨论的主题),这些东西构成了操作系统的生态,yum就是操作系统生态的体现,它背后是无数开发者向往开源精神的结晶,这一切也与商业并行,如此才能稳定。

我们不仅仅要看到yum的来源,还要看到Linux操作系统本身,OS背后的生态,作为一个优秀的操作系统应该拥有的论坛、软件体系,像安卓开源也是这样,建立了很强大的生态优势。这也导致在开源软件面前很难实现后来居上,因为生态需要历史的积淀。

(2)yum在哪去下载我们要安装的软件?

yum(包管理器)是一个应用商店,这个应用商店肯定是要访问服务器的,软件也是在服务器上下载下来的。yum的下载链接在哪?Linux内部有配置文件(yum源,位于/etc/yum.repo),里面有大量链接,会自动根据软件名定位服务器这些配置文件在我们安装Linux时就有了,只不过不同地方的Linux安装包默认的配置文件可能不同,有可能导向国外的服务器了。国内也有相应的云服务器,我们也可以自己换成国内的镜像网址(下载yum源后mv掉原来的,清理原来的配置文件,最后配置新的yum),了解流程即可。

(3)yum常见指令

①安装、搜索、卸载

yum -y install (name) 安装软件包,-y表示不经过确认直接下载。安装yum都是root安装,有的必要的安装目录只有root能访问
yum search (name) 搜索包含指定关键字的软件包,不一定每个字都相同才匹配

yum -y remove (name) 卸载指定的软件包,-y表示不经过确认直接卸载

yum list | grep (name) 可以查软件,先用list列出来的内容通过管道交给grep,grep将描述信息含有(name)的筛选出来

②元数据缓存

yum list 可以列出所有可安装的软件包,包括版本号等详细信息。

yum源配置文件并不包含版本号等信息,第一次使用时会根据里面的URL到网站里获取信息版本号等信息,所以我们会发现第一次使用会等几秒,但是第二次使用就没这个问题了,因为这些软件信息会缓存到本地,这些软件的信息就叫元数据缓存。注意缓存的是信息而不是软件本身,元数据缓存只会让yum search (name)和yum list 更快相应。

在了解元数据缓存之后,我们自然希望能够管理它。由于yum list优先到本地找缓存信息,这就会导致长时间后本地缓存的数据不是最新的,我们需要通过yum makecache更新或者下载信息到本地的缓存。或者我们可以删除本地的元数据缓存,使用yum clean metadata。注意这个删除操作只会删除元数据缓存,已下载和已安装的软件不会受到任何影响。

③软件包缓存

当我们使用yum -y install (name) 安装软件包时,会保留一份安装包.rpm到系统指定位置,当第二次安装或者更新时就能更快,本质上也是和元数据缓存那样为了效率而出现的产物。当我们使用yum -y remove (name) 时会删除软件包,但不会删除下载到本地缓存中的安装包文件,第二次安装时就更快了。注意软件包.rpm和软件包缓存是不同概念,软件包是可执行程序,而缓存只是个备份,用来加速安装的。

我们可以使用yum clean packages来清理软件包缓存,也可以使用yumdownloader (name)来下载但不安装软件,注意主动下载的软件不在软件包缓存内,因为yumdownloader下载到指定或当前工作目录,而不是识别为缓存的目录下。

我们可以使用yum clean all来清理所有缓存信息。

④升级
yum -y update 升级所有.rpm包同时,也升级软件和系统内核,但不会删除旧版本软件包
yum -y upgrade 只升级所有.rpm包,不升级软件和系统内核,软件和内核保持原样,会删除原来的软件包

2.gcc、g++

(1)生成可执行程序

C和C++运行程序需要将.c或.cpp处理成可执行文件,gcc是C语言的编译器,g++是C++的编译器

使用gcc -o (dst) (src) 命令在什么选项都没加的情况下直接生成可执行程序,-o是生成对应目标文件的意思

值得注意的是Linux中可执行程序不需要加后缀,因为生成的是可执行文件,用户也有可执行权限,所以能够直接运行。而在Windows中,后缀标志着文件默认的打开方式,因此要有.exe才能识别为可执行程序,而在Linux中识别是在权限那一步进行的,后缀只能算作区分文件使用。

(2)预处理、编译、汇编、链接

C/C++生成可执行程序分为预处理、编译、汇编、链接四步,在Linux里对应下来的四步分别为

①gcc -E test.c -o test.i 预处理(宏替换),-E的意思是开始进行程序的处理,预处理完就停下来(预处理是清除或展开宏替换、头文件、注释等,处理完后还是C语言代码)。-o是形成目标文件的意思,后面跟目标文件名,当然也可以不写,默认生成的是文件名和源文件相同,后缀为.i的文件(后续所有操作也都可以默认生成文件名)

②gcc -S test.i -o test.s 编译(C语言代码生成汇编代码),-S开始进行程序的处理(可以从.c开始,也可以从.i开始,-S不会挑源文件,它只会管理目标文件的生成),编译完就停下来

③gcc -c test.c -o test.o 汇编(由汇编代码生成机器可识别的二进制代码),-c意味着汇编完成就停下来(源文件不限)。.o文件是可重定位的二进制目标文件,虽然是二进制文件,但执行不了,执行一个可执行文件需要和系统的标准库进行定位,因此它并不是可执行文件。

④gcc -o test test.o 链接(生成可执行文件或库文件),.o文件和标准库进行关联,构建可执行程序,我们可以使用./(dst)来运行程序

3.动静态库

(1)动静态链接

我们写代码时都会使用头文件,调用的头文件在include这个目录里面,里面包括stdio.h等所有可使用<>包含的头文件,stdio.h里面并不存在函数的实现,但是却有很多声明,包括我们使用的函数printf、scanf等,具体函数实现又是在另外的函数库文件里面的。

当生成可执行程序时,预处理阶段我们包含的头文件声明会被展开,但是就像我前面说的那样,里面没有函数实现而只有声明,在链接时会定位到对应的库函数文件,找到函数。这个时候就有处理上的不同了,一种是将函数的实现拷贝进我们即将生成的可执行程序(静态链接),另一种是拿到这个函数实现的指针,在执行程序时来调用(动态链接)。

我们可以使用-static来告诉编译器我们使用静态链接,如gcc -o test test.c -static,注意静态链接的选项要在链接阶段加才有意义

(2)动态库

动静态库是指库函数文件,就上面所指的库函数具体实现的文件。其中一种叫做动态库,当使用动态链接时会匹配动态库.so(.so后面可能还跟版本号,如.so.60,在Windows中动态库后缀一般是.dll),这个时候生成的可执行程序在调用库函数时就会到对应文件中找。注意只要没有指定静态链接,都只会进行动态链接

优点:拷贝函数地址节省资源,可执行程序体积比较小

缺点:如果动态库受损,程序根本无法执行,可执行程序对动态库依赖很高

我们接触到的命令很多都是用C语言写的并使用动态链接(usr/bin目录下)

(3)静态库

当我们指定选项使用静态链接时,就会匹配静态库.a(注意Linux里默认没有安装静态库,指定选项后如果找不到静态库就报错)

优点:把静态库里面要调用的函数具体内容也拷贝过来了,可执行程序里面就有实现,不需要其它库文件就能运行

缺点:比较浪费,可执行程序体积大大增加

(4)查询链接方式

file (name) 查询文件类型,会根据文件里面的具体内容识别为文本、可执行程序等,识别为可执行文件时还能看到链接方式(dynamically linked动态链接,statically linked静态链接)。file还可以识别目录,如果识别成目录会告诉我们

ldd (name) 查询可执行文件动态链接的文件,注意ldd的对象不能是目录或普通文件,也不能是静态可执行文件,它面向的对象仅仅是动态链接的可执行文件

stat (name) 可查询任何文件和目录的属性信息(修改时间、大小、inode等)
 


http://www.ppmy.cn/ops/113020.html

相关文章

【XR】AR HUD

1. AR HUD&#xff08;head up display&#xff09;原理 目标&#xff1a; 产业链上的各大Tier1及PGU企业都在积极开发这一技术&#xff0c;许多厂家已推出LCOS样机&#xff0c;比如说水晶光电、华阳集团、瀚思通、疆程已在北京车展或去年的上海车展上展出了LCOS方案的AR-HUD样…

基于Java、SpringBoot、Vue的加油站管理系统设计

摘要 本系统是一个基于Java、SpringBoot和Vue的加油站管理系统。它旨在提高加油站的运营效率&#xff0c;优化客户服务体验&#xff0c;并通过数据分析支持更精准的业务决策。该系统包括用户管理、汽油管理、站点管理等功能模块。通过这些功能&#xff0c;管理员可以方便地管理…

SpringBoot:解析excel

解析Excel文件&#xff0c;可以使用Apache POI库 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version> </dependency> 上代码&#xff1a; /*** <b>Functio…

企业开发时,会使用sqlalchedmy来构建数据库 结构吗? 还是说直接写SQL 语句比较多?

企业开发时&#xff0c;会使用sqlalchedmy来构建数据库 结构吗&#xff1f; 还是说直接写SQL 语句比较多&#xff1f; 在企业开发中&#xff0c;是否使用SQLAlchemy来构建数据库结构&#xff0c;还是直接写SQL语句&#xff0c;这取决于项目的具体需求和开发团队的偏好。SQLAlc…

Stable Diffusion绘画 | 生成高清多细节图片的各个要素

在数字艺术领域&#xff0c;AI绘画技术已经逐渐成为艺术创作的新趋势。Stable Diffusion作为一款领先的AI绘画工具&#xff0c;以其生成高清多细节图片的能力备受关注。现在&#xff0c;让我们一起来探索Stable Diffusion生成高清多细节图片的各个要素&#xff0c;开启你的创意…

supOS加速数实融合发展

作为工业操作系统领军企业&#xff0c;蓝卓受邀参加2024金砖国家新工业革命伙伴关系论坛&#xff0c;深度参与多个环节。在9月11日召开的金砖国家新工业革命伙伴关系论坛产融合作专题研讨上&#xff0c;蓝卓总经理谭彰分享了supOS在产融协同的最新实践&#xff0c;以及supOS进入…

微信小程序实现转盘抽奖,可以自定义编辑奖项列表

这个功能可以分几步实现&#xff1a; 1. 界面设计: 转盘区域: 使用 canvas 绘制转盘&#xff0c;可配置扇形数量、颜色、文字等。 按钮: "开始/停止" 按钮控制转盘转动。 编辑按钮: 点击弹出弹窗&#xff0c;编辑转盘项目。 中奖弹窗: 显示中奖结果。 2. 数据结构:…

Shell篇之编写apache启动脚本

Shell篇之编写apache启动脚本 1. 脚本编写 vim apache_ctl.sh#!/bin/bashfunction_start(){printf "Starting Apaache ...\n"/opt/lanmp/httpd/bin/apachectl start }function_stop(){printf "Stoping Apaache ...\n"/opt/lanmp/httpd/bin/apachectl s…

XSS漏洞挖掘利用总结(附个人常用payload)

目录 基础 挖掘思路 案例 绕过思路 个人常用 基础 原理 攻击者嵌入恶意脚本代码到用户会访问到的页面中,用户访问该页面的时候,就会直接执行恶意的js代码 当浏览器解析html的时候遇到<script>、事件属性、伪协议就会进行js解析 类型 反射型:触发点在url参数里…

Openssl升级

1、下载 openssl openssl官方下载地址&#xff1a;https://www.openssl.org/source/ [rootlocalhost ~]# wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1d.tar.gz 2、编译安装 [rootlocalhost ~]# ./config --prefix/usr/local/openssl // 指定安装路径 …

HarmonyOS应用开发者基础认证

目录 一、判断二、单选三、多选 一、判断 1、HarmonyOS提供了基础的应用加固安全能力&#xff0c;包括混淆、加密和代码签名能力。正确 2、可以通过ohpm uninstall 指令下载指定的三方库。错误 3、支持模块化开发是指一个应用通常会包含多种功能&#xff0c;将不同的功能特性…

力扣题解2390

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述​&#xff08;中等&#xff09;&#xff1a; 从字符串中移除星号 给你一个包含若干星号 * 的字符串 s 。 在一步操作中&#xff0c;你可以&#xff1a; 选中 s 中的一个星号。 移除星号…

项目:构建高可用、负载均衡的高效Web服务器

一、项目需求 实现高可用&#xff0c;防止单点故障&#xff0c;实现负载均衡 负载均衡&#xff1a;将流量分摊给一个或多个后端服务器&#xff0c;提高公司业务的可用性、方便业务后期的水平动态扩展。 二、项目描述 本项目旨在构建一个集高可用性、负载均衡、高效Web服务及…

【系统架构设计师】ATAM(Architecture Tradeoff Analysis Method)

ATAM(Architecture Tradeoff Analysis Method)是一种软件架构评估方法,主要用于在软件设计早期阶段对系统架构进行评估。这种方法帮助开发团队识别潜在的性能瓶颈、安全漏洞、可维护性问题等,并且在需求与架构之间进行权衡,从而确保所选架构能够满足系统的非功能性需求。 …

如何使用ssm实现基于vue.js的购物商场的设计与实现+vue

TOC ssm616基于vue.js的购物商场的设计与实现vue 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本…

51单片机开关电路+限位+舵机

#include <REGX52.H> #include <intrins.h> #define FREQ_OSC 11059200UL // 单片机工作频率 #define PWM_FREQ 50 // PWM信号频率 #define PWM_RESOLUTION 100 // PWM信号分辨率 unsigned char tmp; void send_char(unsigned char txd); void de…

使用streaming-json-py插件处理JSON数据流:详细指南

目录 一、streaming-json-py简介 二、安装与配置 三、基本使用 示例1:处理不完整的JSON对象 示例2:处理不完整的JSON数组 四、高级用法 实时数据流分析 日志处理 五、性能优化与错误处理 六、总结与展望 在数据驱动的现代社会,实时处理数据流已成为许多应用和服务…

Android 开发入门教程-入门基础

1.Android 开发环境 JDK搭建 https://www.cnblogs.com/tianma3798/p/3959626.html 2.Android Sdk 开发环境搭建 AndroidSdk下载地址和环境变量配置 解决Android SDK Manager下载太慢问题(转) 3.Android Avd 虚拟机 4. Android Adb 调试工具 https://www.cnblogs.com/tian…

零基础入门AI:一键本地运行各种开源大语言模型 - Ollama

什么是 Ollama&#xff1f; Ollama 是一个可以在本地部署和管理开源大语言模型的框架&#xff0c;由于它极大的简化了开源大语言模型的安装和配置细节&#xff0c;一经推出就广受好评&#xff0c;目前已在github上获得了46k star。 不管是著名的羊驼系列&#xff0c;还是最新…

我的AI工具箱Tauri版-VideoIntroductionClipCut视频介绍混剪

本教程基于自研的AI工具箱Tauri版进行VideoIntroductionClipCut视频介绍混剪。 本项目为自研的AI工具箱Tauri版中的视频剪辑模块&#xff0c;专注于自动生成视频介绍片段。该模块名为 VideoIntroductionClipCut&#xff0c;用户可以通过该工具快速进行视频的混剪和介绍内容的生…