同步操作将从 deepinwiki/wiki 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
[TOC]
这看上去是一个很low很小白的话题,实际上在运维角度,部署软件是一项非常重要的日常工作。要想愉快的玩linux,首先你得学会正确安装软件,并且出现部署问题,能够修复。
一般系统会集成一个gui界面的比较好用的商店,但是那是一个高层界面,友好,但不够自由和可控。作为底层一点,debian系列提供了apt 命令行。apt是一个链接到软件仓库,从里面下载软件安装到系统,同时管理系统内部软件依赖关系的一个全能管家。
一个软件包,同时会依赖其他软件包,软件包又同时存在多个版本,但是系统一般而言只能安装一个版本,因为debian系中的软件包安装实际上就是复制文件到特定位置,并进行一些简单的脚本配置写入工作,它简单清晰,没有windows那么隐晦,和麻烦的注册表管理。但也因此,它一般只能有一个版本,因为不同版本同名文件会覆盖。除非你细致的更改安装位置,修改文件名称。
如果两个包依赖不同版本,那么这两个包就不可能同时安装。而且依赖版本往往是存在范围的,从1.0到2.0,3.0以上,等等,如此复杂的依赖关系,apt就负责计算最适合的版本,计算是否兼容当前系统已经安装的软件包。这靠人工计算是很费劲,很麻烦的一件事情。
apt之下还有更底层的工具,如dpkg,它单纯的管理本地软件的依赖关系,而没有联网功能,但是能够提供更加细致的功能选项。
如果工具都没有效果,你甚至可以修改相关配置文件,直接删除和修改你不想要的东西。
当然以上,只是基于软件包(.deb)的管理方式,事实上,你还可以脱离整个管理体系,直接下载源码,编译,然后运行程序。只需要你手工把文件放在适当的位置,只是这种自由的结果是管理工具对它是不可知,且无能为力的。
稍微好点的做法,就是将它包装为一个本地的.deb包,然后通过管理工具来安装。
名词:
区别:
任务 | apt | dpkg |
---|---|---|
安装远程x | apt install x | - |
下载二进制包 | apt download x1 | - |
下载源码 | apt source x | - |
安装本地x | apt install ./x.deb | dpkg -i x.deb |
卸载 | apt remove x | dpkg -r x |
重装 | apt install --reinstall x | - |
完全卸载2 | apt purge x | dpkg -P x |
删除悬空依赖项3 | apt autoremove | - |
查看包信息 | apt show x | dpkg -I x.deb,已安装 dpkg -s x |
列出包文件 | - | dpkg -c x.deb, 已安装 dpkg -L x |
执行配置 | - | dpkg --configure x |
根据路径找对应包 | - | dpkg -S path |
更新仓库信息 | apt update | - |
升级 | apt upgrade | - |
完全升级4 | apt full-upgrade | - |
列出已安装包 | apt list | dpkg -l |
搜索软件包 | apt search "xxx" | - |
严格来说,apt是一个高层界面,它通过更底层的命令来实现功能,如果你需要更细致的选项,可以查看底层工具:
选项 | 对应底层工具 |
---|---|
update | apt-get |
upgrade,full-upgrade | apt-get |
install,remove,purge | apt-get |
autoremove | apt-get,(apt-mark) |
search | apt-cache,(apt-file) |
show | apt-cache |
list | (dpkg-query) |
注:括号点表示可以选择增强功能的工具
常见组合: ii正常安装、rc已删除保留配置、iF安装时配置失败
dpkg --list |grep -v -e^ii #查找所有非ii项
首先要理解原理,/var/lib/dpkg 目录下管理安装的所有软件的信息,而info子目录下是安装的脚本:
安装过程为啥会出错?仔细观察出错的信息,会有提示出错的原因。一个是脚本出错,这时候你可以删除该脚本。一般是卸载脚本,以下就是卸载脚本出错的解决例子:
dpkg -l |grep -v -e^ii #查找异常的软件包
sudo rm /var/lib/dpkg/info/xxx.{pre,post}rm #对删除的脚本进行删除,这样就不会调用,因而不会失败
sudo apt purge xxx #正常删除即可
这种错误是覆盖了别的软件已经存在的文件,这时候和脚本没什么关系。原因可能是你安装了不同源仓库的包,这个包名字不一样,但是内容实质是一样的,因此apt没能删除旧版本的包,来安装新版本,这时候就出现了错误状态,dpkg -l
显示是iU
开头的状态,即解压过程中出现问题。
解决方法是直接编辑/var/lib/dpkg/status
文件,这个文件记录了所有包的安装状态,把相关故障包的信息从该文件中删除,那么apt就认为你从来没有安装过这个包,apt也就无法识别出错误状态。你再卸载旧的不兼容的包,从新安装一次新的包即可。
status文件的格式类似:
Package: 360cloud
Status: deinstall ok config-files
Priority: optional
Section: utils
Installed-Size: 65536
Maintainer: Qihoo 360 Team <yunpankefu@360.cn>
Architecture: i386
Version: 1.0.0.1010
Config-Version: 1.0.0.1010
Description: 360cloud
AutoReqProv: no
Package: accountsservice
Status: install ok installed
Priority: optional
Section: admin
Installed-Size: 639
Maintainer: Debian freedesktop.org maintainers <pkg-freedesktop-maintainers@lists.alioth.debian.org>
Architecture: amd64
Version: 0.6.55-1
Depends: dbus (>= 1.9.18), libaccountsservice0 (= 0.6.55-1), libc6 (>= 2.4), libglib2.0-0 (>= 2.44), libpolkit-gobject-1-0 (>= 0.99)
Suggests: gnome-control-center
Description: query and manipulate user account information
The AccountService project provides a set of D-Bus
interfaces for querying and manipulating user account
information and an implementation of these interfaces,
based on the useradd, usermod and userdel commands.
Homepage: https://www.freedesktop.org/wiki/Software/AccountsService/
Package: acl
Status: install ok installed
...
其中,Package:
开始就是包名,接下来的都是这个包的相关信息,然后每一包信息用空行相隔。其中Status:
字段就是包的安装状态,正常是:install ok installed
,那么异常包怎么快速找到?
dpkg -l |grep -v -e^ii #查找异常的软件包
出来的信息会有两个字母代表大状态,如rc表示r删除,c仅存配置,也就是这个包已经删除,剩下配置,这种状态不会导致apt异常,导致apt异常的情况一般是iU(安装仅解压缩),rF(删除配置失败) 之类的,如果是配置失败,可以参考上一个方法。,如果是安装仅解压缩,证明文件覆盖失败。
总之,找到异常的包名,然后编辑status去掉它的所有信息,apt就恢复到正常状态,可以正常安装删除软件。这时候你才能做下一步处理。
注意,status是重要的文件,格式出错,将导致apt不可用。因此建议做好备份。保存修改后用dpkg -l |grep -v -e^ii
验证一下是否解除异常状态。
# 从外部启动后,挂载需要修复的根/mnt/root
# 设置dpkg 的目标根为/mnt/root
dpkg --root /mnt/root -i xxx.deb
# 当dpkg管理目录损坏,系统将丢失所有安装信息,这是一个非常严重的后果
mkdir -p ./root/var/lib/dpkg/{info,updates}
touch ./root/var/lib/dpkg/status
dpkg --root ./root -i xxx.deb
# 最基本的包可以从/usr/share/doc获得
ls /usr/share/doc >packages.list
dpkg --set-selections <packages.list
apt
apt-get dselect-upgrade
dpkg 命令 | 作用 |
---|---|
-i,--install | 安装1 |
--unpack | 解压缩 |
--configure | 执行配置2 |
--triggers-only | 仅处理触发器 |
-r,--remove | 删除3 |
-P,--purge | 完全删除4 |
-V,--verify | 验证,--verify-format指定包类型 |
-C,--audit | 将对异常状态的包给出处理意见 |
--update-avail | 更新可用包信息 |
--merge-avail | 更新可用包信息 |
-a,--record-avail | 更新可用包信息 |
--forget-old-unavail | 忘记过时信息 |
--clear-avail | 删除现有信息 |
--get-selections | 软件包选取,并显示状态 |
--set-selections | 软件包选取,并设置状态 |
--clear-selections | 软件包选取,并设置删除状态 |
--yet-to-unpack | 选取未安装包 |
--predep-package | 显示未满足依赖关系 |
--add-architecture | 添加体系结构 |
--remove-architecture | 移除体系结构 |
--print-architecture | 打印体系结构 |
--print-foreign-architectures | 打印附加体系结构 |
--assert-* | 支持的特性 |
--validate-* | 验证不同名称 |
--compare-versions | 比较版本 |
dpkg 选项 | 作用 |
---|---|
--abort-after | 在指定错误个数后终止 |
-B,--auto-deconfigure | 自动取消配置 |
-D,--debug | 调试信息 |
--force-* | 强制开启选项1 |
--no-force-* | 强制关闭选项 |
--refuse-* | 同上 |
--ignore-depends | 忽略依赖项 |
--simulate | 模拟操作 |
-R,--recursive | 递归 |
-G | 非降级 |
--admindir | 管理目录/var/lib/dpkg |
--instdir | 安装目录/ |
--root | 根目录/ |
-O,--selected-only | 选择 |
-E,--skip-same-version | 不安装相同版本 |
--pre-invoke | 执行前命令 |
--post-invoke | 执行后命令 |
--path-exclude | 排除路径 |
--path-include | 包含路径 |
--verify-format | 验证输出格式 |
--status-fd | 状态转发到文件描述符 |
--status-logger | 状态日志 |
--log | 日志 |
--no-pager | 禁用pager |
--no-debsig | 不验证包 |
--no-triggers | 不触发 |
--triggers | 触发器 |
dpkg-deb 命令 | 作用 |
---|---|
-b,--build | 构建deb包 |
-c,--contents | 列出包内容 |
-e,--control | 提取控制信息1 |
-x,--extract | 解压缩 |
-X,--vextract | 解压缩并显示进度信息 |
-f,--field | 显示包内DEBIAN/control的内容 |
--ctrl-tarfile | 输出控制内容组成的包 |
--fsys-tarfile | 输出非控制内容组成的包 |
-I,--info | 显示包信息 |
dpkg-query 命令 | 作用 |
---|---|
-l,--list | 列出匹配的包 |
-s,--status | 包信息 |
-L,--listfiles | 已安装包的文件列表 |
-S,--search | 从已安装包中查找文件 |
-p,--print-avail | 打印包仓库中的源信息 |
apt-cache 命令 | 作用 |
---|---|
gencaches | 创建缓存信息 |
showpkg | 显示包的依赖关系和存档信息 |
showsrc | 显示源码包信息 |
stats | 统计信息 |
dump | 所有软件包的信息列表 |
dumpavail | 所有软件包的信息列表(标准格式) |
unmet | 显示没有满足的依赖关系 |
show | 显示包的描述信息 |
search | 搜索,--names-only 只搜索名称 |
depends | 显示依赖项 |
rdepends | 显示被谁依赖 |
pkgnames | 搜索包名并只显示名字 |
dotty | 生成图,被graphviz包dotty使用 |
xvcg | 类似,被xvcg使用 |
madison | 显示源链接 |
apt-cache 选项 | 作用 |
---|---|
-p,--pkg-cache | 选择缓存文件 |
-s,--src-cache | 选择源码包缓存文件 |
-q,--quiet | 静默,不显示信息 |
-i,--important | 重要依赖项 |
--no-pre-depends | 无预依赖 |
--no-depends | 无依赖 |
--no-recommends | 无推荐 |
--no-suggests | 无建议1 |
--no-conflicts | 无冲突 |
--no-breaks | 无中断2 |
--no-replaces | 无替代 |
--no-enhances | 无增强3 |
--implicit | 隐含冲突 |
-f,--full | 更多搜索信息 |
--recurse | 递归 |
--installed | 已安装的 |
--with-source | 从.deb, .dsc, .changes 读取信息 |
-c,--config-file | apt.conf配置文件 |
-o,--option | apt配置参数 |
apt-get 命令 | 作用 |
---|---|
update | 更新信息 |
upgrade | 更新软件 |
dist-upgrade | 强制更新软件 |
dselect-upgrade | 配合dselect使用 |
install | 安装 |
reinstall | 重装 |
download | 下载包 |
remove | 卸载 |
purge | 完全卸载 |
source | 安装源代码包 |
build-dep | 安装编译时的依赖项 |
check | 检测包完整性 |
clean | 清除下载缓存 |
autoclean | 智能清理下载缓存 |
autoremove | 清除悬空的依赖项 |
changelog | 下载包的更新日志 |
apt-get 选项 | 作用 |
---|---|
--no-install-recommends | 不安装推荐项 |
--install-suggests | 安装建议项 |
-d,--download-only | 只下载,不安装 |
-f,--fix-broken | 自动修复依赖关系 |
-m,--ignore-missing | 忽略缺少的依赖项 |
--no-download | 禁止连接仓库下载 |
-q,--queit | 静默 |
-s,--simulate | 模拟安装过程 |
-y,--assme-yes | 自动确定 |
--assume-no | 自动否定 |
--no-show-upgraded | 不显示更新 |
-v,--verbose-versions | 显示详细版本号 |
-a,--host-architecture | 系统架构 |
-P,--build-profiles | 构建配置 |
-b,--build | 编译 |
--ignore-hold | 忽略保留软件包 |
--with-new-pkgs | 允许新包 |
--no-upgrade | 不升级 |
--only-upgrade | 只升级 |
--allow-downgrades | 允许降级 |
--allow-remove-essential | 可删除必要项 |
--allow-change-held-packages | 可修改保留包 |
--print-uris | 打印源url |
--purge | 完全清除 |
--reinstall | 重新安装 |
--list-cleanup | 清除仓库配置信息 |
--t,--target-release | 安装选定目标的源 |
--trivial-only | 只提出重要问题 |
--no-remove | 不删除 |
--autoremove | 自动删除不需要的依赖项 |
--only-source | 只下载源码包 |
--diff-only | 下载diff文件 |
--dsc-only | 下载dsc文件 |
--tar-only | 下载tar文件 |
--arch-only | 只下载当前体系结构 |
--indep-only | 只下载体系结构无关项 |
--allow--unauthenticated | 允许未经身份认证的源 |
--no-allow-insecure-repositories | 不允许未验证的源 |
--allow-releaseinfo-change | 允许新版发行信息 |
--show-progress | 进度条 |
--with-source | 元数据源 |
-c,--config-file | apt.conf配置文件 |
-o,--option | apt 参数 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。