Linux CentOS7 shell

news/2024/7/21 15:14:12 标签: linux, 运维, 服务器, vim, 前端, python, c语言

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

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

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

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

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

目前,CentOS默认的shell为bash。

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

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

一、shell分类

1.按使用环境

a.字符画shell

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

b.图形化shell

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

shell的图形化工具(dialog)

执行命令nmtui

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中使用。

https://img2018.cnblogs.com/i-beta/1732325/201912/1732325-20191230224708160-1247329388.png

b.子shell

shell可以继续创建子shell

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

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

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

二、shell查看

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

1.系统支持shell

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

a.cat /etc/shells

b.chsh –l

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

2.当前使用shell

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

a.echo $SHELL

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

b.echo $0

c.env | grep SHELL

d.ps

三、shell切换

1.图形化shell与字符画shell

本系统设置运行级别为3

通过执行init 5

切换到图形化shell

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

也可以在命令行执行:

init 3/5  进行切换

2.bash与其他sh

a.添加用户时指定

b.修改用户sh

c.编辑/etc/passwd

d.chsh

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

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

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

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

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

四.shell安装

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

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

        yum -y install zsh

        yum -y install ksh

        yum -y install dash

小结

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

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

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


http://www.niftyadmin.cn/n/5135747.html

相关文章

Ruby中的self、作用域和可见性

self所指的是当前或者默认对象,是一个在程序运行中依次分配给许多对象的角色。 一、理解self、当前对象或默认对象 Ruby编程的基础之一即默认对象或当前对象,在程序中是通过关键字self来访问的。在程序运行中的每一处有且只有一个,正如读者…

项目解读_v2

1. 项目介绍 如果使用task2-1作为示例时, 运行process.py的过程中需要确认 process调用的是函数 preprocess_ast_wav2vec(wav, fr) 1.1 任务简介 首个开源的儿科呼吸音数据集, 通过邀请11位医师标注; 数字听诊器的采样频率和量化分辨率分…

线程池是如何实现线程复用的?

线程池里面采用了生产者消费者的模式,来实现线程复用。生产者消费者模型,其实就是通过一个中间容器来解耦生产者和消费者的任务处理过程。 生产者不断生产任务保存到容器,消费者不断从容器中消费任务。在线程池里面,因为需要保证工…

关于Anaconda及其镜像源的相关问题

1. 创建的虚拟环境中没有bin文件 conda create -n test_env请在上诉代码后添加对应的python对应版本,即可创建成功 conda create -n test_env python3.82. 关于anaconda中镜像源的相关操作 设置pip的全局索引源为阿里云镜像(注意是全局索引&#xff0…

判断是否为AVL树

leetcode题目链接 自顶向下的递归 class Solution { public:bool isBalanced(TreeNode* root) {if(root)return abs(maxDepth(root->left) - maxDepth(root->right)) < 1 && isBalanced(root->left) && isBalanced(root->right);return true;}i…

买车软件有哪些,买车软件哪个好

买车软件是指为购买汽车提供便利的手机应用程序&#xff0c;可以帮助消费者找到心仪的汽车型号、比较不同车型的价格、了解车辆的详细参数和配置、预约试驾、办理贷款、购车保险等一系列服务。 买车软件可以让用户更加便捷地了解汽车信息、比较不同车型的价格和配置、预约试驾…

文件类漏洞总结, 文件包含, 文件上传, 文件下载

文件类漏洞总结 一, 文件包含 1. 文件包含绕过 实际环境中不是都是像$_GET[file]; incude $file 这样直接把变量传入包含函数的。 在很多时候包含的变量文件不是完全可控的&#xff0c;比如下面这段代码指定了前缀和后缀: <?php $file S_GET[filename]; include /opt/…

【并发编程】进程与线程

主要知识点&#xff1a; 进程和线程的概念 并行和并发的概念 线程基本应用 一、进程与线程 进程 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘、…