[Linux] 什么是 Shell?

news2024/11/28 8:58:25

 一、什么是 shell ?

        shell在英语中的意思就是外壳,所以我们习惯称shell程序为壳程序。那为什么又会被叫做壳程序呢?那是因为shell程序是在内核上面的,属于操作系统的外壳部分,因此我们就称之为壳程序(shell)。

        在 Linux 中,Shell 是一个命令行解释器,它充当用户与操作系统之间的接口。Shell 允许用户通过命令行输入各种指令来控制操作系统。它是用户与 Linux 内核之间的一种交互层,可以接受用户的命令输入,解析这些命令,并将它们传递给相应的系统服务或应用程序进行处理。

        Shell 不仅提供了一个命令行界面,还支持脚本编程,即可以编写包含一系列命令的脚本文件,Shell 能够读取并执行这些脚本。常见的 Linux Shell 包括 Bash(Bourne Again SHell)、sh(Bourne Shell)、csh(C Shell)和 zsh(Z Shell)等。

        Bash 是最常用的 Shell,在大多数 Linux 发行版中作为默认 Shell 提供。它提供了丰富的功能,如命令历史、别名定义、命令行编辑能力以及复杂的脚本语言支持。

二、shell的历史

        Shell 的历史始于早期的 Unix 操作系统,随着 Unix 的发展,Shell 也经历了多个重要的演变阶段。1971 年左右,Ken Thompson 开发了第一个 Unix Shell,后来被称为 Thompson shell 或 sh。1978 年,Stephen Bourne 在贝尔实验室开发了 Bourne shell,它成为了 Unix 标准 Shell,并且被广泛采用。随后,1989 年 Brian Fox 开发了 Bourne Again Shell (bash),旨在兼容 Bourne shell 并添加更多功能,Bash 成为了 GNU 项目的一部分,并且是大多数现代 Linux 发行版的默认 Shell。同年,Bill Joy 开发了 C Shell (csh),它采用了类似于 C 语言的语法,使得脚本编写更为直观。1982 年,David Korn 在 AT&T 开发了 Korn shell (ksh),它结合了 Bourne shell 和 C Shell 的优点,并增加了许多新特性。此外,还有 TC Shell (tcsh),它是 C Shell 的一个增强版本;Z Shell (zsh),这是一个高度可配置的 Shell,具有强大的功能集和高级的编辑能力;以及 Fish (fish),这是一个较新的 Shell,设计时考虑到了易用性和用户友好性。每个 Shell 都有自己的特点和优势,可以根据个人喜好或特定需求选择合适的 Shell 使用。

下面是几种常用流行的shell:

1、Bourne Shell (sh):

  • 最初由 Stephen Bourne 在 1978 年开发。
  • 是许多 Unix 系统中的默认 Shell。
  • 提供了基本的命令行功能,但缺少一些现代 Shell 的高级特性。

2、Bourne Again Shell (bash):

  • 由 Brian Fox 在 1989 年开发,是 GNU 项目的一部分。
  • 在大多数 Linux 发行版中作为默认 Shell 提供。
  • 支持命令历史、别名定义、命令行编辑能力以及复杂的脚本语言。

3、C Shell (csh):

  • 由 Bill Joy 在 1978 年开发。
  • 采用了类似于 C 语言的语法,使得脚本编写更为直观。
  • 在某些系统中使用,但不如 bash 流行。

4、Korn Shell (ksh):

  • 由 David Korn 在 1982 年开发。
  • 结合了 Bourne shell 和 C Shell 的优点,并增加了许多新特性。
  • 在许多商业 Unix 系统中被广泛采用。

5、Z Shell (zsh):

  • 是一个高度可配置的 Shell,具有强大的功能集和高级的编辑能力。
  • 虽然不是默认 Shell,但对于那些寻求更高级特性和定制选项的用户来说是一个很好的选择。

6、Fish (fish):

  • 是一个较新的 Shell,设计时考虑到了易用性和用户友好性。
  • 特别适合新手用户,因为它提供了自动补全等功能。

        这些 Shell 中,bash 是最为广泛使用的,几乎所有的 Linux 发行版都将它设置为默认 Shell。bash 提供了丰富的功能和良好的向后兼容性,使其成为大多数用户的首选。

三、 查看可用的shell

        要查看系统中已安装的 Shell,我们可以检查 /etc/shells 文件,该文件包含了系统中所有合法的 Shell 的列表。

cat /etc/shells

 这将列出系统中所有合法的 Shell。通常,您会看到类似这样的输出:

/bin/sh
/bin/false
/bin/bash
/bin/zsh
/bin/dash

         这些是 Ubuntu 20.04 中预装的一些 Shell。如果您想要安装其他 Shell(如 ksh 或 fish),可以使用包管理器进行安装。例如,要安装 kshfish,可以使用以下命令:

sudo apt update
sudo apt install ksh fish

        如果您想要更改默认 Shell,可以使用 chsh 命令来指定一个新的 Shell。例如,要将默认 Shell 更改为 zsh,可以使用以下命令:

chsh -s /bin/zsh

四、获取 Bash 的帮助文档

        Bash(Bourne Again SHell)是 Linux 和 Unix 系统中最常用的 Shell。Bash 是一个命令行解释器,它提供了用户与操作系统交互的界面。Bash 是 GNU 项目的一部分,它旨在兼容原始的 Bourne shell (sh) 并添加了许多增强功能,如命令历史、别名定义、命令行编辑能力以及复杂的脚本语言支持。

        Bash 的官方文档和手册页是获取详细信息的最佳来源。以下是访问这些资源的方法:

1、在线手册页:

  • 使用 man bash 命令查看 Bash 的手册页。这将打开 Bash 的手册页,其中包含了详细的说明和示例。

2、官方文档:

  • 访问 Bash 的官方网站,获取最新版本的手册和文档。
  • 网址: Bash Reference Manual
  • 这里提供了详尽的文档,涵盖了 Bash 的所有特性和用法。

3、info 系统:

  • 使用 info bash 命令来访问 Bash 的 info 文档。Info 系统提供了更详细的文档和交叉引用。

4、在线社区和论坛:

  • 在线社区如 Stack Overflow 和 Unix & Linux Stack Exchange 提供了大量的 Bash 相关问题和解答。

五、查询命令是否为 Bash shell 的内置命令: type

         要检查一个命令是否为 Bash shell 的内置命令,我们可以使用 type 命令。type 命令可以帮助我们确定一个命令是 shell 的内置命令、外部命令还是函数。

如果我们想检查 cd 是否为 Bash 的内置命令,我们可以使用以下命令:

type cd

 如果 cd 是一个内置命令,输出将会显示类似于这样的结果:

cd is a shell builtin

 如果命令不是一个内置命令,而是外部命令或者脚本,则输出会有所不同。例如,对于 ls 命令:

type ls

 输出可能会显示类似于这样的结果:

ls is /bin/ls

示例

 现在让我们使用 type 命令来检查 type 命令本身是否为 Bash 的内置命令:

type type

 这将返回如下输出,表明 type 是一个内置命令:

type is a shell builtin

        使用 type 命令可以轻松地检查一个命令是否为 Bash shell 的内置命令。我们只需输入 type <command> 即可,其中 <command> 是我们想要检查的命令名。如果输出显示 “is a shell builtin”,则该命令是内置的;否则,它可能是外部命令或脚本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

增材制造正在加速赋能模具产业转型升级

模具&#xff0c;作为制造业的基石&#xff0c;正随着经济的蓬勃发展与产业的深度转型而面临更高要求。特别是注塑模具的冷却系统&#xff0c;传统工艺在面对随形冷却水路时显得力不从心&#xff0c;导致冷却效率无法进一步提升。而3D打印技术的崛起&#xff0c;则为模具领域开…

财务会计与管理会计(七)

文章目录 电商快递费用计算IF、VLOOKUP函数的应用 交费分布统计表SUMPRODUCT函数的应用 考勤签到统计系统OFFSET、MATCH函数的应用 出入库余额自动核算系统SUMPRODUCT、LOOKUP函数的应用 分段收费的典型案例VLOOKUP函数、MIN函数、MAX函数的应用 全额累进与超额累进计算提成全额…

《走走停停》,观后感

他这辈子看起来&#xff0c;好像就不是很成功。但是我们都很怀念这个人。 我们的文化太过强调永远&#xff0c;并把“永远”和“成功”牢牢捆绑了起来。 比如你开了一家咖啡店&#xff0c;这家店给你带来了很多快乐。但后来成本变高了&#xff0c;经营压力也变大了&#xff0…

求个位数(c语言)

1./描述 //给你一个数&#xff0c;让他进行巴啦啦能量&#xff0c;沙鲁沙鲁&#xff0c;小魔仙大变身&#xff0c;如果进行变身的数不满足条件的话&#xff0c;就继续让他变身。。。直到满足条件为止。 //巴啦啦能量&#xff0c;沙鲁沙鲁&#xff0c;小魔仙大变身&#xff1a;对…

2024/8/15 英语每日一段

A new Google update will make it simpler to request the removal of fake explicit images, as public figures, teachers and ordinary people increasingly contend with targeted abuse in the form of “deepfakes,” or realistic-looking images made with AI. While …

C# 学习笔记17:上位机助手_页面生成多控件滚动效果_保存与加载控件文本到文件_多字符串发送界面

今日继续完善更新我的上位机助手&#xff0c;这次完善多字符串发送的部分&#xff1a; 目前上位机助手支持以下功能&#xff1a; 1、 普通的16进制\ASCLL显示收发 2、 全页更新HEX显示&#xff08;会自动断串口&#xff09; 3、 日志辅助显示报错 4、 必要的清除日志区、接…

Hbase图形化界面

分享一个好用的hbase图形化界面 安装包&#xff1a;链接: https://pan.baidu.com/s/11Y2cDlme-P2xe--pYqy6MQ?pwdguag 提取码: guag 1、上传项目到linux 2、修改数据库配置信息 application-druid.yml 修改url、username、password为数据库连接信息 3、创建数据库(注意字符集…

display:flex布局,最简单的案例

1. 左右贴边 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>#parent{width: 800px;background: red;height: 200px;display: flex;justify-content: space-between…

vscode 远程免密登录

Windows R 输入 cmd在命令行终端中输入 ssh-keygen 一直回车、确定 生成秘钥 3. C:\用户\xxx.ssh 拷贝公钥内容 id_rsa.pub 4. 在虚拟机~/.ssh/ 下创建文件touch authorized_keys,拷贝公钥内容 id_rsa.pub粘贴到authorized_keys里即可。

某市-2024【网安·理论】初赛-web1-扫雷-wp

进来是个简单的扫雷 看源码是纯js写的 看了下主要格子之类的生成逻辑在jms.js里 其中flag的输出条件也包含在jms.js 格式化了一下 看特征是base64了&#xff0c;然后又经过了别的操作&#xff0c;不过他混淆了一下就懒得看了。 知道的是每过一个难度的都可以拿到1/3个fl…

【网络】UDP回显服务器和客户端的构造,以及连接流程

回显服务器&#xff08;Echo Server&#xff09; 最简单的客户端服务器程序&#xff0c;不涉及到业务流程&#xff0c;只是对与 API 的用法做演示 客户端发送什么样的请求&#xff0c;服务器就返回什么样的响应&#xff0c;没有任何业务逻辑&#xff0c;没有进行任何计算或者…

【操作系统】什么是进程?什么是线程?两者有什么区别(面试常考!!!)

什么是进程/任务&#xff08;Process/Task&#xff09; 当我们打开我们的电脑的任务管理器就可以看到我们的电脑正在执行的进程。 每个应用程序运行于现代操作系统之上时&#xff0c;操作系统会提供一种抽象&#xff0c;好像系统上只有这个程序在运行&#xff0c;所有的硬件资…

基于Springboot 和Vue 的高校宿舍管理系统源码

网络上很多宿舍管理系统都不完整&#xff0c;大多数缺少数据库文件&#xff0c;所在使用极其不方便&#xff0c;由于本人程序员&#xff0c;根据代码&#xff0c;自己花时间不全了数据库文件&#xff0c;并且可以完美运行&#xff01;&#xff01;&#xff01;&#xff01;&…

使用MQ的考量:系统可用性与复杂性

使用MQ的考量&#xff1a;系统可用性与复杂性 一、降低系统可用性二、增加系统复杂性 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 消息队列&#xff08;MQ&#xff09;在软件开发中扮演重要角色&#xff0c;但其使用也带来一些问题。本文…

原型与原型链与继承

原型、原型链与继承 构造函数 构造函数创建实例的过程 1.创建一个新对象 2.将空对象的__proto__指向构造函数的原型 3.修改构造函数中this指向&#xff0c;将构造函数中的this指向实例对象&#xff0c;执行构造函数中的代码&#xff0c;给这个新对象添加属性和方法&#x…

机器学习笔记:注意力机制中多头注意力的实现

目录 介绍 模型 代码实现 引入库 单个注意力头 多个注意力头的实现 测试 思考 介绍 在注意力机制中&#xff0c;单个注意力学到的东西有限&#xff0c;可以通过对不同的注意力进行组合&#xff0c;学到不同的知识&#xff0c;以达到想要的目的。因此采用”多头注意力…

windows 安装 Mysql

一、安装Mysql 下载完成后直接双击进行安装 安装一路默认 如下图所示&#xff0c;在MySQL Servers/MySQL Server/MySQL Server 5.7的下方找到MySQL Server 5.7.41 - X64&#xff0c;然后选中它&#xff0c;点击两框之间的第一个箭头&#xff0c;将其移到右边的框中 点击Exe…

接口基础知识8_详解response header(响应头)

课程大纲 一、定义 HTTP响应头&#xff08;HTTP Response Header&#xff09;&#xff1a;在HTTP协议中用于描述服务器响应的元数据。 它是服务器在响应客户端请求时&#xff0c;发送给客户端的一部分响应信息&#xff0c;包含了服务器的相关配置和响应内容的描述。 二、常见…

[机器学习]--KNN算法(K邻近算法)

KNN (K-Nearest Neihbor,KNN)K近邻是机器学习算法中理论最简单,最好理解的算法,是一个 非常适合入门的算法,拥有如下特性: 思想极度简单,应用数学知识少(近乎为零),对于很多不擅长数学的小伙伴十分友好虽然算法简单,但效果也不错 KNN算法原理 上图是每一个点都是一个肿瘤病例…

【C++深度探索】unordered_set、unordered_map封装

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;C从入门至进阶 这里将会不定期更新有关C/C的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目录…