Linux CentOS7 shell

学好linux,首先要深入理解shell。

shell俗称壳,它包裹在内核的外面,是用户命令的翻译官。

作用:接收用户的命令,翻译后(处理一下)交给Linux内核处理。

用户执行命令 -> shell -> 内核 -> CPU -> 内核 -> shell ->用户获取结果

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

目前,CentOS默认的shell为bash。

不同的shell的命令会有所差别,这就是Ubuntu和CentOS等不同操作系统命令不一样的原因。

本文从shell的分类、查看信息和切换入手,讨论shell的相关知识。

一、shell分类

1.按使用环境

a.字符画shell

字符画shell就是CLl,也就是我们常说的命令行

Linux CentOS7 shell_第1张图片

Linux CentOS7 shell_第2张图片

b.图形化shell

图形化shell就是GUI,也就是我们常说的桌面

Linux CentOS7 shell_第3张图片

shell的图形化工具(dialog)

Linux CentOS7 shell_第4张图片

执行命令nmtui

Linux CentOS7 shell_第5张图片

2.按语言风格

目前较为流行或者历史上存在的一些shell的种类很多。目前流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。

a.bash

是自由软件基金会(GNU)开发的一个Shell,它是Linux系统中一个默认的Shell。Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。

b.sh

BourneShell(sh):是由AT&T Bell实验室的 Steven Bourne为AT&T的Unix开发的,它是Unix的默认Shell,也是其它Shell的开发基础。Bourne Shell在编程方面相当优秀,但在处理与用户的交互方面不如其它几种Shell。

c.ksh

ksh有42条内部命令,与bash相比有一定的限制性。但是ksh主要用于unix例如HP-Uinx

d.dash

dash是为跑脚本而生的,具有比bash更快的效率,但是交互性能较差。现在主要用在Debian和Ubuntu上。其内部命令以及参数等与bash有一些差别,如果使用bash命令写的一些脚本可能会出错。

e.tcsh & csh

把tcsh和csh放一起介绍是因为目前这两种sh其实是同一种,tcsh是csh的增强版,并且完全兼容csh。顾名思义csh,其实是具有C语言风格的一种shell,其内部命令有52个,较为庞大。目前使用的并不多。

f.pdksh

pdksh是Oracle自身的一种shell,主要用在Oracle数据库管理上。一般是DBA才会使用这种shell。它与ksh不能共存,如果系统中安装了ksh,那么安装pdksh时会报错。

g.zsh

目前Linux里最庞大的一种shell:zsh。它有84个内部命令,使用起来也比较复杂。一般情况下,不会使用该shell。

在查看/etc/passwd文件时,有一类系统用户使用/bin/nologin,这是指用户不能登录或不用登录,仅作为后台服务。

3.按是否登录

按登录方式,可以把shell分为登录shell和非登录shell两种。

a.登录shell

需要用户名、密码登录后才能进入的shell(或者通过"–login"选项生成的shell)。

b.非登录shell

不需要输入用户名和密码即可打开的Shell。

例如:直接命令"bash" 就是打开一个新的非登录shell,在Gnome或KDE中打开一个“终端”(terminal)窗口程序就是一个非登录shell。

执行exit命令,退出一个shell(登录或非登录shell);

执行logout命令,退出登录shell(不能退出非登录shell)。

4.按交互方式

按是否进行交互,分为交互式shell和非交互式shell两种。

a.交互式模式

就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互而达成目的。

这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。

b.非交互式模式

以shell script(非交互)方式执行脚本文件。

在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。

5.按传承关系

按传承关系或shell的上下级关系,可分为父shell和子shell两种。

a.父shell

在当前shell中,再打开一级shell时,当前shell称为父shell。而新打开的shell称为子shell

父子shell环境变量一致,但普通变量有独立作用域:父shell变量可以在子shell中使用,而子shell变量不能在父shell中使用。

Linux CentOS7 shell_第6张图片

b.子shell

shell可以继续创建子shell

生成子shell的成本不低,而且速度还慢,创建嵌套的子shell去处理命令进程性能更为严重。

通过输入exit命令能有条不絮的退出子shell

当没有了子shell时,再输入exit将退出控制台终端。

Linux CentOS7 shell_第7张图片

二、shell查看

通过命令行可以查看系统支持的shell,也可以查看当前用户正在使用的shell。

1.系统支持shell

查询系统支持的shell有两种方法。

a.cat /etc/shells

Linux CentOS7 shell_第8张图片

b.chsh –l

执行该命令,亦可以查看系统支持的shell。

Linux CentOS7 shell_第9张图片

2.当前使用shell

查询当前用户正在使用的shell,有多种方法,可以灵活选择。

a.echo $SHELL

执行命令显示出当前用户正使用的shell。

b.echo $0

Linux CentOS7 shell_第10张图片

c.env | grep SHELL

d.ps

Linux CentOS7 shell_第11张图片

三、shell切换

1.图形化shell与字符画shell

本系统设置运行级别为3

Linux CentOS7 shell_第12张图片

通过执行init 5

切换到图形化shell

Linux CentOS7 shell_第13张图片

可以通过按Ctrl+alt+F1-- Ctrl+alt+F2相互切换

也可以在命令行执行:

init 3/5  进行切换

2.bash与其他sh

a.添加用户时指定

b.修改用户sh

c.编辑/etc/passwd

Linux CentOS7 shell_第14张图片

d.chsh

执行下列命令,可以改变当前用户使用的shell。

        chsh -s /usr/bin/czh [用户名]

要更改的新的shell要写绝对路径。

Linux CentOS7 shell_第15张图片

修改了系统默认shell(或用户使用的shell)之后不会立即生效,之后再次登录系统修改的shell才会生效。

对于chsh命令,可以通过man chsh查看了解。

Linux CentOS7 shell_第16张图片

四.shell安装

选择使用不同的Shell,可以有各种原因。Shell一般由管理员在创建用户时,为用户指定;其保存在/etc/passwd文件中;或通过usermod命令进行更改。也可在登录后执行相应的命令切换Shell。

要使用不同的shell,就需要安装相应的shell软件。最方便的仍是用yum命令。

        yum -y install zsh

        yum -y install ksh

        yum -y install dash

Linux CentOS7 shell_第17张图片

小结

Shell其实是一个有特殊功能的程序,主要是提供用户与内核交互操作的一个接口。它的位置介于用户界面和内核之间,工作流程是接收用户输入的命令并且进行解释(转换为计算机可以理解的机械码),然后将命令送入内核去执行。我们一般通过ssh远程登录系统并且打开shell,也有一些是直接在图形界面上直接打开终端的方式打开shell。

Shell脚本的优势在于处理偏操作系统底层的业务,例如,Linux内部的很多应用都是使用Shell脚本开发的,因为有1000多个Linux系统命令为它作支撑,特别是Linux正则表达式以及三剑客grep、awk、sed等命令。

对于一些常见的系统脚本,使用Shell更符合Linux运维简单、易用、高效的三大原则。

你可能感兴趣的:(bash命令,linux,运维,服务器,vim,前端,python,c语言)