
在麒麟系统上做国产化运维、字符设备适配、业务系统迁移终端和 Shell 往往是第一道门槛。图形界面能完成一部分操作但批量改配置、检查日志、安装软件、定时巡检这类事情最终都要回到命令行。这篇文章不讲麒麟系统的图形操作也不准备罗列命令手册而是把“打开终端 - 学会软件安装 - 写脚本 - 跑批量任务 - 遇到问题能排查”这条链路完整走一遍方便实际部署时直接对照参考。文章会先给出麒麟终端与 Shell 的核心能力速览再说明环境准备、终端基础操作、软件安装方法、Shell 脚本入门语法、批量任务设计、资源占用观察和常见问题排查。内容面向刚接触麒麟系统的运维同学也适合正在做信创适配、需要把现有 Linux 脚本迁移到麒麟环境的技术人员。如果你之前只熟悉 Windows 的 cmd 或 PowerShell这篇文章也能帮你快速切换到麒麟系统命令行的工作方式。1. 核心能力速览能力项说明适用系统银河麒麟 V10 桌面版 / 服务器版以及基于麒麟内核演进的相关分支默认 Shell多数麒麟发行版默认使用 bash兼容 POSIX 基本语法主要功能文件管理、软件安装与卸载、进程管理、Shell 脚本编写、批量任务、日志分析软件安装方式麒麟软件商店、命令行包管理器apt 或 dnf按版本而定、源码编译批量任务能力支持可通过 Shell 循环、函数、脚本和 cron 定时任务实现接口能力终端本身没有 HTTP API但 Shell 脚本可通过 curl、wget 等工具调用外部 Web APIGPU / 显存要求无命令行环境依赖低虚拟机、低配服务器均可运行启动方式系统自带终端桌面环境通常支持右键“打开终端”或快捷键打开适用场景国产化办公、信创运维、Shell 脚本入门、批量自动化、系统巡检需要说明的是麒麟系统在不同版本中包管理器并不统一。部分版本基于 Debian/Ubuntu 生态使用apt部分服务器版本基于 CentOS 生态使用dnf或yum。实际环境里先确认系统版本和包管理器再执行安装命令比盲目复制命令更重要。2. 适用场景与使用边界2.1 这个环境适合谁麒麟系统的终端和 Shell 适合以下四类人群。第一类是信创项目运维人员。需要在麒麟系统上部署应用、清理日志、排查网络、批量修改配置这些工作用图形界面的效率很低Shell 脚本可以一次性处理多台机器。第二类是国产化迁移开发人员。原来在 Ubuntu、CentOS 上写的 Shell 脚本需要迁移到麒麟系统上验证兼容性本文涉及的语法和排查思路可以直接复用。第三类是刚接触 Linux 的办公用户。很多办公场景只需要记住少量命令例如查看 IP、复制文件、安装输入法终端能解决不少问题。第四类是自动化测试人员。需要批量执行命令、处理返回结果、生成测试报告Shell 是成本最低的入门方案。2.2 不适合什么场景终端和 Shell 不是万能的。如果任务是纯图形化办公例如排版文档、修图就不需要强行用命令行。如果业务系统需要可视化操作界面例如数据库管理、容器管理平台建议优先使用对应 Web 管理端或图形工具Shell 脚本只做底层补充。另外Shell 不适合编写复杂业务系统逻辑一旦变多建议改用 Python、Go 等更工程化的语言。2.3 使用边界与合规提醒这篇文章只讨论正常系统管理、软件安装、脚本编写和问题排查。权限获取必须通过系统提供的sudo、密码认证或管理员授权完成。不要在未授权的生产环境里执行来源不明的脚本尤其是包含网络连接、远程下载、自动提权等操作的脚本。涉及多台机器批量执行时要确保有授权和审批记录。顺便说明一点网上偶尔能看到“反弹 shell”“绕过权限”之类的内容这类操作可能破坏系统安全边界本文不展开、不提供示例。运维和开发同学更值得关注的是如何用最小权限完成工作以及如何阻止不明脚本在本机执行。3. 环境准备与前置条件3.1 操作系统与 Shell 版本建议在银河麒麟 V10 桌面版或服务器版上进行操作。安装完成后打开终端先确认 Shell 类型和版本。echo $SHELL bash --version输出中如果看到/bin/bash说明默认 Shell 是 bash。部分精简环境中可能只有sh功能差异不大但脚本中最好显式使用#!/bin/bash或#!/usr/bin/env bash避免在不同环境下解释器不一致。3.2 包管理器确认麒麟系统不同版本的包管理器差异较大。进入终端后在输入安装命令前先判断系统基于哪种包管理生态。cat /etc/os-release如果输出中有IDubuntu、IDdebian或类似字段安装软件优先使用apt。如果输出中有IDcentos、IDkylin且明确指向 RPM 生态使用dnf或yum。判断方式也可以直接执行which apt which dnf which yum哪个命令存在就用哪个命令安装软件。装错包管理器不会立刻报错但会带来依赖混乱的问题。3.3 权限准备普通用户可以打开终端但安装软件、修改系统目录、管理服务和大部分系统日志读取操作需要管理员权限。麒麟系统的做法是使用sudo临时提权首次使用时输入当前用户密码。sudo whoami执行后如果输出root说明当前用户具备管理员权限。如果提示用户不在 sudoers 中需要联系系统管理员或者在允许的情况下切换到 root 用户。3.4 终端工具选择麒麟系统自带终端一般能满足日常使用。桌面环境下可以通过“开始菜单 - 终端”或鼠标右键“在终端中打开”启动。如果需要更丰富的标签页、左右分屏、连接远程服务器功能可以尝试第三方终端工具例如 Tabby。Tabby 支持 SSH、SFTP、本地 Shell 和自定义配色对刚接触国产系统的用户比较友好。需要注意Tabby 并不是麒麟系统专用组件它只是一个跨平台终端客户端。使用前确认下载来源避免弄到带风险的修改包。服务器生产环境建议优先使用系统自带终端减少额外依赖。4. 麒麟系统终端基础操作与软件安装4.1 打开终端与基本命令进入终端后可以做一组基础测试。查看当前目录pwd切换目录是 Shell 使用频率最高的命令之一cd /home cd ~ cd ..把当前目录下的文件列出来ls -la查看当前网络地址ip addr查看系统发行版信息cat /etc/os-release先跑通这几条命令终端环境就没有大问题了。4.2 长命令换行与历史命令如果一条命令太长比如拼接多个参数需要在下一行继续输入Shell 并不是直接把光标移到上一行而是使用续行符\。sudo apt install -y \ vim \ git \ curl这里行尾的\表示“下一行继续接在当前命令后面”回车后终端会出现提示符继续输入剩余内容即可。对比一下 Windows cmd 的续行符是^PowerShell 也有自己的续行方式跨平台操作时容易搞混。如果想快速重复执行刚才的命令按向上方向键找到历史记录后直接回车。也可以输入history查看完整命令历史。history还有几个常见技巧输入!!执行上一条命令输入!$展开上一条命令的最后一个参数。执行命令时如果把参数写错了可以先用echo验证一次再真正执行。4.3 管理员权限与 sudo安装软件和修改系统配置时需要把命令包在sudo中。sudo apt update sudo apt install -y gparted这里gparted是麒麟系统常用的分区编辑器示例。如果系统包管理器是dnf安装命令对应改为sudo dnf install -y gparted需要明确的是sudo只在当前命令生效不是切换到 root 用户。如果连续执行多条提权命令每条命令前都要加sudo。如果某条命令提示 “root shell” 相关错误通常不是系统要强制使用 root而是当前用户在 sudoers 配置中没有对应权限或者密码输入错误需要先检查账户权限配置。4.4 安装软件与卸载软件麒麟系统安装软件最常见的方式是命令行包管理器。先更新软件源缓存再安装软件sudo apt update sudo apt install -y vim卸载软件sudo apt remove vim连带清理无用的依赖sudo apt autoremoveRPM 生态的系统对应写法sudo dnf install -y vim sudo dnf remove vim安装后确认命令是否可用which vim vim --version如果软件不在官方源中可以下载对应的 deb 或 rpm 包在线安装# deb 包安装示例具体包名按实际文件替换 sudo dpkg -i example.deb sudo apt -f install -y# rpm 包安装示例具体包名按实际文件替换 sudo rpm -ivh example.rpm4.5 麒麟软件商店的使用麒麟系统自带软件商店适合不熟悉命令行的用户。搜索软件、点击安装、等待完成流程和手机应用商店类似。但它本质上是包管理器的图形前端如果遇到错误代码例如软件商店错误代码 0006大概率是软件源、网络或系统时间问题。遇到这类报错优先做三件事检查当前时间是否准确检查网络能否访问软件源再到终端执行包管理器命令看具体报错内容。date sudo apt update命令行给出的错误信息通常比软件商店弹窗更有参考价值。建议在软件商店不好用的情况下直接改用命令行安装。5. Shell 脚本入门与常用语法5.1 脚本结构和执行方式Shell 脚本本质是把多条命令按顺序编写到一个文件中支持变量、判断、循环和函数。新建一个脚本vim hello.sh写入以下内容#!/bin/bash echo hello kylin给脚本添加执行权限并运行chmod x hello.sh ./hello.sh也可以不添加执行权限直接用解释器运行bash hello.sh两种方式效果相同。如果脚本在 Windows 上编辑过再传到麒麟系统容易出现换行符问题导致执行时报错。可以用sed快速转换sed -i s/\r$// hello.sh这个操作是把 Windows 的 CRLF 换成 Linux 的 LFShell 脚本换行符问题是新手最容易踩的坑。5.2 变量与输入Shell 中定义变量时等号两边不能有空格#!/bin/bash namekylin echo system name is ${name}在脚本中接收用户输入可以使用read#!/bin/bash read -p 请输入要创建的目录名: dir_name mkdir -p $dir_name echo created ${dir_name}循环处理参数时可以使用shift逐个移动参数。下面这个脚本会打印第一个参数然后把第二个参数提升到第一个位置适合用来解析少量命令行参数#!/bin/bash echo first arg: $1 shift echo after shift, new first arg: $15.3 条件判断Shell 的if判断和常见编程语言略有差异。判断文件是否存在#!/bin/bash if [ -f /etc/os-release ]; then echo file exists else echo file not found fi判断命令执行结果#!/bin/bash if ping -c 1 -W 1 127.0.0.1 /dev/null 21; then echo 网络连通 else echo 网络异常 fi注意[ ]两端必须有空格。写成[$name kylin]会直接报错这是 Shell 脚本最典型的语法错误。Shell 还有一个内置空操作命令:它不执行任何逻辑但返回值是 0常被用于调试和占位。例如#!/bin/bash if [ $1 start ]; then : else echo unknown action fi5.4 循环与参数处理for循环是 Shell 脚本批量处理的核心。遍历文件列表#!/bin/bash for file in /etc/*.conf; do echo 处理配置文件: ${file} done遍历数字范围#!/bin/bash for i in $(seq 1 10); do echo 第 ${i} 次 done处理脚本参数#!/bin/bash for arg in $; do echo 参数: ${arg} done5.5 一个完整的批量重命名脚本结合实际场景写一个批量重命名脚本。假设当前目录下有一批.txt文件需要把扩展名改成.log#!/bin/bash for file in *.txt; do if [ -f $file ]; then new_name${file%.txt}.log mv $file $new_name echo 已重命名: ${file} - ${new_name} fi done${file%.txt}是 Shell 的字符串截取能力表示从右侧删除最短匹配的.txt后缀。第一次执行这类脚本时强烈建议先加上echo只打印要执行的命令不真正执行for file in *.txt; do echo mv $file ${file%.txt}.log done确认输出无误后再去掉echo执行可以避免批量重命名后数据错乱。6. Shell 批量任务与日志设计6.1 批量任务的基本套路Shell 批量任务通常遵循三步准备输入列表、循环执行、记录结果。下面的脚本会对指定目录下的所有日志文件做行数统计并输出到结果文件中#!/bin/bash input_dir./logs output_file./line_count_result.txt : $output_file for log_file in $input_dir/*.log; do if [ -f $log_file ]; then count$(wc -l $log_file) echo ${log_file} ${count} $output_file fi done echo 统计完成结果文件: ${output_file}脚本用: $output_file清空旧结果避免多次运行时旧数据残留。$(wc -l $log_file)是命令替换把命令输出保存到变量中。6.2 日志与退出码命令执行是否成功Shell 通过退出码判断。返回 0 表示成功非 0 表示失败。在脚本中记录失败信息很重要#!/bin/bash if cp /data/source.txt /backup/source.txt; then echo $(date) 备份成功 backup.log else echo $(date) 备份失败 backup.log fi如果需要批量任务中某条失败后继续执行后续任务可以在命令末尾追加|| true#!/bin/bash for target in server01 server02 server03; do ping -c 1 $target /dev/null 21 echo ${target} 正常 || echo ${target} 失败 done但要注意一个常见误区脚本开头写set -e后任何命令失败都会导致脚本立即退出。批量任务中如果希望“单条失败不影响整体流程”应避免直接使用set -e而是显式处理退出码。6.3 定时执行Shell 脚本可以通过 cron 定时执行适合巡检类任务。编辑当前用户的定时任务crontab -e每天凌晨 2 点执行一次巡检脚本0 2 * * * /home/kylin/check_disk.sh /home/kylin/check_disk.log 21定时任务执行环境变量较少脚本中尽量使用绝对路径避免因为PATH不同导致命令找不到。7. 资源占用与性能观察7.1 查看 CPU 与内存在终端中观察系统资源占用最常用的是top和free。top动态刷新 CPU、内存和进程列表按q退出。top只看内存情况free -h查看指定进程的 CPU 和内存占用用ps配合grepps -eo pid,comm,%cpu,%mem --sort-%cpu | head -207.2 查看磁盘批量脚本经常需要处理磁盘空间不足的问题。查看磁盘使用量df -h查看当前目录占用空间du -sh .如果脚本要写入大量日志建议先在df -h输出中确认目标分区剩余空间避免日志把磁盘写满。7.3 脚本耗时与资源控制测量脚本执行时间time bash batch_task.sh批量任务耗时长时可用timeout限制单条命令的最大运行时间timeout 10 ping -c 100 192.168.1.1目录文件数量大、脚本循环次数多时要考虑内存和磁盘占用。比如遍历大目录时尽量避免一次性把全部文件名载入变量改用逐行读取while IFS read -r file; do echo $file done file_list.txt8. 常见问题与排查方法下表整理了麒麟系统终端和 Shell 日常使用中较常见的问题。问题现象可能原因排查方式解决方案终端打开后黑屏或无法输入桌面会话异常、显卡驱动问题查看系统日志journalctl -xe重启会话或切换显示协议终端按下回车无反应终端处于等待输入状态检查是否误输入引号或续行符按 CtrlC 取消当前输入执行脚本提示权限不足脚本没有执行权限ls -l script.sh执行chmod x script.sh软件商店错误代码 0006软件源、网络或系统时间异常终端执行sudo apt update查看报错同步时间、更换网络源后再试sudo 输入密码后提示错误用户不在 sudoers 中或密码错误执行sudo whoami验证由管理员编辑 sudoers 配置提示 “cant open root shell” 或 root 相关错误当前用户权限不足或密码认证失败检查id、sudo -l确认账户权限后重试脚本执行报-bash: ./xxx.sh: 权限不够脚本无执行权限ls -lchmod x脚本在 Linux 上执行报语法错误换行异常文件在 Windows 编辑包含 CRLFsed -i s/\r$// script.sh转换换行符后再执行apt 安装软件提示软件源无法连接仓库地址不可达或网络受限curl -I 软件源地址更换可用镜像源或检查网络编辑器集成终端提示 npm 命令无法加载软件包路径未加入终端 PATHecho $PATH重新配置 PATH 或重启终端终端提示进程已退出、退出代码 -1终端进程异常退出或组件损坏重新打开终端并查看错误日志重启终端必要时重装终端组件另外如果你在 Windows 终端中看到 “终端进程启动失败: 启动期间发生本机异常(无法启动 conpty)” 这类报错那不是麒麟系统的报错而是 Windows Terminal 相关组件异常通常需要检查 Windows 终端组件版本或系统更新。跨平台操作时要先确认报错来自哪个系统再按对应思路排查。9. 最佳实践与使用建议9.1 脚本编写建议第一所有脚本开头写清楚解释器#!/bin/bash第二尽量给变量加引号避免路径中包含空格导致变量被拆分cp $source_dir $target_dir第三写脚本时先处理最简单的分支再逐步增加复杂度。先保证最小路径能跑通再处理异常分支。第四危险操作前必须打印确认信息例如rm -rf建议在脚本中加一层安全检查#!/bin/bash target_dir$1 if [ $target_dir / ]; then echo 禁止删除根目录 exit 1 fi echo 将删除 ${target_dir}9.2 权限与安全建议不要直接用 root 账户跑日常操作。普通用户能完成的任务就使用普通用户。需要提权时临时使用sudo。批量操作多台机器前先确认命令正确性和影响范围。不要从不可信网站复制脚本到生产环境执行不要执行同时包含下载和自动执行的未知脚本。涉及日志、备份、配置文件的脚本注意保护敏感信息。9.3 备份与灰度验证第一次在正式环境跑批量脚本建议先处理一个副本目录。例如批量重命名前先把目录复制一份cp -r data data_backup然后在副本上测试脚本确认输出符合预期后再在正式数据上执行。批量任务最好保留详细日志方便出问题时回退。9.4 常见 Shell 坑Shell 脚本看起来简单实际使用中有几个高频报错点。变量赋值等号两边不能有空格if判断方括号两边必须有空格for循环的$(seq 1 10)中seq依赖外部命令兼容性更好的写法是用{1..10}。管道命令后需要判断结果时记得通过${PIPESTATUS[0]}获取管道中第一条命令的状态。此外脚本内多级回滚逻辑要谨慎使用exit避免提前退出导致后续清理操作没有执行。10. 总结与下一步麒麟系统终端与 Shell 最值得先学会的三件事是用包管理器安装软件、用for循环处理批量文件、用sudo平稳完成提权操作。先把这三件事跑通日常运维和国产化迁移就有了基础。最容易踩的坑也建议提前记下来脚本换行符 CRLF、变量加引号、权限不足时想到chmod x、软件源报错时先看/etc/os-release判断包管理器。下一步可以继续扩展学习sed、awk、systemd服务和巡检脚本设计。如果目的是提高效率可以结合tmux做终端复用或者把脚本交给 cron 自动执行。再往后如果批量任务复杂度增加建议把核心逻辑迁移到 Python 或 GoShell 负责快速执行Python 负责更严格的异常处理。建议收藏备用下次在麒麟系统上遇到终端或 Shell 问题可以直接翻到对应章节排查。