文章目录
- 1. 查看当前的shell类型
- 2. ps -f命令
- 3. 父子shell
- 4. 分号在命令里的作用
- 问题:
- 环境变量echo:
- 5. sleep和jobs
- sleep:
- jobs:
- 例子:
- &:
- 6. 外部命令和内建命令
- 图解外部命令
- type命令
- 7. history命令
- 8. alias命令
- 9. 推荐
1. 查看当前的shell类型
命令:cat /etc/passwd
由此可见,该系统终端的shell为bash
注:
① Debian -> dash linux中的dash shell是什么
Ubuntu -> bash
这里dash可以执行成功是因为Ubuntu也属于Debian
② 其它shell
③ shell的默认使用方式可以更改
④ ls -lF /bin/bash 执行后会发现这里实际上有一个软件 2022 /bin/bash*
(bash本质上是一个软件,也是一个终端)
2. ps -f命令
显示进程列表及其详细信息。
3. 父子shell
① shell分为父shell和子shell
② 父shell -> 子shell 的过程类似于(ps -f 可以很清楚地看到它们之间的关系):
孩子a
父亲a 儿子b
爷爷a 儿子b 孙子c
以Ubuntu为例,bash一次相当于要一个小孩,再bash一次再要一个小孩
③ PPID指的是当前进程父亲的PID,或者说它是基于谁创建的
一个窗口运行了三个终端(3个bash),输入了三个exit才彻底退出
父子shell是相对的。即PID=3536的bash是PID=3543的bash的父shell,PID=3543的bash同时又是PID=3551的bash的父shell。
4. 分号在命令里的作用
作用:分隔多个命令,使它们依次执行。跟’ | '作用一样
① 命令1 空格 分号 空格 命令2 空格 分号 空格 命令3 分号前后的空格表示分隔不同的命令
② 括号 命令1 空格 分号 空格 命令2 空格 分号 空格 命令3 括号 带括号意味着创建一个子shell去执行
例如:
①②的异同:
相同点:执行结果一样
不同点:1> ①没有生成一个子shell执行,②生成了一个子shell执行。2> ①的执行结果成为进程列表,②的不是。
问题:
问:为什么ls ; pwd ; cd / 执行完以后切换到了根目录,而(ls ; pwd ; cd / )却没有?
答:在第一个命令中,cd/ 意味着 cd 命令后跟着一个参数 /,表示切换到根目录。而在第二个命令中,(ls ; pwd ; cd/) 在括号内,这意味着括号内的命令将在子shell中执行。当子shell执行完毕后,不会影响当前shell的状态,所以在执行完 (ls ; pwd ; cd/) 后,你还停留在原来的目录,而不会切换到根目录。
问:(ls ; pwd ; cd / )既然生成了一个子shell执行,为什么ps -f 看不到这个进程?
答:在Unix-like系统中,ps -f 命令用于显示进程列表及其详细信息。当你在子shell中执行命令时,子shell本身会成为一个新的进程,但是它不会显示在外部shell的进程列表中,因为外部shell不直接管理子shell的执行。因此,虽然第二个例子中生成了一个子shell,但它不会被ps -f命令显示出来,因为ps -f只显示外部shell及其直接创建的进程列表。
问:什么叫进程列表?
答:进程列表指的是当前正在运行的所有进程的清单或列表。在操作系统中,每个正在运行的程序都是一个进程,这些进程可能是用户启动的应用程序、系统服务或操作系统本身的一部分。进程列表通常包含每个进程的标识符、状态、内存使用情况等信息,可以通过特定的系统命令或工具来查看。
问:为什么ls ; pwd ; cd / 生成的结果叫进程列表,(ls ; pwd ; cd / )生成的不叫?
答:第一个例子中,我们可能会将一系列命令看作一个整体,因为它们按顺序执行,就像列表中的项目一样。这种情况下,我们将这些命令的执行结果称为进程列表。而第二个例子中,命令被放在括号内,括号将这些命令分组在一个子shell中执行。这些命令的执行不会直接影响到外部的环境,所以我们不太倾向将它们称为进程列表。
环境变量echo:
命令:echo $BASH_SUBSHELL—检测有没有创建子shell执行。
例如:
5. sleep和jobs
sleep:
① sleep + 数字 --让终端休眠__秒后执行(倒计时)
② sleep + 数字& --让终端休眠__秒后执行,且这个过程在后台
③ man sleep 查看sleep说明文档
问:为什么要用sleep?
答:因为有时候我们需要程序在执行某些操作后暂停一段时间,或者在循环中添加一个延迟以控制程序的执行速度。
jobs:
① jobs – 看看谁在搞休眠
② jobs -l – 在jobs的基础上多显示了PID
例子:
&:
‘&’ – 把某个操作挂载后台执行,我们可以在当前页面做别的事情。例如:Windows解压压缩包时,我们点完解压之后,通常会把那个页面最小化(放在后台),然后去干别的事情。linux中输入(tar -zxvf … ; tar -zxvf … ; cp … )&就可以让解压操作在后台执行。
6. 外部命令和内建命令
如图所示,输入ps -f 查看进程信息时,ps -f 也算一个进程(Windows任务管理器查看进程时,任务管理器本身也算一个进程),像ps -f 这种必须单独创建一个进程,在外部看内部的命令叫作外部命令;像cd这种不单独创建进程的,我们叫非外部命令(别名:内建命令)。
图解外部命令
外部命令:站在一个更高的层次看shell里的东西,站在外边看里边的东西看的更清楚。
type命令
type + 命令名称:判断一个命令是外部命令还是内部命令
输出结果:命令名称 is /usr/bin/命令名称 – 外部命令
输出结果:命令名称 is a shell builtin – 内建命令
例如:
7. history命令
① history命令–可以查看我们之前运行的所有命令(显示条数有上限)。它也是内建命令
② 执行history -> 显示:序号 + 命令 -> 输入!+序号,即可执行序号对应命令
③ !!:执行上一个命令
!$:执行上一个命令
例如:
④ less .bash_history:以文件形式查看之前的命令
8. alias命令
① alias命令–作用:起别名。好处:可以让我们缩写
② alias -p:显示全部已定义的别名
进一步理解alias:此处执行ll 时本质上是执行ls -alF;此处执行ls本质上是执行ls --color=auto(自动高亮)。补充:ls =‘ls --color=auto’ 是Ubuntu特有的,mac上就没有。
③ 创建属于自己的别名:alias 别名 = ’ 原来的命令’
缺点:一旦退出当前的shell,就不可以使用了
例如:
注意:等号前后不要加空格
9. 推荐
frank的linux课教程 以上笔记全部来源于此
-----------------------------------未完待续...------------------------
---------------------------出现问题欢迎批评指正啊 ---------------------