最近在看MIT的missing semester,顺便做了一些记录,做的比较简洁,课程主页如下:https://missing.csail.mit.edu/2020/。
### The Shell
**1.Shell如何找到一个程序?**
Shell是一个编程环境,它具有变量、条件、循环、函数。当我们在shell中输入命令后,如果无法匹配到shell的关键词,它会去`$PATH`中查找,其中列出了可以寻找程序的目录。
```bash
missing:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
missing:~$ which echo
/bin/echo
missing:~$ /bin/echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
```
**2.Shell中的地址**
在Linux和macOS上使用`/`,在Windows上使用`\`作为分隔符。
- `~`表示home
- `/`表示文件系统的root,包含所有目录和文件
- 以`/`开始的路径称为绝对路径,其他路径为相对路径
- `.`表示当前文件夹,`..`表示父文件夹
**3. 指令接收flags和options**
大多数的指令可以接收flags和options,以`-`开始。常见的是`--help`或`-h`.
**4. 文件操作权限**
对于目录:
- w:可以修改目录,添加删除文件
- x:可以进入目录
- r:可以列出目录中的内容
对于文件权限很容易理解。
`/bin`文件夹中几乎所有文件都允许所有用户执行。
**5. 常用程序**
- `mv`:更改文件名称,移动文件
- `cp`:复制一个文件
- `mkdir`:创建新目录
- `man`:可以展示一个程序的参数、输入、输出以及工作方式
- `cat`:连接文件,直接使用可以讲指定文件内容输出到输出流。此外也可以指定输入流和输出流。
- `touch`:更新文件时间戳,新建文件
**6. 程序之间的连接**
shell中程序具有输入流和输出流。通常输入和输出都是终端,也可以修改这些流。使用`<`和`>`.使用`|`可以讲一个程序的输出和另一个程序的输入连接。
使用`>>`则是在文件后面进行输出而不是覆盖。
**7. sudo**
root用户具有很高的权限,通常我们很少直接使用root账户登入系统,而是使用`sudo`指令。
例如,在`/sys/sysfs`文件的修改就需要root权限。该文件中包括许多内核参数,因此可以很容易的重新配置。
更具体的一个例子。在`/sys/class/backlight`中有一个`brightness`文件,表示电脑屏幕亮度。做法是使用下面的指令。
`echo 3 | sudo tee brightness`
`tee`程序可以为文件输出的同时输出的屏幕。
xdg-open:使用合适的工具打开文件