Skip to content

Lecture1 shell

:material-circle-edit-outline: 约 1329 个字 :material-clock-time-two-outline: 预计阅读时间 4 分钟

[自制双语字幕] 计算机教育缺失的一课(2020) - 第1讲 - 课程概览与 shell_哔哩哔哩_bilibili

简介

shell是与计算机交互的主要方式之一,用它是因为GUI功能有限。

shell是一种系统跟计算机硬件交互时使用的中间介质,不过不是一个特定的软件,而是更像指一种交互模式。你可以直接通过shell进行编程。常见的shell工具有Bash(Bourne Again SHell),powershell。下面我们用的是bash。

image-20240128200746662

空格用于分隔参数,例如你创建目录时跟的参数为 "hello world",这样会创建两个目录。

shell通过 环境变量 获得程序位置并运行程序,环境变量是shell启动时设置的东西,当然不用每次启动都设置。环境变量顾名思义,是一堆变量,定义了你的主目录在哪,有户名是什么之类的。

其中,查看和搜索路径时会用到 路径变量(PATH)。PATH储存了一个包含大量路径的路径列表,shell即通过遍历路径搜索程序。

使用 shell

打开终端会看到一个提示符:

tempest:~$ 

这是 shell 最主要的文本接口。你的主机名是 tempest 当前的工作目录(”current working directory”)——即当前所在的位置是 ~ (表示 “home”)。 $ 符号表示当前身份不是 root 用户。在这个提示符中,您可以输入 命令 ,命令最终会被 shell 解析。最简单的命令是执行一个程序。

常用指令

flag,option(是否有输入/参数

image-20240201134557126

执行ls -l后,会显示如上图的详细列表。

第一列均为一串10个字符的字符串,用于反映类型及操作权限。其中第一个字符作为一组,d表示这是一个目录(directory),否则是一个文件。

后面的9个字符用于反映该文件/目录所设置的权限,每3个字符为一组,共3组。

第一组反映文件所有者设置的权限,第二组反映拥有该文件的组设置的权限,第三组表示其它人的权限列表。

r, w, x分别表示read,write,execute三种权限。注意三种权限对于文件和目录表现不同,-表示这个操作你没有权限。

指令 作用 备注
cp copy
which 查找某文件的path
pwd 目前所在path
. 目前位置
.. 父位置
cd 绝对路径(能完全定位)、相对路径
cd / 回到根目录
cd ~ cd /home/user root 用户为 cd /root
cd - 返回进入此目录之前所在目录 注意连续使用会来回跳换,不等于ctrlz
-- 分隔符 后面的内容就不会被误认为是选项
ls
ls --help
ls -l
mv move 改名/移动
rm remove 无法递归执行,不能用于删除一个目录
rm -r remove递归执行 可删除目录
rmdir 只能删除空目录
mkdir 创建目录
man 展示指令/程序的手册 后面接指令/程序;按q退出

ctrl+L:清空终端,回到顶部

程序之间在shell中实现文件的交互与传输,需要用到shell中的 流(stream)

每个程序有两个主要的流:输入流和输出流。

默认情况下,输入流来自终端,进一步地说,来自你的键盘;而输出流一般也指向终端。如echo hello将hello打印在终端。我们可以重定向这些流。

指令 作用 备注
< file 将程序的输入流重定向为file 2<, 3<表示同级定向,避免过程替换
> file 将程序的输出流重定向为file 2>, 3>表示同级定向,避免过程替换
cat 打印文件内容
>> file 往file里面追加内容
| 将其左边程序的输出作为右边程序的输入 管道符(pipe)
tail -nd 打印输入的后面d行 d应为数字
tail --line=d 打印输入的后面d行
chmod 设置操作权限 后面接三个数字分别对应三组权限,是二进制排序

root用户

Linux里的root用户(super user)类似Windows上的管理员用户,id为0,可以无视权限设置对Linux里的任何文件进行操作。

指令 作用 备注
sudo do as su(super user) sudo将以root用户身份执行参数里的指令
# do as su(super user) 通过sudo su切换
$ 普通用户身份 通过exit退出root来切换
tee 将输入流写入输出流,同时输出给终端
xdg-open 自动选择合适的程序打开文件

!!!note"关于sudo的权限操作问题" shell有普通用户身份和root用户身份,普通用户身份可以通过sudo程序以root用户身份操作。
但是有一点需要注意的是,sudo程序通过流访问文件实际上是shell在操作文件,因为是shell在控制流,所以root用户才有权限操作的文件通过sudo是无法操作的,需要shell切换模式才行。
例如, $ sudo echo 500 > brightness不行,因为这里> brightness是对sudo重定向
# echo 500 > brightness可以,
不过,$ echo 500 | sudo tee brightness也可以。因为这里tee在sudo内执行的,在sudo内对文件进行操作。

/sys

好玩的东西,但还不懂