missing-semester-1

敖炜 Lv5

前言

接下来开始更新“The Missing Semester of Your CS Education”。课程链接

课程概览

动机

我们希望教会您如何挖掘现有工具的潜力,并向您介绍一些新的工具。也许我们还可以促使您想要去探索(甚至是去开发)更多的工具。 我们认为这是大多数计算机科学相关课程中缺少的重要一环。


课程结构

  • 十一个时长一小时左右的讲座

The Shell

基础命令

  1. 参数是由空格分隔的,参数中如果有空格,可以用双引号或者单引号分隔开,也可以使用转义字符如下
    1
    echo Hello\ World
  2. shell确定程序位置的方法:环境变量。输入程序时,在环境变量存储的路径中进行搜索,并运行
  3. shell提示符后面不仅能运行带有参数的程序,还可以执行语句、定义函数、变量
  4. path是一种描述计算机上文件位置的方式
    • 在Linux和macOS上,路径由斜杠(正斜杠“/”)分隔。所有内容都属于根命名空间,因此所有路径都以斜杠或绝对路径开头
    • 在Windows上,路径通常用反斜杠“\”分隔。在Windows,上,**每个分区都有一个根目录,每个驱动器都有一个单独的路径结构
  5. 绝对路径:能完全确定文件位置的路径
  6. 相对路径:相对于你当前所在的位置的路径
  7. 下面命令可以得到当前工作目录
    1
    pwd
    8.特殊的目录

    . 表示当前目录
    .. 表示父目录

  8. 查看当前目录中有哪些内容
    • 查看当前目录
      1
      ls
    • 查看指定路径
      1
      ls path
  9. 两个特殊符号
    • 波浪符“”会将你带到你的主目录中。可利用来表示路径
    • 短横线“-”,切换到你之前所在的目录
      1
      cd -
  10. 大多数程序都有–help选项,它会打印出大量该命令的帮助信息。usage中的“…”表示零个/一个或多个,“[]”表示可选项
  11. ls -l
    ls -l
    • 开头的d表示是一个目录
    • 之后的字母表示为该文件设置的权限
      • 每三个字符为一组,分别是读取、写入和执行
        • 对于文件,就是读取、写入和执行
        • 对于目录,读取对应你是否被允许看到这个目录中的文件;写入是指你是否被允许在该目录中重命名、创建或删除文件;执行是指搜索权限,意味着你是否被允许进入该目录

          如果你有对某个文件的写入权利,但没有当前目录的写入权利,那么你无法删除该文件

      • 第一组三个字符是为文件的所有者设置的权限
      • 第二组三个字符是为拥有该文件的组设置的权限
      • 最后一组三个字符是其他人的所有权限
  12. move or mv
    • mv需要两个路径,一个旧路径一个新路径
      • 重命名文件:更改文件名但不更改目录
      • 移动文件到完全不同的目录中:提供当前文件的路径和目标文件的路径
  13. cp
    • cp需要两个路径,一个要复制的文件路径,一个目标路径
  14. rm
    • rm需要一个文件的路径,对该文件进行删除

      在Linux上,默认情况下,删除不会递归进行,因此不能删除一个目录
      可使用“**-r**”标志进行递归删除,将删除给定路径下所有内容

  15. rmdir
    • 删除一个目录,但是只能删除空目录
  16. mkdir
    • 创建一个新目录,创建的目录名中若有空格,需要用到引号或转义符
  17. man
    • 这个程序以另一个程序的名称作为参数,并给出使用手册
  18. Ctrl+L
    • 清除终端并回到顶部
  19. cat
    • 打印文件内容
    • 将输入和输出连在一起
    • >>表示追加内容而不是覆盖内容
  20. tail
    • 打印输入的最后n行
    • -n1或–line(s)=1
  21. grep
    • 可以在输入流中搜索指定的关键字
  22. tee
    • 将输入内容写入一个文件,同时也输出到标准输出

  1. 每个程序都有两个主要的流
    • 输入流:默认情况下来自键盘
    • 输出流:每当程序打印输出时,输出的内容就会传递到这个流中
  2. shell提供了重定向流的方法,改变程序的输入/输出指向
    • 最简单的方法:使用尖括号“<>“符号。

      <表示将这个程序的输入重定向为这个文件的内容
      >表示将前面程序的输出重定向到这个文件中

    • 管道“|”符号:将左边程序的输出作为右边程序的输入

      管道符号不只适用于文本数据,也可以对图像等东西使用它们,可用一个程序,对输入的二进制图像作一些处理,输出处理后的二进制图像


如何更有趣的、更强大的使用终端

  1. root用户
    • 类似于windows上的管理员用户,
    • 用户ID为0
    • 可以在系统上做任意想做的事情,即使某个文件对任何人都不可读或不可写
    • 大多数时候你不以root用户运行
    • sudo程序:以root用户权限运行程序
      1
      sudo 命令
    • “#”代表以root身份运行,“$”代表不是以root身份运行
    • 切换到root用户
      1
      sudo su
    • 退出root用户
      1
      exit
    • 修改内核参数,可设计事件驱动的变化
  2. 打开文件
    • 以合适的方式打开文件
      1
      xdg-open filename

展望

下节课

  • 如何自动化执行这些任务
  • 如何编写脚本来运行一些程序
  • 如何在终端中处理条件和循环
  • 如何运行一个程序直到它出错:用于测试

习题

有些习题没有太大难度,就不一一列出了

用touch创建文件

  • touch可以改变文件访问和修改的时间戳,当指定文件不存在时,可以创建文件
    1
    touch semester

将以下内容一行一行地写入semester文件

#!/bin/sh
curl –head –silent https://missing.csail.mit.edu

  • #在Bash中表示注释,而!即使被双引号包裹也有特殊含义。单引号则不一样
1
2
echo '#!/bin/sh' > semester
echo curl --head --silent https://missing.csail.mit.edu >> semester

使用chmod命令改变权限,使./semester能够成功执行,不要使用sh semester来执行程序。

  • 您的shell是如何知晓这个文件需要使用sh来解析呢?参见:shebang
    1
    chmod 777 semester

使用|和>,将semester文件输出的最后更改日期信息,写入主目录下的last-modified.txt文件中

1
./semester | grep last-modified > ~/last-modified.txt

写一段命令来从/sys中获取笔记本的电量信息,或者台式机CPU的温度

1
cat /sys/class/power_supply/BAT0/capacity
  • 标题: missing-semester-1
  • 作者: 敖炜
  • 创建于 : 2023-06-29 18:36:15
  • 更新于 : 2024-04-19 09:32:09
  • 链接: https://ao-wei.github.io/2023/06/29/missing-semester-1/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论