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

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



🪐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 ]; then
    echo "错误:缺少参数!"
    exit 1
fi
n=$1
if ! [[ $n =~ ^[0-9]+$ ]] || [ $n -lt 1 ]; then
    echo "错误:参数必须为正整数!"
    exit 1
fi
fact=1
for (( i=1; i<=$n; i++ )); do
    fact=$(( $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操作系统的领域就像一片未被勘探的信息大海,引领你勇敢踏入开源系统的神秘领域。这是一场独特的学习冒险,从基本概念到系统架构,逐步揭示更深层次的操作系统原理、命令行工具和高级系统管理的奥秘。


目录
相关文章
|
12天前
|
存储 Shell Linux
【攻防世界】unseping (反序列化与Linux bash shell)
【攻防世界】unseping (反序列化与Linux bash shell)
|
13天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
21 0
|
13天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
28 0
|
14天前
|
Web App开发 Java Linux
Linux之Shell基本命令篇
Linux之Shell基本命令篇
Linux之Shell基本命令篇
|
14天前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构
|
14天前
|
Linux 开发者
Linux文件编程(open read write close函数)
通过这些函数,开发者可以在Linux环境下进行文件的读取、写入和管理。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
84 4
|
15天前
|
Shell Linux
【Linux】12. 模拟实现shell
【Linux】12. 模拟实现shell
27 2
|
20天前
|
传感器 Linux API
嵌入式Linux串口编程简介
嵌入式Linux串口编程简介
16 1
|
21天前
|
Linux 测试技术 C语言
【Linux】应用编程之C语言文件操作
【Linux】应用编程之C语言文件操作
|
21天前
|
Shell Linux
Linux的shell入门教程shell脚本入门教程
Linux的shell入门教程shell脚本入门教程
15 0