ARTICLE DETAIL

资讯详情

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

误删麒麟软件商店不用重装系统:完整恢复教程

误删麒麟软件商店不用重装系统:完整恢复教程 前两天在群里看到一条求助麒麟软件商店误删了桌面图标没了开始菜单里也找不到系统里似乎还残留着卸载不干净的痕迹。这种情况我处理过不少次也经常在社区里看到有人因为软件商店消失就直接准备重装系统。其实大可不必。麒麟系统也好银河麒麟v10也好本质上还是一个完整的Linux发行版软件商店只是它上面的一个图形化包管理入口。只要系统底层的包管理机制还活着误删软件商店完全可以在几分钟内恢复回来我今天就把自己的恢复流程完整写一遍顺带把涉及的踩坑点也讲清楚。1. 先别急着装系统判断商店没了到底是哪种情况1.1 软件商店消失最常见的三个场景很多用户一看到商店图标消失就以为软件商店被卸载了实际上消失的原因远比想象中复杂。我遇到的案例大致分三类第一类是启动器图标被移除。在ukui桌面环境下如果用户把桌面任务栏里的软件商店图标拖进回收站或者误操作了移除启动器那只是删掉了一个.desktop快捷方式文件软件商店主程序还安安稳稳地躺在/usr/bin下面。这类情况最冤枉但也是最好恢复的甚至不用重装任何包。第二类是主程序包确实被卸载了。例如在终端里执行了卸载命令或者运行了某些提示清理无用软件的脚本把软件商店的软件包连同配置文件一起干掉了。这种情况下包管理器里的记录会变成已删除状态需要重新安装商店主包才能找回。第三类是依赖被连带删除。软件商店不是一个孤立的程序它依赖一整套图形库、网络组件和桌面框架。如果用户用某些瘦身优化工具清理系统或者手动执行了带--auto-remove的卸载可能会把商店依赖的底层库一并删掉导致商店即使安装在系统里也无法启动表现同样是商店不见了。区分这三类是恢复的第一步。方向错了后面所有操作都是白费功夫。1.2 2分钟内的最小化排查命令我自己的排查顺序非常固定全是命令行因为这时候去翻图形界面反而更慢。打开终端执行# 1. 看看软件商店的进程还在不在 ps -ef | grep -i software # 2. 看看主程序文件还在不在 ls /usr/bin | grep -i software # 3. 看看软件包在包管理器里的记录状态 rpm -qa | grep -i software # 如果系统是dpkg体系则用 dpkg -l | grep -i software为什么先看进程因为有些删除其实只删了启动入口主程序进程一旦被手动拉起依然能跑。接着看/usr/bin下的文件是判断程序实体是否存在的快速手段。最后看包管理器记录这是最权威的判据——rpm -qa或dpkg -l能查出来说明软件包装过且还在库里查不出来说明真被卸载了。我把这套命令的执行时间控制在两分钟以内。只要程序文件还在那基本可以确定是图标丢失型问题下面可以走最快路径如果文件也没了就按包管理恢复的思路走。掌握了这个方法你起码不用一上来就抱着安装盘找重装。2. 恢复前必须摸清的两件事系统版本和包管理姿势2.1 银河麒麟桌面版与服务器版的差异在动手装包之前必须先搞清楚当前系统用的是哪套包管理机制。这个环节看起来基础但其实最容易让人翻车因为银河麒麟v10的不同版本差异非常明显。我遇到不少用户在网上抄了一段yum install命令结果系统里根本没有yum或者抄了一段apt install结果发行版根本不是Debian体系命令直接报错。简单归纳一下银河麒麟桌面版v10常见的是基于Debian体系对应apt和dpkg这套工具链一部分服务器版本则基于RHEL/CentOS体系使用yum和rpm。它们各自的包格式、安装命令、源配置方式都不一样。如果不确定自己机器属于哪套体系不用纠结跑一条命令就能判断# Debian体系下会显示dpkg相关信息 dpkg --version # RHEL体系下会显示rpm相关信息 rpm --version哪条命令能正常输出就用哪套体系继续操作。这个看起来微不足道的判断决定了你后面所有的安装指令能不能落地。别嫌我啰嗦我在恢复现场见过太多次命令明明输入了却提示找不到的尴尬基本都是栽在这个起跑线上。2.2 软件商店的包名怎么找确定了系统体系之后接下来的关键动作是找到软件商店对应的软件包名。很多教程会直接甩给你一个包名让你照着敲。但实话说麒麟软件商店在不同版本、不同架构下的包名并不完全一致常见的有kylin-software-center、software-center也可能带版本号后缀。我更推荐用反查的方式让系统告诉你它自己装了什么# Debian体系 dpkg -l | grep -iE software|store|center # RHEL体系 rpm -qa | grep -iE software|store|center执行完之后你会发现一排和软件商店相关的包名其中带center或software字样的那个基本就是要找的目标。这里有个经验之谈优先选择名字最像软件商店的那一个比如kylin-software-center命中的概率很高。如果实在没有特别贴合的包名也可以把输出结果截图辅助判断千万别闭着眼睛装一个名字差不多的装错了反而多引入一堆依赖。包名反查是Linux运维里非常基础的一个习惯放在这个场景里特别管用。因为软件商店本质上也是发行版维护的一个普通软件包只要名字找到了后续的在线安装、离线安装就都有了明确目标。3. 核心恢复动作命令行一路顺风重装网络在线方案3.1 使用apt和yum重装商店主包当确认软件商店程序包确实被删了并且系统能正常联网时最快的恢复路线就是交给包管理器重新安装。以包名kylin-software-center为例Debian体系执行sudo apt update sudo apt install -y kylin-software-centerRHEL体系执行sudo yum install -y kylin-software-center这里我特别解释两个细节。第一为什么前面要加apt update或先确认源状态因为如果本地软件源列表是旧的包管理器可能找不到这个软件包直接报没有可用软件包。先更新源索引可以避免很多莫名其妙的问题。第二-y参数的意思是自动回答安装过程中的所有询问因为安装会连带装上不少依赖交互确认很烦直接一口气装完更省事。如果运气好安装过程会刷刷刷地把软件商店主包和它缺失的依赖全部补回来命令行结束后就已经成功了一大半。这时候回到桌面按快捷键或者去开始菜单找软件商店绝大多数情况下图标会重新出现。如果还是找不到图标不着急去看后面的小节处理。3.2 如果提示没有可用软件包怎么办这是在线恢复路径里最常见的拦路虎我也没少被它绊过。明明软件源没问题网络也通着但yum install kylin-software-center就是提示找不到这个包。遇到这种情况先别怀疑包名拼错按顺序排查三个地方。先检查当前系统到底启用了哪些软件源# Debian体系 cat /etc/apt/sources.list ls /etc/apt/sources.list.d/ # RHEL体系 yum repolist重点看有没有麒麟自己的仓库。软件商店这类桌面组件往往不在默认的最小化源里而在麒麟提供的桌面应用仓库中。如果发现源列表里没有对应的仓库就需要手动补充。RHEL体系下可以在/etc/yum.repos.d/目录新建一个.repo文件把麒麟镜像源地址写进去再重新执行yum install。还有一个容易忽略的点同一台机器如果同时配置了网络源和本地ISO源源的优先级可能会导致包找不到。我的建议是安装软件商店时优先切换到一个正常的在线源避免多个源同时生效互相干扰。这步排查虽然要花点时间但基本能解决九成的没有可用软件包报错。3.3 装上之后程序图标迟迟不出来软件包装好了终端里也没报错但桌面和开始菜单里就是看不到软件商店的图标。这种情况属于程序回来了入口还没回来本质是启动器菜单数据库没有及时刷新。在麒麟系统里软件包自带的.desktop快捷方式文件一般安装在/usr/share/applications目录。安装完包后系统通常会刷新一次菜单数据库但偶尔因为桌面环境没有收到通知菜单缓存没有更新。这时候可以手动重建图标数据库让系统把新装的快捷方式扫描进来sudo update-desktop-database /usr/share/applications如果执行完还是没有图标检查一下.desktop文件是否真的存在ls /usr/share/applications | grep -i software文件存在但图标不显示多半是桌面面板缓存的问题。我的处理方式是重启一次桌面会话或者干脆重启机器。别觉得小题大做这是一个务实的选择——比起反复纠结缓存机制重启能把很多桌面环境的临时状态一次性清理干净。装好了包重启个一次基本都能恢复如初。4. 断网或依赖报错时的B计划本地源与离线包4.1 用系统安装ISO做成本地源在线方案走不通的时候最常见的原因是目标机器根本没有外网或者只有内网环境。这种情况下我首推的办法是把系统安装ISO变成临时本地源。操作逻辑很简单把安装镜像挂载到某个目录然后告诉包管理器这里也有软件包。以麒麟v10的ISO为例挂载操作sudo mkdir -p /mnt/kylin-iso sudo mount -o loop /path/to/kylin.iso /mnt/kylin-iso挂载之后看ISO内部有没有Packages或repodata目录。如果有说明这个ISO本身就是一个可用的包源。Debian体系下把ISO路径追加到sources.listRHEL体系下创建一个指向该ISO的.repo文件。配置完成后再执行安装命令包管理器就会先从ISO里找软件商店及其依赖。为什么这个方案靠谱因为麒麟系统安装ISO往往包含了一整套桌面环境和核心应用软件商店的依赖包很可能都在里面相当于一个应急弹药库。这个方案在网络不可用的情况下是最高成功率的恢复路径之一。4.2 找一台同版本机器拷贝离线包如果没有安装ISO或者ISO里恰好缺了软件商店的某个依赖可以找一台操作系统版本一致的机器从那台机器上把软件包拷过来。这个做法我实际用过多次比想象中稳定。首先在正常的机器上用包管理器查看软件商店包的完整文件名和版本# Debian体系 apt-cache show kylin-software-center | grep -E Package|Version|Filename dpkg -l | grep software # RHEL体系 yum list kylin-software-center rpm -q kylin-software-center然后到软件缓存目录里把包文件捞出来。Debian系一般缓存在/var/cache/apt/archivesRHEL系在/var/cache/yum里。如果没有缓存就直接在能上网的同一版本机器上执行apt download或者yumdownloader把这些.deb或.rpm文件打成压缩包拷贝到目标机器。在目标机器上安装这些包时有一个顺序原则先装依赖再装主包最后修缺。也就是优先dpkg -i或rpm -ivh那些体积小、被依赖的库文件最后再安装软件商店主包。如果中途报某个依赖缺失记下提示里缺的名字再从源机器上补拷一次。装完之后如果不放心可以再执行一次依赖修复命令# Debian体系 sudo apt-get install -f这里要提醒一点拷贝离线包时一定要保证源机器和目标机器的系统大版本一致比如都是银河麒麟桌面版v10同一代版本否则包格式相同也可能因为依赖不兼容导致安装失败。4.3 实在不行用livecd进场修复如果前面的离线方案全部失败说明问题比较严重可能是系统里的包管理和依赖状态已经一团乱麻。这时候建议用麒麟livecd进场处理。所谓livecd就是用麒麟系统的光盘镜像启动到一个临时可用系统然后在临时系统里挂载硬盘上的原有系统分区再进行修复。大致步骤如下启动进入livecd桌面后打开终端# 查看硬盘分区 sudo fdisk -l # 挂载系统根分区sda1按实际分区调整 sudo mount /dev/sda1 /mnt sudo mount /dev/sda2 /mnt/boot # 进入原有系统的根目录 sudo chroot /mnt进入chroot之后你实际上已经在原系统的文件环境里了可以执行前面提到的apt或yum安装命令把软件商店和相关依赖重新装好。这个方法还有个额外的好处在livecd环境里重新配置软件源时可以直接用官方镜像源网络正常情况下安装成功率很高。livecd这招看起来重其实是最后一道保底防线。我建议不到万不得已不要用它但一旦用到你等于拿到了系统急救模式的钥匙不再需要靠重装系统来解决问题。5. 恢复后的第一件事验证商店能干什么别忽略依赖残留5.1 验证三步走软件商店装回来、图标也出现了是不是就完事了我的答案是做完三个验证动作才能算真正恢复。第一步启动软件商店确认主界面能正常显示。这一步能排除启动崩溃问题如果启动过程中窗口闪退多半还有依赖没有补齐。第二步在商店里搜索一个常见软件比如看图工具或影音播放器实际安装一次。软件商店的本质是图形化的包管理前端如果它连一个最简单的安装流程都跑不通说明后端的包管理链路仍然有问题。第三步把刚装的测试软件再卸载一次。很多人忽略卸载验证但卸载动作会调用商店的依赖移除逻辑只有卸载功能正常才能证明整个商店的安装卸载闭环是通的。这三步走下来软件商店才算是真正活了。我在实际修复中见过不少假恢复的例子商店界面能开但一安装软件就报权限错误或者能安装但不能卸载都是因为忽略了闭环验证。5.2 清理恢复过程中留下的半吊子依赖安装软件商店的过程中包管理器可能会自动装上一堆依赖也可能因为断网等操作留下一些半吊子状态。这里我给出一个非常实用的建议不要看到broken依赖就急着yum remove或apt autoremove。举例来说如果安装时报一个依赖缺失但它显示已被取消安装或者需要手动运行修复正确做法是先执行修复# Debian体系 sudo apt --fix-broken install # RHEL体系 sudo yum reinstall kylin-software-center这里有个风险评估apt --fix-broken install有时会顺手修复很多表面无关的包如果操作前不确定系统状态建议先备份当前已安装包的清单# Debian体系 dpkg --get-selections package_list_backup.txt # RHEL体系 rpm -qa package_list_backup.txt一旦修复过程中出了意外比如误删了一些不想动的包还能对照清单恢复。这个备份动作我很推荐在恢复完成后立刻执行因为它花费时间极少却是事后排查的一根救命稻草。6. 避免下次再误删入口、习惯和两条保命线6.1 麒麟图形界面下的正规卸载入口恢复完成之后我觉得有必要聊一聊如何避免下次再犯。不少用户误删软件商店根本原因是不清楚麒麟系统正规的卸载入口。麒麟桌面版在开始菜单或控制面板里提供了应用管理入口卸载软件时应当从这里走而不是去终端敲命令行。为什么这么说图形界面的软件管理工具在设计时就有保护机制会拦截对系统组件的卸载操作或者至少给出强烈警告。而终端命令默认没有这层防线一个apt remove下去它可能会连带着把桌面依赖一并移除造成连锁反应。另外特别提醒有人会为了清理图标直接去删/usr/share/applications里的.desktop文件。这个操作我当时就犯过。后果是软件商店程序还在但所有启动入口都被你手动堵死了而且下次系统更新时这个文件很可能被重新拉回来导致你陷入删了又来、来了再删的循环。删图标不是正解正确做法是在系统设置里管理应用入口。6.2 定期备份一条命令保住半条命我觉得麒麟系统用户非常应该养成一个轻量备份习惯就是定期导出已安装软件清单。这个习惯成本极低收益却很大。任何时候发现自己把系统弄乱了只要有这份清单就能批量恢复。打包已安装软件清单的命令很简单就是前面提到过的# Debian体系 dpkg --get-selections ~/package_list_backup.txt # RHEL体系 rpm -qa ~/package_list_backup.txt建议把这份文件放到非系统盘或者定期拷贝到U盘/网盘。另外麒麟系统本身也提供了系统备份类型的工具支持创建恢复点。如果你处理的是重要生产环境定期做一次完整的系统备份比什么都保险。软件商店恢复说到底只是一次小手术但如果你的备份习惯到位连手术都可以跳过。6.3 万一又出问题按恢复顺序来找不要病急乱投医最后我把自己处理这类问题的判断顺序整理成一个简明的决策思路方便你下次直接对照软件商店的程序文件还在/usr/bin下能找到直接命令行运行程序或者修复.desktop快捷方式。程序文件没了但系统能联网走apt install或yum install包名反查后安装。系统不能联网但有ISO镜像用镜像搭本地源再安装。ISO也没有找一台同版本机器拷离线包。离线包也失败上livecd进chroot修复。这套顺序我用了很久从轻到重、从快到慢逻辑非常顺。不要一上来就尝试最复杂的方案也不要因为一次报错就推倒重来。大部分误删场景其实都停在第二或第三步5分钟从排查到装完是完全现实的事情。最后再分享一个小技巧恢复完成后我习惯顺手在终端启动一次软件商店确认它在命令行环境下也不会报错。因为图形菜单的启动方式和命令行的启动环境略有差异几次修复过程里我都靠这个习惯提前发现了残留的依赖问题。别小看这个动作它能让你从图标回来了的表面恢复走到系统真的好了的实质恢复。
返回列表