missing-semester-1
前言
接下来开始更新“The Missing Semester of Your CS Education”。课程链接
课程概览
动机
我们希望教会您如何挖掘现有工具的潜力,并向您介绍一些新的工具。也许我们还可以促使您想要去探索(甚至是去开发)更多的工具。 我们认为这是大多数计算机科学相关课程中缺少的重要一环。
课程结构
- 十一个时长一小时左右的讲座
The Shell
基础命令
- 参数是由空格分隔的,参数中如果有空格,可以用双引号或者单引号分隔开,也可以使用转义字符如下
1
echo Hello\ World
- shell确定程序位置的方法:环境变量。输入程序时,在环境变量存储的路径中进行搜索,并运行
- shell提示符后面不仅能运行带有参数的程序,还可以执行语句、定义函数、变量
- path是一种描述计算机上文件位置的方式
- 在Linux和macOS上,路径由斜杠(正斜杠“/”)分隔。所有内容都属于根命名空间,因此所有路径都以斜杠或绝对路径开头
- 在Windows上,路径通常用反斜杠“\”分隔。在Windows,上,**每个分区都有一个根目录,每个驱动器都有一个单独的路径结构
- 绝对路径:能完全确定文件位置的路径
- 相对路径:相对于你当前所在的位置的路径
- 下面命令可以得到当前工作目录8.特殊的目录
1
pwd
. 表示当前目录
.. 表示父目录 - 查看当前目录中有哪些内容
- 查看当前目录
1
ls
- 查看指定路径
1
ls path
- 查看当前目录
- 两个特殊符号
- 波浪符“
”会将你带到你的主目录中。可利用来表示路径 - 短横线“-”,切换到你之前所在的目录
1
cd -
- 波浪符“
- 大多数程序都有–help选项,它会打印出大量该命令的帮助信息。usage中的“…”表示零个/一个或多个,“[]”表示可选项
- ls -l
- 开头的d表示是一个目录
- 之后的字母表示为该文件设置的权限
- 每三个字符为一组,分别是读取、写入和执行
- 对于文件,就是读取、写入和执行
- 对于目录,读取对应你是否被允许看到这个目录中的文件;写入是指你是否被允许在该目录中重命名、创建或删除文件;执行是指搜索权限,意味着你是否被允许进入该目录
如果你有对某个文件的写入权利,但没有当前目录的写入权利,那么你无法删除该文件
- 第一组三个字符是为文件的所有者设置的权限
- 第二组三个字符是为拥有该文件的组设置的权限
- 最后一组三个字符是其他人的所有权限
- 每三个字符为一组,分别是读取、写入和执行
- move or mv
- mv需要两个路径,一个旧路径一个新路径
- 重命名文件:更改文件名但不更改目录
- 移动文件到完全不同的目录中:提供当前文件的路径和目标文件的路径
- mv需要两个路径,一个旧路径一个新路径
- cp
- cp需要两个路径,一个要复制的文件路径,一个目标路径
- rm
- rm需要一个文件的路径,对该文件进行删除
在Linux上,默认情况下,删除不会递归进行,因此不能删除一个目录
可使用“**-r**”标志进行递归删除,将删除给定路径下所有内容
- rm需要一个文件的路径,对该文件进行删除
- rmdir
- 删除一个目录,但是只能删除空目录
- mkdir
- 创建一个新目录,创建的目录名中若有空格,需要用到引号或转义符
- man
- 这个程序以另一个程序的名称作为参数,并给出使用手册
- Ctrl+L
- 清除终端并回到顶部
- cat
- 打印文件内容
- 将输入和输出连在一起
- >>表示追加内容而不是覆盖内容
- tail
- 打印输入的最后n行
- -n1或–line(s)=1
- grep
- 可以在输入流中搜索指定的关键字
- tee
- 将输入内容写入一个文件,同时也输出到标准输出
流
- 每个程序都有两个主要的流
- 输入流:默认情况下来自键盘
- 输出流:每当程序打印输出时,输出的内容就会传递到这个流中
- shell提供了重定向流的方法,改变程序的输入/输出指向
- 最简单的方法:使用尖括号“<>“符号。
<表示将这个程序的输入重定向为这个文件的内容
>表示将前面程序的输出重定向到这个文件中 - 管道“|”符号:将左边程序的输出作为右边程序的输入
管道符号不只适用于文本数据,也可以对图像等东西使用它们,可用一个程序,对输入的二进制图像作一些处理,输出处理后的二进制图像
- 最简单的方法:使用尖括号“<>“符号。
如何更有趣的、更强大的使用终端
- root用户
- 类似于windows上的管理员用户,
- 用户ID为0
- 可以在系统上做任意想做的事情,即使某个文件对任何人都不可读或不可写
- 大多数时候你不以root用户运行
- sudo程序:以root用户权限运行程序
1
sudo 命令
- “#”代表以root身份运行,“$”代表不是以root身份运行
- 切换到root用户
1
sudo su
- 退出root用户
1
exit
- 修改内核参数,可设计事件驱动的变化
- 打开文件
- 以合适的方式打开文件
1
xdg-open filename
- 以合适的方式打开文件
展望
下节课
- 如何自动化执行这些任务
- 如何编写脚本来运行一些程序
- 如何在终端中处理条件和循环
- 如何运行一个程序直到它出错:用于测试
习题
有些习题没有太大难度,就不一一列出了
用touch创建文件
- touch可以改变文件访问和修改的时间戳,当指定文件不存在时,可以创建文件
1
touch semester
将以下内容一行一行地写入semester文件
#!/bin/sh
curl –head –silent https://missing.csail.mit.edu
- #在Bash中表示注释,而!即使被双引号包裹也有特殊含义。单引号则不一样
1 | echo '#!/bin/sh' > 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 进行许可。
评论