经常会用到dpkg和apt命令,但经常会忘记怎么用,因此记录一下平时自己用到过的命令
一.查看程序(命令)属于哪个包
【命令1:】whereis 命令名
用命令1查看程序的路径,有时会包含程序所属的包
【命令2:】dpkg -S 命令路径
用命令2查看程序属于哪个包 ,输出信息可能比较多,可以用grep过滤信息。另外还有apt-file命令可用,如果系统没有这个命令用下面两个命令安装
sudo apt-get install -y apt-file
apt-file update
然后运行
apt-file search 命令路径
【命令3:】dpkg -s 包
用命令3查看包的信息。
【 命令4:】dpkg -L 包
用命令4查看包包含哪些文件。
示例:
二.查看库属于哪个包
【命令1:】dpkg -S 库路径
用命令1查看程序属于哪个包 ,输出信息可能比较多,可以用grep过滤信息。另外还有apt-file命令可用,如果系统没有这个命令用下面两个命令安装
sudo apt-get install -y apt-file
apt-file update
然后运行
apt-file search 库路径
【命令2:】dpkg -s 包
用命令2查看包的信息。
【 命令3:】dpkg -L 包
用命令3查看包包含哪些文件。
示例:
*************************************************************************************************************
2020.5.5更新
*************************************************************************************************************
一. apt查看安装包版本:
1. apt-cache madison 安装包
# apt-cache madison libstdc++6-8-dbg
libstdc++6-8-dbg | 8.4.0-1ubuntu1~18.04 | http://us.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages
libstdc++6-8-dbg | 8.4.0-1ubuntu1~18.04 | http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages
libstdc++6-8-dbg | 8-20180414-1ubuntu2 | http://us.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages
gcc-8 | 8-20180414-1ubuntu2 | http://us.archive.ubuntu.com/ubuntu bionic/main Sources
gcc-8 | 8.4.0-1ubuntu1~18.04 | http://us.archive.ubuntu.com/ubuntu bionic-updates/main Sources
gcc-8 | 8.4.0-1ubuntu1~18.04 | http://security.ubuntu.com/ubuntu bionic-security/main Sources
2. apt-cache policy 安装包
# apt-cache policy libstdc++6-8-dbg
libstdc++6-8-dbg:
Installed: 8.4.0-1ubuntu1~18.04
Candidate: 8.4.0-1ubuntu1~18.04
Version table:
*** 8.4.0-1ubuntu1~18.04 500
500 http://us.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages
500 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages
100 /var/lib/dpkg/status
8-20180414-1ubuntu2 500
500 http://us.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages
3. apt-get install -s 安装包名称 (这个命令只是模拟安装时会安装哪些软件列表,但不会例举出每个软件有多少个版本)
4. apt-get source 安装包名称 (这个命令安装安装包对应的源码,apt-cache madison会显示要下载源码包)
5. apt-get install 安装包名称=版本 (版本为apt-cache madison显示的第二行,如上面红色标示的8.4.0-1ubuntu1~18.04)
6. apt-cache search 安装包名称(可用正则表达式)
7. apt-cache show 安装包名称
**************************************************************
案例:
查找libstdc++.so动态库的调试包,并安装源码
1.查看库的路径,可以通过cat /proc/$pid/maps来查看一个程序加载的libstdc++.so库的绝对路径
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
2.查看libstdc++.so.6.0.25属于哪个安装包
root@ubuntu:~$ dpkg -S /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
libstdc++6:amd64: /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
3.查找libstdc++6的调试包(往往名称中包含dbg)
apt-cache search libstdc++.* | grep dbg
这时列出了很多包
比如:libstdc++6-5-dbg libstdc++6-7-dbg libstdc++6-8-dbg等
运行apt list libstdc++6
Listing... Done
libstdc++6/bionic-updates,bionic-security,now 8.4.0-1ubuntu1~18.04 amd64 [installed]
系统中的应该对应得是libstdc++6-8-dbg
4.安装libstdc++6-8-dbg
apt install libstdc++6-8-dbg
5.查看安装的文件
root@ubuntu# dpkg -L libstdc++6-8-dbg
/.
/usr
/usr/lib
/usr/lib/debug
/usr/lib/debug/.build-id
/usr/lib/debug/.build-id/f2
/usr/lib/debug/.build-id/f2/119a44a99758114620c8e9d8e243d7094f77f6.debug
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/debug
/usr/lib/x86_64-linux-gnu/debug/libstdc++.a
/usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6.0.25
/usr/lib/x86_64-linux-gnu/debug/libstdc++fs.a
/usr/share
/usr/share/doc
/usr/share/gdb
/usr/share/gdb/auto-load
/usr/share/gdb/auto-load/usr
/usr/share/gdb/auto-load/usr/lib
/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu
/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/debug
/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6.0.25-gdb.py
/usr/lib/x86_64-linux-gnu/debug/libstdc++.so
/usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6
/usr/share/doc/libstdc++6-8-dbg
可以看到/usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6.0.25,这是带调试信息的
root@ubuntu:# file /usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6.0.25
/usr/lib/x86_64-linux-gnu/debug/libstdc++.so.6.0.25: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=da4d52027095b0e48b6c1c12e00f78542e4221f8, with debug_info, not stripped
6.查看对应的源文件信息,对应的是gcc-8(libstdc++6-8-dbg和libstdc++6对应的相同)
root@ubuntu:/home/kehao# apt-cache madison libstdc++6-8-dbg
libstdc++6-8-dbg | 8.4.0-1ubuntu1~18.04 | http://us.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages
libstdc++6-8-dbg | 8.4.0-1ubuntu1~18.04 | http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages
libstdc++6-8-dbg | 8-20180414-1ubuntu2 | http://us.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages
gcc-8 | 8-20180414-1ubuntu2 | http://us.archive.ubuntu.com/ubuntu bionic/main Sources
gcc-8 | 8.4.0-1ubuntu1~18.04 | http://us.archive.ubuntu.com/ubuntu bionic-updates/main Sources
gcc-8 | 8.4.0-1ubuntu1~18.04 | http://security.ubuntu.com/ubuntu bionic-security/main Sources
root@ubuntu:/home/kehao# apt-cache madison libstdc++6
libstdc++6 | 8.4.0-1ubuntu1~18.04 | http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
libstdc++6 | 8.4.0-1ubuntu1~18.04 | http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages
libstdc++6 | 8-20180414-1ubuntu2 | http://us.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
gcc-8 | 8-20180414-1ubuntu2 | http://us.archive.ubuntu.com/ubuntu bionic/main Sources
gcc-8 | 8.4.0-1ubuntu1~18.04 | http://us.archive.ubuntu.com/ubuntu bionic-updates/main Sources
gcc-8 | 8.4.0-1ubuntu1~18.04 | http://security.ubuntu.com/ubuntu bionic-security/main Sources
7.下载源码
apt source libstdc++6-8-dbg