Skip to content

Latest commit

 

History

History
47 lines (33 loc) · 3.02 KB

File metadata and controls

47 lines (33 loc) · 3.02 KB

理解shell

CLI(文本交互界面)。
shell有很多种类型,bash使用的最为广泛,所以大部分的linux系统启动之后会自动启动bash。你可以到/etc/passwd文件当中查看每个用户登录之后自动启动了什么shell。最后一个冒号后面的/bin/bash就是代表了不同的shell
登录完成后,启动的是系统自带的bash,我们自己也可以启动bash。输入bash之后,我们用ps -f查看。

UID        PID  PPID  C STIME TTY          TIME CMD
root      1915 29666  0 17:06 pts/1    00:00:00 bash
root      1932  1915  0 17:06 pts/1    00:00:00 ps -f
root     29666 29658  0 15:36 pts/1    00:00:00 -bash

发现有了两个bash,一个是系统自带的,一个是我们启动的。而我们使用命令ps -f也是一个进程,这个进程的PPID也就是父ID是我们自己启动的bashPID

多个bash,我们可以用exit慢慢一层层的退出。当到系统自带的bash时候我们再退出会发生什么?退出了这个系统。需要重新登录才行。

同一行可以输入多个命令,只需要我们用;来隔离命令就可以了。ps -f;pwd;ls。这样的命令只是按照顺序去执行,假如把这些命令加上一个括号()他们就变成了一个进程,生成一个子shell来执行。我们可以用echo $BASH_SUBSHELL来显示现在有没有子shell

进程列表是一种命令分组(command grouping)。另一种命令分组是将命令放入花括号中, 并在命令列表尾部加上分号(;)。语法为{ command; }。使用花括号进行命令分组并不 会像进程列表那样创建出子shell。

想要一边运行shell,但是又想再执行其他shell。比如sleep 10,执行之后,CLI会过10秒才再次出现。假如我们在后面加上&,这个shell就会到后台去执行。sleep 10&,并且显示一个PID
我们可以用ps命令查看,也可以用jobs命令查看,用jobs查看我们还能看出这个shell的执行状态是running还是done

这当中还有一个协程,用的命令是coproc。不太懂……

shell还分内建命令和外部命令,比如ps就是一个外部命令。我们可以用which或者type来显示这个命令到底是内建或者外部。which ps; type -a ps

/usr/bin/ps
ps is /usr/bin/ps

内建命令查看则是不同的结果which cd; type -a cd

/usr/bin/cd
cd is a shell builtin
cd is /usr/bin/cd

我们用了这么多命令,有的时候一个命令太长了,我们不想重新输入,可以到history当中查找,然后重新输入。history能保留一千多条使用过的命令。

有的时候我们感觉有些命令加上参数经常用到,但是一直这么输入有些麻烦,所以我们可以用alias给经常用的命令取个别名。
alias ll='ls -alF'
以后我们只需要输入ll就能看到ls -alF命令同样的信息,是不是很方便。不过他只能在定义的shell下面运行。