ARTICLE DETAIL

资讯详情

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

麒麟终端与Shell:从命令到脚本的完整排错指南

麒麟终端与Shell:从命令到脚本的完整排错指南 麒麟软件终端与 shell看起来是两个名词其实是同一件事的两层。终端是那个黑窗口shell 是窗口里负责解释命令的程序。很多人在银河麒麟上安装软件失败、脚本跑不起来、终端打不开卡住的往往不是某个具体命令而是没搞清楚这三层关系。这篇文章按实际使用顺序从打开终端、执行第一条命令到写可复用脚本再到排错完整拆一遍。适合刚把系统切到麒麟、准备日常办公和开发的人也适合已经在用 Linux 但想确认国产系统命令差异的人。最值得先记住的是银河麒麟的命令体系和主流 Linux 发行版基本一致查错思路比背命令更重要。1. 麒麟系统的终端到底指什么先分清三层1.1 终端窗口只是入口真正干活的是 shell普通用户看到的“终端”是一个窗口程序系统里一般叫终端模拟器。它只是给你一个输入输出界面真正执行命令的是 shell麒麟默认一般为 Bash。输入命令、按回车shell 负责解析命令、调用程序、把结果回显到窗口。理解这层关系遇到“命令不存在”或“终端卡住”时就不会第一时间怀疑桌面坏了。我见过不少人把“打开终端”理解成“进入某个系统工具”其实终端里可以执行任何系统命令不只是网络测试和软件安装。图形界面能做到的事大部分都能在终端里通过命令完成。反过来有些图形界面不方便做的事例如批量重命名几百个文件、循环检查多台机器连通性用 shell 写几行就完成了。1.2 麒麟软件命令从哪里来包管理器的作用银河麒麟 V10 的软件来源主要分两类一类是软件商店图形界面点选安装另一类是软件源仓库通过终端使用包管理器安装。二者并不是平行关系软件商店大多只是个图形前端底层还是要调用包管理工具。因此你在软件商店点“安装”失败终端里用命令安装却可能成功因为你能看到真实报错。如果系统基于 Debian 体系包管理命令是 apt 和 dpkg如果遇到不同分支也可能是 yum 或 dnf。安装前先看cat /etc/os-release最稳妥。很多人一上来就复制网上的 Ubuntu 命令如果系统是其他体系命令会失效这是最常见的坑之一。1.3 什么时候必须用 shell下面几个场景基本绕不开 shell安装和卸载软件尤其是本地 deb 包需要单独处理依赖时批量操作文件比如按日期重命名、批量压缩、批量清理日志检查系统状态看内存、磁盘、CPU、网络连接写自动化脚本让重复操作可复用远程登录服务器只能靠命令行完成管理。对刚上手的人来说可以先从“安装软件”和“检查目录”开始练。不需要一开始就背几十个命令把 cd、ls、sudo、apt 用熟再慢慢扩展到循环和脚本心理压力会小很多。2. 从打开终端到第一次顺利执行命令环境与基本操作2.1 打开终端的几种方式在麒麟桌面环境里打开终端的方式常见有几种桌面空白处右键选择“打开终端”在开始菜单搜索“终端”回车打开快捷键一般为 CtrlAltT不同桌面可能会有差异如果你要管理的是远程服务器使用 SSH 客户端连接登录后就是远程 shell 环境。我建议新用户先掌握本机终端再学远程连接。本机终端没有网络和密钥的干扰能把注意力放在命令本身。远程工具方面tabby 这类开源终端工具也可以安装使用界面友好支持多标签、保存连接信息。工具是辅助关键是理解 shell 的交互方式。2.2 终端怎么换行、换目录、看历史记录很常见的问题命令太长怎么换行Linux 终端里一行命令没写完想换到下一行继续写可以在行尾输入反斜杠\再回车shell 会提示一个次级提示符例如说明它还在等命令继续。如果已经写完命令直接回车执行即可。这和 Windows CMD 的换行规则不同CMD 里用^做续行符PowerShell 里续行符是反引号很多人在 Windows 下写脚本习惯了到了 Linux 终端会拿反斜杠当路径分隔符产生混淆。换目录最常用的是 cd 命令cd /home/user # 进入绝对路径 cd .. # 返回上一级 cd ~ # 回到当前用户主目录 cd ~/Desktop # 进入桌面目录建议输入路径时多用 Tab 键补全能减少拼写错误。查看当前目录用pwd列出目录内容用ls。这是最高频的一组命令。2.3 普通用户和管理员权限sudo 怎么用才安全登录系统后终端提示符最后如果是$说明当前是普通用户如果是#通常是 root。日常操作请用普通用户需要管理权限时用sudo临时提权。例如更新软件源sudo apt update sudo apt install -y some-package第一次执行 sudo 会要求输入当前用户密码。密码正确且用户有 sudo 权限才会执行。不要把终端长期保持成 root也不要随便给一个脚本开最高权限。有时下载的脚本要求直接以 root 运行或提示 “cant open root shell”这种情况要停下来想想为什么要 root命令会做什么来源是否可信对于正常的技术学习普通用户加 sudo 足够。遇到 “Permission denied” 时先看文件权限和目录权限不要第一反应就是用 sudo 强行执行那会掩盖问题。2.4 先跑三条命令确认你的环境拿到一台新麒麟系统建议先执行下面三条命令cat /etc/os-release echo $SHELL uname -a/etc/os-release会显示系统名称、版本号、系统基于哪个发行版echo $SHELL显示当前登录用户使用的 shell常见是/bin/bashuname -a显示内核信息。执行完这三条你就能判断网上搜到的命令是否适用。无论之后装软件还是写脚本这些基本信息都是判断依据。如果echo $SHELL输出不是你预期的 Bash比如/bin/sh或 zsh别慌执行bash可以临时进入 Bash或者用chsh -s /bin/bash修改默认 shell。不过一般麒麟默认就是 Bash。3. 安装和卸载软件终端操作比软件商店更好排查3.1 银河麒麟安装软件命令搜索软件包apt search 软件名安装软件包sudo apt update sudo apt install -y 软件包名-y表示自动确认安装。如果安装过程中提示依赖问题不要急着删依赖先看是哪几个包冲突。很多时候是软件源缓存过期或部分软件源不可用更新后重新安装即可。如果你手里是第三方下载的.deb文件可以用sudo dpkg -i package.deb如果提示缺少依赖再执行sudo apt -f install它会自动修复依赖关系。这是安装本地 deb 包的标准处理顺序。当软件商店出现错误代码 0006 或者安装按钮一直转圈时我更建议直接用终端安装。软件商店把错误包装成了统一错误码你看不出是网络问题、依赖问题还是仓库源问题终端命令会打印具体错误日志按日志找原因比猜错误码快得多。3.2 麒麟系统怎么卸载软件卸载软件包sudo apt remove 软件包名想连配置文件一起删除用sudo apt purge 软件包名卸载后清理不再需要的依赖sudo apt autoremove有时图形程序卸载后主目录下还残留配置目录比如~/.config下以软件名命名的目录不影响使用但如果你很在意干净可以手动删除。删除前要确认目录名不要随手执行rm -rf ~/.config那会把大量应用配置一起删掉。3.3 用终端安装分区编辑器一个典型场景有人问“麒麟 V10 终端命令怎么安装分区编辑器”。常见的分区编辑器是 GParted安装命令sudo apt install gparted sudo gparted分区操作需要管理员权限所以要用 sudo 启动。启动后图形界面会显示磁盘和分区。这里必须提醒分区操作有风险做之前先备份重要数据不要一边分区一边做其他写盘任务。在终端里输入命令很直接但有些动作一旦执行就无法撤销所以要建立“先确认再执行”的习惯。注意分区、删除、格式化这类操作无法撤销。动手前先备份执行前再确认一遍命令路径和参数。3.4 软件商店和终端命令的关系在银河麒麟软件商店里安装软件、卸载软件、更新软件本质都在操作包管理器。商店的优势是界面直观适合非技术用户劣势是出错时信息不透明。终端命令的优势是可重复、可自动化、能看到完整日志劣势是新手会觉得黑窗口有距离感。我自己常用的判断是单个图形软件用商店装比较省事批量环境部署或排障必须用终端。如果你给多台机器装同一款软件写成 shell 脚本远程执行效率会明显提高。也不要因为用终端就完全不看商店有些国产商业软件只在商店渠道上架终端仓库里未必有。4. Shell 脚本入门从一条命令到可复用脚本4.1 为什么要写脚本单条命令处理一个问题脚本处理一批问题。典型场景是批量重命名文件、循环检查多台机器端口、定时备份目录。手动执行这些操作只要中间错一次后面全乱脚本可以把逻辑固定下来每次执行结果一致还能留下日志。对于日常办公学会写十行以内的脚本已经能解决大部分重复操作。写脚本不只是把命令拼在一起。你还要考虑它从哪里开始、出错时要不要继续、输出结果写到什么地方。这些在交互式终端里可以忽略在脚本里必须明确。4.2 第一个脚本文件内容、执行权限、运行方式创建一个脚本文件#!/bin/bash echo 当前目录: $(pwd) echo 当前用户: $(whoami)保存为test.sh然后chmod x test.sh ./test.sh也可以不修改权限直接执行bash test.sh两者的区别是./test.sh依赖文件头的#!/bin/bash和文件执行权限bash test.sh把文件当作参数交给 bash 读取不要求执行权限。写脚本时建议第一行固定写#!/bin/bash这样系统知道用哪个解释器。从 Windows 复制脚本到 Linux 执行很容易出现“找不到命令”或$\r: command not found原因通常是换行符不对。可以用sed -i s/\r$// test.sh去掉回车符。这个问题非常常见建议先查换行再查命令。4.3 for 循环、shift、忽略错误继续执行批量处理文件for 循环是最常用的结构。例如把所有.txt文件重命名加个日期后缀#!/bin/bash for f in *.txt; do mv $f ${f%.txt}_$(date %Y%m%d).txt done${f%.txt}是去掉.txt后缀的写法双引号保证文件名带空格时不会拆成多个参数。shift命令用来处理脚本传入参数每执行一次参数位置向左移动一位。比如脚本里有$1、$2执行shift后原来的$2变成$1适合写交互式命令行工具。新手可以先理解概念不必急着用。与之相关的$表示所有参数$#表示参数个数。脚本出错后有两种策略。一种是用set -e碰到任何命令返回非零就立刻停止适合“任何一步失败都不能继续”的任务。另一种是忽略错误继续执行比如在某条命令后面加|| true或者临时执行set e# 出错也继续 command_that_might_fail || true还有一种占位写法是:它是 shell 内置的空操作命令直接执行不会报错常用于临时占位。别把它当成注释它是一条真实命令。获取脚本所在目录的常用写法DIR$(cd $(dirname $0) pwd)为什么这么写$0是脚本路径dirname去掉文件名部分cd进去后用pwd取绝对路径。这样脚本里后续引用相对文件就不会因为执行目录不同而找不到。4.4 日志、输出重定向和失败重试脚本运行时如果只把结果打在屏幕上关掉终端就丢了。建议把输出重定向到日志文件./deploy.sh /tmp/deploy.log 21把标准输出写入文件21把标准错误也写到同一个地方。这样做的好处是脚本出错时你能拿到完整日志。如果任务可能中途失败可以写一个简单的重试循环for i in 1 2 3; do if ./sync_data.sh; then echo 第 $i 次执行成功 break else echo 第 $i 次执行失败准备重试 sleep 3 fi done在批量任务里不能只看“能不能跑通”还要看输出是否完整、日志有没有错误、失败后是否自动重试。这是脚本从“能跑”到“能用”的关键一步。4.5 Shell 脚本常见坑根据我平时的习惯脚本出问题先按下面的顺序查文件开头是不是有#!/bin/bash文件是不是 CRLF 换行关键命令是否能单独执行先跑一遍原命令看结果变量赋值等号两边有没有空格引用变量有没有加双引号command not found先看 PATH再看软件是否安装而不是硬改脚本路径中含空格时整个路径要加引号需要管理员权限的命令是否加了 sudo脚本里用 sudo 要确认当前用户有权限。如果系统能安装 shellcheck建议对脚本跑一遍/usr/bin/shellcheck script.sh它会提示常见语法问题和隐患。没有也没关系人工按上面顺序检查也能覆盖大部分情况。5. 终端和 shell 常见故障排查按现象找原因5.1 终端进程启动失败本机异常错误怎么查有时打开终端会看到“终端进程启动失败启动期间发生本机异常”或者类似的提示。在麒麟系统上遇到这类问题我的排查顺序是先重启终端程序确认是偶发还是稳定复现检查当前用户默认 shell 是否存在且可否执行执行getent passwd 用户名最后一段就是登录 shell检查桌面环境和终端模拟器是否被更新破坏尝试用另一个终端程序测试检查磁盘空间df -h如果根分区满了终端可能起不来查看系统日志journalctl -xe | tail -50重点看有没有 PAM、dbus、shell 相关的报错。如果你在 Windows 的 VS Code 终端里看到“无法启动 conpty”的提示那是另一回事ConPTY 是 Windows 的伪终端组件和 Linux 的终端概念不同。通常重装或更新 VS Code、清理终端扩展、以管理员身份重新运行可以解决。麒麟这样基于 Linux 的系统一般不会依赖 ConPTY不要把两套排查经验混在一起。下面这个表格可以帮你快速对照现象和优先排查方向现象可能原因先做的事终端打不开磁盘满、shell 路径失效、桌面组件异常检查df -h用另一终端程序测试命令执行提示 Permission denied无执行权限、目录权限、挂载选项 noexec看具体文件权限和挂载参数软件商店错误 0006软件源变更、DNS 异常、网络不通执行sudo apt update看真实日志apt install 提示依赖错误软件源不一致、本地包冲突sudo apt clean后重新 update脚本出现 command not found软件未安装、PATH 缺少目录、换行符错误先手动执行原命令再查 PATH5.2 银河麒麟软件商店错误代码 0006错误代码 0006 常见和软件源、网络或解压缓存相关。我一般不用错误码本身推理而是直接切到终端看包管理器输出sudo apt update如果apt update报网络错误先检查网络。执行ping 网关和ping 软件源域名确认是断网还是域名解析失败。DNS 有问题就看/etc/resolv.conf或网络管理器设置。如果软件源配置被修改过检查/etc/apt/sources.list和/etc/apt/sources.list.d/下的文件。如果源没问题执行sudo apt clean清理缓存后再sudo apt update。很多“商店装不上”的问题都能在这里解决。这类错误码本质上只是图形界面给用户的统一提示真正原因要看底层命令的日志。这也是为什么我建议至少学会 apt 命令。5.3 权限被拒绝先分清权限、路径和文件格式问题提示Permission denied时先看提示出现在哪个阶段。如果是执行./script.sh时报权限拒绝通常是脚本没有执行权限执行chmod x script.sh。如果是读取某个目录报权限拒绝通常是当前用户没有访问权限需要sudo或调整目录权限。如果是sudo都提示用户不在 sudoers 中说明当前账号没有被授予提权资格联系管理员处理不要自己找人重置系统密码。正常使用场景下不推荐通过修改/etc/sudoers绕过或者直接切 root那会破坏系统的权限模型。如果看到提示 “cant open root shell … try again”多半来自某些手机刷机或特殊调试工具含义是当前环境不允许直接进入 root。这类提示不应该强制绕过。在麒麟系统上需要管理员权限时使用 sudo需要安装软件时用包管理器思路会更安全也更符合 Linux 的权限设计。注意脚本里使用 sudo 时先确认当前用户真的有权限不要为了绕过限制去改 sudoers 或临时提升 root 长时间使用。5.4 网络诊断、adb shell 和系统日志终端经常用来做网络排查。麒麟系统先看几个基础命令ip a ip route ping 网关如果图形网络图标显示断开可以用nmcli device status查看网络设备状态通过nmcli或系统设置重新连接。少数情况需要重启 NetworkManagersudo systemctl restart NetworkManager这里要提醒重启网络服务会短暂断开当前连接如果你是通过 SSH 远程操作可能掉线需要重新连接。有时候网上会看到 adb shell 相关命令比如电池统计、应用包名操作。adb shell 是 Android 调试桥提供的 shell 环境用来连接 Android 设备并执行命令它和麒麟系统的终端不是同一套体系。如果你做 Android 开发可以在开发机安装 adb 工具后执行adb shell但这不是麒麟系统终端的学习重点。遇到系统服务异常用系统日志最可靠journalctl -xe输出较多时可以配合grep过滤关键字也可以加--since看指定时间。日志能看到时间、进程、具体报错比猜现象准确。5.5 输入编辑和长命令操作终端里编辑长命令有一些实用快捷键CtrlA跳到行首CtrlE跳到行尾CtrlU删除当前行从光标到行首CtrlK删除光标到行尾CtrlW删除光标前一个词上下方向键翻阅历史命令history查看命令历史!序号可以重新执行某条历史命令。“怎么换到上一行”如果指回到上一条命令用方向键上键即可如果指在窗口里直接看滚动输出用 ShiftPageUp 或终端自带的滚动条。不要把这些和命令换行混为一谈。6. 进阶终端复用、远程工具和脚本能力升级6.1 用 tmux 做终端复用终端复用是指在一个屏幕上管理多个会话、多个窗口最有名的是 tmux。场景一般是你通过 SSH 登录服务器跑一个数据同步任务任务要跑半小时如果网络断开任务也随之中断。用 tmux 执行任务后即使终端窗口关闭任务仍在后台运行重新连接后还能回到原会话。常用命令tmux new -s work # 在会话内执行任务然后按 Ctrlb松开后按 d分离会话 tmux attach -t worktmux 里还能把窗口分成多个窗格一边看日志一边执行命令。第一次用会不习惯前缀键Ctrlb但用熟之后非常顺手。如果系统没有安装用包管理器安装即可sudo apt install tmux6.2 远程终端工具选择本地终端之外远程管理服务器时常用独立终端工具。tabby 是一个跨平台终端工具界面现代支持多标签和连接保存适合新手保存 SSH 配置。Windows Terminal 在 Windows 上也很常用但你不是在麒麟里跑它而是通过 SSH 连接麒麟服务器。关键在于理解命令本身工具只是不同外壳。在政企环境中偶尔会用到“天逸终端虚拟化软件”这类产品它是一种企业终端接入工具通常和统一的身份认证、虚拟桌面绑定。管理员下发配置后你按说明接入即可。它的作用和 Linux 终端并不冲突更像是远程桌面的入口。这篇文章不展开讲因为不同单位部署方式差异很大。6.3 从日用脚本到生产任务岗位需求里的 shell 能力招聘里出现“熟悉 Linux shell 编程”通常意味着你需要能完成几类工作日志分析、定时任务、服务状态检查、简单的自动化部署。核心不是背命令而是知道如何把命令组织成流程并处理异常。一个简单的日常示例是定时清理日志# /home/user/clean_log.sh #!/bin/bash find /var/log/myapp -name *.log -mtime 7 -delete然后用crontab -e添加定时任务0 2 * * * /home/user/clean_log.sh这样每天凌晨 2 点执行一次。这类脚本很小但已经体现了“定期、可重复、无人工干预”的生产思维。进阶时还可以把脚本输出写入日志失败时发送提醒形成一套可观测的流程。6.4 使用 AI 编程工具时的终端权限意识现在有不少 AI 编程工具会在本地终端里执行命令。使用时要关注两点当前目录是否可信以及它要被赋予什么权限。如果工具弹出“shell 权限被拒绝”不要无脑给 root 权限先看它要执行什么命令、为什么需要、是否合理。很多场景下普通用户权限加项目目录内授权就够用了。这也是我会建议新用户注意的一点终端越方便越要保留对每一条命令的确认习惯。7. 最后留几个实用建议麒麟系统的终端和 shell 并不神秘。它和主流 Linux
返回列表