首页 > 系统相关 >终端、shell和bash的区别

终端、shell和bash的区别

时间:2024-03-02 18:11:06浏览次数:21  
标签:shell 计算机 虚拟 终端 world 控制台 bash

什么是终端?

我们总在说在终端中如何操作,那么终端到底是什么呢?为什么它会有这么大的权利?

要说清终端是什么,我们先来看看操作系统的组成。

简化来说,操作系统分为两个部分,一部分称作内核,另一部分成为用户交互界面。

  • 内核部分负责系统的全部逻辑操作,由海量命令组成,这一部分是系统运行的命脉,不与用户接触;

  • 交互界面则是开机之后所有我们所看到的东西,比如窗口,软件,应用程序等等。

那么我们若我们想对系统内核的某些操作逻辑做出一些修改,应该怎么办呢?
终端就是连接内核与交互界面的这座桥,它允许用户在交互界面上打开一个叫做「Terminal 终端」的应用程序,在其中输入命令,系统会直接给出反馈。

因为终端这座桥,实际允许用户间接控制系统内核,也就是系统的大脑,因此它理论上具备控制一切的权利。

终端是一种设备,不是一个程序,一般说的就是能提供命令行用户界面的设备,典型的是屏幕和键盘,或其他的一些物理终端。

  • 虚拟终端:
    屏幕和键盘只是一个终端,可能不够用,又不想增加设备投入,就产生了虚拟终端。
    gnome-terminal,urxvt,mlterm,xterm等等:
    是一个程序,职责是模拟终端设备,和虚拟终端的区别表面上在于它以 GUI 形式的窗口出现,内部则是程序结构和系统控制结构有所不同,但本质上差不多。

  • 控制台(console):
    显示系统消息的终端就叫控制台,Linux 默认所有虚拟终端都是控制台,都能显示系统消息。
    但有时专指CLI下的模拟终端设备的一个程序,和gnome-terminal,urxvt,mlterm,xterm等相同,只是CLI和GUI界面的区别。
    一般console有6个,tty1-6,CTRL+ALT+fn切换。还没听说过怎么换console

终端、shell和bash的区别

  • Linux下是terminal就是内核与交互界面的桥,而windows相似的作用的是cmd命令行,而powershell是cmd的超集,

  • 终端,即所谓的命令行界面,又称命令终端,用户输入shell命令用的窗口,跟Windows里的DOS界面差不多。

  • shell
    Shell就是用户和操作系统之间的壳,中介,GUI和CLI都算是Shell,登陆终端可以是登陆了Bash也可能是Csh或者Dash;是操作系统与用户交互用的接口,在命令终端里可以使用shell。
    shell将用户输入翻译为操作系统能处理的指令。shell提供了一些内置命令,也支持调用外面工具。

  • shell与终端的关系:
    shell把一些信息适当的输送到终端设备,同时还接收来自终端设备的输入。一般每个shell进程都会有一个终端关联,也可以没有。

  • dash
    是ubuntu里默认的shell。shell有好多种,除支持默认的POSIX标准外还支持不同的扩展语法,目前最常用的是bash,很多shell学习的教程都是针对bash的。
    dash除了不支持数组外,其实和bash差别也不大。ubuntu里可以将默认shell由dash改为bash。

专业解答 ->终端和控制台的概念

终端,英文叫做terminal ,通常简称为term ,比如我们在X下的xterm.   
控制台,英文叫做console。   

要明白这两者的关系,还得从以前的多人使用的计算机开始。   

大家都知道,最初的计算机由于价格昂贵,因此,一台计算机一般是由多个人同时使用的。在这种情况下一台计算机需要连接上许多套键盘和显示器来供多个人使用。

在以前专门有这种可以连上一台电脑的设备,只有显示器和键盘,还有简单的处理电路,本身不具有处理计算机信息的能力,他是负责连接到一台正常的计算 机上(通常是通过串口) ,然后登陆计算机,并对该计算机进行操作。

当然,那时候的计算机操作系统都是多任务多用户的操作系统。这样一台只有显示器和键盘能够通过串口连接到计算机 的设备就叫做终端。   

而控制台又是什么回事呢? 学机电的人应该知道,一台机床,或者数控设备的控制箱,通常会被称为控制台,顾名思义,控制台就是一个直接控制设备的台面(一个面板,上面有很多控制按钮)。

在计算机里,把那套直接连接在电脑上的键盘和显示器就叫做控制台。

请注意它和终端的区别,终端是通过串口连接上的,不是计算机本身就有的设备,而控制台是 计算机本身就有的设备,一个计算机只有一个控制台。

计算机启动的时候,所有的信息都会显示到控制台上,而不会显示到终端上。

也就是说,控制台是计算机的基 本设备,而终端是附加设备。

当然,由于控制台也有终端一样的功能,控制台有时候也被模糊的统称为终端。

计算机操作系统中,与终端不相关的信息,比如内核消息,后台服务消息,都可以显示到控制台上,但不会显示到终端上。

以上是控制台和终端的历史遗留区别。

现在由于计算机硬件越来越便宜,通常都是一个人独占一台计算机超做,不再连接以前那种真正意义上的“终端设备了”,因此,终端和控制台的概念也慢慢演化了。

终端和控制台由硬件的概念,演化成了软件的概念。   

现在说的终端,比如linux中的虚拟终端,都是软件的概念,他用计算机的软件来模拟以前硬件的方式。

比如在linux中,你用 alt+f1 ~ f6 可以切换六个虚拟终端,就好比是以前多人公用的计算机中的六个终端设备,这就是为什么这个叫“虚拟终端”的原因。

当然,现在的linux也可以通过串口线,连接一个真正的终端,现在这种终端设备已经非常罕见了,但是还存在,只是一般人很难见到。

也有人利用以前的老电脑(386,486)装上一个串口通信软件,连上一台计算机,来模拟一个终端来用。这样可以达到一台电脑多人使用的目的。

简单的说,能直接显示系统消息的那个终端称为控制台,其他的则称为终端。但是在linux系统中,这个概念也已经模糊化了。

比如下面这条命令:echo "hello,world" > /dev/console   

这条命令的目的是将"hello,world"显示到控制台上/dev/console是控制台设备的设备名。

在linux中,在字符模式下,你无论 在哪个虚拟终端下执行这条命令,字符hello,world都会显示在当前的虚拟终端下。

也就是说,linux把当前的终端当作控制台来看待。

可见, linux中已经完全淡化了控制台和终端的区别。

但是在其他的UNIX类系统中,却很明显的有虚拟终端和控制台的区别。比如 freeBSD系统。  

在freebsd中,只有第一个“终端”才是真正的控制台。(就是说按alt+f1得到的那个虚拟终端) ,你无论在哪个虚拟终端上执行上面的那条命令(哪怕是通过网络连接的伪终端上执行这条命令)。hello,world字符总会显示到第一个“终端”也就是 真正的控制台上。

另外,其他的一些系统内部信息,比如哪个用户在哪个终端登陆,系统有何严重错误警告等信息,全都显示在这个真正的控制台上。

在这里,就明 显的区分了终端和控制台的概念。其他UNIX中也是这样的。比如Tru64 unix 在X下有一个控制台模拟软件,你无论在哪里输入echo "hello,world" > /dev/console命令,hello,world总会显示在这个控制台模拟器中。

我们在X界面下用的那些输入命令的软件,比如xterm ,rxvt, gnome-terminal等等,都应该被称为终端模拟软件。

请注意它和控制台模拟软件的区别。 linux中好象没有控制台模拟软件。在X中的终端模拟 软件中输入的echo "hello,world">/dev/console 命令的输出信息,都会输出到启动该X服务器的虚拟终端上。

比如,你用字符方式登陆系统。进入第一个虚拟终端,然后startx启动X服务器。再打开 xterm 来输入 echo "hello,world">/dev/console 命令,那么字符串hello,world就显示在第一个虚拟终端上。你按ctrl+alt+f1,回到那个启动X服务器的终端,就可以看到hello, world字符串。  

现在该明白终端和控制台的区别了吧。

再简单的说,控制台是直接和计算机相连接的原生设备,终端是通过电缆、网络等等和主机连接的设备。   

在以前的硬件终端设备中,由于生产厂家不同,所遵循的标准不同,因此有不同的型号标准。比如vt100等。这里的vt100就是一个标准,
那么现在我们所说的终端,往往不是真正的硬件终端了,而是终端模拟软件了,
因此不同的终端模拟软件可能符合不同的标准,还有一些终端模拟软件符合很多种不同终端的标准。
比如gnome的终端模拟软件gnome-terminal,他提供好几中标准可供用户选择。用户只要设置一下就可以了。  

现在,由于原先的这些设备在我们的视线中渐渐淡出,控制台和终端的概念也慢慢谈化。

普通用户可以简单的把终端和控制台理解为:可以输入命令行并显示程序运行过程中的信息以及程序运行结果的窗口。
不必要严格区分这两者的差别。

标签:shell,计算机,虚拟,终端,world,控制台,bash
From: https://www.cnblogs.com/guanghui-hua/p/18049005

相关文章

  • powershell连接sqlite
    试着用powershell连接sqlite数据库,网上搜到RayFerrell的”SQLitewithPowerShell:AStep-by-StepGuidetoDatabaseManagement“一遍,验证有效,就是广告太多不给出链接了。第一步是需要donet驱动(可以看出ms自家的脚本和dotnet的深度集成)到sqlite主页下载System.Data.SQLite,htt......
  • scrapy——终端持久化存储
    笔记-基于终端指令:-要求:只可以将parse方法的返回值存储到本地的文本文件中scrapycrawldou-o./douban.csv-注意:持久化存储的类型只可以是'json','jsonlines','jsonl','jl','csv','xml','marshal','pickle'这些......
  • SSH连接告警:-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
    问题ssh连接登录时报错Lastlogin:SatMar209:58:252024from10.10.1.1-bash:warning:setlocale:LC_ALL:cannotchangelocale(en_US.UTF-8)[root@master01~]#解决系统已经设置了默认地区_语言,字符集为en_US.UTF-8,但是在系统中没有定义对应的locale文件,只......
  • SiteServer CMS远程模板下载getshell漏洞导致的黑SEO利用分析溯源
    前言某日中午,涉及一代理商客户网站发现异常SQ内容,要求进行溯源分析并找出根本原因。0x01初步分析通过提供的链接(www.xxx.com.cn/2023j19tPLKn2/55151),确认涉及黑帽SEO活动,通过百度搜索进一步验证也证实了这一点。0x02日志分析黑客常常在植入菠菜或非法广告的网站中设置后......
  • 供应链投毒预警 | 恶意NPM包利用Windows反向shell后门攻击开发者
    概述​本周(2024年02月19号),悬镜供应链安全情报中心在NPM官方仓库(https://npmjs.com)中发现多起NPM组件包投毒事件。攻击者利用包名错误拼写方式(typo-squatting)在NPM仓库中连续发布9个不同版本的恶意包,试图通过仿冒合法组件(ts-patch-mongoose)来攻击潜在的NodeJS开发者。开发者......
  • linux之whiptail交互式shell脚本对话框
    简单说明当你在linux环境下setup软件的时候就会有相应的对话框让你输入。虽然我们已经习惯了这种交互的方法,但是如果有一种直观的界面来输入是不是会更加友好和方便呢,在shell脚本中你可以使用-whiptail指令来完成。效果如下[root@~]#cattest.sh#!/bin/bashOPTION=$(whiptai......
  • Shell去除文件中重复的行
    需求一个a.txt文件中有很多ip和端口,在去重的同时,将每行中的多个空格替换为一个空格,输出文件中将保留后面出现的相同行,并且多个空格被替换为一个空格。脚本实现#!/bin/bash#设置输入文件和输出文件路径input_file="a.txt"output_file="unique_a.txt"#删除已存在的输出......
  • 初尝XShell破防实录
     一直纠结于connectionfailed没有登录,到头来failed是因为没有登录输入命令 sshusername@主机ip登录目前还没有设置免密登录这次的目的是安装conda了解到miniconda比anaconda更简洁,but好像大多数人都安装的事anaconda,关于XShell安装miniconda的教程以及问题解决就更少了......
  • linux shell 中实现进度条
     linux shell中实现进度条:#!/bin/bashtotal_steps=100for((step=1;step<=total_steps;step++));doprintf"\r[%-50s]%d%%"$(printf"#%.0s"$(seq1$((step*50/total_steps))))$((step*100/total_steps))sleep0.1#模拟操作延迟d......
  • 终端克隆 GitHub 私有仓库
    在vscode软件内的终端中,克隆自己的私有账户不需要任何验证手段(可能会根据vscode登录的账号进行验证)但是命令行中进行克隆操作,则需要验证:根据官方文档:Aboutremoterepositories-GitHubDocsCloningwithHTTPSURLs需要经过验证,而密码不是自己的账户密码,是personalac......