管理Linux软件包和进程
1. 源码下载安装软件
1.1 概念
- 源码文件:程序编写者使用C或C++等语言编写的原始代码文本文件
- 源码文件使用.tar.gz或.tar.bz2打包成压缩文件
1.2 特点
- 源码包可移植性好,与待安装软件的工作环境依赖性不大
- 由于有编译过程,其代码运行效率较高,是针对当前使用者环境的“量体裁衣”
- 安装功能可以定制,可以选择需要的功能进行安装
- 卸载方便,只需删除对应安装目录即可,没有Windows“注册表”的概念
- 安装过程较为麻烦
1.3 安装过程
- 下载解压缩源码压缩包
- 分析安装软件环境
- 编译软件
- 安装软件
2. RPM管理工具
2.1 概念
-
RPM
- RPM(Redhat Package Manager)由Red Hat公司提出的一种软件包管理标准。
- 是Linux各发行版中应用最广泛的软件包格式之一(还有debian的发行版deb安装包)。
- 产生原因:软件制作者在其工作环境下将软件编译完毕后再进行发布,以此减少安装编译时间,要求:软件安装环境与编译时的环境要相同。
-
RPM安装软件要求
- 软件安装环境必须与打包软件环境一致。
- 必须满足软件依赖性;
- 软件卸载时必须小心,最底层软件不能先卸载。
-
rpm软件包命名格式
-
含义:软件名-版本号-发行号.操作系统版本.硬件平台的类型.rpm。
-
如:zsh-5.0.2-14.el7.x86_64.rpm
zsh -5 0 2 -14 el7 x86 64 软件名 主版本号 次版本号 修订号 软件发布次数 发行商RHEL7 cpu架构 支持系统位数
-
-
rpm包相关网站
- http://rpmfind.net/
- http://rpm.pbone.net/
2.2 rpm软件安装
-
格式:
rpm -参数 软件包名
-
参数
参数 作用 -i,–install 安装软件包 –nodeps 不验证软件包安装 –force 安装时提示已安装时覆盖安装 -v,–verbose 提供更多的详细信息输出 -U 软件包升级 -e 软件包卸载 -
安装过程
- 读取PRM软件包头部数据,进行软件依赖性查询;
- 若满足条件则安装否则安装失败。
-
例:
# 从网站上获取软件包 [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 /]# wget https://mirrors.aliyun.com/rockylinux/9.4/devel/x86_64/os/Packages/l/libXScrnSaver-1.2.3-10.el9.x86_64.rpm [root@server /]# rpm -ivh linuxqq_3.1.1-11223_x86_64.rpm
2.3 rpm的查询功能
-
格式:
rpm –q 包名 # -q常与下面参数组合使用
-
参数:
参数 作用 -a 查询所有已安装的软件包 -l 显示已安装软件包的相关文件列表和信息 -f 查询文件所属软件包 -i 显示已经安装的rpm软件包信息 -
例:
[root@localhost ~]# rpm -qa [root@localhost ~]# rpm -ql linuxqq [root@localhost ~]# rpm -qf /usr/bin/ls coreutils-8.32-35.el9.x86_64 [root@localhost ~]# rpm -qf /usr/bin/qq file /usr/bin/qq is not owned by any package [root@localhost ~]# ls -l /usr/bin/qq lrwxrwxrwx. 1 root root 10 Nov 11 20:49 /usr/bin/qq -> /opt/QQ/qq [root@localhost ~]# rpm -qf /opt/QQ/qq linuxqq-3.2.13_29271-1.x86_64 [root@localhost ~]# rpm -qi linuxqq Name : linuxqq Version : 3.2.13_29271 Release : 1 Architecture: x86_64 Install Date: Mon 11 Nov 2024 08:49:18 PM CST Group : default Size : 533913684 License : unknown Signature : (none) Source RPM : linuxqq-3.2.13_29271-1.src.rpm Build Date : Fri 01 Nov 2024 06:07:00 PM CST Build Host : ci1727710254707a-0.ci1727710254707a.default.svc.cluster.local Relocations : / Packager : Tencent <QQ-Team@tencent.com> Vendor : Tencent <QQ-Team@tencent.com> URL : https://im.qq.com Summary : QQ Description : QQ
3.YUM/DNF管理工具
3.1 概念
-
yum:
- YUM (Yellow dog Updater,Modified)
- RHEL9中默认使用的软件批量管理工具由原版本的yum换成了速度更快的dnf(DNF = Dandified YUM),原有的yum命令仅为dnf的软链接,当然依旧可以使用。
-
yum/dnf功能:
- 在线下载、 安装、 卸载、 升级rpm软件包
- 自动查找并解决rpm包之间的依赖关系,一次性安装所有具有依赖关系的rpm包,而无需管理员逐个、 手工地去安装每一个rpm包。
-
工作原理:
- 将编译好的软件放置在YUM服务器中,并将这些软件的依赖性等信息记录下来形成表格组成数据库;
- 用户安装软件时会向网络中的YUM服务器下载对应表格并与本机RPM数据库进行比较,最后一同下载全部软件进行安装,自动解决依赖性;
- YUM软件仓库:记录软件依赖性等信息的数据库;
-
系统会去读取 /etc/yum.repos.d/ 目录下的 .repo 结尾的文件,从该文件中读取以下内容实现装包:
-
包含各种rpm安装文件的软件仓库(rhel8开始有两个仓库,rhel7只有一个仓库)
-
BaseOS存储库:提供一套核心的底层操作系统功能,为基础软件安装库
-
AppStream存储库:包括额外的用户空间应用程序、运行时语言和数据库
-
-
3.2 命令
# 查看包、包组相关信息
dnf repolist [all] # 查看系统中yum资源库配置信息
dnf list all # 列出仓库里所有可安装的软件包
dnf list installed [包名] # 列出己经安装的所有的或指定的rpm包(包名中可使用匹配符)
dnf list available [包名] # 列出没有安装的所有的或指定的rpm包(包名中可使用匹配符)
dnf info 包名 # 查看指定软件包的详细信息
dnf grouplist [--hidden]# 查看仓库里而所有包组[显示隐藏]
dnf groupinfo 包组名 #查看指定包组里而的详细信息
# 安装、更新包和包组
dnf install [-y] 包名 # 安装指定的软件包,-y则在工作过程中需要使用者响应, 这个选个参数可以直
接回答yes
dnf update [-y] 包名 # 升级指定的软件包或主机中所有已安装的软件包
dnf groupinstall 包组名 # 安装指定包组里面的所有包
# 卸载软件包
dnf remove [-y] 包名 # 卸载已经安装在系统中的指定的软件包
# 搜索文件由哪个包产生
dnf provides 文件名 # 查找指定的文件属于哪个包
dnf whatprovides /etc/fstab # 查看这个文件是由那个包提供的
# 模糊搜索包名
dnf search 模糊包名 # 查看模糊包名的软件包
# 清空缓存
dnf clean packages all # 清除下载到本机的指定的软件包或所有软件包的yum源缓存
3.3 配置yum/dnf源
-
建立本地源
# 新建本地目录/RHEL9,用来挂载光盘 [root@localhost ~]# mkdir /RHEL9/ [root@localhost ~]# mount /dev/cdrom /RHEL9 #临时挂载 # 永久挂载:将挂载命令添加到系统启动脚本中/etc/rc.d/rc.local [root@localhost init.d]# cd /etc/rc.d/ [root@localhost rc.d]# vim rc.local [root@localhost rc.d]# cat rc.local #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot.touch /var/lock/subsys/local mount /dev/cdrom /RHEL9/# 配置yum源 [root@localhost rc.d]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# vim rhel.repo [root@localhost yum.repos.d]# cat rhel.repo [AppStream] name=AppStream baseurl=file:///RHEL9/AppStream gpgcheck=0 enabled=1 [BaseOS] name=BaseOS baseurl=file:///RHEL9/BaseOS gpgcheck=0 enabled=1# 清除缓存 [root@localhost yum.repos.d]# dnf clean all # 重建缓存 [root@localhost yum.repos.d]# dnf makecache ## 软件仓库信息会储存在/var/cache/dnf/
-
建立网络源
Redhat9暂时无公开的网络源,可以使用Centos9的yum源 使用xftp将配置文件上传到/etc/yum.repos.d目录 重建缓存生效 [root@localhost yum.repos.d]# pwd /etc/yum.repos.d [root@localhost yum.repos.d]# vim epel.repo [root@localhost yum.repos.d]# cat epel.repo [epel] name=epel baseurl=https://mirrors.aliyun.com/epel/9/Everything/x86_64/ gpgcheck=0
-
安装EPEL红帽扩展源
官网:https://docs.fedoraproject.org/en-US/epel/ 安装: [root@localhost ~]# dnf install https://dl.fedoraproject.org/pub/epel/epel-releaselatest-9.noarch.rpm
4. 管理进程
4.1 概念
- 程序、进程、线程
- 程序: 二进制文件,文件存储在磁盘中,例如/usr/bin/目录下。
- 进程:进程是已启动的可执行程序的运行实例。
- 进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程。
- 线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
- 一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有。
- 线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行。
- 进程分类
4.2 查看进程
-
图形界面查看进程
[root@localhost ~]# gnome-system-monitor ##系统监控器
-
ps命令
-
作用:ps显示某个时间点的程序运行情况
-
格式:
ps -参数
-
参数:
- unix风格
参数 作用 -a 显示当前shell的进程 -u 显示指定用户的进程 -e 显示所有进程,包括没有控制终端的进程 -l 长格式显示,显示更详细内容 -w 宽行显示,可以使用多个 w 进行加宽显示 -f 做一个更完整的输出,可以看见命令的参数 -
bsd风格
参数 作用 x 显示无字符终端(tty)的进程 a 显示有字符终端(tty)的进程 u 利用用户信息进行归类 f 显示进程的层级关系 -
GNU风格
# 自定义显示字段 [root@localhost ~]# ps axo user,pid,ppid,%mem,command # 按指定字段进行排序显示 [root@localhost ~]# ps ax --sort [+|-]%cpu -o %cpu,pid ## +升序,-降序
-
例:
# 查看当前用户的进程 [root@localhost ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 0 32343 32342 0 80 0 - 56088 do_wai pts/2 00:00:00 bash 4 R 0 33566 32343 0 80 0 - 56375 - pts/2 00:00:00 ps 说明: F:代表这个程序标志(process flags),说明这个程序的权限。常见号码有:4表示此程序的权限为root;1表示此子程序仅进行复制(fork)而没有实际执行(exec) S:代表这个程序的状态(STAT),主要的状态有:R(Running):该程序正在运作中;S(Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒;D:不可被唤醒的睡眠状态,通常可能是在等待I/O的情况;T:停止状态(stop),可能是在工作控制(后台暂停)或traced状态;Z(Zombie):僵尸状态,程序已经终止但却无法被移除至记忆体外。+:位于后台的进程组 UID/PID/PPID:代表此程序被该UID所拥有/程序的PID号码/此程序的父进程PID号码。 C:代表CPU使用率,单位为百分比; PRI/NI:Priority/Nice的缩写,代表此程序被CPU所执行的优先顺序,数值越小代表该程序越快被CPU执行。 ADDR/SZ/WCHAN:都与内存有关,ADDR是kernel funcition,指出该程序在内存的哪个部分,如果是running的程序,一般会显示-。SZ代表此程序用掉多少内存,WCHAN表示目前程序是否运作中,若为-表示正在运行。 TTY:登入者的终端机位置,若为远程终端登入则使用动态终端界面(pts/n)。 TIME:使用掉的CPU时间,即此程序实际花费CPU运作的时间。 CMD:触发此进程的指令是什么。# 查看所有用户执行的进程的详细信息 [root@localhost ~]# ps -le F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1 0 0 80 0 - 44776 do_epo ? 00:00:01 systemd 1 S 0 2 0 0 80 0 - 0 - ? 00:00:00 kthreadd 1 I 0 3 2 0 60 -20 - 0 - ? 00:00:00 rcu_gp
# 查看当前用户的进程 [root@localhost ~]# ps -u USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1280 2.2 0.2 237304 5408 tty1 Ss+ 15:54 0:00 -bash root 1415 0.1 0.2 237172 5092 pts/0 Ss 15:55 0:00 -bash root 1452 0.0 0.2 268484 4008 pts/0 R+ 15:55 0:00 ps -u [root@localhost ~]# ps aux | less USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 2164 648 ? Ss 08:47 0:00 init [5] ############################# 说明: USER: 运行进程的用户 PID: 进程ID %CPU: CPU占用率 %MEM: 内存占用率 VSZ: 占用虚拟内存 RSS: 占用实际内存 驻留内存 TTY: 进程运行的终端 STAT: 进程状态 man ps (/STATE)R 运行S 可中断睡眠 SleepD 不可中断睡眠T 停止的进程Z 僵尸进程X 死掉的进程s 进程的领导者,父进程< <优先级较高的进程N N优先级的进程+ +表示是前台的进程组l 以线程的方式运行 START: 进程的启动时间 TIME: 进程占用CPU的总时间 COMMAND: 进程文件,进程名
# 自定义显示字段 [root@localhost ~]# ps axo user,pid,ppid,%mem,command USER PID PPID %MEM COMMAND root 1 0 0.7 /usr/lib/systemd/systemd --switched-root --system root 2 0 0.0 [kthreadd] root 3 2 0.0 [rcu_gp]
# 查看进程树 [root@localhost ~]# pstree
# 查看指定进程的PID [root@localhost ~]# ps aux | grep sshd # cat /run/sshd.pid# 查看指定进程的PID [root@localhost ~]# pgrep -l sshd [root@localhost ~]# pidof sshd # 查看指定进程的PID [root@localhost ~]# pidof sshd
-
-
top命令
-
格式:
top [-d 数字] | [-bnp]
-
参数:
参数 作用 -d 后面可以接秒数,就是整个进程界面更新的秒数,默认是3秒 -b 以批次的方式执行top,还有更多的参数可用。通常会搭配数据流重定向来将批处理的结果输出为文件。 -n 与-b搭配,监控几次top的输出结果后结束 -i 不显示闲置或者僵死的进程信息 -c 显示进程的整个命令路径,而不是只显示命令名称 -s 使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险 -p 指定某些个PID来进行查看检测 -
top的输出可以分为统计信息区和进程信息区两个部分,即前5行为统计信息区,后面为进程信息区。
-
统计信息区
top - 18:35:47 up 1:42, 2 users, load average: 0.41, 0.23, 0.21 Tasks: 298 total, 1 running, 297 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.9 us, 2.6 sy, 0.0 ni, 94.8 id, 0.0 wa, 1.6 hi, 0.2 si, 0.0 MiB Mem : 3627.1 total, 1327.8 free, 1400.3 used, 1150.1 buff/cache MiB Swap: 4012.0 total, 4012.0 free, 0.0 used. 2226.9 avail Mem
############################# 第一行为任务队列信息:top - 18:35:47 up 1:42, 2 users, load average: 0.41, 0.23, 0.21 8:35:47表示当前系统时间; up 1:42表示系统已经启动1小时42分钟了; 2 users表示当前登录系统的用户数; load average: 0.41, 0.23, 0.21表示系统1分钟、5分钟、15分钟前到现在的平均负载(如果是1表示满负载)第二行:Tasks: 298 total, 1 running, 297 sleeping, 0 stopped, 0 zombie 298 total进程的总数 1 running正在运行的进程数 297 sleeping处于休眠状态的进程数 0 stopped停止的进程数 0 zombie僵死的进程数第三行:%Cpu(s): 0.9 us, 2.6 sy, 0.0 ni, 94.8 id, 0.0 wa, 1.6 hi, 0.2 si, 0.0 st 0.9 us表示用户进程占用CPU的百分比 2.6 sy系统进程占用CPU的百分比; 0.0 ni用户进程空间内改变过优先级的进程占用CPU的百分比 94.8 id空闲CPU占用的百分比 0.0 wa代表I/Owait表示等待输入、输出的进程占用CPU的百分比; 1.6 hi表示cpu服务于硬件中断所耗费的时间总额 0.2 si表示cpu服务于软件中断所耗费的时间总额; 0.0 st表示虚拟机被hypervisor偷去的cpu时间 另外,如果是多内核设备,可按下数字键“1”来切换成不同cpu的负载率。第四行、第五行 MiB Mem : 1790.0 total, 1278.5 free, 240.5 used, 271.0 buff/cache MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1393.8 avail Mem total系统的内存大小 free目前空余内存大小 used已经使用的内存大小 #############################
-
进程信息区:显示了每个进程的运行状态
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ 1970 root 20 0 281064 73252 45864 S 6.6 2.0 1:18.57 2078 root 20 0 3992192 359096 132192 S 4.6 9.7 2:39.01
############################# PID:进程的id USER:进程所有者的用户名 PR:进程优先级 NI:nice值。负值表示高优先级,正值表示低优先级 VIRT:进程使用的虚拟内存总量,单位为KB RES:进程使用的、未被换出的物理内存大小,单位KB SHR:共享内存大小,单位KB S:进程状态,D表示不可中断的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停止,Z表示僵死进程 %CPU:上次更新到现在的CPU时间占用百分比 %MEM:进程占用的物理内存百分比 TIME+:进程总计使用的CPU时间,单位为1/100秒 COMMAND:正在运行进程的命令名或者命令路径 #############################
-
注意:可以在RHEL9中安装epel-release源后安装htop,是top的升级版
-
-
4.3 进程的前后台调用
Ctrl + z 将进程暂停,挂起
jobs 查看后台正在运行或已停止的进程
fg + 作业号(job号) 将后台作业(通过&符号放到后台运行的作业或者被Ctrl + Z暂停的作业)恢复到前台运行。
bg + 作业号(job号) 将在后台被暂停(使用Ctrl + Z暂停)的作业在后台继续运行
4.4 kill命令
-
作用:强制结束进程
-
格式
kill 进程名/pid killall 进程名/pid
状态,D表示不可中断的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停止,Z表示僵死进程
%CPU:上次更新到现在的CPU时间占用百分比
%MEM:进程占用的物理内存百分比
TIME+:进程总计使用的CPU时间,单位为1/100秒
COMMAND:正在运行进程的命令名或者命令路径
#############################
```
- 注意:可以在RHEL9中安装epel-release源后安装htop,是top的升级版
4.3 进程的前后台调用
Ctrl + z 将进程暂停,挂起
jobs 查看后台正在运行或已停止的进程
fg + 作业号(job号) 将后台作业(通过&符号放到后台运行的作业或者被Ctrl + Z暂停的作业)恢复到前台运行。
bg + 作业号(job号) 将在后台被暂停(使用Ctrl + Z暂停)的作业在后台继续运行
4.4 kill命令
-
作用:强制结束进程
-
格式
kill 进程名/pid killall 进程名/pid