麒麟系统终端与Shell脚本入门:从命令基础到实战排查
2026/9/1 9:32:10 网站建设 项目流程

打开麒麟系统的终端,很多人第一反应是“这不就是一个黑框框吗”。真正开始操作时才发现,安装软件、卸载软件、查看系统信息、排查网络故障,几乎所有事情都要在这个黑框框里完成。如果你以前只用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一般是Bash(Bourne Again Shell),这是绝大多数Linux发行版的默认shell。Bash支持两种使用方式:交互式输入命令,以及执行脚本文件。交互式就是你打开终端一行一行敲;脚本式是把命令按逻辑写到文件里,批量执行。

一句话:终端是窗口,shell是解释器。你敲的每一行命令,最终是shell在执行。

3. 环境准备:打开终端之前的准备工作

进入正题之前,建议先花两分钟确认系统环境。这样后面操作软件源、安装软件时,能够快速判断是不是兼容问题。

3.1 查看系统版本和架构

打开终端,依次执行以下命令:

cat /etc/os-release uname -m

第一条会显示系统名称、版本号等基本信息。第二条输出的是系统架构,常见结果是x86_64(Intel/AMD 64位)、aarch64(ARM 64位)、loongarch64(龙芯)等。

架构信息非常关键。一台ARM架构的麒麟设备和一台x86架构的麒麟设备,能装的软件包可能是不同的。如果你的安装源或者下载的deb包架构不匹配,安装时大概率会报错。

3.2 确认当前用户身份

输入以下命令:

whoami id

普通用户的输出通常是uid=1000(用户名)。如果显示uid=0(root),说明当前是root用户,操作风险等级完全不同。日常使用建议以普通用户登录,需要管理员权限时用sudo临时提权。

3.3 终端打不开怎么办

很多用户遇到“终端打不开”的问题,这种情况下应该先想想最近是不是改了shell配置。

终端启动时,会加载当前用户的shell配置文件,比如~/.bashrc~/.bash_profile。如果这些文件里写入了有语法错误的命令,终端可能闪退或启动报错。这时候可以尝试:

  1. 用文件管理器进入主目录,按Ctrl + H显示隐藏文件。
  2. 找到.bashrc,备份后把疑似新增的错误内容注释掉或删除。
  3. 重新打开终端测试。

如果终端程序本身被误删,可以尝试通过软件商店或系统更新界面重新安装终端相关组件。这里建议先从配置文件入手排查,因为概率更高。

4. 软件安装与卸载:终端里的包管理操作

麒麟系统用户搜索频率最高的需求,就是“怎么安装软件”和“怎么卸载软件”。在终端里,这件事主要靠aptdpkg

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 软件包名.deb

dpkg安装最大的问题是不会自动拉取依赖。如果安装后提示缺少依赖,执行:

sudo apt-get install -f

它会修复依赖关系。很多用户以为dpkg安装完软件就能用,其实依赖缺失才是最常见的坑。

4.3 卸载软件

sudo apt remove 软件包名 sudo apt purge 软件包名

区别在于:

  • remove删除程序文件,保留配置文件。
  • purge连配置文件一起删除。

清理不再需要的孤立依赖:

sudo apt autoremove

这条命令会把因为安装某个软件而被带入、但现在已不再需要的依赖包清理掉。需要注意的是,执行前最好看一眼它准备删除的包列表,避免删掉其他软件还在用的共享库。

4.4 软件商店错误代码0006的排查思路

关于“麒麟软件商店错误代码0006”,网上说法很多。这个错误不能一概而论,它往往和软件商店无法正常获取软件列表有关。更稳当的排查顺序是:

  1. 检查网络是否正常,可以先打开浏览器访问任意网页。
  2. 在终端执行sudo apt update,看软件源是否报错。
  3. date检查系统时间,时间偏差太大会导致HTTPS证书校验失败,表面看像网络错误。
  4. 确认软件源配置是否有效。

如果以上都正常,软件商店仍然报错,可以考虑直接使用命令行安装目标软件。从工程效率角度看,命令行安装更透明,报错信息也更明确。

4.5 麒麟系统里的其他包格式

除了deb包,麒麟系统还能运行多种发行格式的应用。比如AppImage是免安装的便携格式,下载后给执行权限即可运行;还有部分厂商会提供tar.gz压缩包。安装这些格式不需要root权限,但需要注意可执行权限设置和依赖库是否齐全。

chmod +x 应用.AppImage ./应用.AppImage

4.6 分区编辑器安装示例

有用户搜索“麒麟v10终端命令安装分区编辑器”,这里给一个通用流程。

GParted是Linux下常用的分区编辑器,终端安装命令是:

sudo apt update sudo apt install gparted -y

启动:

gparted

操作分区是高风险操作。强烈建议先在虚拟机或测试机器上练习,不要在保存重要数据的磁盘上直接试验。分区操作前必须备份数据,并确认操作的目标磁盘确实是你要操作的那一块,可以通过lsblk查看磁盘挂载情况。

lsblk df -h

5. 终端高频操作:目录切换、换行、历史命令与sudo权限

终端的使用体验,很大程度上取决于快捷键和高频命令的熟练度。

5.1 切换目录:cd

cd是最基础也是最常用的命令。几个典型写法:

cd /etc # 切换到 /etc 目录 cd ~ # 回到当前用户主目录 cd .. # 返回上级目录 cd - # 返回上一次所在目录

新手最容易犯的错误是漏掉空格。命令和参数之间必须有空格,写成cd/etc会被shell当成一个不存在的命令。

5.2 查看当前目录

pwd

当你在终端里觉得“迷路”时,先执行pwd,它会把当前所在的绝对路径打印出来。

5.3 终端怎么换到上一行

“linux终端怎么换到上一行”这个搜索词,背后可能有几种场景。

第一种是输入一条很长的命令时,想换行继续输入。可以在行末加反斜杠\再回车:

sudo apt install \ vim \ curl \ git

shell会把这些行合并成一条完整的命令执行。这种写法在脚本里也很常见,可以让超长命令更易读。

第二种场景是编辑当前输入行。如果命令输错了一部分,只想去行首修改,可以按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.sh

6.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} 次" done

6.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 a=10 b=20 if [ "${a}" -lt "${b}" ]; then echo "a 小于 b" fi

字符串比较则用===

#!/bin/bash name="麒麟" if [ "${name}" = "麒麟" ]; then echo "匹配" fi

7.3 变量要加双引号

变量内容如果含有空格,不加双引号时会被shell拆成多个参数。比如:

file_path="/data/my docs/report.txt" if [ -f "$file_path" ]; then echo "文件存在" fi

这里$file_path必须加双引号,否则shell会把/data/mydocs/report.txt当成两个独立参数,条件判断会失败。

7.4 set -e 的误用

很多脚本开头会写set -e,意思是“任何一个命令失败就立即退出脚本”。这在部署脚本中能避免错误继续传播,但在日常脚本中却可能带来困扰。

比如你有一条命令只是尝试查询一个可能不存在的文件,但脚本因为这条命令返回非零状态直接退出,后面的处理逻辑全被跳过。如果确实需要某个失败的命令不中断脚本,可以在命令末尾加|| true

grep "keyword" /tmp/log.txt || true

7.5 忘记检查命令是否存在

在脚本里调用外部命令之前,可以用command -v检查:

if command -v curl >/dev/null 2>&1; 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,避免abtmp1这类无意义命名。
  • 关键步骤加注释,特别是脚本依赖的外部命令和适用环境。
  • 脚本中涉及路径时,尽量使用绝对路径或基于脚本目录拼接的相对路径,不要依赖执行时的工作目录。
  • 在脚本开头设置变量集中管理路径、用户名等配置,方便后续修改。

9.3 安全边界

  • 日常使用普通用户登录,通过sudo临时提权。
  • 不要在root shell里执行来源不明的脚本,执行前先cat查看脚本内容。
  • 谨慎对待rm -rf。删除前先确认路径,必要时把要删除的内容移动到临时回收目录,确认无误后再彻底清理。
  • 生产环境执行批处理命令前,先在测试环境跑通,准备好回滚方案。

9.4 后续可以继续深入的方向

学会终端基础操作和shell脚本入门之后,建议按下面的路径继续扩展:

  • 系统服务管理:用systemctl查看、启动、停止系统服务。
  • 网络排障:用ip addrpingcurl定位网络问题。
  • 定时任务:配合crontab,让shell脚本每天自动执行。
  • 日志分析:学习grepawksed三个文本处理命令,它们几乎是shell排障的核心。
  • 终端复用工具:体验tmux等终端复用工具,在一个窗口里管理多个会话,尤其适合远程连接场景。

如果你能把重复操作写成脚本,把报错排查整理成固定流程,麒麟系统就不再是一个“长得像Linux的陌生环境”,而是一台真正听你指挥的工作工具。从今天开始,找一个最常见的重复操作,试着把它写成第一段shell脚本,这就是最好的入门方式。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询