Ubuntu主要的包管理工具:
dpkg – Debian 包安装工具
apt-get – APT 的命令行前端
aptitude – APT 的高级的字符和命令行前端
synaptic – 图形界面的 APT 前端
dselect – 使用菜单界面的包管理工具
tasksel – Task 安装工具
APT 使用 /var/lib/apt/lists/* 来跟踪可用的软件包,而 dpkg 使用的是 /var/lib/dpkg/available。如果你使用了 aptitude 或者其他 APT 前端来安装软件包,同时你希望使用 dselect 来安装软件包,请不要忘记使用 dselect 菜单上的 [U]pdate (或者运行”dselect update”) 来更新 /var/lib/dpkg/available。
在处理依赖关系上 apt-get 会自动下载安装依赖的软件包,但是不会处理所安装软件推荐的或者建议的软件包。
相反 aptitude 可以设置成安装所安装软件推荐的或者建议的软件包。
(1)apt-get命令的子命令
- update——更新软件包列表
- upgrade——升级系统中的所有软件包
- install——安装软件包
- remove——卸载软件包
- autoremove——仅卸载那些不需要再次下载的软件包
- purge——彻底删除软件包(包括其配置文件)
- source——下载源码包
- build-dep——自动下载安装编译某个软件所需要的软件包
- dist-upgrade——升级整个发行版
- dselect-upgrade——安装dselect的选择进行升级
- clean——删除本地缓存的所有软件包
- autoclean——删除本地缓存中无用的软件包
- check——检查是否存在有问题的依赖关系
# apt-get check # 更新缓冲区并检查损坏的软件包
$ apt-cache search pattern # 按文本描述搜索软件包
$ apt-cache policy package # 软件包的 priority/dists 信息
$ apt-cache show -a package # 显示所有 dists 中软件包描述信息
$ apt-cache showsrc package # 显示相应源码包的信息
$ apt-cache showpkg package # 软件包调试信息
# dpkg –audit|-C # 搜索未完成安装的软件包
$ dpkg {-s|–status} package … # 已安装软件包描述
$ dpkg -l package … # 已安装软件包的状态(每个占一行)
$ dpkg -L package … # 列出软件包安装的文件的名称
APT Pinning允许你安装和运行来自某个版本的的软件包 (stable, testing, unstable),而不必要升级整个系统到此版本。
aptitude 的其他特点如下:
- aptitude 能访问所有版本的软件包。
- aptitude 的动作记录在 /var/log/aptitude。
- aptitude 能轻松的追踪陈旧的和本地建立的软件包,并在“过期的和在本地创建的软件包”上列出。
- aptitude 内建强大的包搜索和显示功能。熟悉 mutt 的用户很容易上手,因为这个显示方法的灵感来源于 mutt。 参阅 /usr/share/doc/aptitude/README 中的 “SEARCHING, LIMITING, AND EXPRESSIONS”
- aptitude 在全屏状态下有嵌入的 su 功能。普通用户都可以执行,直到安装或删除软件的时候再取得管理员权限。
Q:我想列出可升级的软件包
A: apt-show-versions -u
Q: 系统升级的话我想知道安装所需占用磁盘空间及升级和安装包数的信息
A: aptitude -y -s -f –with-recommends dist-upgrade
Q: 我的mysql-server是5.0版本,升级系统时需要更新为5.1,可是对我们而言会有兼容性问题,我可以升级系统更新时不更新mysql吗
A: 给这个软件包打上hold标记吧. (sudo apt-mark hold mysql-server 这个办法似乎更清晰,自12.04起适用)
sudo echo “mysql-server hold” | sudo dpkg –set-selections
sudo echo “mysql-server install”|dpkg –set-selections
查询当前系统内所有软件包的状态,命令为:
sudo dpkg –get-selections | more
查询当前系统被锁定不更新的软件包状态(hold),命令为
sudo dpkg –get-selections | grep hold
Q: 那如果升级特定软件包呢?
A: https://help.ubuntu.com/community/PinningHowto
http://jaqque.sbih.org/kplug/apt-pinning.html
Q:如何选择更快的mirrors节点?
A:
apt-spy 会根据站点回应时间和带宽自动创建 sources.list。netselect-apt 会创建一个更完整的 sources.list 文件,但它使用更落后的方法来选择镜像站点(比较 ping 时间)。
E: Dynamic MMap ran out of room
You may find that you receive an error like the following:
E: Dynamic MMap ran out of room
E: Error occured while processing sqlrelay-sqlite (NewPackage)
E: Problem with MergeList /var/lib/apt/lists/ftp.us.debian.org_debian_dists_woody_contrib_binary-i386_Packages
E: The package lists or status file could not be parsed or opened.
This is caused because apt’s cache is too small to handle all of the packages that are included with stable, testing, and unstable. This is also very easy to fix. Add the following line to /etc/apt/apt.conf
APT::Cache-Limit “8388608″;
APT::Periodic::Update-Package-Lists “1″;
每一天自动运行一次 apt-get update,0 表示禁用。
APT::Periodic::Download-Upgradeable-Packages “1″;
每一天运行一次 apt-get upgrade –download-only,0 表示禁用。
APT::Periodic::AutocleanInterval “0″;
每N天运行一次 apt-get autoclean,这里禁用了。
APT::Periodic::Unattended-Upgrade “1″;
每一天运行一次 unattended-upgrade 安全升级脚本,0 表示禁用。
需要 unattended-upgrades 包并且在 /var/log/unattended-upgrades 记录日志。
APT::Archives::MaxAge “210″;
设置包的最大时间。如果包的时间比这个时间旧,就会被删掉,0 表示禁用,这里表示210天。
APT::Archives::MaxSize “0″;
设置缓存所使用的最大空间,单位是MB。如果缓存超过这个大小,缓存的包文件会被删除(最大的包会最先被删除),这里表示禁用。
APT::Archives::MinAge “0″;
设置包的最小时间。如果包的时间比这个时间新,就不会被删除,0 表示禁用。防止竞争和保留紧急包的备份。
https://help.ubuntu.com/12.04/serverguide/automatic-updates.html
alien – convert and install rpm and other packages
Share the post "Ubuntu APT包管理系统简记"