当前位置: 首页 > news >正文

Missing Semester Class1:course overview and introduction of shell

Missing Semester Class1:course overview and introduction of shell

    • 一、Shell 环境分类(不同系统默认解释器)
    • 二、Shell 基础内置命令详解
      • 1. date — 查看系统日期时间
        • 作用
        • 常用拓展用法
      • 2. echo — 内容打印输出
        • 基础规则
        • 错误案例解析
        • 拓展常用用法
      • 3. man — 查看命令官方完整手册
        • 作用
        • 手册翻页操作
        • 轻量化替代方案
      • 4. cd — 切换工作目录(核心路径概念)
        • 两个路径定义
        • 目录简写符号
        • 复杂路径示例拆解
        • Tab 自动补全技巧
      • 5. PATH 环境变量 + which 命令查询
        • PATH 是什么
        • 查看 PATH 内容
        • which 命令:查找命令真实路径
      • 6. ls — 列出目录内文件、文件夹
    • 三、文件处理专项命令(文本查看、过滤、排序、替换、检索)
      • 7. cat — 读取并输出文件全部内容
        • 基础用法
        • 拓展小用法
      • 8. sort — 按行文本排序
      • 9. uniq — 去除连续重复行
      • 10. head / tail 截取文件首尾内容
        • head:查看文件开头
        • tail:查看文件末尾(日志排查高频命令)
      • 11. grep — 文本关键词搜索匹配
      • 12. sed — 流式行编辑器(批量替换主力工具)
        • 重要区分
      • 13. find — 递归查找文件
        • 基础语法
        • -exec 进阶用法:找到文件后批量执行命令
      • 14. awk — 文本按列处理利器
      • 15. 管道符 `|`
      • 16. 重定向符号 `>` `<` `>>`
      • 17. if / then 条件判断语句(Shell 脚本分支)
      • 18. for / while 循环语句
        • while 循环(满足条件就持续循环)
        • for 循环(遍历列表迭代)
      • 19. Shell 脚本程序(.sh 文件)
      • 20. Shebang 解释器声明 `#!`
    • 四、补充通用操作知识点
  • 写在最后

本文是让ai在我关于MIT missing semester课程第一课的笔记上进行更改和润色而写成的,内容完整覆盖了第一课视频中所讲的所有内容。

一、Shell 环境分类(不同系统默认解释器)

Shell 本质是命令行解释器,接收用户输入指令并传递给操作系统内核执行,不同操作系统默认 Shell 不一样:

  1. Linux 系统:绝大多数发行版默认使用Bash(Bourne Again Shell),兼容性最强,学习主流选择
  2. macOS 系统:新版 macOS 默认是Zsh(Z Shell);旧版 macOS 预装 Bash,语法绝大部分和 Bash 通用
  3. Windows 系统:原生终端为PowerShell,语法、命令参数和 Bash 差异极大,不适合直接学习 Linux Shell

[!重要建议]
若你使用 Windows 系统学习 Shell,强烈推荐安装WSL(适用于 Linux 的 Windows 子系统),可以在 Windows 内部运行完整 Linux 环境,命令、语法和原生 Linux 完全一致
微软官方安装文档(中文):https://learn.microsoft.com/zh-cn/windows/wsl/install


二、Shell 基础内置命令详解

1. date — 查看系统日期时间

作用

输出当前系统的日期、小时、分钟、秒、星期等完整时间信息。

常用拓展用法
date# 直接输出默认格式完整时间date+%Y-%m-%d# 自定义格式:年-月-日date+%H:%M:%S# 自定义格式:时:分:秒date-s"2026-07-02 20:00:00"# root权限修改系统时间

2. echo — 内容打印输出

基础规则
  1. 后跟多个参数,默认以空格分隔打印
  2. 单引号' ':原样输出所有内容,不解析变量、转义符
  3. 双引号" ":可以解析变量、部分转义字符
  4. 反斜杠\转义符:取消紧跟字符的特殊含义,当作普通文本
错误案例解析
echo'jon's world'

问题原因:第一个单引号从jon开始,jon中间的'提前闭合字符串,后半段s world'语法错乱,终端进入等待输入状态。
正确写法:

echo"jon's world"echojon\'s\world
拓展常用用法
echo$PATH# 打印环境变量echo-n"不换行输出"# -n 参数:输出末尾不自动换行echo-e"第一行\n第二行"# -e 开启转义解析,\n 代表换行

3. man — 查看命令官方完整手册

作用

man 命令名调出该命令最全面的官方英文帮助文档,包含参数、语法、示例、版权说明。

手册翻页操作
  • 空格:向下翻一页
  • 回车:向下一行
  • q:退出 man 手册界面
  • /关键词:向下搜索指定关键词
轻量化替代方案

命令名 --help:输出精简中文/英文帮助,适合快速查阅常用参数,阅读成本更低
示例:ls --help

4. cd — 切换工作目录(核心路径概念)

两个路径定义
  1. 绝对路径:永远以根目录/开头,从系统最顶层目录完整定位,无论当前在哪都能精准跳转
    例:cd /usr/local/bin
  2. 相对路径:不以/开头,基于当前所在目录进行跳转
    例:当前在/usr,执行cd local/bin等价于cd /usr/local/bin
目录简写符号
  • .单个点:当前所在目录
  • ..两个点:当前目录的上一级父目录
  • ~波浪号:当前登录用户家目录(简写,最常用)
  • -横杠:回到上一次所在目录
复杂路径示例拆解

当前位置在系统根目录/

cdbin/../bin/././../bin

拆解运算:
/bin → / → /bin → /bin → /bin → / → /bin
最终执行完毕,当前目录定位到/bin

Tab 自动补全技巧

输入部分文件夹/命令,按一次Tab自动补全唯一匹配内容;连续按两次Tab,列出所有匹配候选项,大幅减少手动输入拼写错误。

5. PATH 环境变量 + which 命令查询

PATH 是什么

PATH 是系统内置全局环境变量,内部存储一组用冒号:分隔的目录列表。
当你直接输入一个命令(如datels)回车执行时,系统会按先后顺序遍历 PATH 内所有目录,查找对应可执行文件,找到第一个匹配文件就运行,后续同名文件不再检索。

查看 PATH 内容
echo$PATH
which 命令:查找命令真实路径

语法:which 命令名称
示例:

whichdate# 输出示例:/run/current-system/sw/bin/date# 也可以直接使用完整路径执行程序,效果等同直接输入 date/run/current-system/sw/bin/date

补充:如果系统多个目录存在同名命令,PATH 靠前目录的程序优先级更高

6. ls — 列出目录内文件、文件夹

无参数默认查看当前目录所有内容,搭配参数实现不同展示效果:

ls# 简略列出文件名ls-l# 长格式:权限、所有者、大小、修改时间、文件名ls-a# 显示所有文件,包含隐藏文件(以 . 开头的文件默认隐藏)ls-lh# 人性化单位展示文件大小(KB/MB)ls/etc# 查看指定目录 /etc 内容

三、文件处理专项命令(文本查看、过滤、排序、替换、检索)

7. cat — 读取并输出文件全部内容

基础用法
cattest.txt# 一次性打印整个文件所有内容到终端catfile1 file2# 连续打印多个文件内容

适用场景:小文件查看;超大文件不推荐,会刷屏。

拓展小用法
cat>new.txt# 新建文件,键盘录入内容,Ctrl+D 结束输入

8. sort — 按行文本排序

默认以ASCII 字母顺序逐行升序排序,不会修改原文件,仅输出排序结果。

sorttest.txtsort-nnum.txt# -n 参数:按照数字大小排序(避免 10 排在 2 前面)sort-rtest.txt# -r 倒序排序

9. uniq — 去除连续重复行

⚠️ 关键前提:uniq只能删除连续相邻重复行,非连续重复无法自动去重;通常搭配 sort 使用。

uniqtest.txtsorttest.txt|uniq# 先排序,再全局去重(最常用组合)uniq-ctest.txt# -c 统计每行重复次数

10. head / tail 截取文件首尾内容

head:查看文件开头

语法:head -n 行数 文件名

headtest.txt# 默认前10行head-n5test.txt# 查看前5行
tail:查看文件末尾(日志排查高频命令)
tailtest.txt# 默认末尾10行tail-n8test.txt# 查看末尾8行tail-flog.txt# -f 实时追踪文件新增内容,查看实时日志,Ctrl+C 退出

11. grep — 文本关键词搜索匹配

作用:在文件中检索匹配指定字符串/正则表达式,打印所有命中行
基础语法:grep "匹配关键词" 文件名

grep"error"app.log# 查找包含 error 的行grep-i"error"app.log# -i 忽略大小写匹配grep-v"comment"test.txt# -v 反向匹配:输出不包含关键词的行

12. sed — 流式行编辑器(批量替换主力工具)

核心用途:批量修改、替换文件内容,默认仅输出修改结果,不改动原文件
通用替换语法:
sed 's/原字符串/新字符串/修饰符' 文件名

示例解析:

sed's/Windows/Linux/g'open.txt
  • s/xxx/xxx/:代表替换模式
  • g全局修饰符:本行所有匹配内容全部替换;不加 g 只替换每行第一个匹配词
重要区分
  1. sed 替换规则内部支持正则表达式
  2. 文件路径匹配不能用正则,只能使用 glob 通配符(*?
  3. -i参数直接修改原文件:sed -i 's/a/b/g' test.txt

13. find — 递归查找文件

根据文件名、大小、时间等条件遍历查找文件,默认自动递归遍历所有子目录

基础语法

find 查找起始路径 筛选条件

find/home-name"*.txt"# 在 /home 下查找所有后缀 .txt 文件find.-maxdepth1-name"*.sh"#--maxdepth限制递归层级=1,只查当前目录,不进子文件夹
-exec 进阶用法:找到文件后批量执行命令

格式:find 路径 条件 -exec 操作命令 {} \;
示例:查找到所有.log文件并删除

find./-name"*.log"-execrm{}\;

输入man find查看完整复杂筛选参数。

14. awk — 文本按列处理利器

工作逻辑:逐行读取文件 → 默认空格/制表符切割字段 → 按列做判断、运算、输出
基础通用语法:
awk '判断条件{执行动作}' 文件名
内置变量:$1第一列、$2第二列、$NF最后一列
示例:打印文件每行第1、第3列

awk'{print $1,$3}'test.txt

15. 管道符|

数据流转接符号,核心逻辑:把管道左侧命令的输出结果,直接当作右侧命令的输入数据
经典组合示例:查看日志含 error 的后10行

grep"error"app.log|tail-n10

可以无限链式拼接多个命令,实现复杂数据筛选处理。

16. 重定向符号><>>

  1. >标准输出重定向:覆盖写入
    将命令输出存入文件,清空文件原有全部内容
    date>thedata.txt
  2. >>追加重定向:末尾追加写入
    内容写到文件末尾,不会覆盖原有数据
    echo新增一行>>thedata.txt
  3. <输入重定向:把文件内容作为命令输入源
    sort<test.txt

17. if / then 条件判断语句(Shell 脚本分支)

语句分隔习惯用分号;简化单行写法,完整语法结构:

if判断条件;then满足条件执行代码else不满足条件执行代码fi

条件两种写法:test 表达式[ 表达式 ](中括号前后必须带空格)
示例判断文件是否存在:

if[-ftest.txt];thenecho文件存在elseecho文件不存在fi

18. for / while 循环语句

while 循环(满足条件就持续循环)
while[条件判断];do循环体内执行语句done
for 循环(遍历列表迭代)
for变量in遍历内容;do循环体内执行语句done

示例批量遍历打印文件名:

forfilein*.txt;doecho$file;done

19. Shell 脚本程序(.sh 文件)

批量多条频繁执行的命令,统一写入后缀为.sh的文本文件,一次性批量运行,称为 Shell 脚本。
编写流程:

  1. 新建test.sh,写入多条 shell 命令
  2. 赋予执行权限:chmod +x test.sh
  3. 运行脚本:./test.sh

20. Shebang 解释器声明#!

必须写在脚本第一行开头,格式#!解释器路径,作用:告诉操作系统使用哪一个解析器运行本脚本。
最常用写法:

#!/bin/bash

如果省略该行,系统默认使用当前终端 Shell 解析执行,跨环境容易出现语法兼容问题。


四、补充通用操作知识点

  1. Ctrl + C强制终止
    终止当前前台正在运行的程序、卡死命令、死循环脚本,回到命令行输入提示符。

  2. 文件权限与 chmod 命令
    Linux 文件默认存在读写执行权限,想要直接./文件名运行脚本,必须拥有执行权限;
    修改权限命令示例:

    chmod+x test.sh# 给文件添加执行权限chmod755test.sh# 数字方式精细化设置权限

写在最后

单纯的看视频和这份笔记在执行具体操作显然是不够的,推荐阅读课程相关的讲义和完成相关的练习(会在下一次更新),并充分利用好ai,多写多操作,只有在实践中才能掌握这些工具。

http://www.jsqmd.com/news/1112605/

相关文章:

  • AI效率工具产品化:用户访谈驱动的PMF验证方法
  • Three.js 本地模型加载教程
  • 基于HuggingFace生态的Zero_NLP项目实战指南:从Transformer模型微调到中文文本分类与NER任务的深度解析
  • 一个类,一次注册,搞定 2 个工具 + 1 个 Skill + 1 个 Sub-Agent
  • 如何3分钟快速上手开源炉石传说脚本:Hearthstone-Script终极指南
  • 批处理策略的数学建模:从静态 Batching 到 Continuous Batching 的吞吐分析
  • 【会员专享数据】1979—2025年中国5km分辨率逐年土壤湿度指数栅格数据
  • 音乐文件NCM怎么改成MP3?网易云歌曲ncm格式转换mp3方法
  • 设计 Token 自动同步:别让颜色停在设计稿里
  • 机器学习数据预处理:标签编码与连续变量处理实战
  • 大数据毕业设计选题指南:技术前沿与实战要点
  • 代价函数:业务价值的数学编码与实战设计指南
  • 用 AI 工具提升刷题效率:实验要有指标,别只看爽感
  • orcale的锁模式
  • 【 Elasticsearch】安装配置 GitHub Copilot CLI 插件
  • 科研AI工具全家桶实战测评:从部署到工作流整合的完整指南
  • 持续集成对于微服务的意义:拆之前要先解决合的问题
  • 为什么AI可以帮助任何有具体专业性且爱思考的人成立OPC
  • AI驱动的Three.js渲染优化:霓虹城市的智能帧率管理
  • 航天电路板为啥不能出一点错?
  • Agent越来越智能,但我发现软件工程仍然很重要
  • Prompt 版本管理:提示词也要像代码一样可回滚
  • AI Agent 编排落地:别让流程像即兴 Solo 一样失控
  • 2025-6-15模拟测验
  • 高压安全防护设计:BMS 过压/过流/过温/绝缘检测原理与硬件保护机制
  • 从 Paper 到产品原型:只取能验证商业假设的部分
  • KNN算法实战:从数据预处理到模型调优全解析
  • WebAssembly AI 插件沙箱:插件能跑,更要能管
  • 智慧营区部队体能训练考核系统:有哪些优点和缺点
  • lanceDB数据胡