apt 不仅仅是 apt-get

标签: Docs Debian Doc Ubuntu | 发表时间:2011-10-23 14:39 | 作者:zhangkaixuan fastzhong
出处:http://www.osmsg.com

ubuntu/debian 下使用 apt-get 或 synaptic(新立得) 安装软件是件很轻松的事情. 除了简单的安装软件, apt 工具集还有许多特别情况下的用法.

任何时候请记住 man 手册是良师.

1.使用 aptitude 代替 apt-get
aptitude 虽然没有 apt-get 的”超级牛力”, 但功能却比 apt-get 更强大
首先, 像 apt-get 一样, 可以安装软件
aptitude install pack-foo

aptitude 解决依赖关系比 apt-get 更智能. 有时用 apt-get 安装软件时会出现 “XXX 需要 XXXX, 但 XXX 已安装” 这类的错误. 这通常是因为某些软件包过新造成的. 此时使用 aptitude, aptitude 会发现问题并给出几个解决方案, 我们只需接受符合心意的方案就可以了.

aptitude 的另外一个优点是会自动记录那些包是”自动安装”(即因依赖关系而安装的), 如果依赖”自动安装”包的包都没被安装, 该”自动安装”包(此时已无用)就会自动删除.
使用这两个命令可以控制包的”自动安装”属性
aptitude markauto pack-foo #标记成"自动安装"
aptitude unmarkauto pack-foo #标记成"手动安装"

删除软件时使用 markauto 代替 remove, 就可以避免误删重要的包了.
当然, 新版的新立得和 apt-get 也有相似功能, 但貌似不与 aptitude 使用同一个数据库, 所以建议只使用 aptitude 管理软件包.

aptitude 还提供了更灵活的控制软件包版本的方式
hold - 将软件包置于保持状态
unhold - 取消对一个软件包的保持命令
forbid-version - 禁止 aptitude 升级到某一特定版本的软件包。

以前几周的 libcairo 事件作例子:
sudo aptitude install libcairo2=1.4.10-1ubuntu4 # 强制降级
sudo aptitude forbid-version libcairo2=1.4.10-1ubuntu4.1 # 封掉出错的版本
sudo aptitude markauto libcairo2 #恢复auto属性

参看 man 手册里对 install 操作的描述, 有更多控制方法.

aptitude reinstall 重新安装软件包, 相当于 apt-get –reinstall install
aptitude purge 彻底删除软件包, 相当于 apt-get –purge remove
一个小技巧
aptitude purge `dpkg -l|grep '^rc'|awk '{print $2}'`

aptitude 还集合了多个 apt 工具的功能
search - 按名称 和/或 表达式搜索软件包
show - 显示一个软件包的详细信息
download - 下载软件包的 .deb 文件

search 操作有点特别
aptitude search "foo bar" # 关键词 foo 和 bar 都要出现
aptitude search foo bar # 相当于"或"

不过 aptitude 有个小缺点, 默认会将”推荐”的包当成”依赖”的包处理. 这样设置一下就可以解决问题
在自己和root的家目录下的 .aptitude/config 文件加一句
aptitude::Recommends-Important "false";

更详细的用法参看 man aptitude.
另外:
1.aptitude 的交互模式貌似很混乱, 不如用新立得.
2.慎用 aptitude install -f .

2.获得软件包的下载地址
很简单,使用新立得:
1.选中要安装的包
2.文件 -> 生成包下载脚本

使用 apt-get
apt-get --print-uris install pack-foo

3.安装齐编译需要的包
首先确定你添加了 deb-src 源, 就像这种
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy main restricted universe multiverse

并已经 apt-get update
然后就可以
apt-get build-dep pack-foo

把编译 pack-foo 需要的包安装好

PS: 更强悍的方法是用 apt-build, 不过这样就把 ubuntu 搞的太像 gentoo 了. 有兴趣的朋友可以自己看 apt-build 的 man.

4.找某个文件在哪个包里
如果是安装了的包, 可以用 dpkg -S, 但此法对未安装的包就无效了.
此时可使用 apt-file

$ apt-file help
apt-file version 2.0.8.2
(c) 2002 Sebastien J. Gross

apt-file [options] action [pattern]

Configuration options:
–sources-list -s sources.list location
–cache -c

Cache directory
–architecture -a Use specific architecture
–cdrom-mount -d Use specific cdrom mountpoint
–package-only -l Only display packages name
–fixed-string -F Do not expand pattern
–ignore-case -i Ignore case distinctions
–regexp -x pattern is a regular expression
–verbose -v run in verbose mode
–dummy -y run in dummy mode (no action)
–help -h Show this help.
–version -V Show version number

Action:
update Fetch Contents files from apt-sources.
search|find Search files in packages
list|show List files in packages
purge Remove cache files

此工具在寻找编译时缺的文件时很有用, 用前记得先 apt-file update
PS: auto-apt 有相同功能, 而且可以检测进程需要哪些缺少的文件, 自动提示用户选择安装相应的包.

Read More:

相关 [apt apt get] 推荐:

apt 不仅仅是 apt-get

- fastzhong - OSMSG
ubuntu/debian 下使用 apt-get 或 synaptic(新立得) 安装软件是件很轻松的事情. 除了简单的安装软件, apt 工具集还有许多特别情况下的用法.. 任何时候请记住 man 手册是良师.. 1.使用 aptitude 代替 apt-get. aptitude 虽然没有 apt-get 的”超级牛力”, 但功能却比 apt-get 更强大.

yum与apt命令比较

- larmbr - Beyond the Void
分布式版本控制系统——Mercurial. ibus-pinyin注音模式新特性. Ubuntu下用wine玩魔兽世界. ibus-pinyin注音模式預覽.

get tough行为指南

- Doug - 意志与表象的世界
在看到庄雅婷这个名字的时候,我真想给自己改个笔名叫做庄坚强,如果得知后来我和她能成为好友,说不定还就真改了. 庄老说,get tough是很吃亏的,分分钟面临着没人关心没人疼爱的危险,可tough的性格又像是一件内衣外穿的避弹衣,在别人刚开始打飞机的时候我就已经开始打老师,一直以来最多被人冠以的抬头就是“才女”或者“女流氓”.

从HTTP GET和POST的区别说起

- jin - Yining.write()
在推特上抱怨面试时问HTTP GETE和POST的区别得到回答都不满意,有人不清楚,当时只回复了看 RFC2616. 面试时得到的回答大多是:POST是安全的,因为被提交的数据看不到,或者被加密的,其它的还有GET的时候中文出现乱码(在地址栏里),数据最大长度限制等等. 说 POST 比 GET 安全肯定是错的,POST跟GET都是明文传输,用httpfox等插件,或者像WireShark 等类似工具就能观察到.

Get Taxi:一键打车,全程服务

- Allen - 雷锋网
都说出租车是一个城市的名片,但现在国内一线城市的出租车服务却很难让人满意,尤其是打车难的问题,平时打车等上一刻钟或是半小时不算什么,刮风下雨天就更不用说了. 针对这个情况,国外推出了一款手机打车应用——Get Taxi,可以使用手机一键打车,可谓高效便捷、易于管理,同时还有轻松支付和积分兑换的功能,该应用程序可以在各种手机平台使用,包括iOS、Android、Symbian和Blackberry,而且是全免费的.

索尼爱立信十周年:Get Smart!

- 橙子 - 爱范儿 · Beats of Bits
十年前,日本电器巨头索尼(Sony)和瑞典电信霸主爱立信(Ericsson)合资成立手机公司“索尼爱立信”. 在这十年间,它一度走在破产和分家的边缘,也一度开发出 T610(T618)等畅销机型,同时它也被当成合资公司的典范写进 MBA 教科书. 在十年后的今天,公司总裁兼 CEO  Bert Nordberg 接受了《华尔街日报》的采访,他是从爱立信美国分公司空降至索尼爱立信的,拥有长期的“硅谷经验和人脉”.

也谈 GET 和 POST 的区别

- - 博客园_首页
上个月,博客园精华区有篇文章《 GET 和 POST 有什么区别. 及为什么网上的多数答案都是错的 》,文中和回复多是对以下两个问题进行了深究:. 在我看来这两者都不是重点,特写此文予以讨论. GET、POST 专业名称是 HTTP Request Methods. 但 HTTP Request Methods 不只是 GET 和 POST,完整列表如下:.

GET和POST有什么区别?

- - 博客园_知识库
  如果有人问你, GET 和POST ,有什么区别. 我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用.   这个答案好像并不是他想要的. 我说这就是个名字而已,如果服务器支持,他完全可以把GET改个名字叫GET2. 他反问道,那就是单纯的名字上的区别喽. 我想了想,我觉得如果说再具体的区别,只能去看RFC文档了,还 要取决于服务器(指 Apache ,IIS )的具体实现.

hibernate中get和load,find的区别

- - 企业架构 - ITeye博客
get和load方式是根据id取得一个记录. 下边详细说一下get和load的不同,因为有些时候为了对比也会把find加进来. 1.从返回结果上对比:. load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常. get方法检索不到的话会返回null.

Hibernate中Session的get和load - 罗韬

- - 博客园_首页
hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别. 测试版本:hibernate 4.2.0. Session接口提供了4个重载的get方法,分别通过“持久类+主键”和“全类名+主键”以及“锁选项”来获取实体对象. 向数据库发出一条sql查询语句,并返回结果.