🥲
【missing-semester】1.课程概览与 shell
动机
计算机相关工作中,挖掘现有工具的潜力,并介绍一些新的工具。
shell 是什么
shell 是用户与操作系统内核之间的接口,用户可以通过输入命令来执行各种操作,例如运行程序、管理文件和目录、配置系统等。常见的 Shell 包括 Unix/Linux 系统中的 Bash(Bourne Again Shell)、Zsh(Z Shell)和 Windows 系统中的 PowerShell。
使用文字进行指令的输入,核心功能都是一样的:它允许你执行程序,输入并获取某种半结构化的输出。
环境变量
如果你要求 shell 执行某个指令,但是该指令并不是 shell 所了解的编程关键字,那么它会去咨询 环境变量 $PATH,它会指定系统在哪些目录中搜索可执行文件
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
在程序间创建连接
- 输入流:输入流是数据从外部环境流入程序的流。它通常用于从文件、键盘、网络连接或其他设备读取数据到程序中。例如,当你从键盘输入字符时,这些字符就是通过输入流输入到程序中进行处理的。
- 输出流:输出流是数据从程序流出到外部环境的流。它通常用于将程序处理后的数据输出到文件、屏幕、网络连接或其他设备中。例如,当程序将结果打印到屏幕上时,这些数据就是通过输出流输出到屏幕上显示的。
missing:~$ echo hello > hello.txt
missing:~$ cat hello.txt
hello
missing:~$ cat < hello.txt
hello
missing:~$ cat < hello.txt > hello2.txt
missing:~$ cat hello2.txt
hello
< file 和 > file。这两个命令可以将程序的输入输出流分别重定向到文件
还可以使用 >> 来向一个文件追加内容。使用管道( pipes ),我们能够更好的利用文件重定向。 | 操作符允许我们将一个程序的输出和另外一个程序的输入连接起来:
missing:~$ ls -l / | tail -n1
drwxr-xr-x 1 root root 4096 Jun 20 2019 var
课后练习
- 使用echo $SHELL命令可以查看您的 shell 是否满足要求。如果打印结果为/bin/bash或/usr/bin/zsh则是可以的。
ouharu@MBA ~ % echo $SHELL
/bin/zsh `
- 在 /tmp 下新建一个名为 missing 的文件夹。
ouharu@MBA ~ % mkdir /tmp/missing
ouharu@MBA ~ % cd /tmp/missing
- 用 man 查看程序 touch 的使用手册。
ouharu@MBA missing % man touch
- 用 touch 在 missing 文件夹中新建一个叫 semester 的文件。
- 将以下内容一行一行地写入 semester 文件:
#!/bin/sh
curl --head --silent https://missing.csail.mit.edu
第一行可能有点棘手, # 在Bash中表示注释,而 ! 即使被双引号(")包裹也具有特殊的含义。 单引号(')则不一样,此处利用这一点解决输入问题。更多信息请参考 Bash quoting 手册
ouharu@MBA missing % echo '#!/bin/sh' > semester
ouharu@MBA missing % echo 'curl --head --silent https://missing.csail.mit.edu' >> semester
ouharu@MBA missing % cat semester
#!/bin/sh
curl --head --silent https://missing.csail.mit.edu
- 尝试执行这个文件。例如,将该脚本的路径(./semester)输入到您的shell中并回车。如果程序无法执行,请使用 ls 命令来获取信息并理解其不能执行的原因。
- 查看 chmod 的手册(例如,使用 man chmod 命令)
- 使用 chmod 命令改变权限,使 ./semester 能够成功执行,不要使用 sh semester 来执行该程序。您的 shell 是如何知晓这个文件需要使用 sh 来解析呢?更多信息请参考:shebang
ouharu@MBA missing % chmod 744 semester
ouharu@MBA missing % ./semester
HTTP/2 200
server: GitHub.com
content-type: text/html; charset=utf-8
x-origin-cache: HIT
last-modified: Sat, 02 Mar 2024 14:52:48 GMT
access-control-allow-origin: *
etag: "65e33d40-2015"
expires: Wed, 08 May 2024 01:45:02 GMT
cache-control: max-age=600
x-proxy-cache: MISS
x-github-request-id: 1D3C:1D457:63C62E:6906F2:663AD6C6
accept-ranges: bytes
age: 0
date: Wed, 08 May 2024 16:18:58 GMT
via: 1.1 varnish
x-served-by: cache-nrt-rjtf7700023-NRT
x-cache: HIT
x-cache-hits: 0
x-timer: S1715185138.349312,VS0,VE162
vary: Accept-Encoding
x-fastly-request-id: 9432480b1356be6eb294975c00e90fd0eb96835a
content-length: 8213
9.使用 | 和 > ,将 semester 文件输出的最后更改日期信息,写入主目录下的 last-modified.txt 的文件中
错
ouharu@MBA missing % ls -l semester | cut -d ' ' -f9-12 > sudo tee /last-modified.txt
对
ouharu@MBA missing % ./semester | grep last-modified > ~/last-modified.txt
ouharu@MBA missing % cat ~/last-modified.txt
last-modified: Sat, 02 Mar 2024 14:52:48 GMT
10.写一段命令来从 /sys 中获取笔记本的电量信息,或者台式机 CPU 的温度。注意:macOS 并没有 sysfs,所以 Mac 用户可以跳过这一题。
Discussion