Linux中的软件包(即二进制包),主要分为两类node
.rpm
"。.deb
"。不管是RPM仍是DPKG机制,都存在软件包依赖问题,好比软件包A依赖软件包B,软件包B又依赖软件包C,即依赖关系是 "A -> B -> C",那么就必须先安装C,在安装B,最后A才能安装成功。为了解决这种依赖问题,Linux开发商都提供了在线安装机制,经过这种机制能够自动解决依赖关系,安装A时会自动安装B和C,就不须要手动去一步步安装B和C了。基于RPM包管理机制开发出了YUM在线安装机制,基于DPKG包管理机制开发出了APT在线安装机制。mysql
发行版表明 | 软件包管理机制 | 相关指令 | 在线安装机制(指令) |
---|---|---|---|
Red Hat/CentOS | RPM | rpm, rpmbuild | YUM(yum)) |
Debian/Ubuntu | DPKG | dpkg | APT(apt-get) |
软件包安装优缺点linux
优势:web
缺点:正则表达式
所谓源码包通常就是指C语言开发的源代码文件的一个压缩包(.tar.gz
或.tar.bz2
)。源码包的编译用到了linux系统里的编译器 gcc,利用它就能够把C语言变成可执行的二进制文件,因此若是要使用源码包安装必须先安装 gcc 编译器(可使用 yum install -y gcc
完成安装)。sql
源码包安装优缺点shell
优势数据库
缺点apache
RPM 软件包的命名规则为:软件包名-版本-发布次数-Linux平台-硬件平台.rpm
以Apache软件包的包全名为例:"httpd-2.2.15-69.el6.centos.x86_64.rpm"
一、httpd:软件包名
二、2.2.15:软件版本
三、69:软件发布的次数
四、el6.centos:适合的Linux平台
五、x86_64:适合的硬件平台,这里表示64位
六、rpm:rpm包的扩展名,注意Linux是没有扩展名的概念,这里是为了方便管理员识别segmentfault
RPM 包来源:
第二种方式,经过挂载安装光盘,光盘中包含全部的RPM包。以 Centos6 为例:
/dev/cdrom
、/dev/cdrom1
mkdir /mnt/cd1/ /mnt/cd2/
mount /dev/cdrom /mnt/cd1/
、mount /dev/cdrom1 /mnt/cd2/
。挂载完成后,可在/mnt/cd1/Packages/
和/mnt/cd2/Packages/
目录下看到全部的RPM包RPM 包的默认安装位置以下:
路径 | 说明 |
---|---|
/etc/ | 配置文件的安装目录 |
/usr/bin/ | 可执行的命令安装目录 |
/usr/lib/ | 程序所使用的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man/ | 帮助文件保存位置 |
RPM软件包的管理工具是 rpm
命令,命令格式:rpm 选项 [软件包名]
/var/lib/rpm/
目录下的数据库文件中(这个目录下的数据库文件很重要,后续软件升级和卸载就就依赖于这个数据库)安装命令:rpm -ivh 包全名
选项
-i
:安装(install)-v
:显示详细信息-h
:打印#显示安装进度--nodeps
:不检测依赖性安装。软件安装时会检测依赖性,若是所依赖的软件还未安装则会报错,加上这个选项则不检测依赖强制安装,但这样安装的软件通常不能使用,建议不要这样作。--replacefiles
:替换文件安装。若是安装的软件包中的部分文件已经存在,则会安装报错,使用该选项就会覆盖现有文件继续安装--replacepkgs
:替换软件安装。若是软件包已经安装,使用该选项可把软件包从新安装一遍--force
:强制安装。无论是否已经安装,都从新安装,至关于 "--replacefiles" 和 "--replacepkgs" 的综合--test
:测试安装。不会实际安装,只是检测一下依赖--prefix=安装路径
:指定安装路径。为安装的软件指定安装路径,而不是使用默认安装路径。注意:若是指定了安装路径,软件没有安装到默认路径中的话,系统会找不到这些安装的软件,而须要进行手工配置才能被系统识别,因此RPM包通常建议采用默认路径安装升级命令:rpm -Uvh 包全名
或 rpm -Fvh 包全名
选项
-U
:升级安装。若是没有安装过,系统直接安装,若是已安装的版本较旧,则升级到新版本-F
:升级安装。若是没有安装过,则不会安装,必须安装有较旧版本才能升级卸载命令:rpm -e 包名
选项
-e
:卸载软件包--nodeps
:卸载时不检查依赖性。若是卸载的软件被其余软件依赖,卸载失败,加上此选项可强制卸载注意:卸载已安装的软件使用包名便可,不须要使用包全名
1. 查询软件包是否安装:rpm -q 包名
选项:
-q
:查询(query)2. 查询系统中全部安装的软件包:rpm -qa
选项:
-a
:全部(all)3. 查询软件包的详细信息
已安装:rpm -qi 包名
未安装:rpm -qip 包全名
选项:
-i
:查询软件信息(information)-p
:查询没有安装的软件包(package)4. 查询软件包的文件列表和安装目录
已安装:rpm -ql 包名
未安装:rpm -qlp 包全名
选项:
-l
:列出软件包中全部文件和软件所安装的目录(list)5. 查询系统文件属于哪一个软件包:rpm -qf 系统文件
选项:
-f
:查询拥有指定文件的软件包(file)6. 查询软件包所依赖的其余软件包
已安装:rpm -qR 包名
未安装:rpm -qRp 包全名
选项:
-R
:查询软件包的依赖性(required)1. 校验指定的已安装RPM包:rpm -V 包名
选项:
-V
:校验指定的RPM包中的文件(verify)若是执行命令后无任何提示,代表没有作任何修改,若是执行命令后有内容输出,则软件包中的文件被修改过。下面假设已安装的Apache配置文件 "/etc/httpd/conf/httpd.conf" 被修改过为例,来讲明一下校验输出的内容:
[root@localhost ~]# rpm -V httpd S.5....T. c /etc/httpd/conf/httpd.conf
第一列("S.5....T.")是验证的内容,具体字母含义以下:
S
: 文件大小是否改变M
: 文件的类型或文件的权限( rwx )是否被改变5
: 文件MD5 校验和是否改变( 能够当作文件内容是否改变 )D
: 设备的主从代码是否改变L
: 文件路径是否改变U
: 文件的属主( 全部者 ) 是否改变G
: 文件的属组是否改变T
: 文件的修改时间是否改变第二列("c")是被修改的文件类型,有如下几种:
c
: 配置文件(config file)d
: 普通文档(documentation)g
: "鬼"文件, 不多见, 就是该文件不该该被这个RPM包包含(ghost file)L
: 受权文件(license file)r
: 描述文件(read me)2. 校验本机全部已安装RPM包:rpm -Va
3. 校验某个系统文件是否被修改:rpm -Vf 系统文件
yum 源指的就是获取 rpm 包的位置(默认就是官网服务器,包含全部的软件包)。yum源配置文件保存在 /etc/yum.repos.d/
目录下,一共有5个扩展名为 ".repo" 的文件 CentOS-Base.repo
、CentOS-fasttrack.repo
、CentOS-Vault.repo
、CentOS-Debuginfo.repo
、CentOS-Media.repo
。默认状况下只有 CentOS-Base.repo
文件是生效,文件内容以下:
[root@localhost yum.repos.d]# cat CentOS-Base.repo # CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #released updates [updates] name=CentOS-$releasever - Updates mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #contrib - packages by Centos Users [contrib] name=CentOS-$releasever - Contrib mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
在 CentOS-Base.repo 文件中有5个 yum 源容器,这里主要解释一下 [base]
容器(其余容器相似):
[base]
:容器名称,必定要放在 [ ] 中name
:容器说明,能够本身随便写mirrorlist
:镜像站点,这个能够注释掉baseurl
:yum源服务器的地址。mirrorlist是由yum程序自行去找镜像站点,baseurl则是指定固定的一个地址enabled
:此容器是否生效,若是不写或者enabled=1则表示此容器生效,写成enabled=0则表示次容器不生效gpgcheck
:若是为1表示RPM的数字证书生效;若是为0表示RPM的数字证书不生效gpgkey
:数字证书的公钥文件保存位置搭建本地光盘为yum源
若是在没有网的状况下,能够把挂载的光盘做为yum源。
第一步,首先挂载光盘。这里假设已经挂载了两张光盘,挂载点分别为/mnt/cd1/
和/mnt/cd2/
第二步,修改 CentOS-Media.repo
文件。修改baseurl为两个光盘的挂载点,修改enabled=1。以下:
[c6-media] name=CentOS-$releasever - Media # 地址为本地光盘的挂载点 baseurl=file:///mnt/cd1/ file:///mnt/cd2/ gpgcheck=1 # 把 enabled 改成1让这个容器生效 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
第三步,为了CentOS-Media.repo
文件真正的生效,须要使其余的yum源配置文件失效。由于只有扩展名为 "*.repo" 的文件才能做为yum源配置文件,能够修改其余yum源配置为备份文件,如 mv CentOS-Base.repo CentOS-Base.repo.bak
yum命令是在Fedora和RedHat以及SUSE中基于 rpm 的软件包管理器,可以从指定的服务器自动下载RPM包而且安装,能够自动处理依赖性关系,而且一次安装全部依赖的软体包,无须繁琐地一次次下载、安装。
yum 命令格式:yum [选项] COMMAND [软件包]
选项:
-y
:自动回答"yes",再也不询问。若是不加该选项,安装过程当中每一个涉及的包安装都要手工回答 "yes" or "no"-q
:静默模式。不显示安装过程-C
:彻底从缓存中运行,而不去下载或者更新任何头文件COMMAND (要进行的操做)
install
:执行安装操做update
:执行升级操做remove
:执行卸载操做list
:显示可用软件包列表search
:根据关键字匹配软件包info
:显示软件包信息安装指定软件包:yum -y install 包名
安装所有软件包:yum -y isntall
(不经常使用)
升级指定软件包:yum -y update 包名
升级所有软件包:yum -y update
(不经常使用)
卸载指定软件包:yum remove 包名
1. 查询软件包列表
查询yum源服务器上全部可安装的软件包列表:yum list
查询yum源服务器上是否存在某个软件包:yum list 包名
2. 查询关键字属于哪一个软件包
命令格式:yum search 关键字
通常用于查找 某个指令 是由哪一个软件包提供的。好比,要使用 "ifconfig" 指令,须要先安装 "net-tools" 包
[root@localhost yum.repos.d]# yum search ifconfig 已加载插件:fastestmirror, security Loading mirror speeds from cached hostfile * base: mirrors.huaweicloud.com * extras: mirrors.huaweicloud.com * updates: mirrors.huaweicloud.com =================================================== Matched: ifconfig =================================================== net-tools.x86_64 : Basic networking tools
3. 查询指定软件包信息:yum info 软件包
默认状况下,经过 yum 成功安装软件后,会把下载的软件包删除。若是要保留下载的软件包,能够编辑配置文件 /etc/yum.conf
,把里面 "keepcache" 参数改成 1 (默认 keepcache=0 ),这样每次经过 yum 安装软件时,会把下载的软件包缓存在 /var/cache/yum/
目录下,下次再安装相同的软件时,能够从缓存中获取软件包,即便在没有网络的状况下也可正常安装。
1. 清除缓存:yum clean packages|headers|oldheaders|all
packages
:清除缓存目下的软件包headers
:清除缓存目录下的 headersoldheaders
:清除缓存目录下旧的 headersall
:清除所有
2. 从新创建新的缓存:yum makecache
3. 只从缓存中查找软件包并安装:yum -C install 包名
软件组指的是一组相关的软件包(注意,这里指的不是依赖关系),经过 yum 命令能够对组内软件包批量管理。
1. 列出全部可用软件组:yum grouplist
[root@localhost yum.repos.d]# yum grouplist 已加载插件:fastestmirror, security 设置组进程 Loading mirror speeds from cached hostfile * base: mirrors.huaweicloud.com * extras: mirrors.huaweicloud.com * updates: mirrors.huaweicloud.com 已安装的组: Java 平台 NFS 文件服务器 ...省略... Installed Language Groups: 中文支持 [zh] 亚美尼亚语支持 [hy] ...省略... 有效的组: MySQL 数据库服务器 万维网服务器 ...省略... Available Language Groups: 上索布语支持 [hsb] 不丹语支持 [dz] ...省略... 完成
2. 查询组内包含哪些软件:yum groupinfo "软件组名"
[root@localhost yum.repos.d]# yum groupinfo "万维网服务器" 已加载插件:fastestmirror, security 设置组进程 Loading mirror speeds from cached hostfile * base: mirrors.huaweicloud.com * extras: mirrors.huaweicloud.com * updates: mirrors.huaweicloud.com 组:万维网服务器 描述:容许将系统做为 web 服务器使用,并运行 Perl 和 Python web 应用程序。 必要的软件包: httpd 默认的软件包: crypto-utils httpd-manual mod_perl mod_ssl mod_wsgi webalizer 可选的软件包: certmonger libmemcached memcached mod_auth_kerb ...省略...
注意:使用本地终端查出的组名都是英文的,命令中的软件组名也须要使用英文;远程终端(如Xshell)若是支持中文,查出的软件组名是中文的,因此命令中的软件组名既可使用中文,也可使用英文,yum groupinfo "万维网服务器"
和 yum groupinfo "Web Server"
是等效的
3. 安装软件组内全部软件:yum groupinstall "软件组名"
4. 卸载软件组内多有软件:yum groupremove "软件组名"
DPKG 软件包的命名规则为:软件包名_版本号-修订号_平台.deb
例如:openssh-server_8.2p1-4_amd64.deb
DPKG 包的管理工具是 dpkg
命令,命令格式:dpkg 选项 [软件包名]
/var/lib/dpkg/
目录下的数据库文件中,通常"/var/lib/dpkg/status" 文件中存储软件状态和控制信息,"/var/lib/dpkg/info/xxx.list"文件中记录了软件安装文件清单 安装命令:dpkg -i 包全名
选项
-i
:安装--unpack
:解开软件包--configure
:配置软件包-i
选项所作操做包含解开软件包和配置软件包,至关于这两步操做:
dpkg --unpack 包全名
dpkg --configure 包名
卸载命令:dpkg -r|-P 包名
选项
-r
:删除已安装的软件包,但保留配置文件-P
:删除已安装软件包,彻底清除包(含配置文件)1. 查询已安装软件包列表,命令:dpkg -l [包名]
选项
-l
:查询已安装软件包列表,包含状态、版本信息包名
:查询指定的软件包,若是省略查询所有已安装软件包。包名可以使用通配符示例:
图中,第一列表示软件包状态标识,状态标识共三位字符表示,
第一位,指望状态:u(Unknown)
: 状态未知,这意味着软件包未安装,而且用户也未发出安装请求i(Install)
: 用户请求安装软件包r(Remove)
: 用户请求卸载软件包p(Purge)
: 用户请求清除软件包h(Hold)
: 用户请求保持软件包版本锁定
第二位,当前状态:n(Not)
:软件包未安装i(Inst)
:软件包安装并完成配置c(Conf-files)
:软件包之前安装过,如今删除了,可是它的配置文件还留在系统中U(Unpacked)
:软件包仅被解包,还未配置F(halF-conf)
:试图配置软件包,可是失败了H(Half-inst)
:软件包安装,可是可是没有成功W(trig-aWait)
:触发器等待T(Trig-pend)
:触发器未决
第三位,错误状态:h
:软件包被强制保持,由于有其它软件包依赖需求,没法升级R
:Reinst-required,软件包被破坏,可能须要从新安装才能正常使用(包括删除)x
:软包件被破坏,而且被强制保持
2. 列出软件包关联文件,命令:dpkg -L 包名
或 dpkg -L 包全名
选项
-L
:列出已安装软件包关联文件列表-c
:列出未安装软件包关联文件列表也能够经过该命令查看软件包文件安装目录位置
3. 显示软件包的详细状态,命令:dpkg -s 包名
选项
-s
或 --status
:显示软件包的详细状态4. 搜索含有指定文件的软件包,命令:dpkg -S 文件名
选项
-S
或 --search
:搜索含有指定文件的软件包。文件名可以使用通配符示例:
taicw@taicw-PC:~/Downloads$ dpkg -S apache2.conf apache2: /etc/apache2/apache2.conf
APT 与 YUM 相似,都是从远程软件仓库获取软件包进行安装。其中相关文件说明以下:/etc/apt/sources.list
:记录了软件源的地址var/lib/dpkg/available
:文件的内容是软件包的描述信息,该文件包括当前系统所使用的安装源中的全部软件包,其中包括当前系统中已安装的和未安装的软件包信息/var/lib/apt/lists/
:使用 "apt-get update
" 命令扫会描软件源服务器,并为源服务器全部软件资源创建索引文件保存至本地目录"/var/lib/apt/lists/"下,提升系统查询效率/var/cache/apt/archives/
:经过 "apt-get" 安装下载的软件包都缓存在这里。
APT 管理软件包,主要由如下几个命令组成:apt-get
:主要用来安装、升级和卸载软件,智能解决依赖关系(新版可用 apt
命令代替,去掉了"-get")apt-cache
:查询软件包缓存文件apt-file
:软件包查找工具,能够查到软件包所含的文件和安装的位置
命令:apt-get update
该命令扫描源服务器,更新软件包列表。最好按期运行这一命令以确保软件包列表是最新的,或者在安装和升级软件以前执行该命令
安装命令:apt-get install 包名
升级命令:
apt-get upgrade
apt-get dist-upgrade
卸载命令:
apt-get remove 包名
apt-get --purge remove 包名
apt-get autoremove
使用 apt-get 安装软件时,会自动到软件源服务器下载须要的软件包(xxx.deb
文件),这些文件缓存在 "/var/cache/apt/archives" 目录下,若是不须要这些文件能够执行以下命令将其清除,节约磁盘空间。
缓存清理命令:
apt-get clean
apt-get autoclean
检查软件包是否有损坏的依赖:apt-get check 包名
apt-cacheapt-cache
能够查询和显示已安装和可安装软件包的可用信息,它专门工做在本地的数据缓存上,不依赖于软件源的可用性(即离线查询),而这些缓存能够经过好比 apt-get update
命令来更新。若是距离上一次更新的时间过久,那么它显示的信息可能就会过期。经常使用命令以下:
apt-cache stats
:显示统计信息apt-cache show 包名
:以便于阅读的格式介绍该软件包apt-cache showpkg 包名
:显示软件包常规信息,依赖关系等apt-cache policy 包名
:显示软件包的安装设置状态apt-cache depends 包名
:显示指定软件包所依赖的软件包apt-cache rdepends 包名
:显示软件包的反向依赖关系,即被哪些软件包依赖apt-cache search 字符串
:根据正则表达式搜索软件包列表apt-fileapt-file
软件包查找工具,能够查找某个文件属于哪一个软件包。apt-file 个独立的软件包,使用以前须要先安装(apt-get install apt-file
)。经常使用命令以下:
apt-file update
:更新软件包的文件库,第一次使用或执行apt-get update
后都需执行一次apt-file search 文件名
:查找包含指定文件名的软件包,包括未安装的apt-file list 包名
:显示指定软件包的文件下载源码包
xxx.tar.gz
或 xxx.tar.bz2
。linux下载工具参考:wget 与 curl 命令详解 wget https://archive.apache.org/dist/httpd/httpd-2.2.15.tar.gz
解压缩
/usr/local/src/
目录下。解压缩命令参考: Linux经常使用命令 tar -zxvf httpd-2.2.15.tar.gz -C /usr/local/src/
进入解压目录
cd /usr/local/src/httpd-2.2.15/
编译前准备,命令:./configure --prefix=安装目录
--prefix=安装目录
:指定安装目录。若是不指定,默认状况下会安装在 /usr/local/包名/bin
, /usr/local/包名/lib
等目录下,安装文件比较分散不利于删除configure
指令是每一个源码包都自带的脚本程序(即解压目录下一个名为"configure"的脚本文件),非系统指令执行时必须指明路径,即"./
"代表是当前路径下。执行该指令主要有以下做用:
./configure --help
" 来查看./configure --prefix=/usr/local/apache2
编译,命令:make
make
会调用 gcc
编译器,并读取 Makefile 文件中的信息进行系统软件编译。编译的目的就是把源码程序转变为能被 Linux 识别的可执行文件,这些可执行文件保存在当前目录下。编译过程较为消耗时间,须要耐心等待报错清空编译内容(非必须步骤),命令:make clean
./configure
" 或者 "make
" 命令时报错,解决报错问题后,须要从新执行命令时必定要先执行一下 "make clean
" 命令,它会清空 Makefile 文件和编译产生的 ".o" 头文件安装,命令:make install
注意:
1.执行./configure
命令时可能会提示缺乏gcc
等依赖程序,因此须要使用 yum 等方式先安装依赖程序便可2.并非全部的源码包安装必定是执行 "
./configure
"、"make
"、"make install
" 这三个命令,只有极少数源码包安装命令可能有些不一样,好比 mysql 版本 5.5 之后的源码包安装时,使用 "cmake
" 命令替代了 "./configure
"。通常源码包解压后都有安装的说明文档,安装以前能够先阅读如下说明文档3.通常去第三方官网下载源码包时,也会提供已经编译好的二进制包,这种二进制包里面包括了已经通过编译能够立刻运行的程序,因此解压后直接进入 "xxx/bin/" 目录找到相关命令直接运行便可
经过源码包安装时若是指定了安装目录,好比 "./configure --prefix=/usr/local/apache2
",卸载时只须要删除整个安装目录就能够了 "rm -rf /usr/local/apache2
",并且是100%卸载,不会像windows那样常常会残留那多注册表之类的垃圾。
若是源码包安装时没有指定安装目录,那么安装软件生成的文件会分别存储在 /usr/local/ 下的 bin、lib、etc 等目录下,删除起来就比较麻烦一点了。因此建议源码包安装必定要指定安装目录,方便卸载。