• 【missing-semester】The shell



    我的操作环境:Windows11下的WSL2(Ubuntu20.04),之后的所有操作都是基于这个前提的

    shell 是什么

    命令行操作语言,文本界面:The Shell
    功能:以半结构化的方式运行程序(重定向输入、输出)
    Bourne Again Shell,即bash

    shell 怎么用

    windows+rcmd,打开终端,wsl进入Linux子系统
    image.png
    当前用户(dy)在名为"DESKTOP-K1E7FOE"的计算机上,位于"~/classes/missing-semester"目录下
    ~指home目录,$表示当前用户不是root,root用户的提示符是#

    执行基本程序

    date:打印当前日期时间
    echo:打印输入
    image.png
    注意
    shell是通过空格来分割解析命令,将分割结果中第一个单词作为待运行的程序,将后续单词作为程序参数
    如果提供的参数里包含空格或其他特殊字符,需要使用''""引用该参数,或者使用\将空格或特殊字符进行转义
    image.png
    说明:这里shell就将"Hello World"作为mkdir的两个参数,于是新建了两个文件夹
    shell的环境变量
    $PATH即shell接收命令后应该搜索程序的目录
    which 程序名打印出给定程序名执行的文件
    image.png

    Shell中的路径

    /表示文件系统中的根目录,以/开头的路径是绝对路径,其他的为相对路径
    pwd:打印当前路径
    cd:切换路径
    .:表示当前目录
    ..:父级目录
    image.png
    image.png
    ls:展示目录内容,默认展示当前目录
    --help:当前命令的使用说明
    image.png
    image.png
    ls-l打印结果说明:
    第一个d说明当前行展示的为一目录
    紧接着的三个字母组每个组由三个字母组成(rwx),分别指文件所有者,所属组(用户)和其他人对当前文件拥有的权限
    -表示没有指定权限
    w:写权限,修改该文件夹,添加或者删除其中的文件
    x:执行权限,针对文件可执行,针对文件夹即是搜索。举个例子,当一个用户想要进入一个文件夹时,他必须拥有该文件夹及其父文件夹上的x搜索权限
    r:读权限,针对文件夹即是使用ls命令等展示文件夹内容

    mv:修改文件名/移动文件
    image.png

    cp:复制文件
    image.png

    mkdir:新建一个文件夹
    image.png

    man 程序名:查询程序的使用手册

    重定向输入输出

    shell中每个程序都有一个input stream和一个output stream,默认情况下input和output均为terminal,即从键盘获得input,在屏幕上打印output
    使用重定向运算符
    > file:将output重定向到file,>>表示追加内容
    < file:将input重定向到file
    image.png
    cat:连结文件,接收文件名为参数,将文件内容打印到其output stream

    管道pipe

    |
    pipe的亮点:使用一个程序链,将shell中一个program的output作为另一个program的input
    image.png

    说明:
    第一个命令将根目录下ls -l的最后一行打印出来了
    第二个命令将hitwh.edu.cnresponse的content-length字段内容打印出来了

    root用户的使用

    sudo su:输入密码切换为root用户进行操作
    在这一部分的讲解中,the teacher使用root用户修改挂载在/sys下系统文件修改如屏幕亮度的硬件内核参数。但由于Windows子系统的Linux不提供此功能,这里将不进行操作演示
    image.png
    说明:这条命令不能执行的原因在于程序连接是由shell来做的,而非某个程序。这条命令在shell看来是将sudo echo 3的output写到brightness中,但在写入之前shell需要打开brightness文件,打开文件时,shell的权限是当前的user不是root因而无法打开
    image.png
    说明:tee:读取input显示在终端和写入指定的文件中,这里即是将echo的output打印在屏幕上并输出到brightness文件中

    课后练习

    1. 查看当前使用的shell
      image.png
    2. /tmp文件夹下创建一个名为missing的新文件夹
      image.png
    3. 查看touch命令的使用
      image.png
    4. 使用 touchmissing文件夹下创建一个名为semeter的新文件
      image.png
    5. 将下面的内容写入该文件,一次写一行
    #!/bin/sh
    curl --head --silent https://missing.csail.mit.edu
    
    • 1
    • 2

    image.png
    不知道用cat怎么处理第一行,直接vim
    ps:自己开始的时候用错了命令,cat是将指定文件内容输出,echo才能将指定内容输出
    正确的姿势:
    image.png
    说明
    bash中的单引号(‘’)和双引号(“”)是不同的

    单引号('):在单引号内的内容会被当作纯文本处理,不会对其中的变量、命令等进行解析
    双引号("):在双引号内的内容会被当作命令或变量来解析、

    举个例子:
    image.png

    1. 输入semester脚本路径以执行该文件
      image.png
      通过ls -l查询发现其没有x权限
    2. 使用sh解释器执行该semester文件
      image.png
    3. 使用man查看chmod命令的使用
      image.png
    4. 使用chmod命令修改semester文件的模式位使得能够用./semester来执行
      这里采用的方案是chmod += rx semester即给所有用户添加读r和执行x的权限
      另外还可以使用 chmod 555 semester达到同样的效果

    在Linux系统中,文件或目录的权限通常以三位八进制数表示,每一位数字分别代表所有者、所属组和其他用户的权限

    image.png

    Shebang: #!这个符号标识了当前文件应该用什么解释器执行,比如这里的Shebang标识#!bin/sh,则shell知道应该去找到sh执行此脚本,并将此脚本作为sh程序的input,而此Shebang行会被interpreter忽略,因为#表示注释

    1. 使用 |> ,将 semester 文件输出的最后更改日期信息,写入主目录下的 last-modified.txt 的文件中
      我的失败操作
      image.png
      别人的正确解法
      image.png
    2. 写一段命令来从 /sys 中获取笔记本的电量信息
      image.png

    参考资料

    1. MIT-Missing-Semester chapter1讲义
    2. MIT-Missing-Semester chapter1学习视频
    3. Shebang
    4. MIT-Missing-Semester chapter1 exercise solution
  • 相关阅读:
    YOLOv8-Pose推理详解及部署实现
    面对多种信号干扰,如何实现高效干扰测试?
    桥接模式
    JSNet: Joint Instance and Semantic Segmentation of 3D Point Clouds
    直播交友app开发_1对1视频直播聊天APP定制_语音直播交友软件源码
    Java---06 方法
    00后程序员摸爬滚打近一年,为学弟学妹们总结出了以下 7 条人生建议(建议收藏)
    Spring中的响应式编程实践:从Spring MVC到WebFlux的转变
    【论文精读】Attention is all you need
    Redis主从配置和哨兵模式
  • 原文地址:https://blog.csdn.net/m0_61819793/article/details/134421213