🪐1 初识Linux OS
Linux是一种开源的Unix-like操作系统内核,它是基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。Linux内核最初是由芬兰程序员Linus Torvalds在1991年创建的,之后成为自由软件和开源社区的一个主要项目。
以下是Linux操作系统的一些主要特点和组成部分:
- 内核(Kernel): Linux内核是操作系统的核心,它管理系统资源,如处理器、内存、设备驱动程序等。Linus Torvalds最初编写了Linux内核,它是Linux操作系统的基础。
- Shell(命令解释器): Linux操作系统使用命令行界面(CLI),用户与系统交互通过Shell。用户可以通过输入命令执行各种任务,管理文件、进程、权限等。常见的Shell包括Bash(Bourne Again SHell)和Zsh。
- 文件系统: Linux支持多种文件系统,包括Ext4、XFS、Btrfs等。文件系统负责管理存储设备上的文件和目录,以及文件的权限、所有权等信息。
- 用户界面: 虽然Linux以CLI为主,但也支持图形用户界面(GUI)。常见的Linux桌面环境有GNOME、KDE、XFCE等,它们提供了直观的用户体验。
- 软件包管理系统: 大多数Linux发行版都有自己的软件包管理系统,用于安装、更新和删除软件。常见的包管理工具有APT(Debian/Ubuntu)、YUM(Red Hat/CentOS)、Pacman(Arch Linux)等。
- 网络功能: Linux具有强大的网络功能,支持各种网络协议和服务。它可以作为服务器运行各种网络服务,如Web服务器(Apache、Nginx)、邮件服务器(Postfix、Sendmail)、文件服务器(Samba)等。
- 多用户和多任务: Linux是一个多用户系统,多个用户可以同时访问同一台机器。它也是一个多任务系统,可以同时运行多个进程。
- 安全性: Linux以安全性而闻名,系统管理员可以设置用户权限、访问控制列表(ACLs)等来确保系统的安全性。
- 开源和自由: Linux是开源软件,其源代码可以被任何人查看、修改和分发。大多数Linux发行版是免费提供的,用户可以自由选择、使用和分发。
- 发行版(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. 实验心得
- 掌握grep命令的高效应用: 通过本次实验,我深入了解了grep命令在Linux文本处理中的强大功能。能够熟练使用grep来查找指定模式的字符串,包括查找包含、不包含某个字符串的行,以及通过正则表达式匹配行。这使我在处理大规模文本数据时能够迅速定位所需信息,提高了工作效率。
- 熟练应用sed命令进行文本编辑: 通过实践,我掌握了sed命令的流式文本编辑特性,包括替换、删除、插入和追加等操作。能够利用sed对文件进行灵活处理,实现文本中的替换操作、删除指定行、以及去除特定字符。这为我在处理文本数据时提供了更多的选择和便利,增强了对文本内容的掌控能力。
- 精通awk命令进行文本分析与报告: 实验使我熟练运用awk命令进行文本分析,输出指定列以及利用内置变量进行更复杂的操作。这让我能够高效地处理结构化文本数据,通过awk命令快速提取所需信息。同时,我对如何在Linux环境下编写bash脚本有了全面的认识,包括基本规则、控制结构、变量定义、条件语句、循环语句和函数的使用,为我进行更复杂的脚本编程奠定了基础。
📝总结
Linux操作系统的领域就像一片未被勘探的信息大海,引领你勇敢踏入开源系统的神秘领域。这是一场独特的学习冒险,从基本概念到系统架构,逐步揭示更深层次的操作系统原理、命令行工具和高级系统管理的奥秘。