[TOC]
0x01 dpkg 命令快速入门
描述:dpkg是软件包管理基础工具“Debian Packager ”的简写,为 “Debian” 专门开发的套件管理系统,方便软件的安装、更新及移除,dpkg命令与rpm有异曲同工之妙; 使用方法:
代码语言:javascript复制dpkg --help
dpkg –licence #显示dpkg的Licence
dpkg –version #显示dpkg的版本号
使用案例:
代码语言:javascript复制#示例1.安装/删除/更新/读取软件
dpkg -i <.deb file name> #安装指定deb软件包
dpkg -R /usr/local/src #安装一个目录下面所有的软件包
dpkg -r avg71flm #删除软件包(保留其配置信息)
dpkg -P avg71flm # 删除一个包(包括配置信息),完全清除一个已安装的包。和 remove 不同的是,remove 只是删掉数据和可执行文件,purge 另外还删除所有的配制文件。
dpkg –update-avail <Packages-file> #替代软件包的信息
dpkg –merge-avail <Packages-file> #合并软件包信息
dpkg –forget-old-unavail #丢失所有的Uninstall的软件包信息
dpkg –clear-avail #删除软件包的Avaliable信息
dpkg -b direc×y [filename] #建立一个deb文件
dpkg -c filename #显示一个Deb文件的目录
#示例2.信息读取
dpkg -A package_file #从软件包里面读取软件的信息
dpkg -L package #查看软件安装在什么地方,显示一个包安装到系统里面的文件目录信息
dpkg -C #查找只有部分安装的软件包信息
dpkg -l package-name-pattern #列出软件版本软件名,已安装包
dpkg -p package-name #显示包的具体信息小写
dpkg -S filename-search-pattern #搜索指定包里面的文件(模糊查询)
dpkg -I filename [control-file] #显示一个Deb的说明,搜索Deb包
dpkg -s package-name #报告指定包的状态信息
#示例3.搜索Deb包:
命令行:[dpkg -s|-L|-p] package-name
示例:dpkg -s ssh
示例:dpkg -L apache2
示例:dpkg -p cacti
#示例4.查看具体某个包是否安装
dpkg --get-selections | grep - debianinstallname
#释放软件包,但是不进行配置
dpkg –unpack avg71flm_r28-1_i386.deb # 如果和-R一起使用,参数可以是一个目录
#安装一个目录下面所有的软件包
dpkg –configure avg71flm_r28-1_i386.deb # #如果和-a一起使用,将配置所有没有配置的软件包
dpkg -reconfigure xxx #重新配置软件,具体的应用此处不赘述。
#比较同一个包的不同版本之间的差别
dpkg –compare-versions ver1 op ver2
#有些软件很难卸载,而且还阻止了别的软件的应用,就能够用这个,但是有点冒险
dpkg --force-all --purge packagename
#64位得安装32位兼容库:
dpkg --add-architecture i386
# 忽略依赖安装
sudo dpkg --ignore-depends=kubernetes-cni -i kubeadm_1.13.5-00_amd.deb
实践案例:
代码语言:javascript复制~$ dpkg --get-selections | grep linux-modules
linux-modules-5.4.0-113-generic deinstall
linux-modules-5.4.0-117-generic install
linux-modules-5.4.0-120-generic install
dpkg-query 命令 - 查询dpkg数据库的工具
描述: 该命令是查询dpkg数据库的工具, 例如查询ubuntu中的库文件(动态链接库、文件)属于哪个deb包并查询包版本。
语法参数:
代码语言:javascript复制# SYNOPSIS
dpkg-query [option...] command
# 参数
-l, --list [package-name-pattern...] : 列出与一个或多个模式匹配的所有已知包。
-W, --show [package-name-pattern...] :与--list选项一样它将列出与给定模式匹配的所有包,但是可以使用--showformat选项自定义输出 。
-s, --status [package-name...] :报告指定包的状态。
-L, --listfiles package-name.. :从包名列出安装到系统的文件,当列出多个包名时,所请求的文件列表以空行分隔。
--control-list package-name :从包名列出安装到系统的控制文件(自dpkg 1.16.5起)。
--control-show package-name control-file :将安装到系统的控制文件从包名打印到标准输出(从dpkg 1.16.5开始)。
-S, --search filename-search-pattern... : 搜索拥有与给定模式(动态链接库)对应的文件的包。
-p, --print-avail [package-name...] : 显示有关包的详细信息,如/var/lib/dpkg/available中所示。
使用示例:
代码语言:javascript复制# 示例1.列举出 libc6* 匹配到的包
~$ dpkg-query -l 'libc6*'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
-==============-===============-============-=================================
ii libc6:amd64 2.31-0ubuntu9.7 amd64 GNU C Library: Shared libraries
un libc6-amd64 <none> <none> (no description available)
# 示例2.查看 libpam-modules 包安装到系统中的文件。
~$ dpkg-query -L libpam-modules
dpkg-query -L libpam-modules
/etc/security/access.conf
....
/etc/security/sepermit.conf
/etc/security/time.conf
/lib/x86_64-linux-gnu/security/pam_access.so
....
/lib/x86_64-linux-gnu/security/pam_extrausers.so
# 示例3.查看静态连接库属于哪一个包并显示器绝对路径。
# 查询 pam_tally2.so 库所在包名称
~ $ dpkg -S pam_tally2.so # ubuntu 20.04
libpam-modules:amd64: /lib/x86_64-linux-gnu/security/pam_tally2.so
# 查询 pam_faillock.so 库所在包名称
~ $ dpkg -S pam_faillock # ubuntu 22.04
libpam-modules:amd64: /lib/x86_64-linux-gnu/security/pam_faillock.so
libpam-modules:amd64: /usr/share/man/man8/pam_faillock.8.gz
# 查询 /etc/security/access.conf 文件属于哪一个deb包
~ $ dpkg-query -S /etc/security/access.conf
libpam-modules:amd64: /etc/security/access.conf
温馨提示:上述-l参数中Desired/Status/Err解析如下。
代码语言:javascript复制# Desired action:
u = Unknown
i = Install
h = Hold
r = Remove
p = Purge
# Package status:
n = Not-installed
c = Config-files
H = Half-installed
U = Unpacked
F = Half-configured
W = Triggers-awaiting
t = Triggers-pending
i = Installed
# Error flags:
<empty> = (none)
R = Reinst-required
sudo apt-mark hold linux-image-4.13.0-36-generic
sudo apt-mark hold linux-image-extra-4.13.0-36-generic
sudo apt-mark hold linux-headers-4.13.0-36-generic
sudo apt-mark unhold linux-image-4.13.0-36-generic
sudo apt-mark unhold linux-image-extra-4.13.0-36-generic
sudo apt-mark unhold linux-headers-4.13.0-36-generic
https://blog.csdn.net/Alen_xiaoxin/article/details/124962470