管理 Linux 系统上的软件可以使用包管理工具,不同版本的 Linux 用的包管理工具不太一样。比如 Redhat,Fedora,CentOS 上面用的是 yum 或者 rpm。Debian,Ubuntu 可以使用 aptitude。使用包管理工具,可以用命令,去查询,下载,安装,删除系统上的软件。下面我们在 CentOS 系统上学一下 yum 这个包管理工具,你可以用 Vagrant 在本地创建一个 CentOS 系统的虚拟机。
Packages
Packages,包。包就是包裹,包裹里面包含了一些东西。这里说的包指的是软件包,它里面不仅仅包含软件本身,还有相关的文档,管理脚本,软件所依赖的其它东西的列表。包管理工具会使用包里的内容去定位,安装,升级,还有删除软件。包有不同的格式,Redhat 跟 CentOS 上用的是 .rpm 格式的包,Debian,Ubuntu 用的是 .deb 格式的包,你可以把这个格式想成是一种包装跟发行软件的标准。
Package Manager
Package Manager,就是管理 Package 用的工具。yum,rpm,apt-get ...
Repositories
Repositories,是存放软件包的地方。可以想成是一个仓库,系统里定义了一些仓库,使用包管理工具去安装软件的时候,就会到这些仓库里面下载需要的东西。你也可以手工为系统添加新的仓库。
Dependencies
一个软件包里面如果需要用到其它库(Library)提供的功能,就会把它们定义成 Dependencies,也就是依赖。 在安装这个软件包的时候,管理工具会查看软件包需要的依赖,看看系统里有没有这些东西,如果没有,就会去下载并且安装好这些依赖,然后再去安装软件包本身,这样可以确保软件包能正常的运行。
yum
yum 与 rpm 是用在 Redhat,Fedora,CentOS ... 这些系统上的包管理工具。它们有点区别,yum 可以自动去下载并且安装软件包,rpm 一般用来安装已经下载到本地的软件包( .rpm 格式的软件包)。
搜索包
在用 yum 安装包之前,如果不确定要安装的包是什么,可以先去搜索一下。搜索可以判断你想安装的包,能不能通过 yum 去安装,如果没有找到结果,你可能要手工为系统去添加新的仓库,或者把包下载到本地,再用 rpm 去安装。
yum search 关键词
比如你要安装 Apache 这个 Web 服务器,可以搜索一下 apache 或者 httpd ,httpd 是包的名字,apache 这个词包含在包的介绍里。
yum search httpd
返回:
... httpd.x86_64 : Apache HTTP Server httpd-devel.i686 : Development interfaces for the Apache HTTP server httpd-devel.x86_64 : Development interfaces for the Apache HTTP server httpd-manual.noarch : Documentation for the Apache HTTP server httpd-tools.x86_64 : Tools for use with the Apache HTTP Server ...
在搜索结果里,会包含找到的包的名字还有描述,被搜索的关键词会高亮显示。仔细看一下包的名字,然后再读一下描述,来判断这个包是不是自己想要的那个。注意包的名字里有一些特别的后缀,这些后缀表示的是包对硬件架构的最小需求。
- .x86_64:表示在 64 位架构上运行的包。
- .i686:一般表示 32 位的架构,常见的还有 .i386。
- .noarch:表示这个包不受架构的限制。
查看包
知道了自己想要的包以后,可以再查看一下这个包的具体的信息,比如版本号,尺寸,所属仓库,网址等等。
yum info 包的名字
比如查看一下要 httpd 这个包的信息:
yum info httpd
返回:
Available Packages Name : httpd Arch : x86_64 Version : 2.2.15 Release : 39.el6.centos Size : 825 k Repo : base Summary : Apache HTTP Server URL : http://httpd.apache.org/ License : ASL 2.0 Description : The Apache HTTP Server is a powerful, efficient, and extensible : web server.
Arch 表示包需要的硬件架构,Repo 是这个包所属的 Repository 。
安装包
安装包用的是 yum install,yum 很多命令需要用到超级管理员的权限,所以你需要在命令的前面加上 sudo ,比如 sudo yum install ... 或者先执行一下 su 这个命令。
su
在 su 命令后面没加任何选项,默认就是用 root 用户登录,会出现提示,让你输入密码,输入 root 用户的密码,然后回车,你现在的身份就变成 root 了。如果你用的是 vagrant ,默认 root 用户的密码是 vagrant 。
yum install 包的名字
比如去安装一下 httpd :
yum install httpd
返回:
Dependencies Resolved =============================================================================== Package Arch Version =============================================================================== Installing: httpd x86_64 2.2.15-39.el6.centos Installing for dependencies: apr x86_64 1.3.9-5.el6_2 apr-util x86_64 1.3.9-3.el6_0.1 apr-util-ldap x86_64 1.3.9-3.el6_0.1 httpd-tools x86_64 2.2.15-39.el6.centos mailcap noarch 2.1.31-2.el6 Transaction Summary ================================================================================ Install 6 Package(s) Total download size: 1.1 M Installed size: 3.6 M Is this ok [y/N]:
如果要安装的包需要一些依赖,会出现提示 Dependencies Resolved ,会列出你打算安装的包,这里就是 httpd ,下面是这个包需要安装的 dependencies,然后给你个总结,说要安装的包一共有多少个,大小是多小,安装后的尺寸。Is this ok [y/N],问你要继续吗?输入 y 表示同意,之后又会出现一次确定,再次输入 y 。你可以在执行命令的时候,加上一个 -y 参数(yum install httpd -y),这样出现这种确认的提示会自动填上 y ,不需要自己动手了。
列出包
list 这个命令可以列出仓库里的或者已经安装到系统上的包。
列出所有可用的包
yum list available
列出已经安装的包
yum list installed
在这些命令的后面可以加上 less ,这样可以分页显示:
yum list installed | less
也可以使用 grep ,找到包含特定字符的包,比如找出已经安装的名字里带 http 的包:
yum list installed | grep http
判断文件来自哪个包
用 provides 命令可以查看某个文件是来自哪个包。
yum provides 文件的路径
试一下:
yum provides /etc/httpd/conf/httpd.conf
返回:
httpd-2.2.15-39.el6.centos.x86_64 : Apache HTTP Server Repo : base Matched from: Filename : /etc/httpd/conf/httpd.conf httpd-2.2.15-39.el6.centos.x86_64 : Apache HTTP Server Repo : installed Matched from: Other : Provides-match: /etc/httpd/conf/httpd.conf
上面显示 /etc/httpd/conf/httpd.conf 这个文件,属于 httpd-2.2.15-39.el6.centos.x86_64 这个包。
仓库
先查看一下系统里所有被启用的仓库列表:
yum repolist
返回:
repo id repo name status base CentOS-6 - Base 6,518 extras CentOS-6 - Extras 36 updates CentOS-6 - Updates 649 repolist: 7,203
再去安装一个叫 epel( Extra Packages for Enterprise Linux ) 的仓库:
yum install epel-release
然后再用 yum repolist 查看一下系统上启动的仓库,你会看到刚才安装的 epel 仓库。用 yum list 命令查看所有的可用的包,会出现来自 epel 仓库的包,加上 grep 可以只显示 epel 这个仓库里的包。
yum list | grep epel
升级
升级用的是 update ,后面可以加上要升级的包的名字,不加的话,会去升级所有的包。
yum update
yum update 包的名字
删除包
移除不想要的包可以使用 remove 或者 erase,会把包还有可能的依赖删除掉。
yum remove 包的名字
比如:
yum remove httpd -y
加上 -y 参数,不需要手工确认了。
rpm
有些包你可能想先下载到本地,然后再去安装,这样就可以使用 rpm 这个工具。
安装下载到本地的包
rpm -ivh 包文件的路径
检查包是不是已经安装了
rpm -q 包名字
查看包
rpm -qi package_file
检查文件属于哪个包
rpm -qf 文件的路径
更新安装的包
rpm -Uvh 包文件
移除安装的包
rpm -e 包的名字
显示安装在系统上的包
rpm -qa | less
附件
yum 参考手册:https://access.redhat.com/sites/default/files/attachments/rh_yum_cheatsh...
路径 CentOS yum rpm 包管理 Linux
评论
请问epel( Extra Packages for Enterprise Linux )这个仓库在Ubuntu上可以添加吗?
另外我想在Ubuntu上添加php扩展库,请问只有这一种方法吗:add-apt-repository ppa:ondrej/php
还有没有其他php扩展库?因为这个ppa库在运行apt-get时老是提示一个错误,找不到方法来解决
谢谢
7 年 4 个月 以前