missing-semester(1)-shell

shell基本使用

如果需要同时输入多个argument,那么如下两种表达是等价的:

$ echo Hello\ World
$ echo "Hello World"

机器有其自身的内置函数,这些内置函数是终端系统可以直接执行的,机器通过环境变量来定位这些内置函数的位置。如下操作可以显示环境变量的位置:

$ echo $PATH

在每次执行一次shell指令时,终端都会在上述路径中搜索是否存在对应的函数。linux系统的namespace(路径的根源)一般只有一个,就是root,但是Windows一般有多个Driver作为路径根源。

显示当前工作路径位置(present working directory):

$ pwd

改变当前工作位置(change directory):

$ cd xxx
$ cd - %回到上一次所在的位置

如果环境变量中缺少你想要执行的指令所在的位置,那么可以在执行命令时直接指定其具体位置。

显示当前所在位置的所有文件(list d):

$ ls

指令一般可以接受flags(开关)或者options(选择),可以指定一些额外的操作信息,可以用如下方式进行查看:

$ [指令] --help 

使用如下指令后可以看到文件的具体信息:

$ ls -l
drwxr-xr-x 1 missing  users  4096 Jun 15  2019 missing

一些关于上述文件的具体信息:

  • d开头表示missing是文件夹
  • 每3个字符构成的3个组rwx用来依次表示文件所有者、用户组(users)以及其他所有人依次所具有的权限
  • -表示某种类型的用户不具备相应的权限
  • 上述信息表明只有文件所有者可以修改,其他用户只可以阅读或者执行

还有一些常用指令:

$ mv [旧名字] [新名字] %对文件进行重命名
$ cp [原位置] [新位置] %对文件进行复制
$ rm [文件位置] %对文件进行删除
$ rmdir [文件夹] %仅用于空文件夹的清除
$ mkdir [文件夹名] %用于文件夹创建
$ man [指令或程序] %显示程序的用户手册,按下q来退出
$ ^L %清空终端,回到最上部分

建立程序间的连接

指令一般都有输入流和输出流,最基本的输入流就是键盘,最基本的输出流就是终端

$ < file %将file的内容作为输入流
$ > file %将输出流写入file(覆写)
$ echo hello > hello.txt %文件中的内容就是hello
$ cat hello.txt %输出文件内容到终端
$ cat < hello.txt %将hello.txt中内容作为cat的输入流
$ cat < hello.txt > hello2.txt
$ >> file %将新信息添加到file中,而不是覆写
$    |   %pipe, 将左边程序的输出作为右边程序的输入
$ ls -l / | tail -n1 %罗列/下的详细文件信息,给到右侧程序,右侧程序筛选出最后1条
$ ls -l / | tail -n1 > ls.txt
$ curl --head --silent google.com | grep -i content-length | cut --delimiter=' ' -f2

事实上可以通过简单的pipe来实现个人媒体直播,将自己的本地文件作为左侧程序,右侧程序则是向互联网发送数据。

root用户

有时候需要作为root用户执行指令

$ sudo [指令] %su意思是super

通过如下操作可以进入机器的内核系统,可以看到众多的内核参数,看起来就像文件系统一样:

$ cd /sys %进入内核
$ cd class
$ cd backlight
$ echo 500 > brightness %无法执行,需要root权限
$ sudo echo 500 > brightness %仍然无法执行,因为sudo事实上只作用于echo,而没有作用于整个重定向
# echo 1 > /sys/net/ipv4_forward %加上井字号pound意味着要以root权限来执行该程序,这区别于美元符号
$ sudo su %执行该命令来切换为root权限
# exit %退出root权限
$ echo 500 | sudo tee brightness %如果不切换为root权限,也可以使用这个命令来修改机器背景光,tee可以读取输入流来写入文件

如下命令可以打开文件:

$ xdg-open [文件名]