apt-get source 包名 # 获取源码
dpkg --info deb包名 # 查看包信息
apt-cache show 包名 # 包信息(含有Depends、Suggests、Section、Priority、Mirror路径)
apt-cache depends 包名 # 查看包的依赖信息
apt-cache rdepends 包名 # 查看什么包以来它
dpkg -l # 列出所有已安装的包 --list
dpkg -L 包名 # 列出包安装到磁盘的所有文件路径(--listfiles)
dpkg -S 文件名 # 查询文件所属的包名(--search)
dpkg -s 包名 # 包状态(包有什么配置文件等信息 --status)
update-alternatives # 修改虚拟软件包中的首选软件
update-alternatives --display x-www-browser #列出x-www-browser默认使用什么
update-alternatives --config x-www-browser #修改默认浏览器
aptitude why <regex> # 解释为什么需要这个包
apt install /path/to/<package_filename>.deb 安装本地软件包到系统中,同时尝试自动解决依赖
aptitude hold/unhold 包名 # 保持/解除保持 包的当前版本(hold只是忽略safe-upgrade or full-upgrade,keep则忽略包的任何操作)
echo "包名 hold" |dpkg --set-selections #保持当前版

aptitude search [前缀]<正则>  #貌似比apt-cache search 强大
前缀如下:
~n 包名符合regex
~d 描述符合regex
~t 软件集名称(task)
~G 匹配标签<Tag>
~v 虚拟软件包符合regex
~i 已安装符合regex
~M 自动安装
~i!~M 管理员选择安装的包(不含自动安装)

下载chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

 

Debian 软件包管理系统依赖声明,它描述了这一事实:一些软件包需要其它软件包被安装才能正常运行或运行得更好。
软件包 A 依赖(depends)软件包 B:要运行A必须安装 B。在有些情况下,A 不仅依赖 B,还要求 B 的特定版本。版本依赖通常有最低版本限制,A 更依赖于B的最新版而非某个特定版本。
软件包 A 推荐(recommends)软件包 B:软件包维护者认为所有用户都不会喜欢缺少某些功能的 A,而这些功能需要 B 来提供。
软件包 A 建议(suggests)软件包 B:B 中某些文件与 A 的功能相关,并能够增强 A 的功能。这种关系通过声明软件包 B 增强 Enhances 软件包 A 来表示。
软件包 A 与软件包 B 冲突(conflicts):如果系统中安装了 B 那么 A 无法运行。“Conflicts”常和“replaces”同时出现。
软件包 A 替换(replaces)软件包 B:B 安装的文件被 A 中的文件移除和覆盖了。
软件包 A 提供(provides)软件包 B:A 中包含了 B 中的所有文件和功能。
上述术语使用方法的更详细的信息参阅 Packaging Manual 和 the Policy Manual。
注意,dselect 可以对 recommends 和 suggests 类软件包进行更细粒度的操作,apt-get 只会简单的下载安装 depends 类软件包而不管 recommends 和 suggests 类软件包。这两个程序均正式使用 APT 作为其后端。

 

 

2.2.9 何为“Pre-depends”
dpkg 总是在配置一个有依赖关系的包之前,先对被依赖的包进行配置。 然而,dpkg 通常将归档文件随意解包,不顾依赖性。 (从归档文件中解包并提取文件,将他们放置到正确的位置。) 如果是 Pre-Depends 包,则在所依赖的其它包被解包和配置之前, Pre-Depends 包不会被解包。 [2] 使用这种依赖的目的是为了将依赖复杂性降至最低。

 

2.2.10 软件包状态
软件包有各种状态:“unknown”,“install”,“remove”,“purge”和“hold”。这些“希望”标记描述了用户打算如何操作这些软件包(既可以使用 dselect 的“Select”菜单,也可以直接调用 dpkg)。
它们的意思是:
unknown - 用户并没描述他想对软件包进行什么操作。
install - 用户希望对软件包进行安装或升级。
remove - 用户希望删除软件包,但不想删除任何已有的配置文件。
purge - 用户希望完全删除软件包,包括配置文件。
hold - 用户希望软件包保持现状,例如,用户希望保持当前的版本,当前的状态,当前的一切。

 

2.3.5 下载和缓存 .deb 文件
如果你手工下载包文件到硬盘(这完全没有必要,请阅读上面有关 dpkg-ftp 或 APT 的内容),当你完成软件包安装工作后,可以从系统中删除 .deb 文件。

如果是使用 APT,这些文件会缓存在 /var/cache/apt/archives/ 目录中。你可以在完成安装后删除它们(apt-get clean)或者将它们拷贝到另一个机器的 /var/cache/apt/archives/ 目录中以备以后的安装。

**** 很重要的目录 /var/lib/dpkg/info/ ********
如果只是用 aptitude(它不访问源代码相关的元数据),“deb-src”那行可以安全地删掉(或者在文件开头添加 “#” 来将它注释掉)。这可以加速档案库元数据的更新。

 

https://www.debian.org/doc/manuals/debian-reference/ch02.zh-cn.html档案库 URL 套件名(代号) 目的
http://deb.debian.org/debian/ stable (stretch) stable (stretch) release 版本
http://deb.debian.org/debian/ testing (buster) testing (buster) release 版本
http://deb.debian.org/debian/ unstable (sid) unstable (sid) release 版本
http://deb.debian.org/debian/ experimental experimental pre-release 版本(可选,只适用于开发者)
http://deb.debian.org/debian/ stable-proposed-updates 用于下一个稳定版本的更新(可选)
http://security.debian.org/ stable/updates 用于 stable release 版本的安全更新(重要)
http://security.debian.org/ testing/updates 用于 testing release 版本的安全更新(重要)
http://deb.debian.org/debian/ stretch-updates 用于 stretch 的垃圾邮件过滤器、IM客户端等的兼容更新
http://deb.debian.org/debian/ stretch-backports 用于 stretch 的较新的 backported 软件包(可选)
只有带有安全更新的纯净的 stable release 版本可以提供最佳的稳定性。运行大多数 stable release 版本的软件包之中混合一些来自 testing 或 unstable release 版本的软件包会比运行纯净的 unstable release 版本冒更大的风险,这是因为库版本的不匹配导致的。如果在 stable release 版本下你真的需要一些程序的最新版本,请使用来自 stretch-updates 和 http://backports.debian.org (参见 第 2.7.4 节 “更新和向后移植”)的软件包。使用这些软件包时必须额外小心。

 

区域 软件包数量 软件包组件标准
main 57346 遵从 Debian 自由软件指导方针(DFSG),并且不依赖于 non-free
contrib 341 遵从 Debian 自由软件指导方针(DFSG),但依赖于 non-free
non-free 540 不遵从 Debian 自由软件指导方针(DFSG)

 

不建议在新版本发布后在 stable Debian 系统上使用 aptitude 命令来进行跨版本的系统升级。
建议使用"apt full-upgrade"或“apt-get dist-upgrade” 来进行这个操作。参见 Bug #411280。
aptitude命令有时候会为了testing 或 unstable Debian 系统升级清除大量软件包。
这个情况吓坏了许多的系统管理员。请不要惊慌。
这似乎大多数是由元软件包的依赖或推荐的软件包版本偏差造成的,例如 gnome-core。
要解决这个问题,可以在 aptitude 命令菜单中选择 “取消待执行的动作” ,退出 aptitude,并使用 “apt full-upgrade”。
apt-get 和 apt-cache 是最基础 的基于 APT 的软件包管理工具。
apt-get 和 apt-cache 只提供命令行用户界面。
apt-get 是进行跨版本的主系统升级等操作的最合适工具。
apt-get 提供了一个强大的软件包依赖解析器。
apt-get 对硬件资源的要求不高。它消耗更少的内存并且运行速度更快。
apt-cache 提供了一个 标准的正则表达式来搜索软件包名称和描述。
apt 命令是一个用于软件包管理的高级命令行界面。它基本上是 apt-get、apt-cache 和类似命令的一个封装,被设计为针对终端用户交互的界面,它默认启用了某些适合交互式使用的选项。

apt 工具在用户使用 apt install 安装软件包时提供了一个友好的进度条。
在成功安装下载的软件包后,apt 将默认删除缓存的 .deb 软件包。
[提示] 提示
建议用户使用新的 apt(8) 命令用于 交互式的使用场景,而在 shell 脚本中使用 apt-get(8) 和apt-cache(8) 命令。

aptitude 命令是最通用的基于 APT 的软件包管理工具。
aptitude 提供了一个全屏的交互式文本用户界面。
aptitude 同样也提供了一个命令用户界面。
aptitude 是用于日常软件包管理(例如检查已安装的软件包和搜索可用的软件包)的最合适工具。
aptitude 对硬件资源的要求更高。它消耗更多的内存并且运行速度更慢。
aptitude 提供一个增强的正则表达式来搜索所有的软件包元数据。
aptitude 可以管理软件包的多个版本,并且不使用 /etc/apt/preferences,这会十分直观。

2.2.2
apt 语法 aptitude 语法 apt-get / apt-cache 语法 说明
apt update aptitude update apt-get update 更新软件包档案库元数据
apt install foo aptitude install foo apt-get install foo 安装 “foo” 软件包的候选版本以及它的依赖
apt upgrade aptitude safe-upgrade apt-get upgrade 安装已安装的软件包的候选版本并且不移除任何其它的软件包
apt full-upgrade aptitude full-upgrade apt-get dist-upgrade 安装已安装的软件包的候选版本,并且需要的话会移除其它的软件包
apt remove foo aptitude remove foo apt-get remove foo 移除 “foo” 软件包,但留下配置文件
apt autoremove N/A apt-get autoremove 移除不再需要的自动安装的软件包
apt purge foo aptitude purge foo apt-get purge foo 清除 “foo” 软件包的配置文件
apt clean aptitude clean apt-get clean 完全清除本地仓库的软件包检索文件
apt autoclean aptitude autoclean apt-get autoclean 清除本地仓库中过时软件包的软件包检索文件
apt show foo aptitude show foo apt-cache show foo 显示 “foo” 软件包的详细信息
apt search <正则表达式> aptitude search <regex> apt-cache search <regex> 搜索匹配 <regex> 的软件包
N/A aptitude why <regex> N/A 解释匹配 <regex> 的软件包必须被安装的原因
N/A aptitude why-not <regex> N/A 解释匹配 <regex> 的软件包不必安装的原因
N/A aptitude search '~i!~M' apt-mark showmanual 列出手动安装的软件包

 

2.2.7. aptitude 正则表达式
aptitude 正则表达式是类 mutt 的拓展 ERE(参见 第 1.6.2 节 “正则表达式”),aptitude 具体的特殊匹配规则扩展如下。
表 2.11. aptitude 正则表达式
扩展匹配规则描述 正则表达式
匹配软件包名称 ~n<regex_name>
匹配描述 ~d<regex_description>
匹配软件集名称 ~t<regex_task>
匹配 debtag ~G<regex_debtag>
匹配维护者 ~m<regex_maintainer>
匹配软件包的 section ~s<regex_section>
匹配软件包版本 ~V<regex_version>
匹配档案库 ~A{stretch,buster,sid}
匹配来源 ~O{debian,…}
匹配优先级 ~p{extra,important,optional,required,standard}
匹配必要的软件包 ~E
匹配虚拟软件包 ~v
匹配新的软件包 ~N
匹配待执行的动作 ~a{install,upgrade,downgrade,remove,purge,hold,keep}
匹配已安装软件包 ~i
匹配带有 A 标签的已安装软件包(自动安装的软件包) ~M
匹配不带有 A 标签的已安装软件包(管理员选择的软件包) ~i!~M
匹配已安装并且是可升级的软件包 ~U
匹配已删除但未清除的软件包 ~c
匹配已移除,已清除或可移除的软件包 ~g
匹配破坏依赖关系的软件包 ~b
匹配破坏 <type> 依赖关系的软件包 ~B<类型>
匹配 <pattern> 软件包的 <type> 依赖关系 ~D[<类型>:]<模式>
匹配 <pattern> 软件包破坏的 <type> 依赖关系 ~DB[<类型>:]<模式>
匹配依赖于 <pattern> 软件包的 <type> 依赖的软件包 ~R[<类型>:]<模式>
匹配依赖于 <pattern> 软件包破坏的 <type> 依赖的软件包 ~RB[<类型>:]<模式>
匹配其它已安装软件包所依赖的软件包 ~R~i
匹配没有被其它已安装软件包所依赖的软件包 !~R~i
匹配其它已安装软件包所依赖或建议安装的软件包 ~R~i|~R推荐:~i
匹配 <pattern> 过滤版本之后的软件包 ~S 过滤 <模式>
匹配所有软件包(真) ~T
不匹配软件包(假) ~F

 

2.3.3. 完整地清理已删除软件包
您能清除所有已移除软件包的剩余配置文件。
检查以下命令的结果。
# aptitude search '~c'
如果您确认所列出的软件包应当被完整删除,请运行以下命令。
# aptitude purge '~c'
您可能想要在交互模式中做类似的操作进行细粒度的控制。

 

2.4. 高级软件包管理操作
2.4.1. 命令行中的高级软件包管理操作
下面列出了一些其它的软件包管理操作,这些操作对于 aptitude 过于高级或缺失所需的功能。
表 2.13. 高级软件包管理操作
命令 操作
COLUMNS=120 dpkg -l <package_name_pattern> 列出已安装软件包的列表用于错误报告
*dpkg -L <package_name> 显示一个已安装软件包的内容 (软件包包含什么文件或目录)
dpkg -L <package_name> | egrep '/usr/share/man/man.*/.+' 列出一个已安装软件包的 man 手册页
*dpkg -S <file_name_pattern> 列出匹配文件名的已安装软件包(查询一个文件属于哪个包)
apt-file search <file_name_pattern> 列出档案库中匹配文件名的软件包
apt-file list <package_name_pattern> 列出档案库中匹配的软件包的内容
dpkg-reconfigure <package_name> 重新配置软件包
dpkg-reconfigure -p=low <package_name> 通过最详细的方式来重新配置软件包
configure-debian 以全屏菜单的形式重新配置软件包
dpkg --audit 部分安装软件包的审计系统
dpkg --configure -a 配置所有部分安装的软件包
*apt-cache policy <binary_package_name> 显示一个二进制软件包的可用版本、优先级和档案库信息
apt-cache madison <package_name> 显示一个软件包的可用版本和档案库信息
apt-cache showsrc <binary_package_name> 显示一个二进制软件包的源代码软件包信息
apt-get build-dep <package_name> 安装构建软件包所需要的软件包
aptitude build-dep <package_name> 安装构建软件包所需要的软件包
*apt-get source <package_name> (从标准档案库)下载源代码
dget <URL for dsc file> (从其它档案库)下载源代码软件包
dpkg-source -x <package_name>_<version>-<debian_version>.dsc 从源代码软件包集合(“*.orig.tar.gz” 和 “*.debian.tar.gz"/"*.diff.gz”)中构建代码树
debuild binary 从本地的源代码树中构建软件包
make-kpkg kernel_image 从内核源代码树中构建一个内核软件包
make-kpkg --initrd kernel_image 从启用了 initramfs 的内核代码树中构建一个内核软件包
dpkg -i <package_name>_<version>-<debian_version>_<arch>.deb 安装一个本地的软件包到系统中
apt install /path/to/<package_filename>.deb 安装本地软件包到系统中,同时尝试自动解决依赖
debi <package_name>_<version>-<debian_version>_<arch>.dsc 安装本地软件包到系统中
dpkg --get-selections '*' >selection.txt 保存 dpkg 级别的软件包选择状态信息
dpkg --set-selections <selection.txt 使用 dpkg 设置软件包选择状态
echo <package_name> hold | dpkg --set-selections 使用 dpkg 将一个软件包的包选择状态设置为 hold(相当于 "aptitude hold < 包名> ")

 

2.5.4. 获取用于软件包的元数据
当使用 APT 工具时,如 aptitude, apt-get, synaptic, apt-file, auto-apt,我们需要更新包含 Debian 档案库信息元数据的本地拷贝。这些本地拷贝的文件名称,和在 "/etc/apt/sources.list" 文件里面的 distribution, area, architecture 相应名称一致。 (参见 第 2.1.4 节 “Debian 档案库基础”).
"/var/lib/apt/lists/deb.debian.org_debian_dists_<distribution>_Release"
"/var/lib/apt/lists/deb.debian.org_debian_dists_<distribution>_Release.gpg"
"/var/lib/apt/lists/deb.debian.org_debian_dists_<distribution>_<area>_binary-<architecture>_Packages"
"/var/lib/apt/lists/deb.debian.org_debian_dists_<distribution>_<area>_source_Sources"
"/var/cache/apt/apt-file/deb.debian.org_debian_dists_<distribution>_Contents-<architecture>.gz" (apt-file)
前 4 种类型的文件是所有相关的 APT 命令共享的,并且可以通过 “apt-get update” 或 “aptitude update” 在命令行中进行更新。如果在 “/etc/apt/sources.list” 中有相应的 “deb” 行,则 “软件包” 元数据会进行更新。如果在 “/etc/apt/sources.list” 中有相应的 “deb-src” 行,则 “源代码” 元数据会进行更新。
除了远程获取元数据,aptitude 命令还会将它在本地产生的安装状态信息保存在 “/var/lib/aptitude/pkgstates” 中,这些信息只能被 aptitude 使用。

 

 

2.5.9. dpkg 命令
dpkg(1) 是 Debian 软件包管理中最底层的工具。它非常强大,必须小心使用。
当安装名为 “<package_name>” 的软件包时,dpkg 会按照下列的顺序处理它。
解包 deb 文件(等同于 “ar -x”)
使用 debconf(1) 执行 “<package_name>.preinst”
将软件包安装到系统中(等同于 “tar -x”)
使用 debconf(1) 执行 “<package_name>.postinst”
debconf 系统提供带有 I18N 和 L10N (第 8 章 国际化和本地化)支持的标准化用户交互。
表 2.17. dpkg 创建的重要文件
文件 内容说明
/var/lib/dpkg/info/<package_name>.conffiles 列出配置文件。(使用者可修改的)
/var/lib/dpkg/info/<package_name>.list 列出软件包安装的所有文件和目录
/var/lib/dpkg/info/<package_name>.md5sums 列出软件包安装的文件的 MD5 哈希值
/var/lib/dpkg/info/<package_name>.preinst 软件包安装之前运行的软件包脚本
/var/lib/dpkg/info/<package_name>.postinst 软件包安装之后运行的软件包脚本
/var/lib/dpkg/info/<package_name>.prerm 软件包移除之前运行的软件包脚本
/var/lib/dpkg/info/<package_name>.postrm 软件包移除之后运行的软件包脚本
/var/lib/dpkg/info/<package_name>.config 用于 debconf 系统的软件包脚本
/var/lib/dpkg/alternatives/<package_name> update-alternatives 命令使用的替代信息
/var/lib/dpkg/available 所有软件包的可用性信息
/var/lib/dpkg/diversions dpkg(1) 使用的文件移动信息,由 dpkg-divert(8) 设置
/var/lib/dpkg/statoverride dpkg(1) 使用的文件状态改变信息,由 dpkg-statoverride(8) 设置
/var/lib/dpkg/status 所有软件包的状态信息
/var/lib/dpkg/status-old “var/lib/dpkg/status” 文件的第一代备份
/var/backups/dpkg.status* 第二代备份,以及“var/lib/dpkg/status”文件更旧的备份

“status” 文件也被例如 dpkg(1)、“dselect update” 和 “apt-get -u dselect-upgrade” 等工具使用。
专门的搜索命令 grep-dctrl(1) 可以搜索 “status” 和 “available” 元数据的本地副本。
[提示] 提示
在debian 安装器环境下, udpkg 命令用于打开udeb 软件包,udpkg 命令是 dpkg 命令的一个精简版本.

可替代:
update-alternatives --display x-www-browser #列出x-www-browser默认使用什么
update-alternatives --config x-www-browser #修改默认浏览器