【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战

🌈个人主页:Sarapines Programmer
🔥 系列专栏:《操作系统实验室》
🔖诗赋清音:柳垂轻絮拂人衣,心随风舞梦飞。 山川湖海皆可涉,勇者征途逐星辉。

目录

🪐1 初识Linux OS

🪐2 shell 编程的解密与实战

🌍1. 实验目的

🌍2. 实验准备

🌍3. 实验内容

🌍4. 实验心得

📝总结


🪐1 初识Linux OS

Linux是一种开源的Unix-like操作系统内核,它是基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。Linux内核最初是由芬兰程序员Linus Torvalds在1991年创建的,之后成为自由软件和开源社区的一个主要项目。

以下是Linux操作系统的一些主要特点和组成部分:

  1. 内核(Kernel): Linux内核是操作系统的核心,它管理系统资源,如处理器、内存、设备驱动程序等。Linus Torvalds最初编写了Linux内核,它是Linux操作系统的基础。

  2. Shell(命令解释器): Linux操作系统使用命令行界面(CLI),用户与系统交互通过Shell。用户可以通过输入命令执行各种任务,管理文件、进程、权限等。常见的Shell包括Bash(Bourne Again SHell)和Zsh。

  3. 文件系统: Linux支持多种文件系统,包括Ext4、XFS、Btrfs等。文件系统负责管理存储设备上的文件和目录,以及文件的权限、所有权等信息。

  4. 用户界面: 虽然Linux以CLI为主,但也支持图形用户界面(GUI)。常见的Linux桌面环境有GNOME、KDE、XFCE等,它们提供了直观的用户体验。

  5. 软件包管理系统: 大多数Linux发行版都有自己的软件包管理系统,用于安装、更新和删除软件。常见的包管理工具有APT(Debian/Ubuntu)、YUM(Red Hat/CentOS)、Pacman(Arch Linux)等。

  6. 网络功能: Linux具有强大的网络功能,支持各种网络协议和服务。它可以作为服务器运行各种网络服务,如Web服务器(Apache、Nginx)、邮件服务器(Postfix、Sendmail)、文件服务器(Samba)等。

  7. 多用户和多任务: Linux是一个多用户系统,多个用户可以同时访问同一台机器。它也是一个多任务系统,可以同时运行多个进程。

  8. 安全性: Linux以安全性而闻名,系统管理员可以设置用户权限、访问控制列表(ACLs)等来确保系统的安全性。

  9. 开源和自由: Linux是开源软件,其源代码可以被任何人查看、修改和分发。大多数Linux发行版是免费提供的,用户可以自由选择、使用和分发。

  10. 发行版(Distribution): 由于Linux内核是开源的,不同的组织和社区创建了各种Linux发行版,例如Ubuntu、Debian、Fedora、CentOS、Arch Linux等。每个发行版都有自己的特点和包管理系统。

总体而言,Linux操作系统是一个强大、灵活且可定制的操作系统,广泛应用于服务器、嵌入式系统、超级计算机等各种领域。


🪐2 shell 编程的解密与实战

🌍1. 实验目的

  •  掌握Linux中"三剑客"grep、sed、awk的使用方法;

  • 掌握Bash shell脚本编程的基本规则,包括函数的定义与调用,以及控制结构的应用;

  • 提升对Linux环境下文本处理和脚本编程的实际操作能力。 


🌍2. 实验准备

  • 获取 Linu x 镜像文件:下载适用于虚拟机的 Linux 镜像文件,比如 Ubuntu 21.04,从 Ubuntu 官方网站 获取。

  • 安装虚拟化软件:安装 VMware Workstation 或 Virtualbox,两者提供简便的虚拟机管理和配置。

  • 创建 Linux 虚拟机:打开虚拟化软件,按照指引创建新虚拟机。设置内存为 2GB 或更多,其余选项选择 默认值。加载下载好的 Linux 系统 ISO 镜像文件,启动虚拟机完成 Linux 系统安装。


🌍3. 实验内容

1. 试分别用grep、sed和awk实现:对某个脚本文件ifile(比如/etc/profile)进行如下操作:

(1)显示其中的所注释行(含#开始的行,或#号前全是白空格开始的行);

(2)显示去除了所有注释行的内容;

(3)显示所有的(去掉注释和空行)有效行。

解:

1.创建脚本文件

首先需要在终端输入touch SYM.sh创建一个名为SYM脚本文件,创建成功后输入ls可以发现SYM.sh创建成功。

在终端输入vim SYM.sh编写一个简单的脚本程序如下:

  

在终端输入bash -x SYM.sh输出结果包括了注释行和非注释行,如下图

2.使用grep、sed和awk对脚本文件SYM.sh实现:

(1)显示其中的所注释行(含#开始的行,或#号前全是白空格开始的行);

① grep:在终端输入命令grep '^ *#' SYM.sh,命令解释如下:

  • grep:命令行文本搜索工具。
  • ^:表示匹配行的开头。
  • *:表示匹配0个或多个空格。
  • #:表示匹配#字符。
  • SYM.sh:要搜索的文件名。

运行结果为:

② sed:在终端输入命令sed -n '/^\s*#/p' SYM.sh,命令解释如下:

  • sed:流编辑器。
  • -n:表示只输出匹配的行。
  • /^\s*#/p:正则表达式,表示匹配以0个或多个空格开头,紧接着是#号的行,并将其打印出来。
  • SYM.sh:要搜索的文件名。

运行结果为:

  

③ awk:在终端输入命令awk '/^[[:space:]]*#/' SYM.sh,命令解释如下:

  • awk:文本处理工具。
  • /^[[:space:]]*#/:正则表达式,表示匹配以0个或多个空格开头,紧接着是#号的行。
  • SYM.sh:要搜索的文件名。

运行结果为:

(2)显示去除了所有注释行的内容;

① grep:在终端输入命令grep -v '^ *#' SYM.sh,命令解释如下:

  • grep:命令行文本搜索工具。
  • -v:表示显示不匹配的行,也就是去除匹配的行。
  • ^:表示匹配行的开头。
  • *:表示匹配0个或多个空格。
  • #:表示匹配#字符。
  • SYM.sh:要搜索的文件名。

运行结果为:

② sed:在终端输入命令sed '/^\s*#/d' SYM.sh,命令解释如下:

  • sed:流编辑器。
  • /^\s*#/d:正则表达式,表示匹配0个以或多个空格开头,接着是#号的行,并将其删除。
  • SYM.sh:要搜索的文件名。

运行结果为:

③ awk:在终端输入命令awk '!/^[[:space:]]*#/' SYM.sh,命令解释如下:

  • awk:文本处理工具。
  • !/^[[:space:]]*#/:正则表达式,表示不匹配以0个或多个空格开头,紧接着是#号的行。
  • SYM.sh:要搜索的文件名。

运行结果为:

(3)显示所有的(去掉注释和空行)有效行。

① grep:在终端输入命令grep -v -E '^\s*($|#)' SYM.sh,命令解释如下:

  • grep:命令行文本搜索工具。
  • -v:表示显示不匹配的行,也就是去除匹配的行。
  • -E:表示使用扩展的正则表达式。
  • ^\s*($|#):正则表达式,表示匹配空行或以0个或多个空格开头,紧接着是#号的行,并将其删除。
  • SYM.sh:要搜索的文件名。

运行结果为:

② sed:在终端输入命令sed '/^[[:space:]]*#/d;/^$/d' SYM.sh,命令解释如下:

  • sed:流编辑器。
  • /^[[:space:]]*#/d:正则表达式,表示匹配以0个或多个空格开头,紧接着是#号的行,并将其删除。
  • /^$/d:表示匹配空行,并将其删除。
  • SYM.sh:要搜索的文件名。

运行结果为:

③ awk:在终端输入命令awk '!/^[[:space:]]*(#|$)/' SYM.sh,命令解释如下:

  • awk:文本处理工具。
  • !/^[[:space:]]*(#|$)/:正则表达式,表示不匹配空行或以0个或多个空格开头,紧接着是#号的行。
  • SYM.sh:要搜索的文件名。

运行结果为:

2. 设计一个shell程序计算n的阶乘。要求:

(1)从命令行接收参数n;

(2)在程序开始后立即判断n的合法性,即是否有参数,若有,是否为正整数,若非法请给错误提示;

(3)最后输出计算的结果。

解:

创建jiechengsh脚本,输入内容如下:

即:

#!/bin/bash
if [ $# -ne 1 ]; thenecho "错误:缺少参数!"exit 1
fi
n=$1
if ! [[ $n =~ ^[0-9]+$ ]] || [ $n -lt 1 ]; thenecho "错误:参数必须为正整数!"exit 1
fi
fact=1
for (( i=1; i<=$n; i++ )); dofact=$(( $fact * $i ))
done
echo "$n 的阶乘是 $fact"

错误测试运行结果为:

  

输入正整数结果如下:

3. 练习教材P308 “5. 控制结构”中的sh02.sh~sh06.sh

解:

(1)sh02.sh

  

运行结果为:

(2)sh03.sh

运行结果为:

(3)sh04.sh

运行结果为:

(4)sh05.sh

运行结果为:

(5)sh06.sh

运行结果为:

    


🌍4. 实验心得

  1. 掌握grep命令的高效应用: 通过本次实验,我深入了解了grep命令在Linux文本处理中的强大功能。能够熟练使用grep来查找指定模式的字符串,包括查找包含、不包含某个字符串的行,以及通过正则表达式匹配行。这使我在处理大规模文本数据时能够迅速定位所需信息,提高了工作效率。

  2. 熟练应用sed命令进行文本编辑: 通过实践,我掌握了sed命令的流式文本编辑特性,包括替换、删除、插入和追加等操作。能够利用sed对文件进行灵活处理,实现文本中的替换操作、删除指定行、以及去除特定字符。这为我在处理文本数据时提供了更多的选择和便利,增强了对文本内容的掌控能力。

  3. 精通awk命令进行文本分析与报告: 实验使我熟练运用awk命令进行文本分析,输出指定列以及利用内置变量进行更复杂的操作。这让我能够高效地处理结构化文本数据,通过awk命令快速提取所需信息。同时,我对如何在Linux环境下编写bash脚本有了全面的认识,包括基本规则、控制结构、变量定义、条件语句、循环语句和函数的使用,为我进行更复杂的脚本编程奠定了基础。


📝总结

Linux操作系统的领域就像一片未被勘探的信息大海,引领你勇敢踏入开源系统的神秘领域。这是一场独特的学习冒险,从基本概念到系统架构,逐步揭示更深层次的操作系统原理、命令行工具和高级系统管理的奥秘。

渴望挑战Linux操作系统的学习路径和掌握系统管理技术?不妨点击下方链接,一同探讨更多Linux操作系统的奇迹吧。我们推出了引领趋势的💻 Linux专栏:《探秘Linux | 操作系统解密》,旨在深度探索Linux的实际应用和创新。🌐🔍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/325851.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术概述:ARMv8体系结构

John Goodacre, Director Program Management ARM Processor Division, November 2011 背景&#xff1a;ARM体系结构 从ARM精简指令集体系结构提出到现在已经有20多年了&#xff1b;ARMv7系列处理器是在ARMv4基础上设计的&#xff0c;随着ARMv7系列处理器大量应用&#xff0…

在VM下使用Composer完成快照方式的软件制作

Composer允许您构建软件、应用程序、偏好设置文件或是文档的安装包&#xff0c;安装包可以部署到远程电脑或是作为镜像流程的一部分。构建软件包的第一步就是创建包源&#xff0c;根据要打包的软件&#xff0c;Composer允许您监视软件的安装和使用驱动器上已存在的文件来创建包…

Transformer架构和对照代码详解

1、英文架构图 下面图中展示了Transformer的英文架构&#xff0c;英文架构中的模块名称和具体代码一一对应&#xff0c;方便大家对照代码、理解和使用。 2、编码器 2.1 编码器介绍 从宏观⻆度来看&#xff0c;Transformer的编码器是由多个相同的层叠加⽽ 成的&#xff0c;每个…

LLM Agent零微调范式 ReAct Self Ask

前三章我们分别介绍了思维链的使用&#xff0c;原理和在小模型上的使用。这一章我们正式进入应用层面&#xff0c;聊聊如何把思维链和工具使用结合得到人工智能代理。 要回答我们为什么需要AI代理&#xff1f;代理可以解决哪些问题&#xff1f;可以有以下两个视角 首先是我们…

TSINGSEE青犀智能分析网关V4在智慧园区车辆违停检测场景中的应用

一、背景与需求 园区作为企业办公、生产制造的重要场所&#xff0c;主要道路车辆违停等违规行为会对园区的安全造成隐患&#xff0c;并且在上下班高峰期内&#xff0c;由于发现不及时&#xff0c;车辆违停行为会造成出入口拥堵现象&#xff0c;这也成为园区管理的棘手问题。为了…

二叉搜索树/二叉排序树(代码实现)(c++)

BSTree 二叉排序树概念代码部分 BSTree框架查找操作插入操作删除操作**默认成员函数完整代码 BSTree性能分析 二叉排序树概念 二叉搜索树又称二叉排序树&#xff08;BSTree, Binary Search Tree&#xff09;&#xff0c;它或者是一颗空树&#xff0c;或者是具有以下性质的二叉…

DNs服务学习笔记

DNS&#xff1a;域名系统&#xff08;英文&#xff1a;Domain Name System)是一个域名系统&#xff0c;是万维网上作为域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使用户更方便的访问互联网&#xff0c;而不用去记住能够被机器直接读取的IP数串。类似于生活中的11…

计算机毕业设计-----ssm+mysql实现的JavaWeb酒店管理系统

项目介绍 本项目为基于ssmmysql实现的JavaWeb酒店管理系统; 主要功能包括&#xff1a; 管理员登录,收入统计,客房管理,商品管理,客房预订,住宿登记,财务统计,旅客管理,接待对象管理等功能。 环境需要 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上…

Efficient Classification of Very Large Images with Tiny Objects(CVPR2022补1)

文章目录 Two-stage Hierarchical Attention SamplingsummaryOne-stageTwo-Stage内存需求 Efficient Contrastive Learning with Attention Sampling Two-stage Hierarchical Attention Sampling summary 从一个大图像中按照指定的低分辨率比例和位置提取出一个小图块 一阶段…

C#编程-实现继承

C#允许您通过扩展现有类的功能以创建新类来实现继承。 从基类创建派生类 使用以下语法在C#中创建派生类: class <derived_class>:<base_class>{...}确定继承的层次结构 要确定继承层次结构,必须检查派生类与基类之间的关系种类。确保派生类是一种基类。 请考虑以…

基于Springboot的旅游管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的旅游管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

数据结构(JS实现)

目录 链表链表的特点链表中的常见操作单链表append(data)尾部追加新节点toString()输出链表的节点数据插入节点insert(position,data)get(position)获取链表指定位置节点的数据indexOf(data)查找对应数据节点的位置update(position, newData)更新指定位置节点数据removeAt(posi…