(总结五)Linux指令学习——软件管理

时间:2021-07-28 00:44:47


文章目录

  • ​​1.Linux应用程序基础​​
  • ​​(1)应用程序与系统命令的关系​​
  • ​​(2)典型应用程序的目录结构​​
  • ​​2.软件包的封装类型​​
  • ​​(1)RPM包的管理机制​​
  • ​​(2)使用yum​​
  • ​​(3)RPM包管理命令 —— rpm​​
  • ​​(4)源代码编译​​

1.Linux应用程序基础

(1)应用程序与系统命令的关系

  • 文件位置
    系统命令:一般在/bin和/sbin目录中,或为Shell内部指令
    应用程序:通常在/usr/bin和/usr/sbin目录中
  • 主要用途
    系统命令:完成对系统的基本管理工作,例如IP配置工具
    应用程序:完成相对独立的其他辅助任务,例如网页浏览器
  • 适用环境
    系统命令:一般只在字符操作界面中运行
    应用程序:根据实际需要,有些程序可在图形界面中运行
  • 运行格式
    系统命令:一般包括命令字、命令选项和命令参数
    应用程序:通常没有固定的执行格式

(2)典型应用程序的目录结构

  • 如果应用程序的配置文件较多,通常会以软件名建立专门的子文件夹用来保存,例如“/etc/httpd/”

文件类型

保存目录

普通执行程序文件

/usr/bin

服务器执行程序文件和管理程序文件

/usr/sbin

应用程序的配置文件

/etc

日志文件

/var/log

应用程序文档文件

/usr/share/doc

应用程序手册页文件

/usr/share/man

2.软件包的封装类型

  • 常见的软件包封装类型
    使用tar命令制作而成的源代码包文件,经常被称为“TarBall” ,即“Tar包”

封装类型

说明

rpm软件包

扩展名为“.rpm”

deb软件包

扩展名为“.deb”

源代码软件包

一般为“.tar.gz”、“.tar.bz2”等格式的压缩包包含程序的原始代码

提供安装程序的软件包

在压缩包内提供install.sh、setup等安装程序或以“.bin”格式的单个执行文件提供

绿色免安装的软件包

在压缩包内提供已编译好的执行程序文件解开压缩包后的文件即可直接使用



(1)RPM包的管理机制

  • RPM Package Manager
    由Red Hat公司提出,被众多Linux发行版所采用
    建立统一的数据库文件,详细记录软件包安装、卸载等变化信息,能够自动分析软件包依赖关系
  • RPM软件包
    软件素材参考:http://rpmfind.net;
    有些软件包的文件名中还会增加所适用的操作系统信息,例如“wget-1.10.2-7.el5.i386.rpm” ;
    一般命名格式:
  • (总结五)Linux指令学习——软件管理

  • 在图形界面中管理RPM包
    (a)图形界面中的“添加/删除软件”
    依赖于YUM(Yellow dog Updater,Modified)机制
    调用yum命令工具进行软件更新
    (b)使用“添加/删除软件”工具的条件
    能够访问互联网中的YUM源服务器
    若使用默认源,需有合法的安装序列号和服务订阅号

(2)使用yum

  • Yum(全称为 Yellow dog Updater, Modified):Shell前端软件包管理器。
  • 基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理 依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
  • 使用yum
1.列出任何可更新的软件清单
命令:yum check-update
2.安装任何更新软件
命令:yum update
3.仅安装指定的软件
命令:yum install ***
4.仅更新指定的软件
命令:yum update ***
5.列出任何可安裝的软件清单
命令:yum list
6.用YUM删除软件包
命令:yum remove ***

用YUM查询软件信息:
1.使用YUM查找软件包
命令:yum search ***
2.列出任何可安装的软件包
命令:yum list
3.列出任何可更新的软件包
命令:yum list updates
4.列出任何已安装的软件包
命令:yum list installed
5.列出任何已安装但不在 Yum Repository 內的软件包
命令:yum list extras
6.列出所指定的软件包
命令:yum list ***
7.使用YUM获取软件包信息
命令:yum info ***
8.列出任何软件包的信息
命令:yum info
9.列出任何可更新的软件包信息
命令:yum info updates
10.列出任何已安裝的软件包信息
命令:yum info installed
11.列出任何已安裝但不在 Yum Repository 內的软件包信息
命令:yum info extras
12.列出软件包提供哪些文档
命令:yum provides

清除YUM缓存:
1.清除缓存目录(/var/cache/yum)下的软件包
命令:yum clean packages
2.清除缓存目录(/var/cache/yum)下的 headers
命令:yum clean headers
3.清除缓存目录(/var/cache/yum)下旧的 headers
命令:yum clean oldheaders
4.清除缓存目录(/var/cache/yum)下的软件包及旧的headers
命令:yum clean, yum clean all (= yum clean packages; yum clean oldheaders).

管理 yum 组件组
1.yum grouplist 列出所有可用组
2.yum groupinfo 提供特定组的信息
3.yum groupinstall 安装软件包组
4.yum groupupdate 更新软件包组
5.yum grouperase 删除软件包组

使用yum安装本地软件包文件
yum localinstall packagefile.rpm
  • 使用第三方 Yum
自带的yum源中rpm包数量有限,很多时候找不到需的软件包,使用第三方yum源来安装更多软件包
将文件放到 /etc/yum.repos.d/ 目录中,可以启用对新的第三方存储库的支持,存储库配置文件必须以.repo结尾。
配置文件示例 /etc/yum.repos.d/updates.repo
[updates] name=Red Hat Updates
baseurl=ftp://instructor.example.com/pub/rhel6/Errata
enabled=1
gpgcheck=0

(3)RPM包管理命令 —— rpm

  • 主要功能
  1. 查询RPM软件、包文件的相关信息
  2. 安装、升级、卸载RPM软件包
  3. 维护RPM数据库信息
  • 查询已安装的RPM软件信息
    格式:rpm -q[子选项] [软件名]
    用法:结合不同的子选项 完成不同查询
-qa:查看系统中已安装的所有RPM软件包列表
-qi:查看指定软件的详细信息
-ql:查询指定软件包所安装的目录、文件列表
-qc:仅显示指定软件包安装的配置文件
-qd:仅显示指定软件包安装的文档文件

使用“-q”选项时实际上调用了“/usr/bin/rpmquery”程序完成查询工作
软件包查询主要包括两种情况:
1)查询系统中已经安装的软件包信息;
2)查询尚未安装的RPM包文件的信息
对于“-qa”查询选项,命令参数(即软件包名)是非必须的;一般查询时,软件名不需要指定版本号
  • 查询文件/目录属于哪个RPM软件
格式:rpm  -qf  文件或目录名
  • eg:
查询是否已安装有bash软件包
[root@localhost ~]# rpm -q bash
bash-3.1-16.1
[root@localhost ~]# rpm -qa | grep bash
bash-3.1-16.1

查询vim是由哪个软件包安装的
[root@localhost ~]# rpm -qf /usr/bin/vim
vim-enhanced-7.0.109-3

查询dhcp软件包安装的文件列表
[root@localhost ~]# rpm -ql dhcp
/etc/dhcpd.conf
/etc/rc.d/init.d/dhcpd
  • 查询未安装的RPM包文件
    格式:rpm -qp[子选项] RPM包文件
    用法:结合不同的子选项 完成不同查询
-qpi:通过.rpm包文件查看该软件的详细信息
-qpl:查看.rpm安装包内所包含的目录、文件列表
-qpc:查看.rpm安装包内包含的配置文件列表
-qpd:查看.rpm安装包内包含的文档文件列表

查询未安装的包文件时使用“-qp…”选项,多了一个“p”(表示packages,包)
两类查询操作中,“-i”、”-l”、”-c”、“-d”等选项的含义是相同的
  • 查询RPM软件信息
查询lynx软件安装包的摘要信息
[root@localhost ~]# rpm -qpi lynx-2.8.5-28.1.i386.rpm
warning: lynx-2.8.5-28.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Name : lynx Relocations: (not relocatable)
Version : 2.8.5 Vendor: Red Hat, Inc.
Release : 28.1 Build Date: 2006年07月13日 星期四 14时10分20秒
……

查询lynx安装包中的文件列表
[root@localhost Server]# rpm -qpl lynx-2.8.5-28.1.i386.rpm
/etc/lynx-site.cfg
/etc/lynx.cfg
……
  • 安装、升级、卸载RPM软件包
    (a)安装或升级RPM软件
    格式:rpm [选项] RPM包文件…
    用法:不同选项适用于不同情况
-i:安装一个新的rpm软件包
-U:升级某个rpm软件,若原本未装,则进行安装
-F:更新某个rpm软件,若原本未装,则放弃安装

(b)卸载指定的RPM软件
格式:rpm -e 软件名

(c)辅助选项

--force:强制安装所指定的rpm软件包
--nodeps:安装、升级或卸载软件时,忽略依赖关系
-h:以“#”号显示安装的进度
-v:显示安装过程中的详细信息


--force 辅助选项主要应用于以下两种情况:
1)缺失某个软件包的文件时,需要进行覆盖安装以找回丢失文件
2)安装一个比现有软件版本陈旧的软件包(多为测试用途)
当安装、卸载软件包时,提示缺少依赖包无法进行时,如果仍要继续执行,应结合 --nodeps 选项而不是 --force 选项

(d)eg:

安装lynx软件包同时显示安装进度
[root@localhost ~]# rpm -ivh lynx-2.8.5-28.1.i386.rpm
warning: lynx-2.8.5-28.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:lynx ########################################### [100%]

卸载lynx软件包
[root@localhost ~]# rpm -q lynx
lynx-2.8.5-28.1
[root@localhost ~]# rpm -e lynx
[root@localhost ~]# rpm -q lynx
package lynx is not installed


在安装新的软件包时,通常使用”-ivh”组合选项来获得更加友好的屏幕提示信息
“warning:……NOKEY……”的警告信息是由于没有导入RedHat提供的公钥所致,但并不影响安装效果,可以忽略,如果需要导入公钥文件,可以参考如下步骤(以后从RHEL5光盘中安装软件时,就不会再出现警告提示了):
[root@localhost ~]# cd /media/cdrom
[root@localhost cdrom]# rpm --import RPM-GPG-KEY-redhat-release


在系统中不存在被升级的软件包时,升级命令的功能等同于安装命令
eg:升级wget软件包
[root@localhost ~]# rpm -i wget-1.10.2-3.2.1.i386.rpm
[root@localhost ~]# rpm -q wget
wget-1.10.2-3.2.1
[root@mail ~]# rpm -Uvh /media/cdrom/wget-1.10.2-7.el5.i386.rpm
warning: /media/cdrom/wget-1.10.2-7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:wget ########################################### [100%]
[root@localhost ~]# rpm -q wget
wget-1.10.2-7.el5

(4)源代码编译

  • 使用源代码安装软件的优点
    获得最新的软件版本,及时修复bug
    根据用户需要,灵活定制软件功能
  • 应用场合举例
    安装较新版本的应用程序时
    *软件的最新版本大都以源码的形式最先发布
    当前安装的程序无法满足需要时
    编译安装可由用户自行修改、定制功能
    需要为应用程序添加新的功能时
    用户可以重新配置、*修改源代码,加入新的功
  • Tarball 封包:
    .tar.gz 和 .tar.bz2 格式居多
    软件素材参考:http://sourceforge.net
  • 完整性校验
    md5sum校验工具
    计算MD5校验和,并与官方提供的值相比较,判断是否一致
MD5校验和
[root@localhost ~]# md5sum axel-1.0a.tar.gz
2d94c0b36b374834567f1fcec5f89119 axel-1.0a.tar.gz
  • 确认源代码编译环境
    需安装支持 C/C++程序语言的 编译器
    gcc-4.1.1-52.el5、gcc-c+±4.1.1-52.el5
    make-3.81-1.1.i386 ……
[root@localhost ~]# gcc --version
gcc (GCC) 4.1.1 20070105 (Red Hat 4.1.1-52)
Copyright (C) 2006 Free Software Foundation, Inc.
本程序是*软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
[root@localhost ~]# g++ --version
g++ (GCC) 4.1.1 20070105 (Red Hat 4.1.1-52)
……

在实际编译安装软件的操作中,大多数情况是通过 make 来自动调用gcc或g++进行工作,无需用户手动执行gcc等命令
  • 源码编译安装的基本过程
解包 —— tar
解包、释放出源代码文件

配置 —— ./configure
针对当前系统、软件环境,配置好安装参数

编译 —— make
将源代码文件变为二进制的可执行程序

安装 —— make install
将编译好的程序文件复制到系统中

configure 一般是位于软件包目录中的可执行脚本文件
  • eg:
1. 解包
习惯上将软件包释放到 /usr/src/ 目录
解包后的源代码文件位置:
/usr/src/软件名-版本号/

[root@localhost ~]# tar zxvf axel-1.0a.tar.gz -C /usr/src/
[root@localhost ~]# ls /usr/src/axel-1.0a/
API axelrc.example configure CREDITS gui nl.po tcp.c
axel.1 CHANGES conn.c de.po http.c README tcp.h
axel.c conf.c conn.h ftp.c http.h search.c text.c
axel.h conf.h COPYING ftp.h Makefile search.h

configure 执行脚本用于下一步的配置
README 或 INSTALL 文件可提供安装方法
软件包释放至哪个目录并无硬性限制,例如用户也可以释放至 /usr/local/src/ 目录或者其他目录下,
编译安装结束后,源码包目录可以选择删除

2.配置
需将工作目录切换到软件源码所在目录
使用源码目录中的 configure 脚本
执行“./configure --help” 可以查看帮助
典型的配置选项:
--prefix=软件安装目录

[root@localhost ~]# cd /usr/src/axel-1.0a
[root@localhost axel-1.0a]# ./configure --prefix=/usr/local/axel
若不指定任何配置选项,将采用默认值

不同的应用程序其配置参数会存在区别,因此学会使用“./configure --help”非常重要(“./”表示当前目录)
用户应用程序习惯上安装到“/usr/local/软件名”文件夹中
编译过程中如果出现错误,通常是由于缺少依赖软件包所致
根据软件大小不同,配置过程可能会需要不同的时间

3.编译
执行 make 命令

4.安装
执行 make install 命令
[root@localhost axel-1.0a]# make
[root@localhost axel-1.0a]# make install
这两个步骤可以合写为一行:
make && make install


5.验证已编译安装完成的程序
查看安装后的软件目录、了解软件程序的使用方法
[root@localhost axel-1.0a]# ls /usr/local/axel/ /usr/local/axel/bin/
/usr/local/axel/:
bin etc share
/usr/local/axel/bin/:
axel
[root@localhost axel-1.0a]# /usr/local/axel/bin/axel –help
Usage: axel [options] url1 [url2] [url...]
--max-speed=x -s x Specify maximum speed (bytes per second)
……