Skip to content

Commit

Permalink
Merge pull request #172 from pspdada/master
Browse files Browse the repository at this point in the history
Thank you so much
  • Loading branch information
hanxiaomax authored Aug 15, 2024
2 parents dd3f3dd + 9baa48c commit af054fa
Show file tree
Hide file tree
Showing 12 changed files with 457 additions and 500 deletions.
213 changes: 99 additions & 114 deletions _2020/command-line.md

Large diffs are not rendered by default.

30 changes: 15 additions & 15 deletions _2020/course-shell.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ solution:
几乎所有您能够接触到的平台都支持某种形式的 shell,有些甚至还提供了多种 shell 供您选择。虽然它们之间有些细节上的差异,但是其核心功能都是一样的:它允许你执行程序,输入并获取某种半结构化的输出。

本节课我们会使用 Bourne Again SHell, 简称 "bash" 。
这是被最广泛使用的一种 shell,它的语法和其他的 shell 都是类似的。打开shell _提示符_(您输入指令的地方),您首先需要打开 _终端_ 。您的设备通常都已经内置了终端,或者您也可以安装一个,非常简单。
这是被最广泛使用的一种 shell,它的语法和其他的 shell 都是类似的。打开 shell _提示符_(您输入指令的地方),您首先需要打开 _终端_ 。您的设备通常都已经内置了终端,或者您也可以安装一个,非常简单。

## 使用 shell

Expand Down Expand Up @@ -93,9 +93,9 @@ missing:~$ /bin/echo $PATH
当我们执行 `echo` 命令时,shell 了解到需要执行 `echo` 这个程序,随后它便会在 `$PATH` 中搜索由 `:` 所分割的一系列目录,基于名字搜索该程序。当找到该程序时便执行(假定该文件是 _可执行程序_,后续课程将详细讲解)。确定某个程序名代表的是哪个具体的程序,可以使用
`which` 程序。我们也可以绕过 `$PATH`,通过直接指定需要执行的程序的路径来执行该程序

## 在shell中导航
## 在 shell 中导航

shell 中的路径是一组被分割的目录,在 Linux 和 macOS 上使用 `/` 分割,而在Windows上是 `\`。路径 `/` 代表的是系统的根目录,所有的文件夹都包括在这个路径之下,在Windows上每个盘都有一个根目录(例如:
shell 中的路径是一组被分割的目录,在 Linux 和 macOS 上使用 `/` 分割,而在 Windows 上是 `\`。路径 `/` 代表的是系统的根目录,所有的文件夹都包括在这个路径之下,在 Windows 上每个盘都有一个根目录(例如:
`C:\`)。 我们假设您在学习本课程时使用的是 Linux 文件系统。如果某个路径以 `/` 开头,那么它是一个 _绝对路径_,其他的都是 _相对路径_ 。相对路径是指相对于当前工作目录的路径,当前工作目录可以使用 `pwd` 命令来获取。此外,切换目录需要使用 `cd` 命令。在路径中,`.` 表示的是当前目录,而 `..` 表示上级目录:

```console
Expand Down Expand Up @@ -232,7 +232,7 @@ open: Permission denied
$ echo 3 | sudo tee brightness
```
此时打开 `/sys` 文件的是 `tee` 这个程序,并且该程序以 `root` 权限在运行,因此操作可以进行。
这样您就可以在 `/sys` 中愉快地玩耍了,例如修改系统中各种LED的状态(路径可能会有所不同):
这样您就可以在 `/sys` 中愉快地玩耍了,例如修改系统中各种 LED 的状态(路径可能会有所不同):

```console
$ echo 1 | sudo tee /sys/class/leds/input6::scrolllock/brightness
Expand All @@ -249,24 +249,24 @@ $ echo 1 | sudo tee /sys/class/leds/input6::scrolllock/brightness
此外,我们没有为这些练习题提供答案。如果有任何困难,您可以发送邮件给我们并描述你已经做出的尝试,我们会设法帮您解答。


0. 本课程需要使用类Unix shell,例如 Bash 或 ZSH。如果您在 Linux 或者 MacOS 上面完成本课程的练习,则不需要做任何特殊的操作。如果您使用的是 Windows,则您不应该使用 cmd 或是 Powershell;您可以使用[Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/)或者是 Linux 虚拟机。使用`echo $SHELL`命令可以查看您的 shell 是否满足要求。如果打印结果为`/bin/bash``/usr/bin/zsh`则是可以的。
1.`/tmp` 下新建一个名为 `missing` 的文件夹。
2.`man` 查看程序 `touch` 的使用手册。
3.`touch``missing` 文件夹中新建一个叫 `semester` 的文件。
4. 将以下内容一行一行地写入 `semester` 文件:
1. 本课程需要使用类 Unix shell,例如 Bash 或 ZSH。如果您在 Linux 或者 MacOS 上面完成本课程的练习,则不需要做任何特殊的操作。如果您使用的是 Windows,则您不应该使用 cmd 或是 Powershell;您可以使用 [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/) 或者是 Linux 虚拟机。使用 `echo $SHELL` 命令可以查看您的 shell 是否满足要求。如果打印结果为 `/bin/bash``/usr/bin/zsh` 则是可以的。
2.`/tmp` 下新建一个名为 `missing` 的文件夹。
3.`man` 查看程序 `touch` 的使用手册。
4.`touch``missing` 文件夹中新建一个叫 `semester` 的文件。
5. 将以下内容一行一行地写入 `semester` 文件:
```
#!/bin/sh
curl --head --silent https://missing.csail.mit.edu
```
第一行可能有点棘手, `#` 在Bash中表示注释,而 `!` 即使被双引号(`"`)包裹也具有特殊的含义。
第一行可能有点棘手, `#` 在 Bash 中表示注释,而 `!` 即使被双引号(`"`)包裹也具有特殊的含义。
单引号(`'`)则不一样,此处利用这一点解决输入问题。更多信息请参考 [Bash quoting 手册](https://www.gnu.org/software/bash/manual/html_node/Quoting.html)
1. 尝试执行这个文件。例如,将该脚本的路径(`./semester`)输入到您的shell中并回车。如果程序无法执行,请使用 `ls` 命令来获取信息并理解其不能执行的原因。
2. 查看 `chmod` 的手册(例如,使用 `man chmod` 命令)
6. 尝试执行这个文件。例如,将该脚本的路径(`./semester`)输入到您的 shell 中并回车。如果程序无法执行,请使用 `ls` 命令来获取信息并理解其不能执行的原因。
7. 查看 `chmod` 的手册(例如,使用 `man chmod` 命令)
3. 使用 `chmod` 命令改变权限,使 `./semester` 能够成功执行,不要使用 `sh semester` 来执行该程序。您的 shell 是如何知晓这个文件需要使用 `sh` 来解析呢?更多信息请参考:[shebang](https://en.wikipedia.org/wiki/Shebang_(Unix))
8. 使用 `chmod` 命令改变权限,使 `./semester` 能够成功执行,不要使用 `sh semester` 来执行该程序。您的 shell 是如何知晓这个文件需要使用 `sh` 来解析呢?更多信息请参考:[shebang](https://en.wikipedia.org/wiki/Shebang_(Unix))
4. 使用 `|` 和 `>` ,将 `semester` 文件输出的最后更改日期信息,写入主目录下的 `last-modified.txt` 的文件中
9. 使用 `|` 和 `>` ,将 `semester` 文件输出的最后更改日期信息,写入主目录下的 `last-modified.txt` 的文件中
5. 写一段命令来从 `/sys` 中获取笔记本的电量信息,或者台式机 CPU 的温度。注意:macOS 并没有 sysfs,所以 Mac 用户可以跳过这一题。
10. 写一段命令来从 `/sys` 中获取笔记本的电量信息,或者台式机 CPU 的温度。注意:macOS 并没有 sysfs,所以 Mac 用户可以跳过这一题。
Loading

0 comments on commit af054fa

Please sign in to comment.