第十一章 管理Linux软件包和进程

1. 源码下载安装软件

1.1. 概念

源码文件:程序编写者使用C或C++等语言编写的原始代码文本文件

源码文件使用.tar.gz或.tar.bz2打包成压缩文件

1.2. 特点

源码包可移植性好,与待安装软件的工作环境依赖性不大

由于有编译过程,其代码运行效率较高,是针对当前使用者环境的"量体裁衣"

安装功能可以定制,可以选择需要的功能进行安装

卸载方便,只需删除对应安装目录即可,没有Windows"注册表"的概念

安装过程较为麻烦

1.3. 安装过程

下载解压缩源码压缩包

分析安装软件环境

编译软件

安装软件

1.4. 例:安装Apache源码包

1.4.1. 准备工作

安装必备的编译软件

复制代码
[root@server ~]# yum  install  gcc   gcc-c++  -y

1.4.2. 下载apache源码包

复制代码
[root@server ~]# wget  https://dlcdn.apache.org/httpd/httpd-2.4.57.tar.gz

1.4.3. 解压缩

复制代码
[root@server ~]# tar  xzvf  httpd-2.4.57.tar.gz 
[root@server ~]# cd   httpd-2.4.57

1.4.4. 安装环境分析

软件包目录中有configure可执行文件,用于对安装环境进行测试、检测所需库文件、工具文件是否存在、 检测依赖关系、编译器汇编器连接器的检查

执行方式:./configure

复制代码
[root@server httpd-2.4.57]# ./configure
# 提示缺少apr软件,则安装
[root@server httpd-2.4.57]# yum install  apr* -y
[root@server httpd-2.4.57]# ./configure  # 重新检测
# 提示缺少pcre软件,下载安装
[root@server httpd-2.4.57]# yum  install  pcre*  -y
[root@server httpd-2.4.57]# ./configure

1.4.5. 编译软件

作用:安装./configure命令生成的Makefile文件中记录的信息进行编译,生成二进制安装文件

格式:make

注意:make过程中若报错,需要查看提示信息,根据信息修改,一般为缺少头文件等问题

复制代码
[root@server httpd-2.4.57]# make
# 提示缺少redhat-rpm-config软件包
[root@server httpd-2.4.57]# yum install redhat-rpm-config
[root@server httpd-2.4.57]# make

1.4.6. 安装软件

根据make命令生成的二进制安装文件,进行软件安装,默认安装目录:usr/local或者/usr/loacl/bin目录下

方法:make install

复制代码
[root@server httpd-2.4.57]# make  install

注意:也可以使用符号连接多条语句

复制代码
./configure && make && make install 

2. RPM管理工具

2.1. 概念

2.1.1. RPM

RPM(Redhat Package Manager)由Red Hat公司提出的一种软件包管理标准

是Linux各发行版中应用最广泛的软件包格式之一(还有debian的发行版deb安装包)。

产生原因:软件制作者在其工作环境下将软件编译完毕后再进行发布,以此减少安装编译时间,要求:软 件安装环境与编译时的环境要相同

2.1.2. RPM安装软件要求

软件安装环境必须与打包软件环境一致

必须满足软件依赖性

软件卸载时必须小心,最底层软件不能先卸载

2.1.3. rpm软件包命名格式

含义:软件名-版本号-发行号.操作系统版本.硬件平台的类型.rpm

如:zsh-5.0.2-14.el7.x86_64.rpm

2.1.4. rpm包相关网站

http://rpmfind.net/

http://rpm.pbone.net/

2.2. rpm软件安装

2.2.1. 格式

复制代码
rpm  -参数   软件包名

2.2.2. 参数

|---------------|-----------------|
| 参数 | 说明 |
| -i, --install | 安装软件包 |
| --nodeps | 不验证软件包依赖 |
| --force | 安装时提示已安装则重新覆盖安装 |
| -v, --verbose | 提供更多的详细信息输出 |
| -U | 软件包升级 |
| -e | 软件包卸载 |

2.2.3. 安装过程:

读取PRM软件包头部数据,进行软件依赖性查询

若满足条件则安装否则安装失败

2.3. 示例

2.3.1. 安装nginx

复制代码
[root@server ~]# wget  http://nginx.org/packages/rhel/9/x86_64/RPMS/nginx-1.24.0
1.el9.ngx.x86_64.rpm
[root@server ~]# rpm -ivh  nginx-1.24.0-1.el9.ngx.x86_64.rpm 

2.3.2. 安装qq

复制代码
[root@server ~]# cd  /
[root@server /]# wget  https://dldir1.qq.com/qqfile/qq/QQNT/2355235c/linuxqq_3.1.1
11223_x86_64.rpm
[root@server /]# rpm  -ivh  linuxqq_3.1.1-11223_x86_64.rpm 
错误:依赖检测失败:
libXScrnSaver 被 linuxqq-3.1.1_11223-1.x86_64 需要
[root@server /]# yum install  libXScrnSaver
[root@server /]# rpm  -ivh  linuxqq_3.1.1-11223_x86_64.rpm 

2.3.3. 直接下载并安装wps

复制代码
[root@server /]# rpm  -ivh  https://wps-linux
personal.wpscdn.cn/wps/download/ep/Linux2019/11698/wps-office-11.1.0.11698
1.x86_64.rpm

2.3.4. 卸载

复制代码
[root@server /]# rpm -evh tree

2.4. rpm查询功能

2.4.1. 格式

复制代码
rpm --q  包名
# -q常与下面参数组合使用

|----|--------------------|
| 参数 | 说明 |
| -a | 查询所有已安装的软件包 |
| -l | 显示已安装软件包的相关文件列表和信息 |
| -f | 查询文件所属软件包 |
| -i | 显示已经安装的rpm软件包信息 |

2.4.2. 示例

复制代码
# 查询某个包有没有安装(包名不能写错)
[root@server ~]# rpm -q httpd
# 查询所有已经安装的包
[root@server ~]# rpm -qa
# 查询安装该包后会产生哪些文件
[root@server /]# rpm -ql gcc
#查询该文件由哪个软件包产生
[root@server /]# rpm -qf /usr/bin/ls
coreutils-8.30-12.el8.x86_64

3. YUM/DNF管理工具

3.1. 概念

3.1.1. YUM

YUM (Yellow dog Updater,Modified)

RHEL8中默认使用的软件批量管理工具由原版本的yum换成了速度更快的dnf(DNF = Dandified YUM), 原有的yum命令仅为dnf的软链接,当然依旧可以使用。

复制代码
[root@server /]# ll `which yum`
lrwxrwxrwx. 1 root root 5  9月 15  2022 /usr/bin/yum -> dnf-3

3.1.2. YUM/DNF 功能

在线下载、 安装、 卸载、 升级rpm软件包

自动查找并解决rpm包之间的依赖关系,一次性安装所有具有依赖关系的rpm包,而无需管理员逐个、 手 工地去安装每一个rpm包

3.1.3. 工作原理

将编译好的软件放置在YUM服务器中,并将这些软件的依赖性等信息记录下来形成表格组成数据库

用户安装软件时会向网络中的YUM服务器下载对应表格并与本机RPM数据库进行比较,最后一同下载全部 软件进行安装,自动解决依赖性

YUM软件仓库:记录软件依赖性等信息的数据库

系统会去读取 /etc/yum.repos.d/ 目录下的 .repo 结尾的文件,从该文件中读取以下内容实现装包:

包含各种rpm安装文件的软件仓库(rhel8有两个仓库,rhel7只有一个仓库)

BaseOS存储库:提供一套核心的底层操作系统功能,为基础软件安装库

AppStream存储库:包括额外的用户空间应用程序、运行时语言和数据库

3.2. 命令

复制代码
# 查看包、包组相关信息
yum repolist [all]  # 查看系统中yum资源库配置信息
yum list all  # 列出仓库里所有可安装的软件包
yum list installed [包名]  # 列出己经安装的所有的或指定的rpm包(包名中可使用匹配符)
yum info 包名  # 查看指定软件包的详细信息
yum grouplist  # 查看仓库里而所有包组
yum groupinfo 包组名  #查看指定包组里而的详细信息
# 安装、更新包和包组
yum install [-y] 包名 # 安装指定的软件包,-y则在工作过程中需要使用者响应, 这个选个参数可以直接
回答yes
yum update [-y] 包名 # 升级指定的软件包或主机中所有已安装的软件包
yum groupinstall 包组名 # 安装指定包组里面的所有包
# 卸载软件包
yum remove [-y] 包名 # 卸载已经安装在系统中的指定的软件包
# 搜索文件由哪个包产生
yum provides 文件名   # 查找指定的文件属于哪个包
yum whatprovides /etc/fstab   # 查看这个文件是由那个包提供的
# 模糊搜索包名
yum search 模糊包名 #  查看模糊包名的软件包
#  清空缓存
yum clean packages all #  清除下载到本机的指定的软件包或所有软件包的yum源缓存

3.3. 配置yum源

3.3.1. 建立本地源

复制代码
# 将本地光盘挂载至本地目录/media下
[root@server /]# mount /dev/cdrom /media
mount: /media: WARNING: source write-protected, mounted read-only.
# 注意有2个yum源
[root@server /]# cd /media/
[root@server media]# ls
AppStream  EFI   extra_files.json  images    
redhat-release
BaseOS     
EULA  GPL               
# 移动到yum源配置文件路径
[root@server media]# cd /etc/yum.repos.d
[root@server yum.repos.d]# ls
CentOS-9-Stream.repo  redhat.repo
media.repo               
isolinux  RPM-GPG-KEY-redhat-beta
# 备份已存在yum源配置文件,使其失效
[root@server yum.repos.d]# mv CentOS-9-Stream.repo CentOS-9-Stream.repo.back
[root@server yum.repos.d]# mv redhat.repo redhat.repo.back
[root@server yum.repos.d]# ls
CentOS-9-Stream.repo.back  redhat.repo.back
# 新建本地yum源配置文件
[root@server yum.repos.d]# vim  dvd.repo
[BaseOS]
name=BaseOS
baseurl=file:///media/BaseOS
gpgcheck=0
[Appstream]
name=Appstream
baseurl=file:///media/AppStream
gpgcheck=0
# 重建缓存
[root@server yum.repos.d]# yum  makecache
[root@server yum.repos.d]# yum repolist
# 验证能否装包成功
[root@master ~]# yum install tree -y

3.3.2. 建立网络源

Redhat9暂时无公开的网络源,可以使用Centos9的yum源

使用xftp将配置文件上传到/etc/yum.repos.d目录

重建缓存生效

4. 管理进程

4.1. 概念

4.1.1. 程序、进程、线程

程序: 二进制文件,文件存储在磁盘中,例如/usr/bin/目录下

进程:进程是已启动的可执行程序的运行实例 进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程

线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

一条 线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任 务。 一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有

线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执 行。

4.1.2. 进程分类

4.2. 查看进程

4.2.1. ps命令

作用:ps显示某个时间点的程序运行情况

格式

复制代码
ps  -参数

参数

复制代码
-a :显示所有用户的进程
-u :显示用户名和启动时间
-x :显示 没有控制终端的进程
-e :显示所有进程,包括没有控制终端的进程
-l :长格式显示
-w:宽行显示,可以使用多个 w 进行加宽显示 
-f:做一个更完整的输

4.2.2. top命令

格式

复制代码
top [-d 数字]  |  [-bnp]

参数

复制代码
-d:后面可以接秒数,就是整个进程界面更新的秒数,默认是5秒
-b:以批次的方式执行top,还有更多的参数可用。通常会搭配数据流重定向来将批处理的结果输出为文件。
-n:与-b搭配,进行几次top的输出结果
-i:不显示闲置或者僵死的进程信息
-c:显示进程的整个命令路径,而不是只显示命令名称
-s:使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险
-p:指定某些个PID来进行查

[root@localhost ~]# top -d 1
[root@localhost ~]# top -d 1 -p id                  
查看指定进程的动态信息

top的输出可以分为统计信息区和进程信息区两个部分,即前5行为统计信息区,后面为进程信息区。

注意:可以在RHEL8.5中安装epel-release源后安装htop,是top的升级版

4.3. kill命令

4.3.1. 作用

强制结束进程

4.3.2. 格式

复制代码
kill  进程名/pid
killall  进程名/pid
相关推荐
lightqjx1 小时前
【Linux】Linux工具(yum、vim、gcc/g++、make/makefile、gdb)的详细介绍
linux·vim·gdb·yum·gcc/g++·linux工具·make/makefile
念恒123061 小时前
Linux基础开发工具(git篇)
linux·c语言·git
Cyber4K1 小时前
【Nginx专项】高级进阶架构篇-Proxy正反向代理、FastCGI及PHP-FPM介绍
运维·服务器·nginx·架构·php
墨^O^1 小时前
C++ Memory Order 完全指南:从 relaxed 到 seq_cst,深入理解无锁编程与 happens-before
linux·开发语言·c++·笔记·学习·算法·缓存
returnthem2 小时前
【Linux基础知识】Linux自动化运维:编写Shell脚本实现自动化任务
linux·运维·自动化
天月风沙2 小时前
Betaflight飞控、树莓派RP2350B主控编译教程
linux·单片机·嵌入式硬件·mcu·无人机·树莓派
实在智能RPA2 小时前
零售行业上线Agent,能带来哪些运营价值?——2026年视角下的端到端智能自动化深度拆解
运维·自动化·零售
su_ym81102 小时前
Android 与 Linux 对比
android·linux·framework
默|笙2 小时前
【Linux】线程同步与互斥_日志与线程池
android·linux·运维