shell、bash、terminal和kernel之间的关系
shell、bash、terminal和kernel之间的关系
本文是《鸟哥的Linux私房菜》的学习笔记
什么是kernel
kernel的中文是“操作系统核心”,主要用于管理硬件和提供相关的能力实现,例如存取硬盘、网络功能、CPU资源获取等。关于knernel和各个linux发行版之间的关系,这篇文章说的很好:
来源:https://www.fdzh.org/slides/2015/06/20/linux-distr/
Linux 发行版是什么,它又与Linux内核有什么联系?
Linux内核是计算机操作系统的核心。一个完整的 Linux发行版包括了内核与一些其他与文件相关的操作,用户管理系统,和软件包管理器等一系列软件。每个工具都是整个系统的一小部分。这些工具通常都是一个个独立的项目,有相应的开发者来开发及维护。
前面提到的Linux内核,包括现行版本,以及历史版本(即更早发布的版本)都可以在 www.kernel.org 找到。Linux的众多发行版可能是基于不同的内核版本的。例如:流行的 RHEL6发行版是基于很老但是很稳定的 2.6.32 版本的Linux内核的。其他的一些发行版可能会很快的更新以适应最新的内核版本。需要特别注意的一点是,内核并不是一个非此即彼的命题,例如RHEL6就在2.6.32的内核中引进了新版本内核的许多改进。
各发行版提供的其他基本工具和组成部分还有包括以下的内容:C/C++编译器,gdbdebugger 调试工具,核心系统库应用程序,用于在屏幕上绘图的底层接口以及高级的桌面环境,以及供安装和更新包括内核在内的众多组建的系统
众多不同的Linux发行版满足了不同用户及组织的不同需求。大型商业机构通常倾向于使用来由 Red Hat、 SUSE 及 Canonical (Ubuntu)提供的发行版。
Fedora 是基于RHEL,CentOS,Scientific Linux, 和Oracle Linux的社区版本。相比RHEL,Fedora打包了显著的更多的软件包。其中一个原因是,多样化的社区参与Fedora的建设;它不只是一家公司。在这个过程中,CentOS用于活动,演示和实验,因为它是对最终用户免费提供的,并具有比Fedora的一个更长的发布周期(通常每隔半年左右发布一个新版本)。
SUSE, SUSE Linux Enterprise Server (SLES), 和openSUSE 之间的关系类似于 Fedora, Red Hat Enterprise Linux, 和CentOS的关系。
Debian是包括Ubuntu在内许多发行版的上游,而Ubuntu又是Linux Mint及其他发行版的上游。Debian在服务器和桌面电脑领域都有着广泛的应用。Debian是一个纯开源计划并着重在一个关键点上,稳定性。它同时也提供了最大的和完整的软件仓库给用户。
注:Debian、Cent OS等等和Ubuntu一样,都是发行版本,指的就是基于linus维护的linux内核,是由一些厂商集成了漂亮易用的桌面和常用的软件而发布的商品。但是一部分发行版继承了另一部分发行版的功能,例如Ubuntu和Debian。内核版本只由linux的开发团队开发
关于各个发行版之间的比较,可以看这篇文章:https://www.zhihu.com/question/29406367
可以使用uname -a查看所使用的发行版的内核版本:例如我ubuntu 18.04查询的结果是5.0.0-32-generic
,查询网络可知,这个包包括的是“ the unsigned Linux kernel image for version 5.0.0 on ARMv8 SMP.”
什么是shell和bash
shell的意思是“壳程序”,指的是能对操作系统和应用程序进行操作的接口程序,狭义的壳程序指的是命令行方面的软件,例如bash;广义上也包括图形界面下的程序。
shell不止有一种。在计算机历史的长河里,有许多种shell,例如:
- Bourne shell(简称为sh):第一个shell
- C shell(简称为csh):由于语法和C语言类似而得名
- Bourne Again Shell(简称为bash):这是对Bourne shell的增强版本
- Tenex C shell(简称tcsh):是C shell的增强版本
我们的Linux默认使用的是bash,但是其实支持许多类型的。可以通过这个命令查看linux支持的shell:vim /etc/shells
.
不同shell的语法有差异。Linux默认使用的shell是bash,所以我们只需要学会bash,就能快乐的使用任意一个linux发行版了!
刚才我们提到的/etc/shells,其实是/etc目录下的一个文件,打开之后就能看到:
1 # /etc/shells: valid login shells
2 /bin/sh
3 /bin/bash
4 /bin/rbash
5 /bin/dash
这个文件用来记录系统中可以使用的shell的位置,但是只是一部分,不是全部。当系统进行某些服务时就能够依据这个文件的记录来进行操作。
/etc目录下还有一个文件叫passwd,我们使用vim打开看一下:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
不同的用户登录系统时,系统就会给我们一个默认shell来进行工作,那这个不同使用者默认的shell分别是什么哪?这些记录就都在/etc/passwd文件中。它可以帮助系统控制用户的权限,例如像这里的root用户可以使用bash,但是像一些权限较低的用户,例如这里的daemon和bin用户(这两个都是系统账号),就使用一个叫做nologin的shell,这个shell中限制了功能,从而限制了他们对系统的修改和对系统功能的使用。同样的,我们可以使用chsh命令来更换shell,但是更换的结果需要重启shell后才能体现出来。
另外,一些程序会根据/etc/shells这个文件来判断一个用户是否是有效用户,例如有些FTP服务会阻止那些shell不在/etc/shells里的用户登陆。这样,那些我们在/etc/passwd中设置了登录shell不在那个列表中的用户就不能使用这台主机上的ftp服务了
这样,我们就知道什么是shell和bash了吧
什么是terminal
我们在Linux下使用的terminal,实际上是一个“终端模拟软件”,它模拟了一台真正的终端,也就是几十年前时候的终端:只包括键盘+显示器,甚至是再之前时的电传打字机。现在,我们用的终端软件指的是可以运行shell命令的软件。它一般是捆绑在桌面环境上的,例如gnome terminal等等,我们自己也可以安装另外的terminal.它就是类似于输入法的一个应用程序。
什么是.bashrc
.bashrc位于/home/<用户名>的目录下
来源:https://linux.cn/article-9298-1.html
bash 是一个能解释你输入进终端程序的东西,并且基于你的输入来运行命令。它在一定程度上支持使用脚本来定制功能,这时候就要用到
.bashrc
了。为了加载你的配置,bash 在每次启动时都会加载
.bashrc
文件的内容。每个用户的 home 目录都有这个 shell 脚本。它用来存储并加载你的终端配置和环境变量。
进入.bashrc
vim ~/.bashrc
打开之后可以看到有许多项。
我们可以在这里追加alias来为命令取别名,从而简化在terminal中的输入。例如,我们可以将常用的ssh连接命令取别名,这样就不需要每次都输入一长串了。
bash的运行模式
来源:http://blog.sciencenet.cn/blog-3238131-1037461.html
Bash有几种不同的运行模式,login shell与non-login shell,interactive shell与non-interactive shell(比如执行shell脚本)。这两种分类方法是交叉的,也就是说一个login shell可能是一个interactive shell,也可能是个non-interactive shell。
在下列情况下,我们可以获得一个login shell:
- 登录系统时获得的顶层shell,无论是通过本地终端登录,还是通过网络ssh登录。这种情况下获得的login shell是一个交互式shell。
- 在终端下使用--login选项调用bash,可以获得一个交互式login shell。
- 在脚本中使用--login选项调用bash(比如在shell脚本第一行做如下指定:#!/bin/bash --login),此时得到一个非交互式的login shell。
- 使用"su -"切换到指定用户时,获得此用户的login shell。如果不使用"-",则获得non-login shell。
login shell与non-login shell的主要区别在于它们启动时会读取不同的配置文件,从而导致环境不一样。login shell启动时首先读取/etc/profile全局配置,然后依次查找/.bash_profile、/.bash_login、~/.profile三个配置文件,并且读取第一个找到的并且可读的文件。login shell退出时读取并执行~/.bash_logout中的命令。
交互式的non-login shell启动时读取~/.bashrc资源文件。非交互式的non-login shell不读取上述所有配置文件,而是查找环境变量BASH_ENV,读取并执行BASH_ENV指向的文件中的命令。通常我们要定制一些配置时,将配置写在/.bashrc中,然后在/.bash_profile中读取~/.bashrc,这样可以保证login shell和交互式non-login shell得到相同的配置。至于/etc/profile就不要轻易去改啦,毕竟会影响系统全局的配置。
shell、bash、terminal和kernel之间的关系的更多相关文章
- Kernel,Shell,Bash 的关系
Kernel (内核) Kernel 操作系统内核 操作系统内核是指大多数操作系统的核心部分.它由操作系统中用于管理存储器.文件.外设和系统资源的那些部分组成.操作系统内核通常运行进程,并提供进程间的 ...
- 什么是shell? bash和shell有什么关系?
什么是shell? bash和shell有什么关系? 博客分类: Linux 什么是Shell? shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序 ...
- 什么是shell? bash和shell有什么关系?
什么是Shell? shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序.你在提示符下输入的每个命令都由shell先解释然后传给Linux内核. ...
- 终于搞懂了shell bash cmd...
问题一:DOS与windows中cmd区别 在windows系统中,“开始-运行-cmd”可以打开“cmd.exe”,进行命令行操作. 操作系统可以分成核心(kernel)和Shell(外壳)两部分, ...
- linux shell & bash
shell & bash shell指允许用户通过文本操作计算机的程序. interactive shell:从是否通过标准输入输出与用户进行交互的角度分为交互式shell(interacti ...
- Linux中的文件描述符与打开文件之间的关系
Linux中的文件描述符与打开文件之间的关系 导读 内核(kernel)利用文件描述符(file descriptor)来访问文件.文件描述符是非负整数.打开现存文件或新建文件时,内核会返回一个文件描 ...
- quartz源码分析之深刻理解job,sheduler,calendar,trigger及listener之间的关系
org.quartz包 包org.quartz是Quartz的主包,包含了客户端接口. 其中接口有: Calendar接口: 定义了一个关联Trigger可能(或者不可能)触发的时间空间.它没有定义触 ...
- 20181225-Linux Shell Bash环境下自动化创建ssh互信脚本
20181225-Linux Shell Bash环境下自动化创建ssh互信脚本 1. 我的Blog 博客园 https://www.cnblogs.com/piggybaba/ 个人网站 http: ...
- 创建Oracle数据库、数据库名与实例名与SID之间的关系(图文详解)
分类: Oracle(9) 版权声明:转载请注明出处 JmilkFan_范桂飓:http://blog.csdn.net/jmilk 目录(?)[+] 目录 目录 软件环境 前言 安装Oracle监听 ...
随机推荐
- mock的使用
mock的重要性 mock就是对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建的方法.项目开发和测试过程中,遇到以下的情况时,就需要模拟结果返回. 1.当另一方接口或服务还未完成,阻碍项 ...
- 【转载】网页JS获取当前地理位置(省市区)
眼看2014又要过去了,翻翻今年的文章好像没有写几篇,忙真的或许已经不能成为借口了,在忙时间还是有的,就像海绵里的水挤挤总会有滴.真真的原因是没有学习过什么新的技术,工作过程中遇到的问题也不是非常难并 ...
- centos虚拟机存储扩容
在vSphere Web Client上面创建的虚拟机,用了一段时间后存储无法满足需求,需要将原来的存储300G扩容到500G 点此编辑即可修改磁盘2的储存大小,但是修改此配置后,虚拟机centos是 ...
- SafeVarargs的用法
转载自:http://softlab.sdut.edu.cn/blog/subaochen/2017/04/safevarargs%E7%9A%84%E7%94%A8%E6%B3%95/ @SafeV ...
- Go项目实战:打造高并发日志采集系统(四)
前情回顾 前文我们完成了如下目标1 项目架构整体编写2 使框架支持热更新 本节目标 在前文的框架基础上,我们1 将之前实现的日志监控功能整合到框架中.2 一个日志对应一个监控协程,当配置热更新后根据新 ...
- webbench接口并发测试
webbench接口并发测试 安装 安装工程中可能会出现确实Ctags的情况,可以进行命令安装: Ubuntu:apt install ctags Centos:yum install cta ...
- Jmeter启动报错解决方案
安装好jmeter之后在启动Jmeter的过程中出现了如下的报错信息(大部分的原因是配置不对): /usr/local/Cellar/jmeter/5.1.1/libexec/bin/jmeter: ...
- Linux服务器上安装openoffice,以及安装字体文件
1.安装openoffice (1)将openoffice的linux安装包放到linux指定的文件下(一般放在opt下) (2)在安装包的目录下执行命令:tar -zxvf 对应的压缩包名字 (3) ...
- 软件测试第4周小组作业:WordCount优化
一.基本任务:代码编写+单元测试 1.Github地址: https://github.com/Wegnery/New_WordCount 2.PSP2.1表格 PSP2.1 PSP阶段 预估耗时 ( ...
- 【计算机视觉】基于样本一致性的背景减除运动目标检测算法(SACON)
SACON(SAmple CONsensus)算法是基于样本一致性的运动目标检测算法.该算法通过对每个像素进行样本一致性判断来判定像素是否为背景. 算法框架图 由上图可知,该算法主要分为四个主要部分, ...