Lecture1 shell
简介
shell是与计算机交互的主要方式之一,用它是因为GUI功能有限。
shell是一种系统跟计算机硬件交互时使用的中间介质,不过不是一个特定的软件,而是更像指一种交互模式。你可以直接通过shell进行编程。常见的shell工具有Bash(Bourne Again SHell),powershell。下面我们用的是bash。
空格用于分隔参数,例如你创建目录时跟的参数为 "hello world"
,这样会创建两个目录。
shell通过 环境变量 获得程序位置并运行程序,环境变量是shell启动时设置的东西,当然不用每次启动都设置。环境变量顾名思义,是一堆变量,定义了你的主目录在哪,有户名是什么之类的。
其中,查看和搜索路径时会用到 路径变量(PATH)。PATH储存了一个包含大量路径的路径列表,shell即通过遍历路径搜索程序。
使用 shell
打开终端会看到一个提示符:
这是 shell 最主要的文本接口。你的主机名是 tempest
当前的工作目录(”current working directory”)——即当前所在的位置是 ~
(表示 “home”)。 $
符号表示当前身份不是 root 用户。在这个提示符中,您可以输入 命令 ,命令最终会被 shell 解析。最简单的命令是执行一个程序。
常用指令
flag,option(是否有输入/参数
执行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
好玩的东西,但还不懂