Missing Semester Class1:course overview and introduction of shell
Missing Semester Class1:course overview and introduction of shell
在编程的世界里,我们常常专注于学习算法、框架和语言特性,却忽略了最基础的“生存工具”——如何高效地与计算机交互。MIT 的 Missing Semester 系列课程正是为此而生,它帮助我们补上那些“缺失的学期”。Class1 聚焦于 shell(命令行环境)的核心概念与使用技巧,从基础操作到高级玩法,逐步构建你的命令行素养。本文将带你从零开始,逐步深入,掌握 shell 的精髓。### 什么是 Shell?Shell 是计算机的一个“中间人”程序,它接收用户的输入命令,并将其传递给操作系统执行。你可以在终端(Terminal)中运行 shell,输入 ls 列出文件、cd 切换目录,或 echo 输出文本。Shell 的核心价值在于自动化和高效——通过组合命令,你能完成复杂的任务,而无需图形界面。常见的 shell 有 Bash、Zsh 和 Fish。本课程以 Bash 为例,但概念通用。我们将从最简单的命令开始,逐步构建技能树。### 基础操作:导航与文件管理首先,你需要掌握几个核心命令:- pwd:打印当前工作目录。- ls:列出目录内容。- cd:切换目录。- mkdir 和 rmdir:创建和删除空目录。- touch、cp、mv、rm:创建、复制、移动和删除文件。让我们通过一个简单的代码示例来实践:bash# 示例1:创建目录和文件,并浏览pwd # 查看当前目录,例如 /home/usermkdir my_project # 创建新目录cd my_project # 进入目录touch readme.txt # 创建空文件ls -la # 列出所有文件(包括隐藏文件)和详细信息cp readme.txt backup.txt # 复制文件mv backup.txt old.txt # 重命名文件rm old.txt # 删除文件cd .. # 返回上级目录rmdir my_project # 删除空目录(注意:目录必须为空)运行这段代码,你会看到文件创建、复制、移动和删除的全过程。注意 ls -la 中的 -l 参数显示详细信息,-a 显示隐藏文件。这些参数是 shell 命令的“调味料”,让功能更强大。### 进阶内容:管道与重定向当你能独立执行命令后,下一步是让命令“协同工作”。管道(|) 和重定向(>, <, >>) 是实现这一目标的关键。- 重定向:将命令的输出写入文件(> 覆盖,>> 追加),或用文件内容作为输入(<)。- 管道:将一个命令的输出直接传递给另一个命令作为输入,形成数据流。例如,查找当前目录中最大的文件:bash# 示例2:使用管道计算文件大小并排序ls -l # 列出文件详细信息# 输出示例:-rw-r--r-- 1 user user 1234 Apr 10 12:34 file.txt# 我们想提取第5列(文件大小),然后排序ls -l | awk '{print $5}' | sort -n | tail -1# 解释:# awk '{print $5}' 提取每行的第5列(文件大小)# sort -n 按数值排序# tail -1 取最后一行(最大值)这个命令链展示了管道的威力:ls -l 的输出被管道传递给 awk,awk 处理后的结果再传给 sort,最后 sort 的结果给 tail。无需中间文件,一气呵成。此外,重定向常用于日志记录。例如:bashecho "Starting script..." > log.txt # 将输出写入log.txt(覆盖)echo "Processing data..." >> log.txt # 追加到log.txtcat < log.txt # 读取log.txt内容并显示### 高级用法:环境变量与脚本Shell 的真正力量在于脚本化。通过编写 .sh 文件,你可以将一系列命令打包成可重复执行的程序。#### 环境变量环境变量是 shell 中存储值的“容器”,例如 PATH 变量决定可执行文件的搜索路径。你可以用 export 创建变量,并用 $ 引用:bash# 设置变量并输出MY_NAME="Alice"echo "Hello, $MY_NAME" # 输出 Hello, Alice#### 编写简单的 Shell 脚本创建一个文件 backup.sh,实现备份功能:bash#!/bin/bash# 这是一个备份脚本,将当前目录下的所有 .txt 文件复制到 backup 文件夹# 用法:./backup.shmkdir -p backup # 创建 backup 目录(如果不存在)for file in *.txt; do # 遍历所有 .txt 文件 cp "$file" "backup/$file" # 复制文件到 backup 目录 echo "Backed up: $file"doneecho "All done!"运行前需要赋予执行权限:chmod +x backup.sh,然后执行 ./backup.sh。这个脚本展示了循环、变量和条件判断(本例中未显式使用 if,但 for 循环是基础)。#### 更高级的技巧:条件与函数你可以用 if、while 等控制流构建复杂逻辑:bash#!/bin/bash# 检查文件是否存在,如果存在则删除并提示FILE="temp.txt"if [ -f "$FILE" ]; then echo "Removing $FILE..." rm "$FILE"else echo "$FILE does not exist."fi函数定义让脚本更模块化:bashgreet() { echo "Hello, $1!" # $1 表示第一个参数}greet "World" # 调用函数,输出 Hello, World!### 总结通过本文,我们从 shell 的基础操作(导航、文件管理)出发,逐步深入到管道、重定向,最终学习了环境变量和脚本编写。Shell 不仅是一个命令行工具,更是一种语言,它让你能够以文本形式与计算机通信,实现自动化任务。Missing Semester Class1 的内容,正是这些被日常课程忽略的“生存技能”。掌握 shell 需要实践:尝试在终端中组合命令,编写简单的备份或清理脚本,探索 grep、find、sed 等强大工具。记住,shell 的哲学是“简洁、组合、自动化”。每一次敲击键盘,都是在构建更高效的开发环境。现在就打开终端,开始你的命令行之旅吧!
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)