apt、dpkg

ubuntu wiki
debian doc
中科大linux协会
debian软件源source.list文件格式说明

apt

软件包管理系统使用一个私有数据库跟踪列表中软件包的当前状态:已安装、未安 装或可安装。apt-get通过该数据库来确定如何安装用户想用的软件包以及正常运行该软件包所必须的其它关联包。

你可以使用apt-get update来更新数据库列表。这个命令将扫描 /etc/apt/sources.list文件中所指路径中的软件包列表文件

几个和apt-get相关的目录

/var/lib/dpkg/available
软件包的描述信息, 包括当前系统所使用的 Debian 安装源中的所有软件包,当前系统中已安装的和未安装的软件包.

/var/cache/apt/archives
目录是在用 apt-get install 安装软件时,软件包的临时存放路径

/etc/apt/sources.list
/etc/apt/sources.list.d/*.list
软件源站点

/var/lib/apt/lists
使用apt-get update命令会从/etc/apt/sources.list中下载软件列表,并保存到该目录

/etc/apt/sources.list

软件源可以是网络服务器,是光盘,甚至是可以硬盘上的一个目录

文件中的各项信息通常按如下格式列出:
deb http://host/debian distribution section1 section2 section3
deb-src http://host/debian distribution section1 section2 section3

deb 或deb-src描述了文件类型
二进制软件包(deb),源码包(deb-src)。源码包包含源程序编码、Debian控制文件(.dsc)和“Debian化”该程序所做更改的记录文件diff.gz

配置文件的格式

deb [软件源地址] [发行版名字] [包类型]
发行版名字看看使用的镜像,lsb_release -a可以查看英文版本号
修改完/etc/apt/sources.list文件后运行apt-get使 更改生效
步骤示例
1)找到包含dists和pool这两个目录的那个目录,把地址记下来,比如http://mirrors.163.com/debian/;
2)打开dists,里面包含的目录名字,记下来。比如http://mirrors.163.com/debian/,dists/包含wheezy、testing等。把这些目录名字记下来。
3)打开pool目录,看看里面包含哪些组件目录,比如main、contrib、non-free;
4)书写格式:deb <1记下来的地址> <2记下来的目录名> <3记下来的名字>, 如:
deb http://mirrors.163.com/debian wheezy man contrib non-free

软件包分类

按照软件性质分类

  • Ubuntu:
    main: Canonical公司支持的免费和开源软件
    universe:社区维护的免费和开源软件
    restricted:设备的专有驱动
    multiverse:有版权和合法性问题的软件

  • Debian
    main: 系统必要和符合自由软件规范的软件包
    contrib:这些软件可以在Debian系统内运行,但多半
    依赖于某些非自由软件
    non-free:不属于自由软件范畴的软件

其他分类
以Ubuntu举例:
• 重要安全更新:"security"
• 推荐的更新:"updates"
• 提前释放出的更新:"proposed"
• 不支持的更新:"backports"

第三方软件源的添加

  1. 找到对应软件源地址,添加至配置文件中:
  2. 需要下载对应的公钥并安装(软件源提供者通常会提供说明)

PPA 的添加与使用

PPA即Personal Package Archives,是一些用户/开发者在Launchpad上编译发布的
软件包
这些软件源添加时,Ubuntu会自行下载公钥

PPA 的添加与使用

  • 首先你要知道想用的PPA的名字和用途
    例如 gnome3-team/gnome3
  • 添加
    sudo add-apt-repository ppa:gnome3-team/gnome3

ppa的配置文件一般保存在 /etc/apt/sources.list.d/
目录下,一个ppa对应一个文件

常用命令

apt-cache search package 搜索包
apt-cache show package 获取包的相关信息,如说明、大小、版本等
sudo apt-get install package 安装包
sudo apt-get install package - - reinstall 重新安装包
sudo apt-get -f install # -----(强制安装?#"-f = --fix-missing"当是修复安装吧...)
sudo apt-get remove package 删除包
sudo apt-get remove - - purge package 删除包,包括删除配置文件等
sudo apt-get autoremove --purge package 删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐))
sudo apt-get update 更新源
sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-get dselect-upgrade 使用 dselect 升级
apt-cache depends package 了解使用依赖
apt-cache rdepends package 了解某个具体的依赖?#当是查看该包被哪些包依赖吧...
apt-get source package 下载该包的源代码
sudo apt-get clean && sudo apt-get autoclean 清理下载文件的存档 && 只清理过时的包
sudo apt-get check 检查是否有损坏的依赖

dpkg

dpkg -i
安装一个 Debian 包裹文件,如你手动下载的文件。

dpkg -c
列出的包内容。比如

dpkg -c php5-json_1.3.2-2build1_amd64.deb
drwxr-xr-x root/root         0 2014-02-18 22:57 ./
drwxr-xr-x root/root         0 2014-02-18 22:57 ./etc/
drwxr-xr-x root/root         0 2014-02-18 22:57 ./etc/php5/
drwxr-xr-x root/root         0 2014-02-18 22:57 ./etc/php5/mods-available/
-rw-r--r-- root/root        68 2014-02-18 22:57 ./etc/php5/mods-available/json.ini
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/include/
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/include/php5/
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/include/php5/ext/
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/include/php5/ext/json/
-rw-r--r-- root/root      3484 2013-09-09 21:13 ./usr/include/php5/ext/json/php_json.h
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/lib/
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/lib/php5/
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/lib/php5/json/
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/lib/php5/20121212/
-rw-r--r-- root/root     68608 2014-02-18 22:57 ./usr/lib/php5/20121212/json.so
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/share/
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/share/doc/
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/share/doc/php5-json/
-rw-r--r-- root/root       921 2014-02-18 22:47 ./usr/share/doc/php5-json/changelog.Debian.gz
-rw-r--r-- root/root      4912 2013-10-11 17:20 ./usr/share/doc/php5-json/copyright
-rw-r--r-- root/root      4343 2014-02-18 22:57 ./usr/share/doc/php5-json/package.xml.gz
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/share/php/
drwxr-xr-x root/root         0 2014-02-18 22:57 ./usr/share/php/.registry/

dpkg -I
从 中提取包裹信息。

dpkg -I php5-json_1.3.2-2build1_amd64.deb
 新格式的 debian 软件包,格式版本 2.0。
 大小 34410 字节:主控包=1194 字节。
      34 字节,    1 行      conffiles            
     823 字节,   19 行      control              
     354 字节,    5 行      md5sums              
     273 字节,   10 行   *  postinst             #!/bin/sh
     303 字节,   13 行   *  postrm               #!/bin/sh
     333 字节,   13 行   *  prerm                #!/bin/sh
 Package: php5-json
 Source: php-json
 Version: 1.3.2-2build1
 Architecture: amd64
 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
 Original-Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
 Installed-Size: 159
 Depends: libc6 (>= 2.14), phpapi-20121212, ucf, libjson-c2 (>= 0.11-3~)
 Breaks: php5-common (<< 5.5.0~rc1+dfsg-1~), php5-dev (<< 5.5.0~rc1+dfsg-1~)
 Replaces: php5-dev (<< 5.5.0~rc1+dfsg-1~)
 Section: php
 Priority: optional
 Homepage: http://pecl.php.net/package/jsonc
 Description: JSON module for php5
  This package provides a module for JSON functions in PHP scripts.

dpkg -r
移除一个已安装的包裹。

dpkg -P
完全清除一个已安装的包裹。和 remove 不同的是,remove 只是删掉数据和可执行文件,purge 另外还删除所有的配制文件。

dpkg -L
列出 安装的所有文件清单。同时请看 dpkg -c 来检查一个 .deb 文件的内容。

dpkg -s
显示已安装包裹的信息。同时请看 apt-cache 显示 Debian 存档中的包裹信息,以及 dpkg -I 来显示从一个 .deb 文件中提取的包裹信息。

dpkg-reconfigure
重新配制一个已经安装的包裹,如果它使用的是 debconf (debconf 为包裹安装提供了一个统一的配制界面)。你能够重新配制 debconf 它本身,如你想改变它的前端或提问的优先权。例如,重新配制 debconf,使用一个 dialog 前端,简单运行:
dpkg-reconfigure --frontend=dialog debconf (如果你安装时选错了,这里可以改回来哟:)

镜像源主目录下格式说明

dists/

目录包含"发行版"(distributions),
此处是获得 Debian 发布版本(releases)和已发布版本(pre-releases)的软件包的正规途径. 有些旧软件包及 packages.gz 文件仍在里面.

pool/

目录为软件包的物理地址.
软件包均放进一个巨大的 "池子(pool)", 按照源码包名称分类存放.
为了方便管理, pool 目录下按属性再分类("main", "contrib" 和 "non-free"), 分类下面再按源码包名称的首字母归档.
这些目录包含的文件有: 运行于各种系统架构的二进制软件包, 生成这些二进制软件包的源码包.
你可以执行命令 apt-cache showsrc mypackagename, 查看 'Directory:' 行获知每个软件包的存放位置. 例如: apache 软件包存放在 pool/main/a/apache/ 目录中.另外, 由于lib*软件包数量巨大, 它们以特殊的方式归档: 例如, libpaper 软件包存放在 pool/main/libp/libpaper/.

还有一些目录:
/tools/:用于创建启动盘, 磁盘分区, 压缩/解压文件, 启动 Linux 的 DOS 下的小工.
/doc/:基本的 Debian 文档, 如 FAQ, 错误报告系统指导等..
/indices/:维护人员文件和重载文件.
/project/:
大部分为开发人员的资源, 如: project/experimental/ 本目录包含了处于开发中的软件包和工具, 它们均处于 alpha 测试阶段. 用户不应使用这些软件, 因为即使是经验丰富的用户也会被搞得一团糟.)

posted @ 2016-09-29 13:47  jcuan  阅读(309)  评论(0编辑  收藏  举报