新闻详情

新闻详情

首页 / 资讯中心 / 详情

Ubuntu软件安装全攻略:从apt到源码编译

发布时间:2026/10/1 13:16:58来源:尧图网络
Ubuntu软件安装全攻略:从apt到源码编译
作为一名常年混迹在Linux环境下的开发者我几乎每天都要在Ubuntu上装软件、卸软件。说实话很多刚接触Ubuntu的人第一反应是去应用商店点两下鼠标但真正到了服务器尤其是无桌面环境的云服务器或者遇到商店里没有的软件包时命令行就成了唯一也最高效的路径。这篇内容不打算做成一本“命令字典”糊弄人而是把我平时在实际项目中真正高频使用的安装软件命令从原理到实操从正常流程到踩坑恢复完整梳理一遍。只要你能跟着走一遍往后在Ubuntu上装东西基本不会发怵。1. 装软件之前先把安装方式选对很多人一上来就问“安装命令是什么”但Ubuntu装软件有好几条路每条路的适用场景完全不一样。选错了路子轻则装不上重则把系统依赖搞得一团糟。我一般会把安装方式分成四类按优先级排列。1.1 在线仓库安装apt——最常见也最推荐apt是Ubuntu和Debian系发行版的核心包管理器。它的工作机制是从软件源也就是远程仓库下载软件包然后自动处理依赖关系安装完以后还帮你做好升级和卸载的索引管理。用户体验上很像手机的应用商店但比应用商店透明得多。绝大多数常用软件比如nginx、docker、python3-pip、git、vim都能直接用apt安装。我自己的习惯是能apt搞定的事情绝不去折腾其他方式。原因很简单依赖自动解析、版本受官方维护、卸载干净对系统副作用最小。1.2 本地deb包安装dpkg——用于下载的安装包有时候软件官网不提供apt源只给一个.deb文件下载链接比如某些企业级工具、闭源软件或者内网离线包。这时候就要用dpkg命令直接处理这个deb包。但dpkg有个痛点它不像apt那样自动拉取依赖。如果系统里恰好缺少某个动态库或依赖包dpkg会直接报错需要你手动把缺少的依赖补上。所以实际工作中更推荐用gdebi或者apt install ./xxx.deb这种带依赖解析的安装方式而不是裸敲dpkg。1.3 跨发行版通用安装snap / flatpaksnap是Ubuntu母公司Canonical力推的打包格式特点是软件自带运行环境和系统本身隔离开。好处是解决了依赖冲突坏处是包体积大、启动稍慢。像VS Code、JetBrains系列、Spotify这些软件用snap装其实很省事。flatpak主要在非Ubuntu系里更流行Ubuntu也能用但我觉得如果没有特别的需求普通用户直接用apt或snap就足够了没必要再引入一层运行环境。1.4 源码编译——最后手段有些软件只发布源代码包或者你需要自己调整编译参数比如定制安装路径、优化指令集这时候就得走源码编译的路子。编译安装的流程基本是configure-make-make install三步后面我会用实例拆开细讲。提示源码编译执行比较繁琐而且依赖重确实没有预编译包可用时才建议尝试。日常用apt源解决不了的场景通常先在snap源找找都没有再考虑源码。2. apt命令实操从更新源到彻底卸载apt是使用频率最高的命令族但很多人只知道一个apt install遇到源没更新、PPA冲突、锁定文件残留这些问题就不知道怎么处理了。这一节我把一套完整流程串起来讲。2.1 装软件前的第一件事update和upgrade到底先敲哪个新手最容易犯的错误就是拿到一台新机器直接apt install xxx结果提示Unable to locate package。原因多半是软件源的索引文件还没有拉取过apt根本不知道去哪找这个包。我建议的标准化顺序是sudo apt update这个命令的作用是重新同步软件源的软件包索引不会改变系统里已安装的软件只是刷新“目录”。刚拿到新系统、换了源文件比如换了国内镜像源、或者添加了新的PPA之后务必先执行这一步。至于upgrade作用是把系统里所有可升级的软件统一升级到新版本。参照我的习惯个人桌面环境可以隔一段时间跑一次生产服务器则要谨慎尽量在维护窗口期做避免影响线上服务。sudo apt upgrade把这两条命令分开记忆很快就能理解包管理器的逻辑update是“查新目录”upgrade是“执行更新”。2.2 搜索、查看和安装一个软件的全过程假设我现在要装一个文本编辑器但我不确定软件包的具体名字命令行里给出的搜索方式是apt search editor结果会列出一大堆名称或描述中带editor的包。看重名信息时还可以继续用apt show查看某个包的详细信息apt show vim这会显示出这个包的版本、依赖关系、维护者、描述等元数据。安装之前花30秒看一眼依赖关系可以提前预判会不会影响系统里其他环境。确认无误后正式安装sudo apt install vim -y-y参数表示遇到询问直接确认适合脚本化操作手动操作时也可以不加敲一下回车的事。如果软件源里有的包版本太老而我需要新版可以添加PPA。比如有个轻量编辑器官方PPA里维护了更新的版本sudo add-apt-repository ppa:example/editor sudo apt update sudo apt install example-editor很多人踩坑是只执行了add-apt-repository忘记再执行apt update导致安装时提示找不到包。这三条命令是固定搭配别拆开记。2.3 卸载软件时如何做到“片叶不沾身”卸载的干净程度直接影响系统的整洁度。先看最简单的一条sudo apt remove vim这条命令会卸载可执行文件但会保留配置文件。如果你希望连配置文件一起清掉用purgesudo apt purge vim如果是打算清理不再使用的依赖包当时为了满足某个软件而自动装上的现在软件卸了依赖也空闲了用sudo apt autoremove清理apt下载缓存里的deb包文件释放磁盘空间sudo apt clean我通常在卸载大型开发工具链比如卸载整个Node.js的apt版本、卸载旧版Docker后会把purge和autoremove连着执行一遍把残留降到最低。这是很多教程里不提醒但实际使用频率很高的操作。3. 处理本地deb包dpkg的实战心得服务器或者内网环境经常遇到没有外网的情况需要手动下载deb包再安装。我拿一个例子演示假设我已经下载了一个名为teamviewer_amd64.deb的文件。3.1 最稳妥的deb包安装方式虽然dpkg是底层工具但我更推荐用apt去“按文件安装”它能自动检测并安装该deb所需的依赖——这是裸用dpkg实现不了的sudo apt install ./teamviewer_amd64.deb注意路径前要加./否则apt会以为你在尝试安装一个叫teamviewer_amd64.deb的包去源里搜索结果自然是找不到。如果确实想用dpkg直接操作安装命令sudo dpkg -i teamviewer_amd64.deb裸dpkg碰到依赖包缺失时会报dependency problems - leaving unconfigured。这种情况下不要强行重启或者反复安装先运行下面这条命令修复sudo apt install -f-f参数会修复损坏的依赖关系自动把缺失的依赖补上。经常有人问我“dpkg装一半卡住怎么办”其实多半就是这一步没做。3.2 查看deb包信息与文件列表拿到一个不明来历的deb包别急着装先看看它是什么。查看包的名称、版本、描述dpkg -I teamviewer_amd64.deb这里是大写的I表示info。查看包会往系统里拷贝哪些文件路径dpkg -c teamviewer_amd64.deb安装之后想确认某个文件属于哪个包或者某个包是否已装dpkg -l | grep teamviewer dpkg -S /usr/bin/teamviewer第一条是列出所有已安装的、名称匹配teamviewer的包第二条是查看某个具体文件来源。3.3 卸载本地安装的deb包卸载时不需要知道deb文件的路径只需要包名。先用dpkg -l | grep 包名确认准确的包名然后sudo dpkg -r teamviewer sudo dpkg -P teamviewer-r是remove-P是purge后者连配置文件一起删。实际工作中我用的比较多的是-P尤其是反复安装测试同一个软件时purge能确保上一个版本完全干净。4. snap安装命令适合不想折腾环境的懒人snap包的设计思路简单粗暴把软件和它依赖的运行环境打包在一起装到系统里之后和系统其他部分隔离。这让它天生适合那些依赖老版本库、或者和系统环境有冲突的软件。4.1 常用snap安装与更新操作安装指定软件sudo snap install code --classic--classic参数表示允许软件访问系统资源时使用传统权限模型像VS Code这一类需要读写用户目录、调用系统编译器的开发工具基本都要加这个参数否则运行起来会受限。很多刚接触snap的人在这里一头雾水记一下就好看到安装提示说明需要classic权限时果断加上。更新已装的snap软件sudo snap refresh code注意snap的更新命令是refresh不是upgrade。它和apt体系用得不一样别搞混了。卸载sudo snap remove code查看本机已安装了哪些snap包snap list4.2 snap vs apt我什么时候选哪个我的经验其实很直接如果这个软件apt源里有而且版本够新用apt如果一个软件apt里版本老旧、或者官方推荐snap安装那就用snap。比如dockerapt源里有可能版本滞后而官方更推荐用仓库安装脚本ffmpeg这类工具则apt够用。没有必要非此即彼混着用才是常态。snap还有一个坑是它的运行目录占用双份磁盘空间一份安装内容一份运行缓存小硬盘的服务器上装多了snap包会明显占空间。清理旧版本快照sudo snap set system refresh.retain2这条命令加上之后系统最多保留2个旧版本的快照再新也不会积攒太多磁盘占用。如果你习惯长期使用snap建议一开始就设置好这个参数。5. 源码编译安装把三步走吃透最后讲源码编译。虽然在现代Ubuntu上90%的场景用不到但总有那么些软件只提供源码包或者你需要做深度定制。了解这套流程也是理解Linux生态的重要一步。5.1 configure、make、make install真实作用我拿一个最典型的场景举例某软件发布了最新的tar.gz源码包解压后进入目录你会看到configure脚本、Makefile.in模板、src目录等。第一步执行./configure --prefix/usr/local/myappconfigure的作用是检查当前系统的编译环境、依赖库、内核头文件等同时根据你在参数里指定的选项生成Makefile。--prefix指安装路径默认情况下会装到/usr/local但为了让项目文件聚在一起方便打包迁移我经常指定一个单独目录。第二步make -j$(nproc)make按Makefile的规则调起编译器把源代码变成二进制文件。-j$(nproc)是让make根据 CPU 核心数并行编译我经常在编译大项目时用这个参数速度提升非常明显。第三步sudo make install把编译好的二进制、库文件、配置模板复制到系统目录。5.2 源码编译常见的三个意外编译失败是家常便饭但仔细观察报错大多出在三个地方。第一缺依赖头文件。比如编译要求有libssl系统里却没有报错通常会提示fatal error: openssl/ssl.h: No such file or directory。解决办法是安装对应的-dev包sudo apt install libssl-dev这类开发包命名规律很明显库名加-dev后缀。缺哪个报错就装哪个对应的-dev包这是源码编译最常用的排查思路。第二路径前没有权限。如果不加--prefix软件默认装到/usr/localmake install时如果不用sudo几乎一定会报注入权限错误。解决办法是在make install前加sudo或者把安装路径改到用户目录下--prefix$HOME/.local。第三升级系统后旧的编译缓存冲突。这时候在源码目录里清理一下再重新编译make clean make -j$(nproc)它会把之前生成的目标文件和临时文件清干净。别小看这个命令我无数次在系统库升级后靠它救回编译环境。6. 常见安装报错与排查速查表搬了这么多年的砖我把被问过最多、自己踩过最多的几个问题列成了一张速查表。每一个问题都对应着具体的报错关键词和处置动作直接按图索骥就行。现象报错关键词原因处置方式软件找不到Unable to locate package没有更新软件源索引先执行sudo apt update再重新install依赖报错卡住dependency problemsdpkg安装漏掉依赖执行sudo apt install -f自动修复无法获取锁Could not get lock /var/lib/dpkg/lock另一个安装进程未结束不要乱删锁文件先ps aux添加PPA后装不上404 Not Found源列表还没更新执行sudo apt update检查PPA是否支持当前系统版本deb包签名无效signature verification failed软件源公钥未导入用sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 密钥ID导入老旧方案新版用signed-by更规范编译缺头文件No such file or directory缺少-dev开发包根据缺失库名安装libxxx-dev这些场景几乎覆盖了日常安装Ubuntu软件80%以上的问题。我特别想强调一下锁文件那条——有些人遇到Could not get lock第一反应是rm /var/lib/dpkg/lock这样做短期内能继续装但极可能导致dpkg状态不一致造成更多麻烦。先定位锁的持有进程才是正解。7. 我平时会额外注意的几个习惯最后分享几条安装软件时容易被忽略但实际体验差别很大的习惯。第一替生产环境固定软件版本。我自己在做服务器环境部署的时候很少直接apt install最新版而是先apt-cache policy 包名查看可用版本再用apt install 包名版本号的方式固定装某个稳定版。生产环境求稳不追逐最新被最新版坑过的同行应该能懂这句话的分量。第二用apt list --installed审视一下系统里残留了多少再也没用过的软件包。每过一段时间清理一次机器变干净的同时依赖冲突概率也会明显下降。第三谨慎使用apt clean的优化场景。如果你的机器只是为了跑一个长期服务并不需要缓存任何deb安装包那定期清理没问题但如果你经常在隔离网络里装同一套环境建议把缓存留着下次离线安装能省很多事。命令本身并不复杂复杂的是命令背后的包管理思路和依赖关系。把上面这些场景都亲手试一遍Ubuntu安装软件这件事就算真正入门了。碰到没见过的报错大胆去查错误日志和软件源文档踩过的坑会让你记得更牢。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

从被叫渣男到深情祖师爷:童锦程.skill背后的人物真相、争议与时间线 2026/10/1 17:25:27

从被叫渣男到深情祖师爷:童锦程.skill背后的人物真相、争议与时间线

从被叫渣男到深情祖师爷:童锦程.skill背后的人物真相、争议与时间线 【免费下载链接】tong-jincheng-skill 童锦程视角 Skill — 用深情祖师爷的思维框架分析人际关系 项目地址: https://gitcode.com/gh_mirrors/to/tong-jincheng-skill 童锦程.skill 把被称…

阅读更多 →
塞斯·卡拉曼特殊情况投资:用催化剂驱动价值回归 2026/10/1 17:25:27

塞斯·卡拉曼特殊情况投资:用催化剂驱动价值回归

做投资这行十来年,塞斯卡拉曼的《安全边际》是我反复读得最多的一本书。很多人一提到卡拉曼,第一反应是“便宜买好公司”,这个印象不算错,却容易忽略他身上另一个更鲜明的标签——特殊情况投资。他掌舵的Baupost Group不只是买那些…

阅读更多 →
策略需求文档怎么写?五段式框架与需求详述、监控指标落地指南 2026/10/1 17:25:20

策略需求文档怎么写?五段式框架与需求详述、监控指标落地指南

简介:面向策略产品经理的《策略产品经理基础知识:2.3 策略需求文档》是一份精炼的文档资料,系统讲解策略需求文档的编写框架与要点,可帮助读者快速理解策略需求文档怎么写、写什么。文档以项目背景、项目目标、需求概述、需求详述…

阅读更多 →
Node.js与Vue构建畅销图书商城推荐系统全栈实践 2026/10/1 17:25:20

Node.js与Vue构建畅销图书商城推荐系统全栈实践

1. 项目缘起:图书商城为什么需要一套"畅销推荐"这两年做电商类管理系统,听到最多的需求就是"用户进来不知道怎么逛"。尤其是图书商城,SKU动辄几十万,用户搜一本《活着》能翻到同名作品七八个版本,…

阅读更多 →
从失效模式到企业资产:FMEA系统建设实战指南 2026/10/1 17:25:20

从失效模式到企业资产:FMEA系统建设实战指南

前阵子和一个做汽车零部件质量的朋友聊天,他说了句大实话:“我们公司FMEA做了一百多页,客户审核时漂亮得很,可内部没人翻。上次产线上出了问题,大家第一反应是查图纸、翻8D报告,没一个人想起去FMEA里找找。…

阅读更多 →
PHP 8.2 接口数据格式异常怎么排查 2026/10/1 17:25:13

PHP 8.2 接口数据格式异常怎么排查

前言后端日志里一片正常&#xff0c;前端却在控制台里喊&#xff1a;"SyntaxError: Unexpected token <, "<br />" is not valid JSON"。这是"接口数据格式异常"最典型的症状——PHP 没报错&#xff0c;前端却解析不了。之所以会这样&a…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉