Missing-Semester : The Shell 笔记
课程地址
课程内容
由于我用的是 windows,可以安装一个 WSL 安装 Ubuntu 18.04 LTS。很多功能都可以用,有一些不行。
date
:可获得当前时间
echo hello
:把自己的参数一个一个打印到 stdout,中间用一个空格隔开;最后一个换行
echo 是一个程序,shell 借助环境变量来找到这个程序所在的位置。
echo $PATH
:输出环境变量。
which echo
:输出 echo 程序的位置。
windows路径:用反斜杠,分盘
Linux路径:用斜杠,文件系统全部起源于/
路径分为相对路径、绝对路径
相对路径:方便相对调用;绝对路径:方便全局调用。
pwd
:输出当前路径
cd
:改变当前目录
(后面的一个参数指定路径,可以是相对路径,也可以是绝对路径。特殊地,
.
表示当前目录,..
表示父目录,~
表示用户目录,-
表示上一个目录)
ls
:列出所有文件(目录),后接一个参数
option / flag
:一般用 -
或 --
开头
只带一个形式,后面不接值的叫
flag
后面接=xxx
的值的叫option
大部分程序有 flag--help
获得帮助
ls -l
列出详细信息
drwxrwxrwt 1 root root 512 Jul 2 16:01 tmp
第一个字母:d
表示目录,-
表示文件,l
表示链接
后面 3 * 3 的符号,每三个分别表示文件主、用户组、其他人的权限。
r
表示读。文件:看内容;目录:看目录里有哪些文件。(仅包括文件名,如果是ls -l
其实已经遍历了目录,要x
权限)
w
表示写。文件:编辑;目录:(整个地)重命名、新建、删除文件,即改变目录这张表。
x
表示执行。文件:执行;目录:进入一个目录。(要进入一个目录,要求所有父目录都有x
权限)
-
表示这个权限没有
mv old_path/file new_path/file
:移动、重命名文件
cp old_path/file new_path/file
:复制
rm file
:删除文件,不删除目录。
需要加
-r
进行递归删除。
rmdir dir
:删除空目录
mkdir dir
:创造目录
man xxx
:显示命令文档
Ctrl + L
:清空终端
< input_file > output_file
:重定向 stdin, stdout,默认是终端
cat file
:输出文件内容(注意这里 file 是参数)
cat
:将标准输入输出到标准输出
cat < a.txt > b.txt
“复制”文件(注意这里是 cat
的第二种用法)
>> file
:特殊的重定向,即“追加”。
|
管道。将左边程序的 stdout 变成右边程序的 stdin。
tail -n1
:输出 stdin 的最后一行(1可以变成其他)
root 用户:用户代号0,可以干任何事。
sudo
:以 root 执行命令
sys
包含计算机核心部分(硬件)的一个“目录”
echo 500 > brightness
:返回 Permission denied
:没有root 权限
sudo echo 500 > brightness
:仍然如此。
原因是重定向的设定与 echo 无关,这些重定向、管道是 shell 提供的,而 shell 并没有 root。
让 shell root 的方法是sudo su
。但这样做比较危险
不 root shell也可以:
echo 500 1060 | sudo tee brightness
:tee 把 stdin 同时输出到参数代表的文件和 stdout
xdg-open file
:用相应格式打开文件(在 WSL 上失效)
课后练习
- 输入
echo $SHELL
,确实输出/bin/bash
。 - 方法是
cd /tmp mkdir missing
- 输入
man touch
,阅读手册,大概知道它是个更新时间的东西,相当于“摸”一下这个文件但不修改。 - 从手册知道,只需要
cd missing touch semester
- 嘛,这里它说了要用单引号,那就可以这样写:
echo '#!/bin/sh' > semester echo 'curl --head --silent https://missing.csail.mit.edu` >> semester
- 使用
./semester
,失败。再用ls -l semester
,发现它根本没有x
权限 - 用
man chmod
,了解它是给文件/目录加减权限的。 - 那就只需要
chmod u+x semester
,即可。然后./semester
输出一堆信息。 - 类似地,用
我好像不会删末尾空格./semester | tail -n2 > last-modified.txt cat last-modified.txt
- 第一个任务输入
有一堆文件,那个cat /sys/class/power_supply/battery
capacity
就是容量吧