Linux入门——软件包管理

  大多数现代类 Unix 操作系统都提供了一个集中的软件包管理机制,以帮助用户搜索、安装和管理软件。而软件通常以「包」的形式存储在仓库「repository」中,对软件包的使用和管理被称为包管理。而 Linux 包的基本组成部分通常有:共享库、应用程序、服务和文档。

  在配置 Linux 服务器或开发环境时,通常都不仅限于使用官方源。相较于现如今软件版本快速更新迭代而言,虽然官方源所使用的稳定,但版软件包很可能已过时,但对于系统管理员和开发人员来说,掌握常见 Linux 包管理基本操作还是一项必备的常用技能。

Rpm

rpm 安装

    rpm  -i  安装

        -iv 显示过程

        -ivv 显示详细过程

        -ivh 显示过程及安装进度百分比(最常用)

        --nodeps 在安装或卸载时忽略依赖性

       -Uvh 新版本rpm   升级rpm包,若有旧版本,则先删除旧版本再安装新版本, 若没有旧版本,则直接安装指定的rpm包。(当升级内核时,应使用-ivh 安装新内核,以保证旧内核依然存在)

         -q 包名 查询已安装过的包的信息

         -qa  列出已安装过的所有rpm包

         -qa "*关键字*" 或 rpm -qa |grep 关键字

    -qf 文件路径  查询指定文件来自于哪一个已安装的rpm包

         -ql httpd 列出软件包提供的所有文件

例子:删除某文件后利用rpm2cpio解开rpm来恢复文件

[root@centos(liang) ~]# rm -rf /etc/rc.d/init.d/functions    #删除文件
[root@centos(liang) ~]# rpm -qf /etc/rc.d/init.d/functions  #查询文件来资那一已安装的rpm包
initscripts-9.03.58-1.el6.centos.x86_64
[root@centos(liang) ~]# mount /dev/cdrom /media/  #挂载光盘
mount: block device /dev/sr1 is write-protected, mounting read-only
[root@centos(liang) ~]# cp /media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm /app   #复制rpm包到一临时文件
[root@centos(liang) ~]# cd /app
[root@centos(liang) app]# rpm2cpio initscripts
-9.03.58-1.el6.centos.x86_64.rpm |cpio -id #进入临时目录并解开rpm包
[root@centos(liang) app]# cp etc/rc.d/init.d/functions /etc/rc.d/init.d/ #从解出的目录里找到需要的文件并复制到相关的原目录下

Yum

  我们在通过rpm安装时软件包之间有通常有依赖关系,要安装的A包依赖B包的库文件,而B包又依赖于C包,这总互相依赖关系十分痛苦,我们假设可以知道所有的包可以产生,哪些文件,那我们就可以解决这种依赖关系,这就是yum(并不全是这样)

/etc/yum.repos.d/*.repo  仓库路径

           [repoid]  仓库的名称,不能重复

           name= 仓库的描述,可以不写,将会用repoid当作name

           enabled=1|0  激活或禁用仓库,若不写该行,则默认启用

           gpgcheck=1|0 是否在安装包是检测gpg签名,默认检测,即为1

           gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7  指定gpg key的路径 ,可以不写

:yum搭建

[epel]  #仓库名称不可重,必须写
name=mage epel  #仓库描述,可不写
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/  #仓库路径;这个是清华的epel园,必须写
enabled=1  #激活仓库,可不写
gpgcheck=0  #检测安装包gpg签名,可不写

 yum  

  install 包名    安装包

  update 包名  更新包

   reinstall 包名  重新安装指定的包

   -y 自动应答

   remove 卸载包 卸载时不会连同依赖包一同卸载

yum

       repolist [enabled] 默认,只显示已激活的仓库

       disabled 仅显示已禁用的仓库

       all 显示所有仓库

  clean all  清空yum缓存 (新建yum后建议清空一下仓库)

yum list

        all 默认 表示列出所有包

        updates 列出可更新的包

        installed 列出已安装的包

        install 包名1 [*包名*] [包名2……]

yum info 包名 查看指定包的详细信息

yum provides "*/rz"   搜索一个文件来自于哪个rpm包,可以是未安装的包

yum search 关键字 模糊搜索 软件包和描述

yum deplist php  列出指定包所依赖的所有包

yum history 列出所有的yum历史 --

           info # 查看某条历史的详细信息

           redo # 重做某条历史

           undo # 撤消某条历史

                  如果该历史为install,则undo 是remove

                  如果该历史为remove,则undo 是install

例:利用yum安装dnf

[root@centos(liang) app]# yum install dnf
#通过这个例子我们可以很好看出yum很好的解决了软件包之间的依赖,
#甚至你不需要知道软件包的全名是什么,yum都可以帮你自动匹配该软件的软件包

软件包组

包组就是把一类经常彼此之间需要用到的软件打包,放在一起,方便我们安装

yum grouplist 列出所有的包组名

yum groupinfo '包组名' 查看指定包组中包含哪个包

yum groupinstall '包组名'

yum groupupdate '包组名'

yum groupremove '包组名'

 yum reinstall bind --downloadonly --downloaddir=/app   仅下载包,不安装

例:安装Development Tools包组

[root@centos(liang) app]# yum groups install Development Tools
#哪怕是包组这种用很多软件组成的,yum也可以完全胜任

DNF

  新一代的RPM软件包管理器。他首先出现在Fedora 18 这个发行版中。而最近,他取代了YUM,正式成为Fedora 22 的包管理器。DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。

DNF 发行日期是2015年5月11日。DNF 包管理器(包括在他之前的所有版本)都大部分采用Pathon 编写,发行许可为GPL v2.

安装所需软件包(centos7),最新的epel提供

  dnf-0.6.4-2.sdl7.noarch.rpm

  dnf-conf-0.6.4-2.sdl7.noarch.rpm

  libcomps-0.1.8-3.el7.x86_64.rpm

  python-dnf-0.6.4-2.sdl7.noarch.rpm

  python2-libcomps-0.1.8-3.el7.x86_64.rpm

  配置文件/etc/dnf/dnf.conf

dnf的使用与yum一致

dnf[options] <command> [<arguments>...]

dnf --version

dnfrepolist

dnfclean all

dnfmakecache

dnflist installed

dnflist available

dnfsearch nano

dnfhistory

dnfhistory undo 1

dnf软件安装速度极其迅速,取代yum只是时间问题

例:效率测试对比

time yum reinstall -y vsftpd

time dnf  reinstall -y vsftpd

[root@centos(liang) app]# time yum reinstall -y vsftpd

  完毕!

  real 0m17.103s
  user 0m1.168s
  sys 0m0.864s

[root@centos(liang) app]# time dnf  reinstall -y vsftpd
完毕!
real 0m5.039suser
0m0.867ssys
0m0.342s

源码包安装

我们知道Linux的所有软件都遵循GPL协议,对外公布所有源码,但Rpm与yum安装的都为二进制包,如果我们得到的源码包,将如何安装

源代码安装过程:程序源代码--> 预处理--> 编译--> 汇编--> 链接

C语言源代码编译安装三步骤

1、./configure

(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成Makefile

(2) 检查依赖到的外部环境,如依赖的软件包

2、make 根据Makefile文件,构建应用程序

3、make install 复制文件到相应路径

例:在CentOS7上编译安装apache 2.4源码包,并启动此服务

[root@localhost app]# rz #上传命令可以从本地上传到虚拟机当前目录位置

[root@localhost app]# ll
总用量 6376
-rw-r--r--. 1 root root 6527394 7月 30 07:36 httpd-2.4.27.tar.bz2

[root@localhost app]# tar xvf httpd-2.4.27.tar.bz2   #解压软件包

[root@localhost app]# ls
httpd-2.4.27 httpd-2.4.27.tar.bz2
[root@localhost app]# cd httpd-2.4.27/
[root@localhost httpd-2.4.27]# ls   #有很多文件我就不列了

cinclude.m4     ap.d             buildconf       configure    

[root@localhost httpd-2.4.27]# ./configure  --help #获取配置帮助

[root@localhost httpd-2.4.27]# ./configure --prefix=/app/apache24 --sysconfdir=/etc/apache24 #可能会报很多错,那是缺少依赖库文件,一个一个解决就行了
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
configure:
configure: Configuring Apache Portable Runtime library...
configure:
checking for APR... no
configure: error: APR not found. Please read the documentation.   #缺少的就是这个包

[root@localhost ~]# yum install -y apr-devel apr-util-devel pcre-devel #缺少的就是这仨包

[root@localhost httpd-2.4.27]# ./configure --prefix=/app/apache24 --sysconfdir=/etc/apache24 #预处理

[root@localhost ~]# make   #构建应用程序

[root@localhost ~]# make install  #复制文件到相应路径

[root@localhost httpd-2.4.27]# export PATH=$PATH:/app/apache24/bin #定义全局变量方便我们敲命令,也可以写在全局文件定义中

[root@localhost httpd-2.4.27]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/app/apache24/bin

[root@localhost httpd-2.4.27]# iptables -F   #关闭防火墙

[root@localhost apache24]# apachectl start   #启动服务 ,然后你就可以在任意浏览器输入你的ip地址就行了

猜你喜欢

转载自www.cnblogs.com/angge/p/9395041.html