<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IGI&#039;s Blog &#187; 系统设置</title>
	<atom:link href="http://www.igigo.net/archives/category/%e7%b3%bb%e7%bb%9f%e8%ae%be%e7%bd%ae/feed" rel="self" type="application/rss+xml" />
	<link>http://www.igigo.net</link>
	<description></description>
	<lastBuildDate>Fri, 09 Dec 2011 04:19:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
	
<!-- Start Of Script Generated By WP-PostViews Plus -->
<script type='text/javascript' src='http://www.igigo.net/wp-includes/js/jquery/jquery.js?ver=1.4.2'></script>
<script type="text/javascript">
/* <![CDATA[ */
/* ]]> */
</script>
<!-- End Of Script Generated By WP-PostViews Plus -->
	<item>
		<title>apt-get remove 与 apt-get autoremove、aptitude remove的不同</title>
		<link>http://www.igigo.net/archives/88</link>
		<comments>http://www.igigo.net/archives/88#comments</comments>
		<pubDate>Tue, 22 Jun 2010 08:10:13 +0000</pubDate>
		<dc:creator>igi</dc:creator>
				<category><![CDATA[系统设置]]></category>
		<category><![CDATA[apt-get]]></category>
		<category><![CDATA[aptitude]]></category>
		<category><![CDATA[autoremove]]></category>
		<category><![CDATA[debian]]></category>

		<guid isPermaLink="false">http://www.igigo.net/?p=88</guid>
		<description><![CDATA[apt-get remove 与 apt-get autoremove、aptitude remove的不同 apt-get remove的行为我们很好理解，就是删除某个包的同时，删除依赖于它的包 例如： A 依赖于 B, B 依赖于 C apt-get remove 删除B的同时，将删除A(很好理解，A依赖于B，B被删了，A也就无法正常运行了) 先说明下apt-get autoremove与aptitude remove是一样的效果的, 我们先了解下这两者的瓜葛 apt-get一开始并没有记录auto-install的信息，在apt(0.6.44.2exp1)此版本时(06年)，apt-get增加了类似于aptitude的auto-install记录(/var/lib/apt/extended_states)。此后，aptitude在版本0.4.5.1(07年)转向使用apt-get的auto-install记录，而抛弃了自己原先的记录方式，再随后apt-get在版本0.7.7(07年)增加了autoremove的选项。 依赖关系是一个复杂而交错的链条，我们把举几个例子来看看它们的行为 以下图中， 绿色圆是为了满足依赖关系而apt-get或aptitude自动安装上的包 蓝色圆是管理员使用apt-get install 或 aptitude install 指定安装的包，简称为手动安装的包 例子1: 1. C 依赖于或推荐B软件包(apt-get和aptitude在安装软件时除了安装必要的依赖包，默认也会安装Recommends关系的包) 2. B 依赖于或推荐A, A被其他手动安装的包依赖 apt-get remove C 将删除C, 同时提示你用apt-get autoremove去清除B apt-get autoremove C 将删除B, C aptitude remove C 将删除B, [...]]]></description>
			<content:encoded><![CDATA[<p>apt-get remove 与 apt-get autoremove、aptitude remove的不同</p>
<p>apt-get remove的行为我们很好理解，就是删除某个包的同时，删除依赖于它的包<br />
例如： A 依赖于 B, B 依赖于 C<br />
apt-get remove 删除B的同时，将删除A(很好理解，A依赖于B，B被删了，A也就无法正常运行了)</p>
<p>先说明下apt-get autoremove与aptitude remove是一样的效果的,  我们先了解下这两者的瓜葛</p>
<p>apt-get一开始并没有记录auto-install的信息，在apt(0.6.44.2exp1)此版本时(06年)，apt-get增加了类似于aptitude的auto-install记录(/var/lib/apt/extended_states)。此后，aptitude在版本0.4.5.1(07年)转向使用apt-get的auto-install记录，而抛弃了自己原先的记录方式，再随后apt-get在版本0.7.7(07年)增加了autoremove的选项。</p>
<p>依赖关系是一个复杂而交错的链条，我们把举几个例子来看看它们的行为</p>
<pre class="brush: bash; title: ;">
以下图中， 绿色圆是为了满足依赖关系而apt-get或aptitude自动安装上的包
蓝色圆是管理员使用apt-get install 或 aptitude install
指定安装的包，简称为手动安装的包
</pre>
<p>例子1:<br />
1. C 依赖于或推荐B软件包(apt-get和aptitude在安装软件时除了安装必要的依赖包，默认也会安装Recommends关系的包)<br />
2. B 依赖于或推荐A, A被其他手动安装的包依赖<br />
<a href="http://www.igigo.net/wp-content/uploads/2010/06/abc1.jpg"><img class="aligncenter size-full wp-image-91" title="abc" src="http://www.igigo.net/wp-content/uploads/2010/06/abc1.jpg" alt="" width="348" height="503" /></a></p>
<pre class="brush: bash; title: ;">
apt-get remove C         将删除C, 同时提示你用apt-get autoremove去清除B
apt-get autoremove C     将删除B, C
aptitude remove C        将删除B, C
</pre>
<p>我的理解: 删除C, 那么B这个包既是自动安装的,且没有其他手动安装的包依赖于它,<br />
则可以判定B也是没必要的</p>
<p>例子2:<br />
1. 在例子1的基础上, D 依赖于或者推荐B, 且D没有被其他手动安装的包依赖<br />
这样的情况一般出现在用apt-get remove 某个手动安装的包之后.</p>
<p style="text-align: center;"><a href="http://www.igigo.net/wp-content/uploads/2010/06/abcd.jpg"><img class="size-full wp-image-90 aligncenter" title="abcd" src="http://www.igigo.net/wp-content/uploads/2010/06/abcd.jpg" alt="" width="413" height="546" /></a></p>
<pr
<pre class="brush: bash; title: ;">
apt-get remove C         将删除C, 同时提示你用apt-get autoremove去清除B,D
apt-get autoremove C     将删除B, C, D
aptitude remove C        将删除B, C, D
</pre>
<p>我的理解: 删除C, 那么B,D 这两个包既是自动安装的,且没有其他手动安装的包依赖于它们,<br />
则可以判定B,D也是没必要的</p>
<p>例子3:<br />
1. 在例子2的基础上, 有个手动安装的包E推荐D(既E Recommends D,手动安装E时,也会把D装上)</p>
<p><a href="http://www.igigo.net/wp-content/uploads/2010/06/abcd4.jpg"><img class="aligncenter size-full wp-image-92" title="abcd4" src="http://www.igigo.net/wp-content/uploads/2010/06/abcd4.jpg" alt="" width="387" height="577" /></a></p>
<pre class="brush: bash; title: ;">
apt-get remove C         将删除C, 同时提示你用apt-get autoremove去清除B,D
apt-get autoremove C     将删除B, C, D
aptitude remove C        将删除B, C, D
</pre>
<p>我的理解: 删除C, 那么B,D 这两个包既是自动安装的,且没有其他手动安装的包依赖于它们,<br />
则可以判定B,D也是没必要的<br />
虽然D被E Recommend, 但为啥是这么设计的, 我也没猜出开发人员的想法</p>
<p>例子4:<br />
1. 在例子3的基础上, D变成依赖于B, E变成依赖于D</p>
<p><a href="http://www.igigo.net/wp-content/uploads/2010/06/abcd1.jpg"><img class="aligncenter size-full wp-image-93" title="abcd1" src="http://www.igigo.net/wp-content/uploads/2010/06/abcd1.jpg" alt="" width="400" height="644" /></a></p>
<pre class="brush: bash; title: ;">
apt-get remove C         将删除C
apt-get autoremove C     将删除C
aptitude remove C        将删除C
</pre>
<p>我的理解: 只删除C, 因为B被D依赖, D被E依赖, 间接来说,E不能没有B,D而正常运行,所以B,D被保留</p>
<p>例子5:<br />
1. 在例子4的基础上, D变成推荐B, E依然依赖于D</p>
<p><a href="http://www.igigo.net/wp-content/uploads/2010/06/abcd2.jpg"><img class="aligncenter size-full wp-image-94" title="abcd2" src="http://www.igigo.net/wp-content/uploads/2010/06/abcd2.jpg" alt="" width="423" height="680" /></a></p>
<pre class="brush: bash; title: ;">
apt-get remove C         将删除C, 同时提示你用apt-get autoremove去清除B
apt-get autoremove C     将删除B, C
aptitude remove C        将删除B, C
</pre>
<p>我的理解: 删除C, 而B没有被其他手动安装的包直接依赖或者间接依赖(我指那些一层层depend on的关系), D被E依赖<br />
所以B不是必要的,可以删除, 而D不能删除</p>
]]></content:encoded>
			<wfw:commentRss>http://www.igigo.net/archives/88/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

