Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1725696
  • 博文数量: 98
  • 博客积分: 667
  • 博客等级: 上士
  • 技术积分: 1631
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-27 15:59
个人简介

一沙一世界 一树一菩提

文章分类

全部博文(98)

文章存档

2021年(8)

2020年(16)

2019年(8)

2017年(1)

2016年(11)

2015年(17)

2014年(9)

2013年(4)

2012年(19)

2011年(1)

2009年(4)

分类: LINUX

2013-01-10 23:00:54

这几天在ubuntu环境下解析xml文件,死活安装不了libxml-dev,依赖不对,从网上找的这篇文章,很不错,够具体,转来记下。
网址:
【Linux风格的软件包安装和卸载方式】

Windows系统中,通常使用应用软件自带的安装、卸载程序或在控制面板中的添加/ 删除程序来操作。整个过程操作简单方便,一目了然。

对于新手来说,Linux软件的安装和卸载一直都是困扰他们的问题。与Windows相类似,在Linux下也有功能强大的软件安装卸载工具:apt(Debian/Ubuntu系统), rpm(Redhat系统)。这些工具可以方便地查询、安装、卸载、升级软件,该工具是在命令行下使用的。输入man apt可了解详细用法,常用的有apt-cache, apt-get。

和该软件包安装风格类似的还有:Perl中使用cpan管理perl module的安装;PHP的pecl/pear可以完成php module和PEAR package的下载和安装等。

另外,Linux风格的软件一般都包括:配置文件(一般位于conf或/etc目录)、可执行文件(位于bin目录)、库文件(位于lib目录)、头文件(位于include目录)、帮助文档(位于man或doc目录)、日志文件(位于log目录)等。了解这些有助于举一反三、灵活使用。

【apt安装软件过程】

根据/etc/apt/sources.list定义的源查找需要的package,下载到本地/var/cache/apt/archives,再安装。

【/etc/apt/sources.list文件】

此文件中保存apt可以获取/下载软件包的源。格式类似与:

deb squeeze main deb http://security.debian.org/ squeeze/updates main

可用的官方源可以从这里查找:

  • Ubuntu源: 
  • Debian: 

源是分布在世界各地用于存放软件包的服务器。修改了该文件需要运行apt-get update更新。

0。更新软件包源列表

apt-get update

在修改/etc/apt/sources.list或/etc/apt/preferences之後需要运行该命令确保软件包列表是最新的。

1。apt命令:搜索软件包
  • 根据package的名称关键词查找package:

apt-cache search keyword

  • 根据package所包含文件的文件名查找package:

apt-file search filename

如果知道该package包含的某个文件的文件名,可以使用如上方法查找;需要安装apt-file。

apt-file是一个独立的软件包,安装使用sudo apt-get install apt-file;然后运行apt-file update;如果apt-file search filename输出的内容太多,可尝试使用apt-file search filename | grep -w filename。

2。apt命令:查看package信息
  • 查看可安装的版本信息

apt-cache show package-name //查看包的详细信息

apt-cache showpkg package-name //查看包的概要信息

apt-cache show package-name | grep Version //仅仅查看版本信息

apt-show-versions package-name //显示包的版本信息

3。apt命令:安装包
  • apt会自动检测软件包之间的版本信息和依赖关系(dependencies),并提示需要安装的依赖包。

apt-get install package-name

  • 同时安装多个软件包

apt-get install package-name1 package-name2 ...

  • 安装其他包的同时卸载某个包(需要卸载的包之后添加-)

apt-get install package-name1 package-name2-

安装package-name1的同时卸载package-name2

  • 重新安装或如果有最新版安装到最新版

apt-get --reinstall install package-name

如果已经安装的软件包损坏希望重新安装可以使用如上命令。

  • 安装为指定的版本

apt-get install package-name=version

例如:apt-get install php5=5.3.3-7

有时候安装的时候会出现broken dependencies,这个时候可能需要安装为指定的旧的版本。

如果已经安装了最新版本,希望重新安装为旧的版本(降级安装),使用:

apt-get --reinstall install package-name=version

  • 查看该软件包所依赖的包

apt-cache depends package-name

  • 编译某个程序的时候,可能因为没有安装依赖包而出现编译错误,可以使用如下命令:

auto-apt run command

例如:auto-apt run ./configure,会自动使用apt-get安装依赖的包。

4。apt命令:卸载包
  • 卸载包package-name,会自动移除依赖当前包的其他软件

apt-get remove package-name

如上的卸载,软件的configuration files仍旧存在。

  • 完全卸载(包括configuration files)

apt-get --purge remove package-name

  • 卸载的同时安装新的软件

apt-get --purge remove package-name1 package-name2+

在软件包名称之后添加’+',如上卸载package-name1,安装package-name2。

  • 卸载不需要的文件

apt-get autoremove

//Remove automatically all unused packages

5。apt命令:系统升级
  • upgrade packages within the same distribution

apt-get upgrade

apt-get -u upgrade //可以罗列出需要升级的软件(推荐)

  • upgrade to a new distribution

apt-get dist-upgrade

apt-get -u dist-upgrade //推荐

6。apt命令:删除不需要的安装包

如上apt会将软件包下载到本地/var/cache/apt/archives/,然后安装。如果安装的软件包太多,会占据磁盘空间。使用clean和autoclean可以删除这些安装包。

  • erase downloaded archive files

apt-get clean

删除所有安装包

  • erase old downloaded archive files(推荐)

apt-get autoclean

保留最新版的安装包,删除旧版的。

7。其他技巧
  • 查看系统已经安装的软件包

dpkg -l

dpkg -l package-name-pattern

//列出已经安装的与模式相匹配的软件包;如果您不知道软件包的全名,您可以使用*package-name-pattern*。

  • 这个文件属于哪个已安装软件包

dpkg -S file

  • 列出软件包中的所有文件

dpkg -L package-name

【apt安装可能遇到的其他问题】安装的时候遇到Broken packages问题(安装旧版本/软件包降级)

使用apt安装软件包(apt-get install package-name 或者 apt-get --reinstall install package-name),默认会寻找source中包含软件的最新版进行下载安装。

有时候安装的时候可能遇到依赖包版本不匹配情况,例如:

今天在ubuntu10.04上安装libxml2-dev,执行sudo apt-get install libxml2-dev提示错误信息:

The following packages have unmet dependencies: libxml2-dev: Depends: libxml2 (=2.7.6.dfsg-1ubuntu1) but 2.7.6.dfsg-1ubuntu1.1 is to be installed E: Broken packages

分别查看当前source中libxml2和libxml2-dev的版本信息:

apt-cache show libxml2 | grep Version   得到:  Version: 2.7.6.dfsg-1ubuntu1.1   Version: 2.7.6.dfsg-1ubuntu1  apt-cache show libxml2-dev | grep Version   得到 Version: 2.7.6.dfsg-1ubuntu1

结果说明当前已经安装的libxml2版本是Version: 2.7.6.dfsg-1ubuntu1.1,而将要安装的libxml2-dev的版本要求是Version: 2.7.6.dfsg-1ubuntu1。已经安装的libxml2版本过新。

解决方法有2个

  1. 寻找包含最新版libxml2-dev的sources,使其支持最新版的libxml2:

可以从这里搜索package的名称libxml2-dev,了解该package的最新版本;如果有最新版,从选择包含该版本的source,添加到/etc/apt/sources.list中。如果没有可用的最新版,则失败。

  1. 对已经安装的libxml2降级(安装旧的版本2.7.6.dfsg-1ubuntu1)

方法有2个:

a. 简单的方法(推荐)

sudo apt-get --reinstall install libxml2=2.7.6.dfsg-1ubuntu1

重新安装libxml2并指定版本

b. 稍微复杂的方法

sudo vi /etc/apt/preferences

编辑preferences文件,例如这里需要把package: libxml2从2.7.6.dfsg-1ubuntu1.1降级到2.7.6.dfsg-1ubuntu1,可以输入:

Package: libxml2 Pin: version 2.7.6.dfsg-1ubuntu1 Pin-Priority: 1001

//Note, that the Pin-Priority has to be over 1000 if you are going back to an older version of a package.

保存preferences文件,然后输入sudo apt-get install libxml2就会完成libxml2的降级,获取到旧的指定版本。

如上的意思是设定(pin)包libxml2使用指定的版本。

该方法的缺点:以后apt-get upgrade或update manager在检测更新的时候不会检测该package的更新。

Keep in mind that this package version will be “pinned” and no future updates to that package will be picked up by the update manager. For further information on this subject look at the man pages for apt_preferences.

阅读(1577) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~