前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >100个Linux命令(6)-软件管理 rpm 和 yum

100个Linux命令(6)-软件管理 rpm 和 yum

原创
作者头像
懒人的小脑
修改2019-01-16 15:50:19
2.2K0
修改2019-01-16 15:50:19
举报
文章被收录于专栏:懒人的运维备忘录

这是100个 Linux 命令中的第59和60个命令,主要是用于管理软件的 rpm 和 yum 命令,以及 Linux 中关于软件的一些你应该知道的基础知识。

命令篇

59.rpm

安装

一般用法:rpm -ivhUe --nodeps --test --force --prefix

解释:

  • -i:安装,install
  • -v:显示安装信息,还可以使用多个“v”,v 提供的越多显示的信息越详细
  • -h:显示安装进度,进度使用"#"表示
  • -U:升级和升级包
  • -F:只升级已安装包
  • -e:卸载包,卸载也有依赖性,"--erase"
  • --nodeps:忽略依赖性强制安装或卸载,
  • --test:测试是否能够成功安装指定的 rpm 包
  • --prefix:新路径,自行指定安装路径而不是使用默认路径,基本都不支持该功能。
  • --force:强制安装
  • --replacepkgs:替换安装,即重新覆盖安装。对于误删文件,直接使用此选项再次安装即可

查询

选项

功能

-q

查询已安装的包

-qp

查询未安装的包

-qa

查询所有已安装的包,也可以指定通配符名称进行查询

-qi

查询指定包的信息(版本、开发商、安装时间等) 从这里可以查看到软件包属于哪个包组

-ql

查询包的列表和目录 (包在生产的时候就指定了文件路径,因此可以查看未安装的包)

-qR

查询包的依赖关系(Required)

-qc

查询安装后生成的配置文件

-qd

查询安装后生成的帮助文档

--scripts

查询包安装相关的脚本文档。 (安装前脚本、安装后脚本、卸载前脚本、卸载后脚本)

(1)查询文件 /etc/yum.conf 是由哪个 rpm 包安装的:

代码语言:javascript
复制
~ rpm -qf /etc/yum.conf
yum-3.4.3-161.el7.centos.noarch

(2)查询安装 httpd 时生成了哪些目录和文件,还可以过滤出提供了哪些命令行工具

代码语言:javascript
复制
rpm -ql httpd
rpm -ql httpd | grep 'bin/'

(3)查询某个未安装的包的依赖性

代码语言:javascript
复制
rpm -qRp zip-3.0-1.el6.x86_64.rpm
repoquery -R zip  #repoquery由 yum-utils 提供

60.yum

yum 子命令

子命令

功能

help

命令的帮助信息 yum help install

clean

清除缓存数据

makecache

生成元数据缓存数据 yum makecache

deplist

列出包的依赖关系

erase

卸载包

fs|fssnapshot

为当前文件系统创建快照,或者列出或删除当前已有快照 快照是非常有用的,升级或打补丁前拍个快照,就能放心升级或打补丁了

groups

操作包组

history

查看 yum 事务信息 yum 是独占模式的进程,所以有时候查看事务信息还是有用的

info

输出包或包组信息 如该包时谁制作的,大概是是干啥用的以及来源于哪个包组等信息

install

包安装命令

list

列出包名,一般会结合 grep 来搜索包 yum list all | grep -i zabbix

provides

搜索给定的内容是由谁提供的

reinstall

重新安装包

repolist

列出可用的仓库列表

search

给定字符串搜索相关包,并给出相关包的信息

update

更新包

yum 选项

  • -R [minutes],--randromwait=[minutes]:最多等待时间
  • -q,--quiet:安静模式
  • -v,--verbose:详细模式
  • -y,--assumeyes:对所有问题回答 yes
  • --assumeno:对所有问题回答 no
  • --enablerepo=[repo]:启用一个或多个仓库,可用通配符通配仓库 ID
  • --disablerepo=[repo]:禁用一个或多个仓库,可以使用通配符
  • -x [package],--exclude=[package]:通配要排除的包
  • --nogpgcheck:禁用 gpgcheck
  • --color=COLOR:带颜色
  • --downloadonly:仅下载包,不安装或升级。默认下载在yum的缓存目录中,默认为/var/cache/yum/$basearch/$releasever。 --downloaddir=DLDIR 指定下载目录

yum 操作包组

类似的命令有:group、groupinstall、groupinfo、groupupdate、groupremove、grouperase

原理篇

Linux 中构建C 程序的过程

  1. 准备 C 程序的源码。包含 c文件和 h 文件;
  2. 编译。使用编译器(如 gcc)将源码(c 文件和 h 文件)编译成目标文件 o 文件;
    1. 在编译过程中,使用 makefile 文件中的配置选项进行编译。makefile 文件可以使用 configure 工具生成。make 命令根据 makefile 文件进行编译,然后在使用 make install 安装。
    2. 对于源程序没有提供 configure 或 config 诸如此类的文件,此时很有可能直接使用 make 命令带上相关编译参数进行编译即可。
  3. 链接。在 Linux 上使用 ld 工具,将 o 文件和所需的库文件链接起来组成一个可正常工作的可执行程序。链接了库文件之后可可以发起一些系统调用。

在 `make` 编译时,可能会需要提供头文件和库文件的路径,如果不提供,则搜索默认路径。当搜索路径下都找不到所需文件时,会报错库文件或头文件不存在。一般情况,只需要安装其对应的 devel 包即可,缺少库文件则可能需要安装主包,也可能需要 devel 包,还可能需要单独的 libs 包。

gcc 编译器的头文件默认搜索路径为(`cpp -v`):

  • /usr/local/include
  • /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include,不同系统有所不同使用 cpp -v 查看
  • /usr/include

库文件的默认搜索路径及优先级:

  • 编译目标代码时指定的动态库搜索路径
  • 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
  • 配置文件/etc/ld.so.conf 中指定的动态库搜索路径
  • 默认的动态库搜索路径/lib
  • 默认的动态库搜索路径/usr/lib

make 编译程序时参数的给定遵循一定的规则:

make编译 C 程序的参数
make编译 C 程序的参数

关于更多可能用的编译选项,可以参考源程序包中的 README 或 INSTALL 文件。

关于库名:

(1)前面必须是 lib,中间是库名,后面是后缀,例如 libutil.so,其库名是 utli。

(2)库文件的后缀有3种:静态库 a、动态库 so 或 sl

(3)很多库的后缀后面还会有数字,这些数字与库的版本有关,带有数字版本的库文件是不带数字库文件的链接。例如libutil.so.1它会指向libutil.so。这样就可以实现多版本共存,如果有多个库版本,只要找到libutil.so就可以找到最新版本的库文件。当然,如果想要使用特定版本的库,只需修改下它的软链接指向即可。

软件包中的相关概念

软件包的命名

在 rhel/centos/fedora 上,包的名称以 rpm 结尾,分为二进制包和源码包。源码包以“.src.rpm”结尾,源码包是未经编译的包,可以自行进行编译或者用其制作自己的二进制 RPM 包。非“.src.rpm”结尾的包都是二进制包,他们都是已经编译完成的,安装 rpm 包的过程实际上就是将包中的文件复制到 linux 中,有时可能还需要在复制之前执行一些命令,诸如创建一个必要的用户等。

源码包与源码的区别:

  • 源码一般是打包压缩后的文件,如.tar.gz 结尾的文件
  • 源码包中包含了源码,还包含了一些有助于制作二进制包 rpm 的文件。如源码编译安装的程序都没有系统服务启动脚本,二进制 rpm 包安装就有,因为二进制rpm 包都是通过源码包".src.rpm"定制而来的,在源码包中提供了必要的文件,并且在安装 rpm 的时候复制到指定路径下。

一个 RPM 包的名称分为包全名和包名两种。包全名包含了一个软件包关于包名、版本号、适用架构等信息。

包全名中包含的信息
包全名中包含的信息

使用rpm工具管理包:

如果要操作未安装的包,则使用包全名,如安装包,查看未安装包的信息等;如果要操作已安装的rpm包,则只需要给定其包名即可,如查询已装包生成了哪些文件,查看已装包的信息等。

对于yum工具:

只需给定其包名即可,若有需要,再指定版本号,如明确指明要安装1.6.10版本的tree工具,`yum install tree-1.6.10`。

主包与子包

对于一个程序,在制作 RPM 包时,会按照功能将其拆分为多个不同功能的子包,如客户端程序包、服务端程序包等。

对于 mariadb 这个程序来说,它分为一下几个包:

程序包

功能

mariadb.x86_64

客户端主包

mariadb-server.x86_64

提供服务的主包

mariadb-devel.x86_64 mariadb-libs.x86_64

提供给其他需要联合 mariadb 的程序使用

对于编译安装的包会包含所有功能,也就是所编译一个程序后,它的客户端工具、服务端工具、库文件、头文件等都已经安装。

RPM 包管理工具

rpm 包被安装后,会在/var/lib/rpm 下建立已安装 rpm 的数据库,以后的任何 rpm 升级、查询、版本比较等包操作,都是从这个目录下获取信息并完成相应操作。

/var/lib/rpm rpm数据库
/var/lib/rpm rpm数据库

RPM 安装程序时会将相关文件复制到系统的相应目录中:

目录

功能

/etc/

配置文件目录

/bin、/sin、/usr/bin、/usr/sbin

可执行文件

/lib、/lib64、/usr/lib、/usr/lib64

库文件

/usr/include

头文件

/usr/share/doc

使用手册和帮助手册

/usr/share/man

man page

关于 rpm 工具最常用的是查询工具,RPM 最大的缺点是无法解决包依赖关系,对于安装、升级和卸载基本都是使用 yum 工具。

注意:不要对内核升级,多版本内核可以共存,因此可以执行安装内核操作。

yum 工具

/etc/yum.conf 是 yum 的默认配置文件,此配置文件是全局默认项

/etc/yum.conf 配置项解释
/etc/yum.conf 配置项解释

yum 仓库

yum 仓库的配置文件:/etc/yum.conf 和/etc/yum.repos.d/中的“.repo”文件。/etc/yum.conf配置的是仓库的默认项,一般配置yum源都是在/etc/yum.repos.d/*.repo中配置。注意,该目录中任意repo文件都会被读取。

默认/etc/yum.repos.d/下会有以下几个仓库文件,除了CentOS-Base.repo,其他的都可以删掉,基本没用。

repo 文件的配置格式如下:

repo 配置选项
repo 配置选项

另外 cost 表示开销,开销越高仓库的优先级越低。

repo 配置文件中可用的宏

解释

$releasever

程序的版本,对于 yum 而言指定是 redhat-release 版本。 只替换为主版本号,如 Redhat7.5,则替换为7

$arch

系统架构

$basearch

系统的基本架构,如 i386等

$YUM0-9

在系统定义的环境变量,可以在 yum 中使用

系统发行商在系统中放置的rpm包一般版本都较老,可能有些包有较大的延后性。而epel是由fedora社区维护的高质量高可靠性的安装源,有很多包是比系统包更新的,且多出很多系统没有的包。

方法一:直接安装 epel-release-noarch

代码语言:javascript
复制
yum install epel-release
或
rpm -ivh epel-release-latest-7.noarch.rpm(根据不同操作系统版本选择)

方法二:直接增加 epel 仓库

代码语言:javascript
复制
vim /etc/yum.repos.d/epel.repo
[epel]
name=epel
baseurl=http://mirrors.sohu.com/fedora-epel/6Server/$basearch/
enabled=1

源码编译程序的一般过程

拿到源码的压缩包后,首先就是解压,这就不需说了。解压后,进入解压目录,这是必须动作,之后就是源码编译的一般步骤。并非适用所有程序的编译,但知道过程之后也可以举一反三了。

(1)阅读解压目录中的INSTALL/README文件。如果不是对着官方手册或文档,那么在安装前务必读一读INSTALL文件或README文件,只需读其中如何安装的部分即可。

(2)解压后的目录里一般还有configure文件(也可能是config文件)。执行"./configure"或带有编译选项的"./configure",检查系统环境是否符合满足安装要求,并将定义好的安装配置写入和系统环境信息写入Makefile文件中。里面包含了如何编译、启用哪些功能、安装路径等信息。

(3)执行make命令进行编译。make命令会根据Makefile文件进行编译。编译工作主要是调用编译器(如gcc)将源码编译为可执行文件,通常需要一些函数库才能产生一个完整的可执行文件。

(4)make install将上一步所编译的数据复制到指定的目录下。

以上已经完成编译程序的过程了。

configure 脚本的通用功能

功能

解释

--prefix=

指定安装的路径

--sysconfir=

指定配置文件目录

--enable-feature=

启用某个特性

--disable-feature=

禁用某特性

--with-funciton

启用某功能

-without-function

禁用某功能

不同的程序,其configure选项不尽相同,应使用"./configure --help"获取具体的信息。

源码编译的注意事项

(1)上面的每一个步骤都不能出错,否则后一步都不能正常进行。

(2)上面的步骤每一步如果出现警告或错误,如果步骤未停止而是继续,则属于可忽略错误或警告,不影响安装。但是进行的步骤停止了出现警告或错误,则根据步骤考虑对策。可以使用“$?”命令查看上一个命令是否正确执行,如果是返回0则是正确,其他的则是错误。

(3)卸载时,只需删除安装目录即可。因此,若要便于删除,最好将源码程序安装在/usr/local/对应的目录下。例如apache2安装在/usr/local/apache2下。

(4)通过源码编译的软件,需要做一些后续操作,虽非必须,但是都是个性化定制,方便以后的操作。个性化定制大致包括以下几项:

  • 将安装路径下的命令路径加入到环境变量。
代码语言:javascript
复制
shell> echo "export PATH=/usr/local/apache/bin:$PATH" > /etc/profile.d/apache.sh
shell> chmod +x /etc/profile.d/apache.sh
shell> source /etc/profile.d/apache.sh
  • 按需求定制服务启动脚本,并考虑是否加入开机启动项。
  • 输出头文件和库文件。头文件库文件很多时候只是为其他程序提供的,所以可能不输出它们的路径也不会影响该程序的运行。
代码语言:javascript
复制
# 输出头文件
shell> ln -s /usr/local/apache/include /usr/include/apache

# 输出库文件
shell> echo "/usr/local/apache/lib" >/etc/ld.so.conf.d/apache.conf
shell> ldconfig
  • 导出man路径
代码语言:javascript
复制
shell> echo  "MANPATH /usr/local/apache/man" >> /etc/man.conf

参考链接:

http://www.cnblogs.com/f-ck-need-u/p/7049750.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 命令篇
    • 59.rpm
      • 安装
      • 查询
    • 60.yum
    • 原理篇
      • Linux 中构建C 程序的过程
        • 软件包中的相关概念
          • 软件包的命名
          • 主包与子包
        • RPM 包管理工具
          • yum 工具
            • yum 仓库
          • 源码编译程序的一般过程
          相关产品与服务
          命令行工具
          腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档