课前准备:如果用mac系统,那么你和课程中的shell一样,如果是win系统你需要在这里设置 WSL 开发环境 | Microsoft Learn安装Linux环境(可能需要科学上网以下载Linux安装包)
知识点:
ls 查看当前目录下的文件
可以添加 -l参数以查看详细信息
cd <file> 切换当前工作目录(相当于文件夹)
cd - 切换到上一目录
cd .. 切换到父目录
pwd 打印当前当前工作目录
man <指令> 显示指令的帮助手册(是英文的,比指令加--help选项易读)
cat <file> 查看文件内容
echo 使用echo这个程序,返回后面的东西
sudo <指令> 以管理员身份运行后面的指令
如果bright需要管理员身份才能打开,那么这样依然不能打开,因为以管理员身份运行的是echo,打开brightness时仍为一般用户身份
mkdir <name> (在当前目录下)创建一个叫“name”的文件夹
rmdir <name> (在当前目录下)删除叫name文件夹仅当这个文件夹为空时可执行
tee 一个程序将输入写入文件并且在终端上显示
cp [选项] 源文件 目标文件 拷贝文件
mv [options] source dest 移动位置
mv source_file(文件) dest_file(文件) 文件改名
xx>file 把xx指令的结果写到file里
xx<file 把file里的东西作为xx指令的参数传进去
| 管道
A | B 把A的输出作为参数传给B,但是A和B是不知道彼此存在的独立的
习题
- 在
/tmp
下新建一个名为missing
的文件夹。 -
dream@dream:/tmp$ cd /tmp dream@dream:/tmp$ mkdir missing
- 用
man
查看程序touch
的使用手册。 -
dream@dream:/tmp/missing$ man touch
- 用
touch
在missing
文件夹中新建一个叫semester
的文件。 -
dream@dream:/tmp/missing$ touch semester
- 将以下内容一行一行地写入
semester
文件:#!/bin/sh curl --head --silent https://missing.csail.mit.edu
第一行可能有点棘手,
#
在Bash中表示注释,而!
即使被双引号("
)包裹也具有特殊的含义。 单引号('
)则不一样,此处利用这一点解决输入问题。更多信息请参考 Bash quoting 手册
dream@dream:/tmp/missing$ echo '#!/bin/sh' > semester dream@dream:/tmp/missing$ echo 'curl --head --silent https://missing.csail.mit.edu' >>semester dream@dream:/tmp/missing$ cat semester #!/bin/sh curl --head --silent https://missing.csail.mit.edu
- 尝试执行这个文件。例如,将该脚本的路径(
./semester
)输入到您的shell中并回车。如果程序无法执行,请使用ls
命令来获取信息并理解其不能执行的原因。 -
./semester -bash: ./semester: Permission denied dream@dream:/tmp/missing$ chmod ugo+x semester dream@dream:/tmp/missing$ ./semester HTTP/2 200 server: GitHub.com content-type: text/html; charset=utf-8 last-modified: Mon, 31 Jul 2023 15:24:17 GMT access-control-allow-origin: * etag: "64c7d221-1fce" expires: Wed, 02 Aug 2023 08:22:31 GMT cache-control: max-age=600 x-proxy-cache: MISS x-github-request-id: 84B4:14D4:4C3648:500005:64CA0FEE accept-ranges: bytes date: Wed, 02 Aug 2023 08:51:27 GMT via: 1.1 varnish age: 0 x-served-by: cache-tyo11922-TYO x-cache: HIT x-cache-hits: 1 x-timer: S1690966287.308754,VS0,VE162 vary: Accept-Encoding x-fastly-request-id: 2ea263f486556e7e57421d37fb1893124aea7604 content-length: 8142
-
查看
chmod
的手册(例如,使用man chmod
命令) -
使用
chmod
命令改变权限,使./semester
能够成功执行,不要使用sh semester
来执行该程序。您的 shell 是如何知晓这个文件需要使用sh
来解析呢?更多信息请参考:shebang -
chmod ugo+x semester
-
这个命令中 ugo,代表了所有人,u是自己,g是用户组,o是其他人
-
使用
|
和>
,将semester
文件输出的最后更改日期信息,写入主目录下的last-
modified.txt
的文件中 -
dream@dream:/tmp/missing$ echo| ls -l |sudo tee ~/last-modified.txt total 4 -rwxr-xr-x 1 dream dream 61 Aug 2 16:50 semester dream@dream:/tmp/missing$ cat ~/last-modified.txt total 4 -rwxr-xr-x 1 dream dream 61 Aug 2 16:50 semester
- 写一段命令来从
/sys
中获取笔记本的电量信息,或者台式机 CPU 的温度。注意:macOS 并没有 sysfs,所以 Mac 用户可以跳过这一题 -
。dream@dream:/sys$ cat /sys/class/power_supply/BAT1/capacity 100