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

发布时间:2024年01月06日

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

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

文章来源:https://blog.csdn.net/m0_57532432/article/details/134900334
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。