Skip to content

安装软件程序

包管理系统(package management system,PMS)

包管理基础

主流的Linux都采用了某种形式的包管理系统来控制软件和库的安装, PSM利用一个数据库来记录各种相关的内容:

  • Linux上已安装了什么软件包
  • 每个包安装了什么文件
  • 每个已安装的软件包版本

软件包存储在服务器上,可以利用本地Linux系统上的PMS工具通过互联网访问。这些服务器称为仓库(repository)。可以用PMS工具来搜索新的软件包,或者是更新系统上已安装软件包

软件包通常会依赖其他的包,为了前者能够正常运行,被依赖的包必须提前安装在系统中。PMS工具将会检测这些依赖关系,并在安装需要的包之前先安装好所有额外的软件包

PMS没有统一的标准工具, 在不同Linux版本上有很大不同, 常见的有dpkg和rpm

基于Debian的发行版(如Ubuntu和Linux Mint)使用的是dpkg命令,这些发行版的PMS工具也是以该命令为基础的。dpkg会直接和Linux系统上的PMS交互,用来安装、管理和删除软件包

基于Red Hat的发行版(如Fedora、openSUSE及Mandriva)使用的是rpm命令,该命令是其PMS的底层基础。类似于dpkg命令,rmp命令能够列出已安装包、安装新包和删除已有软件

基于Debine的系统

dpkg命令是基于Debian的PMS工具的核心

  • apt-get
  • apt-cache
  • aptitude

最常用的是aptitude, 本质上是apt工具和dpkg的前端, dpkg是软件包管理系统工具,而aptitude则是完整的软件包管理系统

可以避免一系列的麻烦

dash
aptitude

进入aptitude软件可以用来查看软件的安装状态

bash
aptitude show 软件包名

示例:
jiao@jiao-virtual-machine:~/桌面$ aptitude show python3
软件包: python3                 
版本号: 3.9.4-1build1
状态: 已安装
自动安装:
Multi-Arch: allowed
优先级: 重要
部分: python
维护者: Ubuntu Developers <[email protected]m>
体系: amd64
未压缩尺寸: 91.1 k
依赖于: python3.9 (>= 3.9.4-0~), libpython3-stdlib (= 3.9.4-1build1)
预依赖于: python3-minimal (= 3.9.4-1build1)
建议: python3-doc (>= 3.9.4-1build1), python3-tk (>= 3.9.4-0~), python3-venv (>= 3.9.4-1build1)
冲突: python3:i386
代替: python3-minimal (< 3.1.2-2), python3-minimal:i386 (< 3.1.2-2)
提供: python3-profiler, python3-profiler:any, python3:any (= 3.9.4-1build1)
描述: interactive high-level object-oriented language (default python3 version)
 Python, the high-level, interactive object oriented language, includes an extensive class library with lots of goodies
 for network programming, system administration, sounds and graphics. 
 
 This package is a dependency package, which depends on Debian's default Python 3 version (currently v3.9).
主页: https://www.python.org/

查看一个软件包如果软件还没有安装到系统, 就会从软件仓库获取软件仓库

使用aptitude命令, 不能查看某一个特定的软件包相关的软件列表, 要得到这个列表, 使用dpkg

bash
jiao@jiao-virtual-machine:~/桌面$ dpkg -L python3
/.
/usr
/usr/bin
/usr/lib
/usr/lib/valgrind
/usr/lib/valgrind/python3.supp
/usr/share
/usr/share/doc
/usr/share/doc/python3
/usr/share/doc/python3/copyright
/usr/share/doc/python3/python-policy.txt.gz
...

同样可以进行反向操作,查找某个特定文件属于哪个软件包。dpkg --search absolute_file_name注意,在使用的时候必须用绝对文件路径。

bash
jiao@jiao-virtual-machine:~/桌面$ dpkg --search /usr/share/doc/python3
python3, python3-dev: /usr/share/doc/python3

使用aptitude安装软件包

bash
jiao@jiao-virtual-machine:~/桌面$ aptitude search wine
p   fonts-wine                                          - Windows API implementation - fonts                            
v   fonts-wine:i386                                     -                                                               
p   gnome-wine-icon-theme                               - red variation of the GNOME-Colors icon theme                  
p   libkwineffects11                                    - KDE window manager effects library                            
p   libkwineffects11:i386                               - KDE window manager effects library                            
v   librust-winapi+winefs-dev                           -                                                               
v   librust-winapi+winefs-dev:i386                      -                                                               
v   librust-winapi+winerror-dev                         -                                                               
v   librust-winapi+winerror-dev:i386                    -                                                               
v   librust-winapi+winevt-dev                           -                                                               
v   librust-winapi+winevt-dev:i386                      -                                                               
v   librust-winapi-0+winefs-dev                         -              
...

每一个包前面都有一个p或i, 如果看到一个i, 表明已经安装, p和v表示可用但是没有安装, 这个软件还没有安装

软件的安装

bash
sudo aptitude install 软件包名

用aptitude更新软件

bash
aptitude safe-upgrade

会把已经安装的包, 更新为最新为软件仓库的最新版本

还有一些不太保守的更新方式

  • aptitude full-upgrade

  • aptitude dist-upgrade

不会检查包与包之间的依赖关系

aptitude卸载软件

唯一要做的选择就是要不要保留软件的数据和配置文件

删除软件包不删除数据和配置文件===>aptitude remove

都删除===>aptitude purge

aptitude卸载软件

在安装Linux发行版的时候被设置存储在/etc/apt/sources.list

在文件中

bash
deb (or deb-src) address  distribution_name  package_type_list

deb或者deb-src表明了软件包的类型, deb说明这是一个已经编译过的软件, deb-src说明是源码的源

address是软件仓库的web地址

distribution_name是软件仓库发行版的名字

package_type_list可能不止一个, 表明仓库有什么类型的包

当需要给你的source_list文件添加软件仓库时,你可以自己发挥,但一般会带来问题。通常软件仓库网站或各种包开发人员网站上都会有一行文本,你可以直接复制,然后粘贴到sources.list文件中。最好选择较安全的途径并且只复制/粘贴

基于Red Het的系统

有几种常见的发行版

  • yum:在Red Hat和Fedora中使用。
  • urpm:在Mandriva中使用。
  • zypper:在openSUSE中使用。

列出已经安装包

yum list installed

可以吧导出的信息用别的文本软件打开yum list installed > installed_software

Mandriva中采用的urpm工具无法生成当前已安装软件列表。因此,你需要转向底层的rpm工具

版本前端工具命令
Mandrivaurpmrpm -qa > installed_software
openSUSEzypperzypper search -I > installed_software

yum擅长找出某个特定软件包的详细信息。它能给出关于包的非常详尽的描述,另外你还可以通过一条简单的命令查看包是否已安装

bash
# yum list xterm  
Loaded plugins: langpacks, presto, refresh-packagekit  
Adding en_US to language list  
Available Packages  
xterm.i686 253-1.el6  
#  
# yum list installed xterm  
Loaded plugins: refresh-packagekit
Error: No matching Packages to list

查看各种包的信息

信息类型前段工具命令
包信息urpmurpmq -i package_name
是否安装urpmrpm -q package_name
包信息zypperzypper search -s package_nam
是否安装zypper同样的命令,注意在Status列查找i

最后,如果需要找出系统上的某个特定文件属于哪个软件包,万能的yum可以做到!只要输入命令:\

bash\
yum provides file_name

yum安装软件

bash
yum install package_name

也可以手动下载rpm安装文件并用yum安装,这叫作本地安装。基本的命令是:

bash
yum localinstall package_name.rpm

如何用zypper和urpm安装软件

前端工具命 令
urpmurpmi package_name
zypperzypper install package_name

yum更新软件

bash
yum list updates

但如果发现某个特定软件包需要更新,输入如下命令

bash
yum update package_name

想对更新列表中的所有包进行更新,只要输入如下命令

bash
yum update
  • urpm===> urpmi --auto-update --update
  • zypper ===>zypper update

卸载

只删除软件包而保留配置文件和数据文件,就用如下命令:

yum remove package_name

要删除软件和它所有的文件,就用erase选项:

yum erase package_name

  • urpm ===> urpme package_name
  • zypper ===> zypper remove package_name

处理损坏的包依赖关系

某个包的软件依赖关系可能会被另一个包的安装覆盖掉。这叫作损坏的包依赖关系

bash
yum clean all

然后试着用yum命令的update选项。有时,只要清理了放错位置的文件就可以了

如果这还解决不了问题,试试下面的命令:yum deplist package_name

显示了所有包的库依赖关系以及什么软件可以提供这些库依赖关系。一旦知道某个包需要的库,你就能安装它们了

最后手段

bash
yum update --skip-broken

允许你忽略依赖关系损坏的那个包,继续去更新其他软件包。这可能救不了损坏的包,但至少可以更新系统上的其他包。

用zypper时,只有一个命令能够用来验证和修复损坏的依赖关系。

用urpm时,如果clean选项不工作,你可以跳过更新那些有问题的包。要这么做的话,就必须将有问题包的名字添加到文件/etc/urpmi/skip.list。

  • urpm ===> urpmi –clean
  • Zipper ===> zypper verify

yum仓库

坚持使用通过审核的仓库。通过审核的仓库是指该发行版官方网站上指定的库。如果你添加了未通过审核的库,就失去了稳定性方面的保证,可能陷入损坏的依赖关系惨剧中

要想知道你现在正从哪些仓库中获取软件,输入如下命令:yum repolist

yum的仓库定义文件位于/etc/yum.repos.d

像rpmfusion.org这种优秀的仓库站点会列出必要的使用步骤。有时这些仓库网站会提供一个可下载的rpm文件,可以用yum localinstall命令进行安装。这个rpm文件在安装过程会为你完成所有的仓库设置工作。

urpm称它的仓库为媒体。查看urpm媒体和zypper仓库的命令列在了表9-7中。注意,用这两个前端工具时不需要编辑配置文件, 只需要输入命令就可以添加媒体或仓库

  • 显示仓库 ===> urpm ===> urpmq --list-media
  • 添加仓库 ===> urpm ===> urpmi.addmedia path_name
  • 显示仓库 ===> zypper ===> zypper repos
  • 添加仓库 ===> zypper ===> zypper addrepo path_name

从源码安装

遇到tarball形式的软件

  • 解压
bash
# tar -zxvf sysstat-11.1.1.tar.gz
  • 进入解压的文件
  • 查看reeademe文件
  • 按照建议下一步进行系统配置
bash
# ./configure 
Check programs: 
. 
checking for gcc... gcc 
checking whether the C compiler works... yes 
checking for C compiler default output file name... a.out 
[...]
  • 使用make命令构建各种二进制文件
  • make install把软件安装到对应的地址