Linux中的shell和bash
目录
学安全的我们,经常会听到说获得某服务器的shell,就是指获得某个服务器的操作权限。我们学习linux时,经常会遇到bash,bash也是指的是某个服务器的权限。那么,这两者有什么区别和联系呢?
shell
Shell 俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
我们先来看一些Linux系统的结构
位于最内层的是硬件,然后是Linux系统内核。shell介于用户和系统内核之间。
那么shell的功能是什么呢?
shell用来接收我们用户的输入,并且解释我们的命令。然后将其传给系统内核,内核再调用硬件来操作。
shell script
我们很容易知道“Shell Script”指的是针对shell所写的脚本。我们将一些shell规定的语法与命令,再搭配正则表达式、管道命令与数据流重定向等功能,写成一个纯文本文件以达到我们想要的处理目的,再配以“.sh”的扩展名,这便是“Shell script”了。
简言之,我们只有通过Shell 这个工具来解释我们的命令等请求,我们才能成功实现与计算机的交流,同时再搭配Shell script可以批量处理命令的“程序”,我们就可以与计算机更优雅的交流哟!
我们可能会问:既然shell是解释命令的工具,那么这个工具可不可以多样化呢?不同的解释工具可不可以遵从不同的规则呢?
这是必然的咯,何况是像Linux这种开源的好东西,怎么会缺乏多样性呢?!
所以,我们就不难理解Linux中的shell有多种类型了吧,这其中最常用的几种是 Bourne shell(sh)、Bourne Again shell(bash) 和 Debian Almquist Shell(dash)。其中三种shell各有优缺点:
sh
sh(Bourne shell)是UNIX最初使用的shell,并且在每种UNIX上都可以使用。Bourne shell在shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。
bash
bash (Bourne Again shell),它是Linux操作系统缺省的shell,是Bourne shell的扩展,简称Bash,与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加、增强了很多特性。Bash放在/bin/bash 中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,有灵活和强大的编程接口,同时又有很友好的用户界面。 而且在Redhat系列的Linux 操作系统中的 /bin/sh 是 /bin/bash 的符号链接。所以,用 sh执行脚本和bash 执行脚本,效果是一样的。所以我们通常会在脚本第一行写 #!/bin/bash ,意思就是用 /bin/bash 去执行这个脚本。
Dash
虽然bash好用,功能也多。但是鉴于bash过于复杂,有人把bash从NetBSD移植到Debian Linux并更名为 dash (Debian Almquist Shell),并建议将/bin/sh指向它,以获得更快的脚本执行速度。Dash Shell 比Bash Shell小的多,符合POSIX标准。也就是若脚本第一行为“#!/bin/sh”,则我们使用命令:sh script_name.sh 时是调用的dash去解释脚本;Debian下默认使用的还是bash,只不过sh指向的是dash
tty 、pty 和 pts
这里再多说一点,说说我们经常看到的 tty 和 pts 。
tty就是linux里面终端的意思,你每一个可以输入shell进行解析的当前框,就是终端。
pty就是虚拟终端。
pts是终端的一个实例化。比如,下图
我们这里打开了三个终端,第一个终端tty实例化为 pts/0,第二个终端tty实例化为 pts/1 ,第三个终端tty实例化为 pts/2 ,如果我们现在用Xshell远程连接,那么Xshell终端tty实例化为 pts/3。
你在每个终端输入的命令,都是属于该 pts 下面的。
如果我们的 pts/0 想在 pts/3 的屏幕上输入文字
write pts/3的用户名 pts/3
ctrl+d #结束
如果我们想把pts/3的终端给踢掉
pkill -kill -t pts/3
Linux中的shell和bash的更多相关文章
- Linux中的shell
shell的含义: 首先shell的英文含义是"壳": 它是相对于内核来说的,因为它是建议在核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核. Li ...
- Linux中的shell到底是什么?
(曾经有一段充足的时间放在我面前,可以学linux,而我没有珍惜,等我失去的时候我才后悔莫及,人世间最痛苦的事莫过于此.) 最近,要将项目代码部署到linux环境下运行,但是对linux毫无基础,之前 ...
- Linux中的shell到底是什么
(引自:https://zhidao.baidu.com/question/557066905.html) [一] shell的含义: 首先shell的英文含义是"壳": 它是相对 ...
- [转帖]Linux教程(20)- Linux中的Shell变量
Linux教程(20)- Linux中的Shell变量 2018-08-24 11:30:16 钱婷婷 阅读数 37更多 分类专栏: Linux教程与操作 Linux教程与使用 版权声明:本文为博 ...
- Linux 中执行Shell 脚本的方式(三种方法)
Shell 脚本的执行方式通常有如下三种: (1)bash script-name 或者 sh script-name:(2)path/script-name或者./script-name:(3)so ...
- Linux中编写Shell脚本
目录 Shell Shell脚本的执行 Shell脚本编写规范 Shell 中的变量 变量的算术运算 双小括号 (()) 数值运算命令的用法 let 运算命令的用法 expr 命令的用法 br 命令 ...
- linux中的shell脚本编程---初识shell
Shell是用户与Linux或Unix内核通信的工具,shell编程指的并不是编写这个工具,而是指利用现有的shell工具进行编程,写出来的程序是轻量级的脚本,我们叫做shell脚本. Shell的语 ...
- 好记性比如烂笔头--linux学习笔记7关于linux中的shell脚本编程
之前看的各种面试,貌似都有shell脚本编程,没了解之前感觉很复杂,现在了解了些,没想象中那么难. 逻辑主要是这样的 编写.sh的脚本文件,文件里面的代码,就是在命令行输入的可执行命令的加强版,所谓加 ...
- Linux中执行shell脚本的4种方法总结
bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在 ...
随机推荐
- $nextTick解决Vue组件卸载在加载合并的问题
情况是这样的,父子组件都是复选框,点击父组件的复选框,子组件的复选框要显示并全选,取消复选框,子组件隐藏.子组件显隐我用的 v-if ,使用created钩子函数来使子组件处于全选状态. 但是出现的问 ...
- 2020年12月-第01阶段-前端基础-认识WEB
认识WEB 1.认识网页 网页主要由文字.图像和超链接等元素构成.当然,除了这些元素,网页中还可以包含音频.视频以及Flash等. 思考: 网页是如何形成的呢? 总结 网页有图片.链接.文字等元素组成 ...
- Hibernate Validator异常HV000221解决办法
自建博客地址:https://www.bytelife.net,欢迎访问! 本文为博客同步发表文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://w ...
- Python-sendgrid邮箱库的使用
Python中sendgrid库使用 #帮助文档https://github.com/sendgrid/sendgrid-python https://sendgrid.com/docs/ui/acc ...
- 文件锁fcntl
一.python中的文件锁 我们在写python应用的时候,当涉及到多个进程向同一个文件write(或者read)的情况,如果几个进程同时都对这个文件进行写操作,那么文件的内容就会变得非常混乱,这个时 ...
- 11、pass,is,位运算的补充
pass的补充 一般Python的代码是基于:和缩进来实现,Python中规定代码块中必须要有代码才算完整,在没有代码的情况下为了保证语法的完整性可以用pass代替 if 条件: pass else: ...
- WM_CLOSE WM_QUIT WM_DESTROY 三者的区别
一 个窗口或者应用程序应该被关闭时发出WM_CLOSE消息,当接收到WM_CLOSE消息时,如果你愿意,向用户提出是否真的退出.你知道让用户作确认或 有错误出现或有什么应该注意的事情发生的时候,往往弹 ...
- io流(文件字符流(FileReader,FileWriter文件的复制))
文件字符流(FileReader,FileWriter文件的复制) 文件的复制 效率低的方法 注意:字符流需要刷新操作,字节流不需要,只有刷新后才可以将程序中的内容导入到目标文件中 package c ...
- sqli-labs系列——第三关
less3 判断注入类型 这第三关有点意思,是一个带括号的数字型注入,这里需要闭合它的括号,之前遇到过很多这样的站,它的sql语句一般都是这样的: $sql = select * from user ...
- 全量同步Elasticsearch方案之Canal
一.前言 Canal 是阿里的一款开源项目,纯 Java 开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL(也支持 mariaDB). Canal 除了支持 b ...