shell

16 篇文章 3 订阅

shell

2.1 shell 家族

在这里插入图片描述

  • shell:命令解释器,是一个应用程序,提供指令,能根据输入的命令执行相应命令。
  • 命令解释器的作用:对用户输入到终端的命令进行解析,调用对应的执行程序
  • 用户在终端输入命令,由shell命令解释器对命令进行解析(按照$PATH环境变量搜索命令),解析成内核能够识别的指令,然后由内核执行命令,最后由终端显示命令执行的结果给用户
  • 查看当前系统下有哪些shell:cat /etc/shells
  • 查看当前系统正在使用的shell:echo $SHELL
  • 常见shell:

/bin/sh (已经被/bin/bash 所取代)
/bin/bash(就是Linux默认的shell)
/bin/ksh(Kornshell 由AT&T Bell lab. 发展出来的,兼容于bash)
/bin/tcsh(整合C Shell, 提供更多的功能)
/bin/csh(已经被/bin/tcsh所取代)
/bin/zsh(基于ksh发展出来的,功能更强大的shell)

2.2 命令和路径补齐

  • Linux pwd(英文全拼:print work directory) 命令用于显示工作目录。
  • 执行 pwd 指令可立刻得知您目前所在的工作目录的绝对路径名称。

在bash下敲命令时,Tab键可以补全已经敲了一部分的文件名和目录名。如果是Ubuntu系统,系统默认启用了bash completion,还可以补全命令的某些参数、Makefile目标等等。如果是Debian系统,可以用以下命令启用bash completion:$ source /etc/bash_completion

2.3 历史记录

(1)history:可以查看之前敲过的命令

(2)通过按上下键(或者Ctrl + p,ctrl + n),可以一个一个浏览以前输入过的命令。

(3)若能记住以前输过的某条命令中的某个关键字,可以按ctrl + r 然后输入关键字,随着你每输入一个字母,bash会做增量式查找,也可以反复按ctrl + r向前查找;若找到了,按左右移动光标键或Home键(ctrl + a)或End键(ctrl + e)将该命令带回提示符下进一步修改,或者直接按Enter键原封不动地执行该命令

  • ctrl + 左右键,可以移动一个单词
    在这里插入图片描述

2.4 补充shell

1. 图形界面和命令行要达到的目的是一样的,都是让用户控制计算机。

2. 然而,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁。

3. 由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,这样用户就能间接地使用操作系统内核了。在用户和内核之间增加一层“代理”,既能简化用户的操作,又能保障内核的安全,何乐不为呢?

4. 用户界面和命令行就是这个另外开发的程序,就是这层“代理”。在Linux下,这个命令行程序叫做 Shell。

5. Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。

6. Shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox 等其它软件没有什么区别。然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。

2.5 Shell 是如何连接用户和内核的?

1. Shell 能够接收用户输入的命令,并对命令进行处理,处理完毕后再将结果反馈给用户,比如输出到显示器、写入到文件等,这就是大部分读者对 Shell 的认知。你看,我一直都在使用 Shell,哪有使用内核哦?我也没有看到 Shell 将我和内核连接起来呀?!

2. 其实,Shell 程序本身的功能是很弱的,比如文件操作、输入输出、进程管理等都得依赖内核。我们运行一个命令,大部分情况下 Shell 都会去调用内核暴露出来的接口,这就是在使用内核,只是这个过程被 Shell 隐藏了起来,它自己在背后默默进行,我们看不到而已。

3. 接口其实就是一个一个的函数,使用内核就是调用这些函数。这就是使用内核的全部内容了吗?嗯,是的!除了函数,你没有别的途径使用内核。

4. 比如,我们都知道在 Shell 中输入cat log.txt命令就可以查看 log.txt 文件中的内容,然而,log.txt 放在磁盘的哪个位置?分成了几个数据块?在哪里开始?在哪里终止?如何操作探头读取它?这些底层细节 Shell 统统不知道的,它只能去调用内核提供的 open() 和 read() 函数,告诉内核我要读取 log.txt 文件,请帮助我,然后内核就乖乖地按照 Shell 的吩咐去读取文件了,并将读取到的文件内容交给 Shell,最后再由 Shell 呈现给用户(其实呈现到显示器上还得依赖内核)。整个过程中 Shell 就是一个“中间商”,它在用户和内核之间“倒卖”数据,只是用户不知道罢了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值