安装软件程序


文章目录

  • 安装软件程序
  • 基于 Debian 的系统
  • aptitude
  • 管理软件包
  • 安装软件包
  • 更新软件
  • 卸载软件
  • 软件仓库
  • apt-get
  • 升级和安装
  • 删除
  • 清理和检查
  • apt-get upgrade更新时忽略指定包
  • apt-cache
  • 列出所有可用包
  • 用关键字搜索包
  • 获取详细的包装信息
  • 检查软件包的依赖关系和反向依赖关系。
  • 基于 Red Hat 的系统
  • 列出已安装包
  • 用 yum 安装软件
  • 用 yum 更新软件
  • 用 yum 卸载软件
  • 处理损坏的包依赖关系
  • yum 软件仓库


基于 Debian 的系统

dpkg命令是基于Debian系PMS工具的核心。包含在这个PMS中的其他工具有:

  • apt-get
  • apt-cache
  • aptitude

到目前为止,最常用的命令行工具是aptitude,这是有原因的。 aptitude工具本质上是apt工具和dpkg的前端。 dpkg是软件包管理系统工具,而aptitude则是完整的软件包管理系统。

aptitude
管理软件包

如果使用的Linux发行版中已经安装了aptitude,只需要在shell提示符键入aptitude并按下回车键就行了。紧接着就会进入aptitude的全屏模式

android shell 安装卸载app_debian

可以用方向键在菜单上移动。选择菜单选项Installed Packages来查看已安装了什么软件包。你可以看到几组软件包,比如编辑器等。每组后面的括号里都有个数字,表示这个组包含多少个软件包。
使用方向键高亮显示一个组,按回车键来查看每个软件包分组。你会看到每个单独的软件包名称以及它们的版本号。在软件包上按回车键可以获得更详细的信息,比如软件包的描述、主页、大小和维护人员等。
看完了已安装软件包后,按q键来退出显示。你可以继续用方向键和回车键打开或关闭软件包和它们所在的分组。如果想退出,多按几次q键,直到看到弹出的屏幕提示“ Really quitAptitude?”。
如果你已经知道了系统上的那些软件包,只想快速显示某个特定包的详细信息,就没必要到aptitude的交互式界面。可以在命令行下以单个命令的方式使用aptitude。

aptitude show package_name

无法通过aptitude看到的一个细节是所有跟某个特定软件包相关的所有文件的列表。要得到这个列表,就必须用dpkg命令。

dpkg -L package_name

dpkg -L vim-common
/.
/usr
/usr/bin
/usr/bin/xxd
/usr/bin/helpztags
/usr/lib
/usr/lib/mime
/usr/lib/mime/packages
/usr/lib/mime/packages/vim-common
/usr/share
/usr/share/man
/usr/share/man/ru
/usr/share/man/ru/man1
/usr/share/man/ru/man1/vim.1.gz
/usr/share/man/ru/man1/vimdiff.1.gz
/usr/share/man/ru/man1/xxd.1.gz
/usr/share/man/it
/usr/share/man/it/man1
[...]

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

dpkg --search /usr/bin/xxd
vim-common: /usr/bin/xxd
安装软件包
aptitude search package_name

search选项的妙处在于你无需在package_name周围加通配符。通配符会隐式添加。

注意,在每个包名字之前都有一个p或i。如果看到一个i,说明这个包现在已经安装到了你的系统上了。如果看到一个p或v,说明这个包可用,但还没安装。

在系统上用aptitude从软件仓库中安装软件包非常简单。

aptitude install package_name
更新软件

尽管aptitude可以帮忙解决安装软件时遇到的问题,但解决有依赖关系的多个包的更新会比较烦琐。要用软件仓库中的新版本妥善地更新系统上所有的软件包,可用safe-upgrade选项。

aptitude safe-upgrade
#还有一些不那么保守的软件升级选项:
aptitude full-upgrade
aptitude dist-upgrade

这些选项执行相同的任务,将所有软件包升级到最新版本。它们同safe-upgrade的区别在于,它们不会检查包与包之间的依赖关系。整个包依赖关系问题非常麻烦。

显然,应该定期运行aptitude的safe-upgrade选项来保持系统处于最新状态。这点在安装了一个全新的发行版之后尤其重要。通常在发行版推出最新的完整发布之后,就会跟着出现很多新的安全补丁和更新。

卸载软件

要想只删除软件包而不删除数据和配置文件,可以使用aptitude的remove选项。要删除软件包和相关的数据和配置文件,可用purge选项。

要看软件包是否已删除,可以再用aptitude的search选项。如果在软件包名称的前面看到一个c,意味着软件已删除,但配置文件尚未从系统中清除;如果前面是个p的话,说明配置文件也已删除。

软件仓库

/etc/apt/sources. list

deb (or deb-src) address distribution_name package_type_list
deb或deb-src的值表明了软件包的类型。 deb值说明这是一个已编译程序源,而deb-src值则说明这是一个源代码的源。

address条目是软件仓库的Web地址。 distribution_name条目是这个特定软件仓库的发行版版本的名称。在这个例子中,发行版名称是trusty。这未必就是说你使用的发行版就是UbuntuTrusty Tahr,它只是说明这个Linux发行版正在用Ubuntu Trusty Tahr软件仓库!举个例子,在LinuxMint的sources.list文件中,你能看到混用了Linux Mint和Ubuntu的软件仓库。

最后, package_type_list条目可能并不止一个词,它还表明仓库里面有什么类型的包。你可以看到诸如main、 restricted、 universe和partner这样的值。

apt-get
  • -h 帮助文件。
  • -q 输出到日志 - 无进展指示
  • -qq 不输出信息,错误除外
  • -d 仅下载 - 不安装或解压归档文件
  • -s 不实际安装。模拟执行命令
  • -y 在需要确认的场景中回应 yes
  • -f 尝试修正系统依赖损坏处
  • -m 如果归档无法定位,尝试继续
  • -u 同时显示更新软件包的列表
  • -b 获取源码包后编译
  • -V 显示详细的版本号
  • -c=? 阅读此配置文件
  • -o=? 设置自定的配置选项,如 -o dir::cache=/tmp
升级和安装
  • apt-get update // 更新源文件,并不会做任何安装升级操作
  • apt-get upgrade // 升级所有已安装的包
  • apt-get install packagename // 安装指定的包
  • apt-get install packagename --only-upgrade // 仅升级指定的包
  • apt-get install packagename --reinstall // 重新安装包
  • apt-get -f install // 修复安装
  • apt-get build-dep packagename // 安装相关的编译环境
  • apt-get source packagename // 下载该包的源代码
  • apt-get dist-upgrade // 升级系统
  • apt-get dselect-upgrade // 使用 dselect 升级
删除
  • apt-get remove packagename // 删除包
  • apt-get remove packagename – purge // 删除包,包括删除配置文件等
  • apt-get autoremove packagename --purge // 删除包及其依赖的软件包+配置文件等(只对6.10有效,推荐使用)
清理和检查
  • apt-get clean // 清理无用的包
  • apt-get autoclean // 清理无用的包
  • apt-get check // 检查是否有损坏的依赖
apt-get upgrade更新时忽略指定包
#上锁
apt-mark hold packagename	
#解锁
apt-mark unhold packagename
apt-cache
列出所有可用包
apt-cache pkgnames
用关键字搜索包
#你可以使用一个正则表达式来搜索本地 APT 缓存中的包。
#默认情况下,它会在软件包的名称和描述中查找搜索关键词。它按字母顺序显示匹配的软件包及其简短的描述。
apt-cache search package_name

#你也可以缩小搜索范围,只在软件包名称中查找搜索词。
apt-cache search --names-only package_name

#如果你想知道所有匹配软件包的完整细节,你可以使用 --full 标志。
获取详细的包装信息
#如果你知道确切的软件包名称(或者你已经成功地通过搜索找到了它),你可以得到软件包的详细元数据信息。
#你可以看到软件包元数据中的所有细节,比如名称、版本、开发者、维护者、仓库、长短描述、软件包大小甚至是校验和。
apt-cache show package_name

#还有一个选项 showpkg 可以显示软件包的名称、版本、正向和反向依赖关系等信息。
apt-cache showpkg package_name
检查软件包的依赖关系和反向依赖关系。
#你可以在安装之前(甚至在安装之后)检查一个包的依赖关系。它还会显示所有可能满足依赖关系的软件包。
apt-cache depends package

#你也可以通过 apt-cahce 检查反向依赖关系来检查哪些包是依赖于某个包的。

#检查未满足的依赖性
#你可能会被 Ubuntu 中未满足的依赖问题所困扰,其他 Linux 也有类似问题。apt-cache 命令提供了一个选项来检查系统中各种可用软件包的所有未满足的依赖关系。
apt-cache unmet

基于 Red Hat 的系统

  • yum:在Red Hat和Fedora中使用。
  • urpm:在Mandriva中使用。
  • zypper:在openSUSE中使用。
列出已安装包
#输出的信息可能会在屏幕上一闪而过
yum list installed

#所以最好是将已安装包的列表重定向到一个文件中。可以用more或less命令(或一个GUI编辑器)按照需要查看这个列表
yum list installed > installed_software

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

yum list xterm
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
Available Packages
xterm.i686 253-1.el6

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

yum provides file_name

yum provides /etc/yum.conf
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
* base: mirror.web-ster.com
* extras: centos.chi.host-engine.com
* updates: mirror.umd.edu
yum-3.2.29-40.el6.centos.noarch : RPM package installer/updater/manager
Repo : base
Matched from:
Filename : /etc/yum.conf

yum会分别查找三个仓库: base、 updates和installed。从其中两个仓库中得到的答案都是:该文件是yum软件包提供

用 yum 安装软件
yum install package_name

#也可以手动下载rpm安装文件并用yum安装,这叫作本地安装。基本的命令是:
yum localinstall package_name.rpm
用 yum 更新软件
#要列出所有已安装包的可用更新,输入如下命令:
yum list updates

#如果这个命令没有输出就太好了,因为它说明你没有任何需要更新的!但如果发现某个特定软件包需要更新,输入如下命令:
yum update package_name

#如果想对更新列表中的所有包进行更新,只要输入如下命令:
yum update
用 yum 卸载软件
#只删除软件包而保留配置文件和数据文件,就用如下命令:
yum remove package_name

#要删除软件和它所有的文件,就用erase选项:
yum erase package_name
处理损坏的包依赖关系

有时在安装多个软件包时,某个包的软件依赖关系可能会被另一个包的安装覆盖掉。这叫作损坏的包依赖关系( broken dependency)。

#如果系统出现了这个问题,先试试下面的命令:
yum clean all

#然后试着用yum命令的update选项。有时,只要清理了放错位置的文件就可以了。
#如果这还解决不了问题,试试下面的命令:
#这个命令显示了所有包的库依赖关系以及什么软件可以提供这些库依赖关系。一旦知道某个包需要的库,你就能安装它们了。
yum deplist package_name

#如果这样仍未解决问题,还有最后一招:
#--skip-broken选项允许你忽略依赖关系损坏的那个包,继续去更新其他软件包。这可能救不了损坏的包,但至少可以更新系统上的其他包。
yum update --skip-broken
yum 软件仓库
#要想知道你现在正从哪些仓库中获取软件,输入如下命令:
yum repolist

如果仓库中没有需要的软件,你可以编辑一下配置文件。 yum的仓库定义文件位于/etc/yum.repos.d。你需要添加正确的URL,并获得必要的加密密钥。

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