MIT-Missing Semester
Topic 01: The Shell
什么是 Shell
Shell 是操作系统的最外层,是一个用户跟操作系统之间交互的命令解释器. 它允许“执行程序,输入并获取某种半结构化的输出”. 当可视化界面无法解决问题,调用这些基于命令行或者文本的工具是必要的.
最广泛使用的一种Shell——Bash*(Bourne Again SHell)*
最主要的文本接口:
1 | missing:~$ |
- 主机名:missing
- 当前工作目录:~(home)
一些例子:
1 | missing:~$ date |
1 | missing:~$ echo hello |
- shell 基于空格分隔命令并解析,然后执行第一个单词代表的程序。如果传递的参数包含空格,需要通过
\进行转义。eg.My\ Photos
1 | missing:~$ echo $PATH |
- shell 实际上是个编程环境,具备变量、条件、循环和函数。
- 当要求 shell 执行某个指令时,会在环境变量
$PATH下搜索:分隔的一系列目录,搜索以你的指令名命名的程序,当找到便执行(若可执行) - 确定程序名具体代表哪个程序,可以使用
which程序 - 也可以直接指定路径(绝对路径)来执行程序,绕过
$PATH
在 Shell 中导航
绝对路径:能完全确定文件位置的路径,从根目录/文件系统的顶部开始。在 Linux 文件系统中以 / 开头,在 Windows下每个盘有根目录,eg C:\
相对路径:相对于当前工作目录的路径。
1 | missing:~$ pwd |
获取当前工作目录:
pwd切换目录:
cd相对路径表示中:
.当前目录;..父目录~扩展到主目录,可以用来写相对路径 eg.cd ~/dev/pdos/classes/missing-semsester
1 | missing:~$ ls |
- 当前目录文件列表:
ls,后面可以接路径- eg.
ls ..与分别执行cd ..和ls显示效果相同。
- eg.
标记和选项/带有值的标记以 - 开头。
可以通过 -h 或 -help 打印帮助信息;ls -l 可以详细列出目录下文件/文件夹的信息,如:
1 | missing:~$ ls -l /home |
d:missing是一个目录后续每三个字符为一组(
wxr),分别代表文件/目录于所有者-missing、用户-user以及其他人在修改-w、执行-x、读取-r上具有的权限;-表示不具备对应权限对于目录而言,
x代表是否被允许进入这个目录
一些有用的命令
重命名/移动文件:
mv拷贝文件:
cp删除文件:
rm- 删除给定路径下所有内容,使用递归标志
-r
- 删除给定路径下所有内容,使用递归标志
新建文件夹:
mkdir删除空目录:
rmdir查询命令使用手册:
man;q退出
在程序之间创建连接
程序两个主要的流:输入流(读取)、输出流(打印)
一般来说,输入输出流都是终端,也就是键盘为输入、显示器为输出。但输入输出流可以重定向
1 | missing:~$ echo hello > hello.txt |
< file和> file可以把程序输入输出分别重定向到指定文件打印文件内容:
catcat < hello.txt > hello2.txt- 用hello.txt作为命令输入,将输出结果写入hello2.txt。由此实现了cp的功能向一个文件追加内容:
>>
1 | missing:~$ ls -l / | tail -n1 |
- 管道操作符
|:让|左边的输出成为|右边的输出
更强大的权限
根用户具有几乎一切权限,如果在这样的身份下登录系统,出现错误操作可能造成的破坏性是致命的。取而代之,我们会在需要的时候使用 sudo 命令,临时使用根用户的身份
往 sysfs 文件写入内容仅允许在根用户身份下进行。它挂载在 /sys 下
- 将输入内容写入文件并输出到标准输出:
tee
1 | $ sudo find -L /sys/class/backlight -maxdepth 2 -name '*brightness*' |
关于 shell,有件事我们必须要知道。
|、>、和<是通过 shell 执行的,而不是被各个程序单独执行。echo等程序并不知道|的存在,它们只知道从自己的输入输出流中进行读写。 对于上面这种情况, shell (权限为您的当前用户) 在设置sudo echo前尝试打开 brightness 文件并写入,但是系统拒绝了 shell 的操作因为此时 shell 不是根用户。
1 | $ echo 3 | sudo tee brightness |
因为打开
/sys文件的是tee这个程序,并且该程序以root权限在运行,因此操作可以进行
- 本文标题:MIT-Missing-Semester 01 The Shell
- 创建时间:2023-07-07 20:50:14
- 本文链接:2023/07/07/MIT-Missing-Semester-01-The-Shell/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!