当前位置: 首页 > news >正文

Linux 包管理命令 (apt, whitch, dpkg, ldd)

Linux下查找和管理安装包的实用命令总结

年前折腾glibcdebug版本时,频繁用到与apt相关的指令。当时觉得这些操作简单,没做记录,想着靠脑子就能记住,结果现在全忘光了。好在最近又用到了相关知识,翻出当时的记录,在此详细总结一番,减小回忆成本。

一、查找命令的路径 - which

which <命令>:这个命令用于在系统的PATH环境变量所指定的目录中搜索可执行文件,并返回第一个找到的匹配项的路径。它只能查找命令(可执行文件),无法查找普通的通过apt安装的包。例如,想知道python命令的位置,输入which python,系统可能会返回/usr/bin/python,表明系统在/usr/bin目录下找到了python可执行文件。

常用选项

  • -a--all:显示所有满足条件的命令路径,而不仅仅是第一个匹配项。例如,输入which -a gcc可能会返回多个路径,如/usr/bin/gcc/usr/local/bin/gcc,这意味着系统中有多个版本的GCC编译器可供使用。
  • -s--silent--quiet:静默模式,只返回命令路径,不显示任何错误信息。比如输入which non_existent_command通常会显示错误信息,但加上-s选项后则不会显示任何内容。
  • -V--version:显示which命令的版本信息。

二、软件包管理 - apt

2.1 更新软件包列表 -apt update

apt update:用于更新本地软件包索引数据库。运行该命令时,系统会连接到配置的软件源,从中获取软件包信息和更新,更新本地软件包列表,并检查是否有可用的软件包更新。在进行软件包的安装或升级操作前,强烈建议先执行此命令,以确保获取到最新的软件包信息。例如在安装新软件包之前,先运行apt update,可以避免因软件包列表过旧而导致安装失败。

2.2 安装软件包 -apt install

apt install <包>:用于安装指定的软件包及其依赖项。例如,要安装nginx服务器软件,执行sudo apt install nginx,系统会自动下载并安装nginx以及它所依赖的其他软件包。如果不记得完整的包名,可以只输入前面一部分,然后按tab键,系统会自动补全或显示所有匹配的包名。如果需要指定安装某个版本的软件包,可以使用sudo apt install <package_name>=<version_number>的格式 ,如sudo apt install redis=4.0

2.3 卸载软件包 -apt remove

apt remove <包>:该命令用于卸载指定的软件包,但不会删除软件包的配置文件。例如,要卸载nginx,执行sudo apt remove nginxnginx软件包会被卸载,但相关配置文件仍然保留在系统中,方便日后重新安装时使用原有配置。

2.4 检查软件包是否安装 -apt list --installed | grep <包>

apt list --installed | grep <包>:用于展示板子上指定的通过apt安装的包是否存在。例如,要检查系统中是否安已经装了python3,执行apt list --installed | grep python3,如果已安装,会显示相关的软件包信息;如果未安装,则不会有匹配的输出。

2.5 从软件源查询是否有可供安装版本 -apt-cache search

apt-cache search <包>:在APT软件包数据库中搜索与指定关键字相关的软件包,返回与关键字匹配的所有软件包列表,包括软件包名称和简要描述。这个命令有助于快速找到与特定关键字相关的软件包,但它不提供软件包的详细信息或版本信息。比如想查找与image processing相关的软件包,可以执行apt-cache search "image processing",系统会列出一系列可能相关的软件包。

2.6 显示软件包详细信息 -apt show

apt show <包名>:在通过apt-cache search等方式确定了包的具体名字后,再使用此命令展示指定包的详细信息,包括版本号、安装大小、依赖关系等。例如,执行sudo apt show nginx,可以查看nginx软件包的详细信息,如版本、依赖的其他库等。

三、软件包管理 - dpkg

3.1 检查软件包是否安装 -dpkg -l <包名>

dpkg -l <包>:用于查找板子上是否安装了指定的软件包(需通过apt安装的才能查到)。与apt list --installed | grep <包>类似,它会列出符合条件的软件包信息,如果软件包已安装,会显示包括版本号等详细信息;若未安装,则无匹配结果。例如,执行dpkg -l python3,可查看python3软件包的安装情况。

3.2 查找软件包安装位置 -dpkg -L <包名>

dpkg -L <包具体名字>:根据dpkg -l找到的包的具体名字后,使用此命令可查找包的安装位置。往往一个包名字对应多个安装文件,该命令会列出该软件包安装到系统中的所有文件和目录路径。例如,在确定系统中安装了nginx后,执行dpkg -L nginx,会显示nginx相关文件在系统中的具体存放位置。

四、查看动态链接库依赖 -ldd

ldd(list dynamic dependencies)是Linux系统中一个非常实用的命令,用于显示可执行文件或共享库依赖的动态链接库(不能显示静态库)
这个工具对于诊断程序运行时的库依赖问题(如找不到库、版本不兼容等)特别有用。例如,执行ldd /usr/bin/lsusb,会显示lsusb这个可执行文件所依赖的动态链接库列表,包括每个库的名称、实际路径以及加载地址等信息。如果列表中某个库显示为not found,则说明系统无法找到该库,可能导致程序运行失败。常用选项如下:

  • -v:显示详细的版本和依赖信息(包括符号版本)。
  • -u:显示未使用的依赖库(用于排查冗余依赖)。
  • -d:执行重定位(relocate)并报告丢失的共享库。
  • -r:执行重定位和符号解析,报告丢失的函数。
  • --help:查看帮助文档。

五、命令关系说明

  • whichapt相关命令which主要关注可执行文件的路径查找,而apt系列命令侧重于用户态或者命令所依赖的软件包的管理,包括安装、卸载、更新等,二者功能不同,不存在交叉。
  • whichldd相关命令which在查找可执行文件的路径后,刚好可以通过ldd查找其依赖的库文件信息。
  • apt list --installed | grep <包>dpkg -l <包>:这两个命令都可以用于检查指定软件包是否安装,但它们是基于不同的工具实现的。apt是高级软件包管理工具,是APT的一部分,适用于使用APT的所有发行版,包括但不限于Debian和Ubuntu ,它在功能上更为全面,不仅能检查安装,还能进行安装、更新等操作;dpkg是Debian的基础软件包管理工具,虽然在其他如Ubuntu的系统中也存在,但通常在APT的封装下使用,dpkg -l主要用于列出已安装软件包的状态信息。在检查软件包是否安装这一功能上,它们作用类似,都能实现目的,用户可根据习惯选择使用。
  • apt-cache searchapt showapt-cache search用于在软件包数据库中快速搜索与关键字相关的软件包,帮助用户定位可能需要的软件包;而apt show则是在确定了软件包名称后,用于查看该软件包的详细信息,二者是前后关联的操作,先通过apt-cache search找到感兴趣的软件包,再用apt show查看其详细情况 。

六、apt命令报错及解决

如果在执行apt updateapt install等命令时出现E: Unable to locate错误,可能是软件源配置或网络代理等问题导致。可尝试参照能正常执行命令的系统,对/etc/profile.d/proxy.sh/etc/apt/apt.conf文件进行配置修改。检查网络代理设置是否正确,确保软件源地址有效且可访问。若问题依旧,可能需要检查系统的软件源列表是否损坏或过时,可尝试更新或修复软件源列表。

http://www.jsqmd.com/news/674733/

相关文章:

  • 【技术解码】AUTOSAR功能安全实战:E2E通信保护库的配置与集成
  • 如何快速配置多游戏模组管理器:XXMI启动器新手完整指南
  • Apache Ambari入门指南:5分钟快速掌握Hadoop集群管理
  • 区块链系统设计思考
  • 2026届最火的AI学术工具实际效果
  • 从浏览器到服务器:图解HttpServletResponse如何操控文件流(原理+实践)
  • 从VGA到4K:聊聊VESA时序标准的前世今生,以及它如何影响你的显示器
  • lory.js 最佳实践:如何优化轮播性能与用户体验
  • SpringBoot+Vue高校大学生竞赛项目管理系统源码+论文
  • STM32F103C6T6实战:PWM+DMA驱动WS2812B LED灯带
  • Primo内置代码编辑器深度解析:实时预览与智能开发体验
  • 从零构建:基于Grafana与Flowcharting打造业务级动态监控视图
  • ModTheSpire完整指南:解决Slay The Spire模组加载的5大难题
  • [具身智能-396]:机器人舵机编码器的工作原理和示例
  • Rugged最佳实践总结:从新手到专家的完整成长路径
  • C语言编译报错:invalid suffix ‘x‘ on integer constant 的根源剖析与解决之道
  • 2026年评价高的不锈钢钛棒过滤器优质供应商推荐 - 品牌宣传支持者
  • 2026吹风机源头工厂外贸推荐:260手提吹风机/风力灭火机源头工厂实力解析 - 栗子测评
  • K210摄像头数据如何‘飞’上云端?ESP8266+MQTT实战教程,轻松对接阿里云IoT
  • 快速上手Gitee:从注册到代码提交全攻略
  • 如何快速掌握Spring Boot开发:全面实践教程与项目示例
  • 如何捕获与存储BullMQ错误堆栈:完整异常追踪指南
  • 2026靠谱装修公司推荐:装修施工一站式服务哪家好?家装施工装修公司+全屋装修设计服务推荐全整理 - 栗子测评
  • uniapp 实现身份证上传选择文件上传相册选择拍摄
  • Day04 完整学习计划 | 阿里云ACP大模型解决方案专家
  • 【万字文档+PPT+源码】基于springboot+vue的剧本杀服务平台-计算机专业项目设计分享
  • 别再手动抄代码了!用Python+efinance批量抓取A股全量数据(附完整脚本与MongoDB存储方案)
  • [具身智能-398]:AS5600磁编码器功能和管脚详解
  • 别再死记硬背了!用MySQL的`rand(0)`和`group by`亲手复现一次SQL报错注入
  • 2026年靠谱的层叠式过滤器/不锈钢层叠式过滤器厂家综合对比分析 - 品牌宣传支持者