十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu 20.04软件安装与软件中心打不开修复指南

Ubuntu 20.04软件安装与软件中心打不开修复指南 1. 先搞清楚Ubuntu 20.04的软件生态为什么总让人头疼1.1 从一次真实的软件中心打不开说起Ubuntu 20.04这个长期支持版本装过的人都知道它属于那种第一眼看着挺顺手用几天就开始各种别扭的系统。我自己前前后后在物理机、虚拟机、云主机上装过不下二十次最常被问到的问题永远绕不开两个一是软件到底怎么装才干净二是左上角那个Ubuntu Software软件中心怎么突然就打不开了点开转圈、白屏、闪退、提示无法获取软件列表各种姿势都试过还是不行。这个标题拆开来看核心其实是三件事Linux系统这个大前提下Ubuntu 20.04这个具体版本的软件安装方法以及软件中心的恢复手段。它解决的不是什么高深的技术难题而是新手到中级用户最日常、最高频、也最容易被卡住的环节。适合谁来参考刚把Ubuntu装进虚拟机准备学Linux命令的人、想把日常办公环境从别的系统迁过来的人、需要给团队统一部署Linux开发环境的人以及那些被软件中心坑过一次、想彻底搞明白apt、snap、dpkg之间关系的人。很多人第一次接触Ubuntu习惯性地用图形界面的软件中心去点安装结果要么进度条卡死要么装完了在终端里找不到命令。这套逻辑跟Windows时代双击exe完全不一样你得先理解Ubuntu的软件从哪来、由谁管、装到哪去了后面所有操作才顺理成章。软件中心失灵本质上也不是它坏了而是它背后依赖的几个服务没配好或者被污染了。1.2 20.04这个版本的软件管理到底由几套系统在管Ubuntu 20.04的软件管理是个多套机制并存的典型样本这一点必须先在脑子里理清楚不然你会觉得特别混乱。它同时存在四层东西第一层是apt/dpkg体系这是最传统、最核心的所有.deb包的安装、卸载、依赖解析都归它管/var/lib/dpkg下面记录着系统里所有包的状态。第二层是snap体系Ubuntu背后公司主推的沙箱化包格式软件中心里很多应用其实走的是snap通道安装在/snap目录跟传统deb包互不干扰。第三层是PPA第三方源允许你添加个人或团队维护的软件仓库比如一些较新的驱动或者小众工具。第四层是Flatpak虽然20.04默认没装但很多人会自己加上作为snap的替代或者补充。这四套东西各自有各自的命令、各自的缓存、各自的依赖数据库。软件中心Ubuntu Software在20.04里其实是个snap应用它同时要跟apt后端和snap后端打交道任何一端出问题界面表现就是打不开或者列表空。这就是为什么单纯重启软件中心没用因为病根可能在apt源、可能在snapd服务、也可能在网络代理配置上。我踩过最典型的一个坑某次在一台内网机器上apt源指向了一个已经下线的镜像站结果软件中心打开就崩溃因为它先跑去拉apt的软件索引超时后整个界面就挂了。那时候我还没意识到问题出在源上折腾了半天软件中心本身纯属浪费时间。提示判断问题在哪一层最快的办法是打开终端分别跑apt update和snap refresh哪个报错软件中心大概率就是被哪个拖垮的。1.3 装软件之前必须建立的三个认知在动手之前有三个认知如果建立了后面的操作会顺畅很多。认知一图形界面是壳命令行才是里。软件中心能装的东西命令行几乎都能装而且命令行给的报错信息详细得多。我现在的习惯是能用命令行就用命令行软件中心只作为浏览和发现新软件用。命令行装完的东西位置、依赖、配置文件在哪一目了然。认知二来源不同卸载方式就不同。用apt装的用apt remove卸用snap装的用snap remove卸用源码编译装的得回到源码目录make uninstall或者手动删。很多人装完软件卸不干净就是因为装的时候没记来源。我一般会在自己的笔记里记一笔某年某月某日用snap装了某软件看着啰嗦但半年后要清理系统时特别省事。认知三网络环境决定了你一半的安装体验。Ubuntu默认的源在国外国内直连慢是常态这直接导致软件中心转圈、apt下载龟速。把源换成国内镜像是几乎所有安装问题里性价比最高的一个操作没有之一。理解了这三点我们再来谈具体的安装路径和软件中心的修复就会顺很多。2. 四条主流软件安装路径各自适合什么场景2.1 apt最稳的底线方案先把源配好apt是Ubuntu上最正统的安装方式apt install 软件名这条命令能解决80%的安装需求。它的核心逻辑是系统维护一份软件源列表在/etc/apt/sources.list和/etc/apt/sources.list.d/里执行apt update时去这些源拉取软件索引缓存到本地然后apt install时根据索引找到包、解析依赖、下载、安装。Ubuntu 20.04默认的源写的是archive.ubuntu.com这类国外地址国内用起来经常慢到怀疑人生。换源的标准操作是# 先备份原始源文件这是好习惯出问题能回滚 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 编辑源文件把里面的地址替换成国内镜像 sudo nano /etc/apt/sources.list20.04的代号是focal替换时要注意源地址里的focal不能写错。常见国内镜像站点的地址结构基本一致把http://archive.ubuntu.com/ubuntu/这段替换掉就行。改完之后一定要执行sudo apt update sudo apt upgradeupdate是刷新索引upgrade是升级已安装的包两者别搞混。我见过太多人只改源不update然后抱怨怎么还是这么慢其实索引没刷新apt还在用旧的缓存地址。注意改源的时候不要整行乱改只替换域名部分后面的focal、focal-updates、focal-security这些组件名保持原样。改错一个字母apt update就会报404反而更麻烦。apt安装的几个高频命令值得记牢操作命令说明更新索引sudo apt update只刷新列表不装东西安装软件sudo apt install 包名自动处理依赖卸载软件sudo apt remove 包名保留配置文件彻底卸载sudo apt purge 包名连配置文件一起删清理无用依赖sudo apt autoremove删掉不再被依赖的包搜索软件apt search 关键词在索引里找包查看包信息apt show 包名看版本、依赖、大小apt的优点是稳定、依赖处理成熟、卸载干净缺点是软件版本往往偏旧因为Ubuntu为了系统稳定性仓库里的版本会滞后。想要新版本就得考虑下面几种方式。2.2 snap被误解最多的一套机制snap是Ubuntu主推的包格式特点是自带依赖把运行时都打包进去、沙箱隔离、自动更新。软件中心里很多应用比如一些开发工具、播放器默认走的就是snap。它的好处很明显不受系统库版本限制装上去就能跑更新也自动。但缺点同样突出因为自带了依赖包体积巨大一个简单的软件可能几百兆启动速度通常比原生deb包慢权限受沙箱限制访问外部文件或者硬件时经常需要手动放权。常用命令# 查看已安装的snap snap list # 安装 sudo snap install 软件名 # 卸载 sudo snap remove 软件名 # 刷新所有snap应用 sudo snap refresh # 查看snap服务状态 systemctl status snapd我实际用下来的感觉是snap适合那些装了就图个能用、不想折腾依赖的场景比如刚装完系统想快速搞个开发环境。但如果对性能敏感或者需要深度访问系统资源还是优先找deb包或者源码编译。一个特别值得说的点软件中心在20.04里就是通过snap安装的包名是snap-store。所以当软件中心出问题时很大概率是snapd服务或者snap-store本身的问题后面修复章节会详细讲。2.3 PPA与Flatpak小众需求和多源并存PPAPersonal Package Archive是让开发者自己维护软件源的机制。当你需要某个软件的较新版本而官方仓库又没有时添加对应的PPA是个办法# 添加PPA sudo add-apt-repository ppa:作者名/仓库名 sudo apt update sudo apt install 软件名20.04里add-apt-repository命令需要software-properties-common这个包如果提示命令找不到先装它。PPA的坑在于它不经过Ubuntu官方审核来源五花八门添加太多PPA会让apt update越来越慢还容易引发依赖冲突。我的建议是只添加你确实需要、且维护活跃的PPA用完不需要了就删掉。Flatpak是另一套沙箱格式跟snap定位类似但生态更偏向桌面应用。20.04默认没装需要手动sudo apt install flatpak sudo apt install gnome-software-plugin-flatpak flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo装完之后重启软件中心就能看到Flatpak的应用了。Flatpak和snap的最大区别是它不绑定某个发行版跨发行版通用性更好。提示同时开snap、Flatpak、PPA会导致软件来源极度混乱同名的应用可能有好几个版本。我的习惯是选定一套主要的其他只作为补充不要全都开着。2.4 源码编译与离线deb什么时候才真需要有些软件官方仓库没有、snap也没有、PPA也找不到那就只能源码编译或者手动装deb包。源码编译的通用流程是./configure make sudo make install但实际远没有这么顺。依赖缺什么就apt install什么configure报错基本都是在说缺库。编译出来的东西默认装在/usr/local/下卸载的时候得回到源码目录执行sudo make uninstall如果当初没保留源码目录卸载就成了体力活。离线deb包的安装用dpkgsudo dpkg -i 包名.deb # 如果提示依赖缺失用这个命令自动补 sudo apt install -fdpkg -i只负责装不管依赖所以经常报依赖错误。报错之后跑一下apt install -f让apt去把缺的依赖补上这是标准解法。顺序千万别搞反先dpkg再apt -f。源码编译这种方式的经验是除非真的没有别的选择否则别用。它带来的维护成本远高于装的时候省的那点事。3. 软件中心恢复从诊断到修好的完整流程3.1 软件中心为什么在20.04里这么容易出问题要修软件中心得先明白它在20.04里的结构。20.04的Ubuntu Software其实经历了从传统gnome-software到snap-store的过渡系统里可能同时存在两个gnome-software传统的软件中心主要对接apt和部分插件。snap-store基于snap的新版软件中心20.04默认界面通常是这个。两者都可能被叫做软件中心但底层完全不同。用户点开图标看到打不开得先确认自己点的是哪个。一个简单的判断方法# 看系统里装了哪些相关包 snap list | grep store apt list --installed | grep gnome-software如果snap里有snap-store那默认图标大概率指向它。这时候问题排查方向就是snap体系如果只有gnome-software那排查方向是apt体系。软件中心打不开的常见表现及对应原因我整理了一张速查表表现可能原因排查方向点开转圈后闪退snapd服务异常systemctl status snapd打开白屏网络代理或源不通检查apt源、代理设置提示无法获取软件列表索引损坏或源失效apt update看报错界面能开但搜不到软件后端插件缺失检查各插件包是否安装一直提示正在等待锁文件占用检查是否有apt进程在跑这张表我在团队里分享过新人照着对号入座大部分情况五分钟内能定位到方向比盲试快得多。3.2 标准修复流程从轻到重一步步来修复要遵循从轻到重的原则能重启服务解决的绝不去重装能重装包解决的绝不去动系统。第一步先刷新索引和snap。sudo apt update sudo snap refresh这两个命令分别对应两套后端哪个报错就说明哪一层有问题。很多时候软件中心打不开只是因为索引太旧或者某个snap卡在更新中刷新一下就好了。第二步重启snapd服务。sudo systemctl restart snapdsnapd是snap的守护进程软件中心依赖它。这个服务偶尔会卡死重启后软件中心往往能恢复。第三步重置snap-store。sudo snap remove snap-store sudo snap install snap-store注意remove再install等于重装配置会丢但应用数据一般还在。这是修复软件中心最有效的一招我用它救回过好几台机器。第四步修复gnome-software如果是它在闹。sudo apt install --reinstall gnome-software sudo apt install --reinstall gnome-software-plugin-snap--reinstall是重新安装同一个包不升级版本专门用来修复文件损坏。第五步清理缓存。sudo rm -rf /var/cache/apt/archives/* sudo apt clean sudo apt update缓存损坏也会导致界面异常清掉重建是最省事的办法。整个流程走完90%以上的软件中心问题都能解决。如果还不行那基本是网络或者代理层面的问题得往下看。3.3 网络与代理是隐藏最深的那个坑软件中心一个特别让人抓狂的点是它比命令行更容易受代理影响。如果你给系统配了代理命令行里通过环境变量能生效但软件中心的图形界面不一定读取同样的环境变量结果就是终端能apt update软件中心却打不开。20.04里代理配置有几个位置系统设置里的网络代理GNOME设置。/etc/apt/apt.conf.d/下的apt代理配置。shell里的http_proxy、https_proxy环境变量。snap自己的代理配置snap set system proxy.http...。这几处如果不一致就会出现命令行正常、界面抽风的诡异现象。排查办法是先把所有代理配置统一或者干脆临时全部关掉看软件中心能否恢复# 查看当前环境变量里的代理 env | grep -i proxy # 查看apt的代理配置 grep -ri proxy /etc/apt/apt.conf.d/如果确认是代理导致最干净的做法是在系统设置里把代理配好让图形界面和命令行用同一套。内网环境尤其要注意这一点我遇到过团队里好几台机器都是因为代理只配了命令行导致软件中心长期不可用大家还以为系统坏了。还有一种情况是DNS解析问题。如果源域名解析不了apt update会提示无法解析软件中心同样开不了。解决办法是检查/etc/resolv.conf或者临时换个可用的DNS测试。这类问题在内网和虚拟机里很常见。3.4 一套可以反复用的自检脚本修多了之后我把常用的自检命令拼成了一个小脚本每次遇到软件中心问题先跑一遍几秒钟就能看出病根在哪#!/bin/bash echo 1. 检查apt索引 sudo apt update 21 | tail -5 echo 2. 检查snapd状态 systemctl is-active snapd echo 3. 检查snap-store是否安装 snap list | grep snap-store echo 4. 检查网络连通性 ping -c 2 archive.ubuntu.com echo 5. 检查是否有apt锁 sudo lsof /var/lib/dpkg/lock-frontend 2/dev/null || echo 无锁占用 echo 6. 检查代理设置 env | grep -i proxy || echo 无代理环境变量这个脚本不算复杂但它把排查的顺序固化了不会漏检查某一项。团队里推广之后新人遇到问题先跑脚本报错截图发出来基本一眼就能定位。这种把经验固化成脚本的做法比写一堆文档管用得多因为脚本不会因为别人没看文档而失效。注意脚本里的sudo命令在跑的时候会要密码如果是在自动化场景里用要考虑改成免密或者调整权限不要直接把带sudo的脚本丢进定时任务。4. 装软件时踩过的坑与排查实录4.1 锁文件、依赖冲突与dpkg中断linux装软件最经典的两个报错一个是无法获得锁 /var/lib/dpkg/lock-frontend另一个是dpkg被中断必须运行sudo dpkg --configure -a。锁文件问题apt在同一时间只允许一个进程操作如果你开了两个终端一个在apt install另一个也在装东西第二个就会报锁。还有一种情况是上一次apt进程异常退出锁没释放。解决办法是先确认没有apt进程在跑ps aux | grep -i apt确认没有之后删掉锁文件sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/dpkg/lock sudo rm /var/cache/apt/archives/lock删锁这事有点暴力但确实是标准解法前提是确认没有正在运行的安装进程否则会搞坏数据库。dpkg中断问题安装过程中断电、强制关机、或者手动kill掉dpkg都会导致它处于中断状态后续任何apt操作都失败。修复命令就是它提示的那条sudo dpkg --configure -a sudo apt install -f这条命令会把还没配置完的包重新配置一遍把依赖补全。我遇到过一次虚拟机装软件时宿主强制关机重启后dpkg就中断了跑这两条命令立刻恢复不用重装系统。依赖冲突多见于添加了多个PPA之后不同源提供同一个包的不同版本apt解析不出来。解决办法是逐个禁用PPA排查sudo add-apt-repository --remove ppa:xxx/yyy或者用aptitude工具它在处理冲突时给出的方案比apt更多sudo apt install aptitude sudo aptitude install 包名aptitude会给出接受/拒绝的交互式选项能一步步逼近可行解比apt直接撂挑子强。4.2 中文环境相关的软件安装要点Ubuntu 20.04的中文环境安装有一堆琐碎但绕不开的点尤其是输入法和字体装不好直接影响使用体验。中文输入法20.04默认用的输入法框架是fcitx或ibus。以fcitx为例标准安装流程sudo apt install fcitx fcitx-googlepinyin fcitx-config-gtk装完要在语言支持里把输入法框架切到fcitx然后重启会话再在fcitx配置里添加拼音。很多人装完发现切不出来基本都是忘了切换输入法框架或者没重启会话。这个问题在虚拟机里尤其常见因为虚拟机的键盘映射有时会和宿主机冲突。中文字体默认字体在中文显示上还可以但如果要更接近macOS那种渲染效果可以装一些额外字体然后在GNOME Tweaks里调整字体设置和抗锯齿。这个属于个人偏好但装了之后确实观感提升明显。中文乱码linux 解压文件乱码是个高频搜索词尤其是从Windows传过来的zip压缩包解压后中文文件名变成乱码。原因是Windows的zip用的是GBK编码而Linux默认用UTF-8。解决办法是用unzip指定编码unzip -O GBK 文件名.zip如果unzip版本太老不支持-O可以装p7zip用7z解压或者用convmv转换文件名编码。这个坑几乎每个从Windows迁移过来的人都踩过知道原因之后就一句话的事。4.3 权限管理与sudo的正确使用姿势Linux的权限模型是新手最大的门槛。装软件为什么非要sudo因为安装要往/usr、/etc这些只有root能写的目录里塞东西。理解这个之后很多为什么提示权限不够的问题就通了。什么时候需要sudo涉及系统目录写入、服务管理、系统级配置更改时需要在用户目录下操作文件、跑用户级命令时不需要。我见过新人图省事把所有命令都加sudo结果在用户目录里生成了一堆root所有权的文件之后用普通用户反而改不动了还得chown修回来。怎么改文件所有权sudo chown -R 用户名:用户名 目录名-R递归改目录下所有文件。这个命令救过我很多次尤其是误用sudo编辑了用户配置文件之后。环境变量的问题ubuntu环境变量配置错误也是高频问题。环境变量配错会导致命令找不到、软件启动失败。常见的是修改~/.bashrc或/etc/profile时写错路径。出错之后如果连终端命令都不好使了可以用绝对路径启动命令或者临时把PATH修正回来export PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin这条把PATH重置成默认值能救急。改环境变量之前一定要先备份文件这是血泪教训。提示改/etc/profile或~/.bashrc这种影响全局的文件时改完先别关当前终端开一个新终端测试确认没问题再关旧的。这样万一改坏了还能从旧终端里把文件改回来。4.4 常见问题速查表把我在实际使用中遇到的高频问题汇总成一张表方便对照排查问题现象可能原因解决命令无法获得锁有apt进程占用ps aux | grep apt后删锁文件dpkg被中断上次安装未完成sudo dpkg --configure -a命令找不到包未装或PATH问题apt install或检查PATH依赖缺失源不完整或PPA冲突sudo apt install -f软件中心打不开snapd异常或索引损坏刷新snap、重置snap-store解压中文乱码编码不一致unzip -O GBK输入法切不出来框架没切换语言支持里改framework环境变量失效配置文件写错备份后修正重置PATH这张表的用法是先看现象再找原因最后执行命令三步走。新手最容易犯的错是跳过找原因直接乱试命令结果把小问题搞成大问题。养成先看报错、再对症下药的习惯比背命令重要得多。5. 把软件环境管起来让问题越来越少5.1 记录来源与定期清理软件装得越多环境越乱。真正让系统长期稳定的办法不是装的时候多小心而是装完就记。我现在在每台常用机器上维护一个简单的清单文件放在~/notes/software.md装任何非apt默认源的东西都记一笔装了啥、什么时候装的、用什么方式装的、干嘛用的。看着像多此一举但半年后想清理系统时你会发现这份清单是唯一能告诉你这个包能不能删的依据。没有它面对snap list里一堆不认识的名字只能靠猜。定期清理的几条命令# 清理不再需要的依赖 sudo apt autoremove # 清理apt缓存 sudo apt clean # 查看占用最大的snap du -sh /snap/* | sort -rh | head # 查看已禁用的snap占空间但没在跑 snap list --all | grep disabled禁用版本的snap会一直留在磁盘上占空间可以用snap remove --revision版本号 包名删掉。这个细节很少有人提但磁盘紧张的时候特别管用。5.2 版本锁定与升级的分寸感Ubuntu 20.04是个LTS版本支持周期长但仓库里的软件版本偏旧。要不要升级某个软件得看具体情况。可以放心用仓库版本的系统工具、编译器等基础组件。这些动了容易引发连锁反应。需要手动升级的开发工具、浏览器、一些更新频繁的应用。可以通过PPA或者官方提供的deb包。锁定版本的方法# 禁止某个包被自动升级 sudo apt-mark hold 包名 # 解除锁定 sudo apt-mark unhold 包名 # 查看已锁定的包 apt-mark showhold这个功能在维护生产环境时特别有用。有些软件升级后会改配置、改行为自动升级可能直接把服务搞挂。锁定之后等你测试好再手动升节奏自己掌握。我个人的习惯是开发机保持常规更新但关键工具锁定服务器上除了安全更新其他一律锁定升级走测试流程。这个分寸感是踩了几次升级之后服务起不来的坑之后慢慢磨出来的。5.3 一套命令速查放在手边随时用最后把我自己常用的一组命令整理出来装软件、修软件中心、排查问题基本都覆盖了# 源与索引 sudo apt update # 刷新索引 sudo apt upgrade # 升级已装包 sudo apt full-upgrade # 允许删包来完成升级 cat /etc/apt/sources.list # 查看源配置 # 安装与卸载 sudo apt install 包名 sudo apt remove 包名 sudo apt purge 包名 # 连配置一起删 sudo apt install -f # 修复依赖 # snap相关 snap list sudo snap install 包名 sudo snap remove 包名 sudo snap refresh systemctl restart snapd # 修复软件中心 sudo snap remove snap-store sudo snap install snap-store sudo apt install --reinstall gnome-software # 排查 ps aux | grep apt sudo lsof /var/lib/dpkg/lock-frontend env | grep -i proxy ping -c 2 archive.ubuntu.com这套命令不是让你背而是让你在遇到问题时知道该往哪个方向找。命令可以查思路得自己有条理。关于软件中心修复我最后再分享一个小经验如果snap remove snap-store之后snap install snap-store一直卡着装不上别急着怀疑系统坏了先看看是不是网络问题。找个网络通畅的时间段再试往往就成功了。snap的下载服务器在国外网络状态对安装成败影响非常大。如果长期网络环境受限那就干脆放弃软件中心老老实实用apt和手动下载的deb包反而更稳。工具是为人服务的别被它绑架了。
返回列表