麒麟系统终端与Shell脚本入门:从命令基础到实战排查

发布时间:2026/9/1 9:32:10
麒麟系统终端与Shell脚本入门:从命令基础到实战排查 打开麒麟系统的终端很多人第一反应是“这不就是一个黑框框吗”。真正开始操作时才发现安装软件、卸载软件、查看系统信息、排查网络故障几乎所有事情都要在这个黑框框里完成。如果你以前只用Windows刚接触麒麟系统时终端和shell几乎是你绕不开的第一道门槛。我的判断很明确在麒麟系统上终端和shell不是“高级选项”而是基本生存技能。学会它们你才算真正开始使用这个系统而不只是“在用桌面图标”。这篇文章不是把手册复述一遍而是从实际使用场景出发讲清楚三件事麒麟系统下终端怎么用、shell脚本怎么入门、遇到问题怎么排查。读完以后你至少可以独立完成软件安装、配置修改、写一个能用的shell脚本并且知道报错之后该从哪里开始查。1. 这篇文章真正要解决的问题先说结论麒麟系统用户被终端和shell卡住通常不是“记不住命令”而是没有建立Linux系统的操作习惯。第一层是软件安装方式。Windows用户习惯下载exe安装包双击安装。麒麟系统虽然也有软件商店但更可靠、更可控的安装方式其实是命令行包管理工具。软件商店一旦报错命令行几乎是最好的替代方案甚至能反过来帮商店“治病”。第二层是权限模型。Linux从设计之初就区分普通用户和root用户。普通用户不能随意修改系统文件必须通过sudo获取临时管理员权限。很多新手第一次安装软件就遇到Permission denied完全不知道发生了什么。第三层是脚本自动化。很多人觉得shell脚本是运维工程师才能碰的东西其实它离日常工作并不远。批量重命名文件、按日期备份目录、检查服务是否存活甚至自动清理磁盘垃圾都可以用一小段shell脚本搞定。本文会用真实可复制的命令把下面这些问题逐一展开麒麟系统怎么打开终端、怎么安装软件、怎么卸载软件、sudo权限怎么用、shell脚本怎么写、脚本获取自身目录的经典写法是什么以及软件商店报错时如何排查。2. 基础概念麒麟系统、终端与shell的边界“终端”和“shell”经常被混为一谈包括很多写过Linux命令的人也说不清两者的区别。这里先把概念拆开。2.1 麒麟操作系统的技术背景银河麒麟操作系统是目前国内Linux桌面和服务器市场占有率较高的国产操作系统之一适配了包括x86、ARM、龙芯、飞腾等多种芯片架构。它基于Linux内核因此在命令生态上与通用的Linux发行版高度一致。从软件包管理器来看银河麒麟常见版本使用与Debian/Ubuntu一致的apt体系这意味着大多数Ubuntu下的软件安装命令、软件源配置方式、依赖处理方式在麒麟系统上可以直接复用。这也是为什么很多教程会说“麒麟系统像Ubuntu”的原因。但要注意麒麟系统存在不同版本和架构。同一条命令在不同架构下安装的软件包来源可能完全不同。用uname -m确认架构是第一步。2.2 终端一个和系统对话的窗口终端Terminal其实是一个图形化程序。它提供一个窗口让你输入文本命令并把命令的输出结果显示出来。你可以把它理解成“系统给你开的一扇对话窗口”。银河麒麟桌面系统自带终端程序通常右键桌面就能找到“打开终端”。终端本身不解释命令它只负责把你的输入转交给底层解释器再把解释器的输出返回给你。2.3 shell真正解释命令的“翻译官”shell是一个命令行解释器运行在Linux系统里负责读取命令、解析语法、调用对应程序、返回结果。因为它在用户和操作系统内核之间像套了一层壳所以叫 shell。麒麟系统默认shell一般是BashBourne Again Shell这是绝大多数Linux发行版的默认shell。Bash支持两种使用方式交互式输入命令以及执行脚本文件。交互式就是你打开终端一行一行敲脚本式是把命令按逻辑写到文件里批量执行。一句话终端是窗口shell是解释器。你敲的每一行命令最终是shell在执行。3. 环境准备打开终端之前的准备工作进入正题之前建议先花两分钟确认系统环境。这样后面操作软件源、安装软件时能够快速判断是不是兼容问题。3.1 查看系统版本和架构打开终端依次执行以下命令cat /etc/os-release uname -m第一条会显示系统名称、版本号等基本信息。第二条输出的是系统架构常见结果是x86_64Intel/AMD 64位、aarch64ARM 64位、loongarch64龙芯等。架构信息非常关键。一台ARM架构的麒麟设备和一台x86架构的麒麟设备能装的软件包可能是不同的。如果你的安装源或者下载的deb包架构不匹配安装时大概率会报错。3.2 确认当前用户身份输入以下命令whoami id普通用户的输出通常是uid1000(用户名)。如果显示uid0(root)说明当前是root用户操作风险等级完全不同。日常使用建议以普通用户登录需要管理员权限时用sudo临时提权。3.3 终端打不开怎么办很多用户遇到“终端打不开”的问题这种情况下应该先想想最近是不是改了shell配置。终端启动时会加载当前用户的shell配置文件比如~/.bashrc、~/.bash_profile。如果这些文件里写入了有语法错误的命令终端可能闪退或启动报错。这时候可以尝试用文件管理器进入主目录按Ctrl H显示隐藏文件。找到.bashrc备份后把疑似新增的错误内容注释掉或删除。重新打开终端测试。如果终端程序本身被误删可以尝试通过软件商店或系统更新界面重新安装终端相关组件。这里建议先从配置文件入手排查因为概率更高。4. 软件安装与卸载终端里的包管理操作麒麟系统用户搜索频率最高的需求就是“怎么安装软件”和“怎么卸载软件”。在终端里这件事主要靠apt和dpkg。4.1 更新软件源安装软件前建议先更新软件包列表。软件源相当于“软件仓库的目录”系统需要知道仓库里有哪些软件以及对应版本。sudo apt update如果这一步报错或者速度极慢大概率是软件源配置问题。可以检查/etc/apt/sources.list和/etc/apt/sources.list.d/目录下的配置文件。更换软件源属于修改系统配置操作前建议先备份原文件。4.2 安装软件以安装vim文本编辑器为例sudo apt install vim -y-y表示自动确认省去交互过程中的“是否继续”提示。如果你已经从网站下载了一个.deb软件包使用dpkg安装sudo dpkg -i 软件包名.debdpkg安装最大的问题是不会自动拉取依赖。如果安装后提示缺少依赖执行sudo apt-get install -f它会修复依赖关系。很多用户以为dpkg安装完软件就能用其实依赖缺失才是最常见的坑。4.3 卸载软件sudo apt remove 软件包名 sudo apt purge 软件包名区别在于remove删除程序文件保留配置文件。purge连配置文件一起删除。清理不再需要的孤立依赖sudo apt autoremove这条命令会把因为安装某个软件而被带入、但现在已不再需要的依赖包清理掉。需要注意的是执行前最好看一眼它准备删除的包列表避免删掉其他软件还在用的共享库。4.4 软件商店错误代码0006的排查思路关于“麒麟软件商店错误代码0006”网上说法很多。这个错误不能一概而论它往往和软件商店无法正常获取软件列表有关。更稳当的排查顺序是检查网络是否正常可以先打开浏览器访问任意网页。在终端执行sudo apt update看软件源是否报错。用date检查系统时间时间偏差太大会导致HTTPS证书校验失败表面看像网络错误。确认软件源配置是否有效。如果以上都正常软件商店仍然报错可以考虑直接使用命令行安装目标软件。从工程效率角度看命令行安装更透明报错信息也更明确。4.5 麒麟系统里的其他包格式除了deb包麒麟系统还能运行多种发行格式的应用。比如AppImage是免安装的便携格式下载后给执行权限即可运行还有部分厂商会提供tar.gz压缩包。安装这些格式不需要root权限但需要注意可执行权限设置和依赖库是否齐全。chmod x 应用.AppImage ./应用.AppImage4.6 分区编辑器安装示例有用户搜索“麒麟v10终端命令安装分区编辑器”这里给一个通用流程。GParted是Linux下常用的分区编辑器终端安装命令是sudo apt update sudo apt install gparted -y启动gparted操作分区是高风险操作。强烈建议先在虚拟机或测试机器上练习不要在保存重要数据的磁盘上直接试验。分区操作前必须备份数据并确认操作的目标磁盘确实是你要操作的那一块可以通过lsblk查看磁盘挂载情况。lsblk df -h5. 终端高频操作目录切换、换行、历史命令与sudo权限终端的使用体验很大程度上取决于快捷键和高频命令的熟练度。5.1 切换目录cdcd是最基础也是最常用的命令。几个典型写法cd /etc # 切换到 /etc 目录 cd ~ # 回到当前用户主目录 cd .. # 返回上级目录 cd - # 返回上一次所在目录新手最容易犯的错误是漏掉空格。命令和参数之间必须有空格写成cd/etc会被shell当成一个不存在的命令。5.2 查看当前目录pwd当你在终端里觉得“迷路”时先执行pwd它会把当前所在的绝对路径打印出来。5.3 终端怎么换到上一行“linux终端怎么换到上一行”这个搜索词背后可能有几种场景。第一种是输入一条很长的命令时想换行继续输入。可以在行末加反斜杠\再回车sudo apt install \ vim \ curl \ gitshell会把这些行合并成一条完整的命令执行。这种写法在脚本里也很常见可以让超长命令更易读。第二种场景是编辑当前输入行。如果命令输错了一部分只想去行首修改可以按Ctrl A去行尾按Ctrl E想删除整行重新输入按Ctrl U想取消当前这条命令按Ctrl C。5.4 历史命令按上方向键可以调出最近执行过的命令。输入history可以查看完整历史列表。想重新执行某一条历史命令可以用!编号history !123这里的!123对应历史记录中编号为123的那条命令。5.5 sudo临时管理员权限麒麟系统大多数维护操作都需要root权限。sudo是“superuser do”的缩写作用是让授权用户以root身份临时执行某一条命令。sudo apt update执行后会提示输入当前用户的密码。这里有三个常见误区输入密码时终端没有任何显示这是系统故意设计的不是键盘坏了。sudo密码是当前登录用户的密码不是另一个root密码。sudo只对当前命令生效执行完自动回到普通用户状态。5.6 什么时候需要root权限安装系统和删除系统时sudo apt install 软件包 sudo apt remove 软件包修改系统配置文件时sudo vim /etc/hosts管理服务时sudo systemctl restart 服务名普通用户自己主目录下的文件操作不需要sudo。比如~/test目录下的临时脚本直接用普通用户权限读写就可以。5.7 切换root的注意点如果确实需要连续执行多条root命令可以执行sudo -i此时提示符会从$变成#表示当前是root shell。用完后建议立即执行exit退出root状态回到普通用户。在root shell里操作时命令没有权限保护误删文件、改错配置都可能立刻生效。坚持最小权限原则能不用root就不用。6. shell脚本入门从第一行代码开始6.1 shell脚本的本质shell脚本就是把多条命令写进一个文本文件由Bash按顺序或按逻辑执行。你平时在终端里一行一行敲的命令实际上就是脚本的基本原料。为什么需要脚本因为日常工作中大量操作是重复的。比如每天登录系统后都要检查磁盘空间、查看服务状态、清理临时文件。手动敲三五行命令也许不麻烦但连续一个月每天敲就是很大的时间成本。写成脚本后一条命令全部搞定还能配合crontab定时执行。6.2 创建并运行第一个脚本在主目录下创建脚本文件mkdir -p ~/bin vim ~/bin/hello.sh按i进入编辑模式写入#!/bin/bash # 文件路径~/bin/hello.sh echo Hello, 麒麟系统 echo 当前时间$(date)按Esc输入:wq回车保存退出。执行方式有两种。方式一直接用bash解释器执行不需要可执行权限bash ~/bin/hello.sh方式二赋予可执行权限后直接运行chmod x ~/bin/hello.sh ~/bin/hello.sh初学者最常遇到的报错是Permission denied这说明文件没有执行权限执行chmod x 文件名即可。另一个隐藏坑是换行符问题。如果脚本是在Windows上编辑后拷贝到麒麟系统的文件可能带有Windows环境常见的CRLF换行符执行时会报bad interpreter之类的错误。这时可以用dos2unix转换sudo apt install dos2unix -y dos2unix ~/bin/hello.sh6.3 变量与输出shell脚本中变量赋值不需要加$读取时必须加#!/bin/bash # 文件名variable.sh name麒麟 echo 你好${name}输出你好麒麟。这里建议使用${name}而不是$name。在拼接字符串时${name}能明确变量边界避免把变量名和后续字符连在一起导致解析错误。6.4 条件判断if语句是最常用的控制结构。例如检查系统信息文件是否存在#!/bin/bash # 文件名ifdemo.sh if [ -f /etc/os-release ]; then echo 系统信息文件存在 else echo 系统信息文件不存在 fi这里有一个初学者必踩的坑[和后面的条件之间必须有空格条件和]之间也要有空格。写成[-f /etc/os-release]会被shell解析成错误的表达式脚本会报语法错误。6.5 for循环批量处理文件时for循环很实用。例如循环打印1到5#!/bin/bash # 文件名fordemo.sh for i in 1 2 3 4 5; do echo 第 ${i} 次 done也可以用简写#!/bin/bash for i in {1..5}; do echo 第 ${i} 次 done6.6 一个综合示例按日期备份目录把上面的知识点结合起来写一个常用的自动备份脚本。#!/bin/bash # 文件路径~/bin/backup.sh # 用途备份指定目录到 ~/backups 下带日期后缀 SOURCE_DIR$HOME/Documents BACKUP_BASE$HOME/backups DATE_TAG$(date %Y%m%d_%H%M%S) BACKUP_DIR${BACKUP_BASE}/${DATE_TAG} mkdir -p ${BACKUP_DIR} cp -r ${SOURCE_DIR} ${BACKUP_DIR}/ echo 备份完成${BACKUP_DIR} ls -l ${BACKUP_DIR}执行前先赋予权限chmod x ~/bin/backup.sh bash ~/bin/backup.sh这个脚本体现了一个好习惯把目录和变量放到脚本开头集中定义后续修改路径时不需要翻找命令细节。6.7 脚本获取自身所在目录的经典写法很多人搜索“linux执行shell文件命令 获取文件所在目录”是因为脚本执行时用户不一定在脚本目录下而脚本需要访问同目录下的配置文件或资源。推荐写法#!/bin/bash # 文件路径yourscript.sh SCRIPT_DIR$(cd $(dirname ${BASH_SOURCE[0]}) pwd) echo 脚本所在目录${SCRIPT_DIR}拆开解释${BASH_SOURCE[0]}是脚本自身的路径不一定是绝对路径。dirname提取路径的目录部分。cd到该目录再用pwd取绝对路径。这个写法兼容性较好。即使你从其他目录执行该脚本它也能正确定位到脚本自己所在的目录。7. shell脚本中的常见坑这一节汇总几个出现频率很高的shell坑。每个都是初学者真实踩过的。7.1 等号两边不能有空格# 错误 name 麒麟 # 正确 name麒麟等号两侧有空格时shell会把name当成命令报错为command not found。7.2 数字比较用 -eq字符串比较用 数字比较不能用和在[ ]中会被当成重定向符号带来完全不可预期的结果。应该写成#!/bin/bash a10 b20 if [ ${a} -lt ${b} ]; then echo a 小于 b fi字符串比较则用或#!/bin/bash name麒麟 if [ ${name} 麒麟 ]; then echo 匹配 fi7.3 变量要加双引号变量内容如果含有空格不加双引号时会被shell拆成多个参数。比如file_path/data/my docs/report.txt if [ -f $file_path ]; then echo 文件存在 fi这里$file_path必须加双引号否则shell会把/data/my和docs/report.txt当成两个独立参数条件判断会失败。7.4 set -e 的误用很多脚本开头会写set -e意思是“任何一个命令失败就立即退出脚本”。这在部署脚本中能避免错误继续传播但在日常脚本中却可能带来困扰。比如你有一条命令只是尝试查询一个可能不存在的文件但脚本因为这条命令返回非零状态直接退出后面的处理逻辑全被跳过。如果确实需要某个失败的命令不中断脚本可以在命令末尾加|| truegrep keyword /tmp/log.txt || true7.5 忘记检查命令是否存在在脚本里调用外部命令之前可以用command -v检查if command -v curl /dev/null 21; then echo curl 可用 else echo curl 未安装 fi这样脚本在缺少依赖时能给出明确的提示而不是跑到一半报command not found。8. 常见问题与排查思路这里把麒麟系统终端和shell的常见问题整理成一张排查表。遇到问题时先看“可能原因”再按“排查方式”操作比盲目改配置要快得多。问题现象可能原因排查方式解决方案软件商店提示错误代码0006网络不通、软件源失效、系统时间异常执行sudo apt update看具体报错用date检查时间修复软件源、校准系统时间、改用命令行安装apt install提示软件包未找到软件源缓存过期或源中无此包执行sudo apt update后再试更新软件源或更换软件源执行脚本报Permission denied脚本没有可执行权限执行ls -l 脚本文件查看权限执行chmod x 脚本文件dpkg安装deb包后软件运行报缺失依赖依赖未满足执行sudo apt-get install -f自动修复依赖关系终端输入密码无反应安全设计输入时不显示字符继续输入后按回车无需处理cd报目录不存在路径错误或目录不存在用Tab键自动补全路径核对完整路径脚本报bad interpreter文件带Windows换行符或BOM执行file 脚本文件查看类型使用dos2unix转换换行符终端启动闪退shell配置文件有语法错误检查~/.bashrc等配置备份并修复配置内容补充一个重要原则任何涉及系统配置、软件包移除、权限变更的操作都建议先在测试环境验证。尤其是团队使用的系统不要直接在生产机器上执行未经测试的批量命令。修改前先备份配置文件考虑回滚方式是最低成本的保险。9. 最佳实践、安全建议与后续学习方向9.1 终端使用习惯善用Tab键补全。路径、命令、文件名都能补全既提速度又减少拼写错误。多看帮助。不确定命令的用法时先执行man 命令名或命令名 --help。先看报错再搜索。终端报错信息往往已经把原因写得很清楚截取核心关键词去搜索比直接搜索症状描述更有效。9.2 shell脚本编写规范脚本第一行写#!/bin/bash明确解释器。变量命名使用有意义的单词比如backup_dir避免a、b、tmp1这类无意义命名。关键步骤加注释特别是脚本依赖的外部命令和适用环境。脚本中涉及路径时尽量使用绝对路径或基于脚本目录拼接的相对路径不要依赖执行时的工作目录。在脚本开头设置变量集中管理路径、用户名等配置方便后续修改。9.3 安全边界日常使用普通用户登录通过sudo临时提权。不要在root shell里执行来源不明的脚本执行前先cat查看脚本内容。谨慎对待rm -rf。删除前先确认路径必要时把要删除的内容移动到临时回收目录确认无误后再彻底清理。生产环境执行批处理命令前先在测试环境跑通准备好回滚方案。9.4 后续可以继续深入的方向学会终端基础操作和shell脚本入门之后建议按下面的路径继续扩展系统服务管理用systemctl查看、启动、停止系统服务。网络排障用ip addr、ping、curl定位网络问题。定时任务配合crontab让shell脚本每天自动执行。日志分析学习grep、awk、sed三个文本处理命令它们几乎是shell排障的核心。终端复用工具体验tmux等终端复用工具在一个窗口里管理多个会话尤其适合远程连接场景。如果你能把重复操作写成脚本把报错排查整理成固定流程麒麟系统就不再是一个“长得像Linux的陌生环境”而是一台真正听你指挥的工作工具。从今天开始找一个最常见的重复操作试着把它写成第一段shell脚本这就是最好的入门方式。