基础知识---认识shell和各种sh以及更新bash到高等级的bash5.0

                                  基础知识---认识shell和各种sh以及更新bash到高等级的bash5.0

一,什么是shell?什么是bash?

管理计算机硬件的其实是内核,用户正是通过shell来跟内核通信的,从本质上说shell是一个能执行各种命令的宏处理器。而bash(/bin/bash)就是linux默认的shell。其实说人话,shell是套在内核外的一个壳,一个桥梁,一个道路,本质就是一个软件,但这个软件干的事不普通,是接受用户命令,然后解释执行命令,从而调用系统内核的各类资源,也包括硬件的各类资源,比如cpu,内存,内存管理等等方面,当然,shell的另一层含义是一种语言,既然是语言,那么就有一些规范啦。/usr/bin/bash 这样的程序就是实现shell语言的解释器了。

相信读了以上内容,可能很多同学更迷糊了,没关系,这世界就是这么残酷的。主要是shell的定义十分宽泛,但有两个关键字,命令解释器(像不像编译器?),语言,牢记这么两个关键字就好理解了。

宽泛的和具化的shell的定义,只要是人与电脑之间交互的接口,就可以称为 Shell。有命令行的: bash 、sh 、csh 、ksh,ash,zsh, 有图形化的: KDE、GNOME、CDE、 XFCE​​​​​​​,Shell可以做成声控的,比如你说一段语音,你的“Shell”识别后翻译为调用程序的指令,执行成功后就可以把结果翻译为语音再返回给你。比如,你一定熟悉“小爱同学”,“Hi Siri”这种东西也可以称之为shell。windows的情况略显复杂,Windows 9X 系列的 内核是 DOS,图形化的 壳 叫 Windows Explorer ,命令行 壳 叫 command。从 Windows XP 开始,Windows 的 内核 叫做 Windows NT (Windows New Technology),图形化 壳 叫 Windows Explorer ,命令行 壳 有 command 、cmd.exe ,后面还推出了 Windows PowerShell。

实际上不管是 命令行 shell 还是图形化 shell ,或者披着人工智能外衣的声控shell,都是能访问操作系统中的某个具有一定功能、可以处理具体事务的文件(二进制文件 ---- 此类文件经常被称作工具)、或包含一定内容的文件(文本文件),通常都是通过文件名访问(当然有例外,比如 Linux 的 alias 命令,比如 通过链接文件访问源文件),所以通常文件名就成了命令。调用和执行解释命令就是shell的最根本的功能。

现在的各种Linux发行版基本统一的使用bash这个shell了,ash,csh,ksh,zsh并不是常用的或者说通用的shell了。

a,sh和bash

首先,我们看看在使用的bash 的版本信息。

[root@centos9 ~]# bash --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

 sh和bash的关系是什么?

[root@centos9 ~]# ls -alh /bin/sh
lrwxrwxrwx 1 root root 4 Sep  6 11:05 /bin/sh -> bash
[root@centos9 ~]# ls -alh /bin/bash
-rwxr-xr-x 1 root root 942K Apr  1  2020 /bin/bash

可以看到,sh是bash的链接文件,bash大小942k,接近一兆。 

那,我的操作系统是centos7版本,该操作系统默认的就是bash,版本为4.2.46。最后两句话说的是 这是一个免费的自由的软件,你可以编辑或者二次开发它,而无附加法律条文限制。

有的时候,操作系统自带的默认的bash版本可能并不符合我们的安全预期,因为老旧版本可能有各种安全方面的bug缺陷,我想要升级它到5.0(2019年发行的)。可以吗?当然可以,这就安排。

http://ftp.gnu.org/gnu/bash/bash-5.0.tar.gz 这个为下载地址,下载完毕后,上传到服务器内,素质解压三连,懂的都懂。凡是需要编译的软件,gcc-c++ 必不可少,这个要牢记

yum install gcc-c++ -y

cd到解压的目录内, ./configure && make && make install

[root@centos9 bash-5.0]# pwd
/root/bash-5.0
[root@centos9 bash-5.0]# ./configure && make && make install

备份原bash主文件,链接新bash主文件到原位置 

[root@centos9 bash-5.0]# mv /bin/bash /bin/bash.bak
[root@centos9 bash-5.0]# ln -s /usr/local/bin/bash /bin/bash

 查看bash 的版本,验证是否升级正确:

[root@centos9 bash-5.0]# bash --version
GNU bash, version 5.0.0(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

注意:虽然bash升级成功了,但csh完全不可用了,具体原因不清楚。待查

b,csh和tcsh

Bill Joy于20世纪80年代早期,在伯克利的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。

[root@centos11 ~]# ls -al /bin/csh
lrwxrwxrwx 1 root root 4 Sep 26 11:39 /bin/csh -> tcsh
[root@centos11 ~]# ls -al /bin/tcsh
-rwxr-xr-x 1 root root 404640 Apr  1  2020 /bin/tcsh
[root@centos11 ~]# ls -alh /bin/tcsh
-rwxr-xr-x 1 root root 396K Apr  1  2020 /bin/tcsh

以上表示,csh是tcsh的一个链接文件,这些文件都在系统环境变量下,tcsh这个文件大小为396k,相比bash要小不少,当然,功能也要少一些吧。

c,Korn Shell,也就是ksh

有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,AT&T的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,Korn shell广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。

d,Bourne Shell

首个重要的标准Unix Shell是1979年底在V7 Unix(AT&T第7版)中引入的,并且以它的创始科技部基础条件平台“国家气象网络计算应用节点建设”(2004DKA50730)资助者Stephen Bourne的名字命名。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。

e,POSIX Shell

POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0,POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.

各主要操作系统下缺省的,也就是默认使用的shell:

AIX下是Korn Shell.

Solaris缺省的是Bourne shell.

FreeBSD缺省的是C shell

HP-UX缺省的是POSIX shell.

Linux是Bourne Again shell

无疑,最后一个,也就是bash是最为强大的的shell,也是使用最多,最常用的一个shell了吧。如果Shell 函数成功地执行了所要执行的文件,则它会返回程序的任务 ID。任务 ID 是一个唯一的数值,用来指明正在运行的程序。如果 Shell 函数不能打开命名的程序,则会产生错误。​​​​​​​(pid的由来吧,我反正是没有在哪个操作系统的某个时刻见到过一个相同的pid)。

总结一下:bash升级会破坏csh和tcsh,因此,如果你所使用的操作系统工作需要使用到csh,请不要盲目升级

切换shell的命令为:chsh,示例如下:

[root@centos11 ~]# chsh
Changing shell for root.
New shell [/bin/bash]: /bin/tcsh
Shell changed.
[root@centos11 ~]# tcsh
[root@centos11 ~]# echo $SHELL
/bin/bash

更改shell为tcsh,需要重启系统后生效,重启后的效果:

[root@centos11 ~]# echo $SHELL
/bin/tcsh
[root@centos11 ~]# 
[root@centos11 ~]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/tcsh
operator:x:11:0:operator:/root:/sbin/nologin

可以看到,passwd文件的shell解释器已经自动改为tcsh了。

猜你喜欢

转载自blog.csdn.net/alwaysbefine/article/details/113791985