Shell Script编程在国产操作系统运维工作中的应用探析
2023-04-06曾海苹
曾海苹
关键词:Shell Script編程;计算机运维;国产操作系统
1 背景与概述
随着国家对加快发展自主可控战略高新技术和重要领域关键核心技术决策的提出,中国涌现出了像深度系统、中标麒麟、红旗、UOS 操作系统等一大批优秀的国产操作系统[1]。基于中华民族伟大复兴的战略全局和世界百年未有之大变局“两个大局”,立足“两个一百年”奋斗目标的历史交汇期,国际形势日益复杂,为了规避在科学技术上被“卡脖子”,甚至“捅刀子”的安全风险,我国教育、金融等关系到国计民生的行业正在逐步推进使用自主可控的国芯电脑取代以往使用的“Windows + Intel”架构电脑。电脑运维部门看重国芯电脑的稳定性、安全性,以及维护上的灵活性,让辖内用户多年来在“Windows + Intel”架构电脑上形成的使用习惯可以平稳过渡到国芯电脑上。
2 统信UOS 系统与Shell Script
Linux 作为高效、安全的操作系统,主要以服务器为服务平台,属于现阶段服务器应用的主流[2]。近年来,联想、华为、方正等国内厂商陆续推出使用Linux 内核操作系统的电脑,例如,国芯电脑中颇受用户欢迎的联想昭阳N4620Z系列笔记本电脑,采用国产的兆芯开先KX-6000CPU 芯片[3],其操作系统为统信UOS 系统。统信操作系统UOS(Unity Operating Sys?tem,简称统信UOS /UOS 操作系统)是一款流畅方便、安全可靠、软件生态相对完善的中文国产操作系统[4]。它是统信软件技术有限公司、深之度科技等联合开发的一款基于Linux内核的国产操作系统。Shell是该操作系统的用户界面,作为用户和内核间接口的程序,它允许用户向操作系统输入需要执行的命令,并把命令送入内核去执行。
Shell 有自己的编程语言——Shell Script[5](Script 是“脚本”的意思),它有点像早期MS-DOS年代的批处理文件(.bat) ,把一系列命令以一定的语法表达出来,成为运维工程师自动化管理的好帮手。ShellScript大多是简明的文本,语法也相当亲和,不但简单易学,而且支持跨平台使用,通用于各种基于Linux内核的操作系统,如同为国产操作系统的银河麒麟(KylinOS) 。
3 运维工作中遇到的问题与解决方法
统信操作系统提供了美观简洁的人机交互图像界面,相对于已有数十年历史的Windows系统来说,用户遇到的问题是使用上的不习惯,运维部门则缺少唾手可得的解决用户问题的工具。在实际工作中遇到的问题,通过运维工程师的思考与探索,均可通过Shell Script编程,为用户提供高效便捷的解决方案。
3.1 如何快速获取本机网络信息
当运维工程师接到用户报障电话的时候,一般都要询问用户电脑的本机网络信息(如主机名和IP地址),通过这些信息去查阅用户电脑软硬件配置和安全控制软件相关状态等,然后根据这些信息去定位故障原因,给出解决方案,或者通过远程工具软件登录到使用该IP地址的电脑上,查看故障现象,解决用户问题。如果用户本身是IT相关的技术人员,可以进入操作系统的终端模式,通过输入ifconfig命令获取网络信息,但对大多数普通用户而言,这个方法过于复杂。工程师可在ifconfig命令的基础上,用Shell Script编程来获取所需要的信息,形成一个专门显示主机名和IP 地址的脚本给用户运行,如:图1的脚本,用grep令去查找过滤ifconfig 命令输出的文本,得到ip 地址,用hostname命令得到主机名,然后用notify命令在屏幕上弹出窗口显示二者的信息。
3.2 清理浏览器缓存
办公自动化(Office Automation,简称OA) 等各类管理系统,多采用B/S架构(Browser/Server,浏览器/服务器模式),其Browser就是指用户电脑中的浏览器。浏览器作为用户日常工作中使用频率最高的电脑软件,其数据缓存模式大大加快了系统的浏览速度,优化了使用者的感受。但是,在出现网络堵塞、通信开销无法满足等轻微故障,且应用程序的防呆性设计有所欠缺的时候,在缓存中的不完整或出错的文件会导致浏览器端出现系统显示错乱、点击按钮无反应等故障,让用户无法继续工作。
此时,一般通过手工清理浏览器缓存后重启浏览器即可解决问题。但是,正如上述第一点那样,让非IT用户去操作清理缓存步骤较为复杂。而通过编写一个Shell Script,能让用户一键运行,快速解决问题。如图2所示,先用grep命令对报告当前所有进程状态的ps -ef命令输出的文本做查找过滤,得到浏览器的进程号后,关闭浏览器;然后以删除目录文件的方式清理浏览器缓存;最后弹出窗口告知用户“清理完毕”并重新打开浏览器,让用户继续工作。
3.3 笔记本电脑的无线Wi-Fi 无法启动
相对于台式机,笔记本电脑具有功耗低、内置电池、轻巧便携等优点,在移动办公方面有需求的用户通常会选择笔记本电脑。无论是Windows系统的笔记本电脑还是统信UOS系统的笔记本电脑,在有线网络切换到无线网络的时候,会偶发无线网络无法启动的情况,具体表现为屏幕右下角的Wi-Fi图标不出现。
同理,此时运维工程师指导用户进入网络管理画面,用鼠标点击重启无线网卡,就可以解决问题,但这样会耗费用户和运维工程师的时间。通过编写一个能让用户一键运行的Shell Script,可使无线网络快速恢复正常工作。如图3,脚本调用网络管理命令nmcli 修复无线网络,之后判断该命令是否运行成功,并弹出窗口告知用户。
3.4 桌面图标失效
统信UOS系统的应用程序在安装成功后,一般会在硬盘的用户主目录下建立存放本地应用配置数据和缓存的子目录,并在用户打开使用应用程序的时候,实时修改这些子目录里面的文件。如“.cache”和“.local/share”。当数据传输堵塞等原因造成这些文件出错的时候,应用程序就可能运行不起来,通常故障表现为“用户双击桌面图标失效”。解决这个故障的办法就是手动清空这两个子目录,让应用程序在下次打开的时候再次建立正确的文件。如图4的脚本,以邮箱应用软件为例,通过“rm -rf”命令,清空“.cache”和“.local/share”里面邮箱子目录的内容,修复桌面邮箱图标无法正常打开的故障。
4 进阶探讨
4.1 Shell Script 的整合
在用户遇到问题的时候,通过各种途径联系上运维工程师,工程师诊断问题后为用户提供解决方案,最后问题得到解决,用户恢复正常工作。这个过程是被动且耗时的。
为了进一步提高工作效率,可以把若干常见问题的解决脚本整合在一起,命名为“IT工具集”。在初始安装系统的时候推送到用户桌面,并向用户宣导:“遇到电脑问题先尝试使用桌面的‘IT工具集”。当用户遇到问题时,打开它查看有无解决方法,如果有,则用户可自行修复,无须联系运维工程师,可节省沟通和诊断时间。
将上述3.1至3.4四个例子的Shell Script整合在一起,建立目录和交互方式。供用户查看、选择、运行。图5是集成后的脚本头部,完成用户交互界面及目录列表功能,下面的四个子功能脚本与上文脚本基本相同,不再一一罗列。
4.2 运行权限的提升
上面讨论了使用Shell Script快速解决运维工作中常见问题的四个例子,它们均可在普通用户的权限下正常运行、解决问题。在统信UOS系统中,有些命令需要超级用户权限才可以执行,如:安装、升级、卸装软件的命令apt。如果用户直接运行此命令,则会报错“权限不足”。此处,就需要为Shell Script 提升权限。
以上述整合后的Shell Script(文件名为it_tools) 为例说明,步骤如下:
1) 运维工程师用su命令切换为超级用户root;
2) 将此Shell Script文件放在常用的用户可执行文件存放目录usr/local/bin下;
3) 来到可让普通用户以超级用户权限运行可执行文件的etc/sudoers.d目录下,在此新建一个文本文件it_tools,里面只有一句“%domain\ users ALL=(ALL)NOPASSWD: /usr/local/bin/it_tools”;
4) 在桌面创建“.desktop”快捷方式,如图6所示,指定快捷方式的名称为“it工具集”,指定快捷方式的显示图标为usr/share/icons/first-aid.png,指定快捷方式指向的可执行文件的完整路径为/usr/local/bin/it_tools等。
这样,普通用户就可以通过双击桌面的“it工具集”图标,用超级用户权限来运行这个脚本。
5 结束语
在日常运维工作中,運维人员不但要熟悉各种常见问题的解决方法,还要不断积累、温故知新,力求用创新的手段去提高工作效率、提升用户体验。
Shell Script编程提供了快速便捷解决问题的途径,而且由于其易学、易用、有趣,能起到抛砖引玉的作用,激发一线运维人员甚至是普通用户的创作兴趣,在各自的权限范围内编写脚本来解决问题和完成工作,共同助力国产操作系统和国芯电脑的推广。在市场占有率日益提升后,使相关企业在市场利润“反哺”下不断壮大并加大科研经费再投入,早日摆脱电脑操作系统等信息化关键核心技术受制于人的不利局面。