Appearance
安装软件程序
包管理系统(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工具
版本 | 前端工具 | 命令 |
---|---|---|
Mandriva | urpm | rpm -qa > installed_software |
openSUSE | zypper | zypper 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
查看各种包的信息
信息类型 | 前段工具 | 命令 |
---|---|---|
包信息 | urpm | urpmq -i package_name |
是否安装 | urpm | rpm -q package_name |
包信息 | zypper | zypper 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安装软件
前端工具 | 命 令 |
---|---|
urpm | urpmi package_name |
zypper | zypper 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把软件安装到对应的地址