Linux Bash Shell 脚本入门(2)——GNU

这篇具有很好参考价值的文章主要介绍了Linux Bash Shell 脚本入门(2)——GNU。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux Bash Shell 脚本入门(2)——GNU

目录
  • Linux Bash Shell 脚本入门(2)——GNU
    • GNU与Linux
      • GNU
        • GNU的组成
      • Shell
      • GNOME桌面环境
        • X Window 软件
      • GNOME

可点击内容,大部分来自维基百科,可以点击了解详情。

GNU与Linux

GNU

GNU操作系统起源于GNU计划,由理查德·斯托曼在麻省理工学院人工智能实验室发起,希望发展出一套完整的开放源代码操作系统来取代Unix,计划中的操作系统,名为GNU。

GNU的商标是一个牛羚头。原先版本是Etienne Suvasa所设计,而今比较流行的粗体版本则是Aurelio Heckert所设计。

GNU是一个自由的操作系统,其内容软件完全以GPL方式发布(什么是GPL下文会介绍)。这套操作系统是GNU计划的主要目标,名称来自GNU's Not Unix!的递归缩写,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码。

读到这里你可能会难以理解,我从来没听说过GNU操作系统,像是Linux,Unix这种都是很有名的,但GNU到底是什么?

1983年9月27日,理查德·斯托曼在 net.unix-wizards 和 net.usoft新闻组中公布这项GNU计划。斯托曼的目标是成立一个完全自由的操作系统,他希望电脑用户是能够“自由使用”的。

为什么要在这里强调自由使用呢?因为在20世纪60年代和70年代 - 大多数人都能自由学习软件的源代码,自由地与他人分享的软件,可自由修改软件,自由发布软件修改后的版本。也就是说早些年软件几乎不存在著作权,每个人都可以自由地使用和修改。

1984年1月5日,理查德正式开始开发软件,为了防止这些软件将来可能被主张所有权,影响到Free Software的发展,斯托曼辞去了在实验室的工作。

理查德·斯托曼使用不兼容分时系统(英语:Incompatible Timesharing System) (ITS)[6](一种早期的操作系统,使用汇编语言撰写,因其所运行的被称为 PDP-10的电脑系统架构停止发展而变得过时)的经验,决定了需要设计一种可移植系统。由此,会议决定,将开发新的系统,并使用 C 和Lisp作为系统编程语言。[8] GNU将与UNIX兼容。[9] 当时,UNIX已经是一个流行的专有操作系统。而Unix的设计是模块化的,所以它可以被逐步分块的实现。

Unix在学术机构和大型企业中得到了广泛的应用,当时的UNIX拥有者AT&T公司以低廉甚至免费的许可将Unix源码授权给学术机构做研究或教学之用,许多机构在此源码基础上加以扩展和改进,形成了所谓的“Unix变种”,这些变种反过来也促进了Unix的发展。

后来AT&T意识到了Unix的商业价值,不再将Unix源码授权给学术机构,并对之前的Unix及其变种声明了著作权权利。BSD在Unix的历史发展中具有相当大的影响力,被很多商业厂家采用,成为很多商用Unix的基础。其不断增大的影响力终于引起了AT&T的关注,于是开始了一场持久的著作权官司,至此人们意识到我们需要一个完全免费的操作系统。

1984年,开始发展编辑器Emacs等软件。1985年,发表GNU宣言。1989年,发表GNU通用公共许可协议。这个公共开源许可协议,你如果开源过项目一定见过,它叫GPL协议,GPL是自由软件和开源软件的最流行许可证[18]。到2004年4月,GPL已占Freshmeat(英语:Freshmeat)上所列的自由软件的约75%,SourceForge的约68%。类似的,2001年一项关于Red Hat Linux 7.1的调查显示一般的代码都以GPL发布。著名的GPL自由软件包括Emacs,Linux核心(并非所有Linux发行版的核心都是开源的)和GCC。

我们回到GNU的操作系统来,因为许多必要的软件需要从零开始写起来,但是有很多已经存在的第三方组件如 TeX、X Window System[4]和Mach微内核等等都可以进行利用,其中GNU最关键系统内核,是在GNU Mach微内核基础上进行开发,理查德·马修·斯托曼认为可以借此加速操作系统的开发,但因为一直不确定卡内基梅隆大学何时要将核心源代码发布,造成计划延宕三年。他在之后承认这是个错误。

下图是大佬的照片:

除了上述的第三方组件外,大多数的GNU软件是由许多志愿者,在他们的空闲时间,或由公司、教育机构和非营利性组织赞助下撰写。

到 1990 年代初期,操作系统中所需的许多程序(例如库、编译器、文本编辑器、命令行 shell和窗口系统)已完成,尽管一些底层元素如称为GNU Hurd的设备驱动程序、守护进程和内核都停滞不前且不完整。

1991年,Linux出现。1993年,FreeBSD发布。FreeBSD就是当年与Unix著作权持有公司达成协议重写的免费版Unix,所有GNU计划中,运行于用户空间的软件,都可以在Linux或FreeBSD上使用。许多开发者转向于Linux或FreeBSD。其中,Linux成为常见的GNU计划软件运行平台。理查德·斯托曼主张,Linux操作系统使用了许多GNU计划软件,应正名为GNU/Linux,但没有得到Linux社群的一致认同,形成GNU/Linux命名争议。

林纳斯·托瓦兹(Linus)开始在MINIX上开发Linux内核,为MINIX写的软件也可以在Linux内核上使用。1991年Linus[16]后来使用GNU软件代替MINIX的软件,因为使用从GNU系统来的源代码可以自由使用,这对Linux的发展有益。同时在GPL的规定下,使用GNU GPL协议的源代码可以被其他项目所使用,只要这些项目使用同样的协议发布源码。

对于GNU来说没有构成自己的操作系统是失败的,但是这个失败确实促进了行业进步与发展,林纳斯·托瓦兹曾说过如果GNU内核在1991年时可以用,他不会自己去写一个。实际上现在GNU代指的是当年发展下来的一系列软件。

GNU的组成

该系统的基本组成包括

  • GNU编译器套装(GCC)
  • GNU的C库(glibc)
  • GNU核心工具组(coreutils)
  • GNU调试器(GDB)
  • GNU编程语言工具程序(binutils)
  • GNU Bash shell[10]
  • GNOME桌面环境

GNU开发人员已经转向GNU应用程序和工具的Linux 移植 ,现在也广泛应用在其它操作系统中使用,上文我们提到的MinGW实际上叫Minimalist GNU for Windows,也就是向Windows移植的GNU最小套件,是将GCC编译器和GNU Binutils移植到Win32平台下的产物,包括一系列头文件(Win32API)、库和可执行文件。另有可用于产生32位及64位Windows可执行文件的MinGW-w64项目,是从原本MinGW产生的分支。

参考:wiki

Shell

shell是种特殊的交互工具,为用户提供了启动程序,管理文件系统中的文件及运行在Linux系统中的进程的途径。shell的核心就是命令行提示符,负责shell的交互部分,允许用户输入文本命令,然后解释命令并在内核中执行。

常见的命令被用来复制、移动、重命名文件等,你用鼠标实现的操作,在shell中都可以实现,除此之外,shell也允许在命令行提示符中输入程序的名称,他会将程序名称传递给内核以启动程序。

同时也允许,将多个shell命令放入文件中作为程序执行。这些文件成为shell脚本。凡是能在命令行中执行的命令都可以放入shell脚本中作为一组命令执行。

linux中所有发行版的默认几乎都是bash shell,bash shell 是GNU Bash shell[10] ,目的是为了替代老版本Unix系统中的Unix shell,Bash shell名字的由来非常有意思,其名字来源于一个谐音梗 Bourne Again Shell (念作 born again)的缩写,Linux 中当然不仅仅包括GNU的 Bash Shell 也包含其他的shell比如:

  • ash:轻量级别的shell,适合运行在内存受限的环境中,比如嵌入式等。
  • korn:一种与Born Shell兼容的shell,但支持一些高级特性,浮点运算等。
  • tcsh:一种包含了一些C语言特性引入到shell脚本的shell。
  • zsh:一种结合了bash、korn、tcsh的特性的shell。

关于shell的内容会在以后的内容中详细介绍,这里就不再赘述。

GNOME桌面环境

随着Linux系统的发展,最初的操作系统文本界面到图形化的发展,操作系统不仅仅服务于计算机开发人员,逐渐走向大众化,用户不再满足于陈旧的文本命令行交互,图形化的操作界面的日渐强烈,当然完成工作的方式不只有一种,Linux一直以来都以此为闻名。图形化桌面更是如此。Linux有多种图形化桌面可供选择。接下来会介绍一种属于GNU项目的桌面环境。

X Window 软件

有两个基本要素决定了你的视频环境,显卡和显示器,显卡如何让显示器显示就需要软件来实现,LInux中扶着一部分的就是X Window,X Window是图形现实的核心部分,控制Linux应用如何在显示器上呈现漂亮的窗口和图形。X Window System,通常简称为X11或X,是一个基于位图的显示系统,用于在位图显示器上提供图形用户界面(GUI)。

X Window System的关键特性包括:

  • 网络透明性:X Window系统设计之初就考虑到了网络支持,允许应用程序的图形界面可以在网络上的任何地方显示,实现了客户端与服务器之间的通信。这意味着,一个运行在网络中某台计算机上的应用程序可以将其图形界面显示在连接到同一网络的另一台计算机上。
  • 客户端-服务器架构:在X Window系统中,"服务器"是运行在用户机器上的程序,它管理屏幕、键盘、鼠标等输入输出设备。"客户端"是指任何请求服务器服务的程序,比如图形应用程序。这里的“服务器”和“客户端”的概念与常规意义上的网络服务和使用者相反。
  • 设备和网络独立性:X Window系统与具体的硬件设备和网络协议无关,可以在各种不同的硬件和网络环境中运行。
  • 灵活性和扩展性:X Window提供了基本的框架和协议,开发者可以在其之上构建各种窗口管理器和桌面环境,如GNOME、KDE等,这使得用户界面可以高度定制化。

尽管X Window本身不是驱动程序,但它依赖于底层的硬件驱动程序来进行图形渲染和设备输入输出操作。例如,X服务器需要与显卡的驱动程序交互,以控制屏幕上的图形显示。因此,为了使X Window系统正常工作,相应的硬件设备(如显卡、键盘、鼠标等)需要有正确安装的驱动程序。

Linux中能够实现 X window的软件不止有一种,Linux中最常见用的有:

  • wayland
  • X.org

X.org基于最初的Unix X Windos System版本11 ,后来大家把他简称为X11,属于常用的两种的比较老的版本,新版的linux正在向wayland迁移,虽然这样说,但是目前Ubuntu22.04默认的还是X11:

在首次安装Ubuntu的时X11会检测显卡和显示器,然后创建一个含有必要信息的X Window配置文件。在安装过程中,安装程序会检测一次显示器,以确定所支持的视频模式。有时这会造成显示器黑屏几秒。由于显卡和显示器的种类繁多,因此这个过程可能需要花费一点时间。

核心的X Window 软件能够生常图形化现实环境,但仅此而已。尽管这已足以运行单独的应用程序,但在日常的计算机使用中并不是特别有用,因为毕竟没有提供桌面环境,用户无法知道该如何启动程序,操作文件,为此需要在此基础上建立一个桌面环境。

注意一下,下图驱动部分是Nouveau 驱动,是X11的下层驱动:

至于想搞明白每一个环节的具体工作可以参考:

GNOME

Gnome桌面工作在Xorg-Server的上层,提供给用户相应的桌面环境,其全称是(GNU Network object model enviroment,GNU网络对象模型环境)是另一个流行的Linux桌面环境,GNOME于1990年首次发布,现已成为许多Linux发行版默认的桌面环境。

随着发展GNOME已经度过了很多个版本,可以通过以下命令来查看当前的GNOME版本:

neo@NeoNeuxs:~/Desktop$ gnome-shell --version
GNOME Shell 42.9

GNOME桌面环境又被称为GNOME-Shell,为什么会有shell这个单词呢?

"Shell"(壳)在这里的含义与其在计算机科学中的一般含义相似,指的是一个提供用户界面的软件层,用户可以通过这个界面与系统的更深层次的功能进行交互,在操作系统中,"shell"通常指的是提供与用户交互的界面,这可以是命令行界面(CLI)或图形用户界面(GUI)。GNOME Shell 是后者的一个例子,它提供了一个图形界面供用户启动程序、管理窗口、切换任务等。

一个新版的Gnome-shell如下:文章来源地址https://www.toymoban.com/news/detail-825402.html

到了这里,关于Linux Bash Shell 脚本入门(2)——GNU的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux:Shell脚本和Shell变量的入门指南

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z05Ey0Tt-1687331750572)(https://example.com/linux-shell-image.png)] Shell脚本是一种用于自动化任务和批处理的脚本语言,主要用于Unix和Linux系统。它提供了一种简单而强大的方式来执行系统命令、处理文件、控制流

    2024年02月10日
    浏览(42)
  • BASH shell脚本篇4——函数

     这篇文章介绍下BASH shell中的函数。之前有介绍过shell的其它命令,请参考: BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 BASH shell脚本篇3——字符串处理 函数是代码重用的最重要方式。Bash函数可以定义为一组命令,在bash脚本中多次调用。bash函数使脚本更具可

    2024年02月07日
    浏览(28)
  • BASH shell脚本篇5——文件处理

     这篇文章介绍下BASH shell中的文件处理。之前有介绍过shell的其它命令,请参考: BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 BASH shell脚本篇3——字符串处理 BASH shell脚本篇4——函数 在Bash Shell脚本中,可以使用多种方法来对文件进行操作,包括读取文件或写

    2024年02月07日
    浏览(30)
  • BASH shell脚本篇2——条件命令

    这篇文章介绍下BASH shell中的条件相关的命令,包括:if, case, while, until, for, break, continue。之前有介绍过shell的其它基本命令,请参考:BASH shell脚本篇1——基本命令 1. If语句 if 语句用于在顺序执行语句的流程中执行条件任务。 If 语句通常用于在Bash脚本中做出决定。它们根据

    2024年02月07日
    浏览(36)
  • BASH shell脚本篇3——字符串处理

    这篇文章介绍下BASH shell中的字符串处理的相关命令。之前有介绍过shell的其它命令,请参考: BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 Bash字符串也是一种数据类型,它用于表示文本而不是数字,它是一组可能还包含数字的字符的组合。如果数字想要表示为

    2024年02月07日
    浏览(41)
  • sh与bash:Shell脚本中的微妙差异

    在Unix和Linux的世界中,Shell是用户与操作系统交互的主要界面。Shell提供了命令行界面,使得用户能够执行各种命令和操作。在众多的Shell中,sh和bash是最常见且使用最广泛的两种。尽管它们在很多方面相似,但在功能、特性和语法上,它们之间仍存在一些微妙的差异。 一、起

    2024年04月15日
    浏览(40)
  • 【Linux】 shell脚本的创建及使用 《入门到实践》详解( 建议收藏 )

    🍁 博主简介   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊 交流社区: 运维交流社区 欢迎大家的加入! shell 用户与内核沟通的桥梁 第一类:bash sh csh 第二类:ksh 将命令按照一定顺序保存到文件中,统一执行 解决

    2024年02月04日
    浏览(28)
  • Shell脚本同时调用#!/bin/bash和#!/usr/bin/expect

    如果你想在一个脚本中同时使用bash和expect,你可以将expect部分嵌入到bash脚本中。以下是一个示例: 在这个示例中,我们使用了bash来设置变量和调用expect。然后,我们使用 EOF 和 EOF 来定义一个here文档,其中包含了expect的命令。这样,bash脚本就可以在执行expect命令后继续执行

    2024年01月17日
    浏览(37)
  • Shell脚本编程实践——第3关:使用Shell脚本创建文件目录

    任务描述 本关任务:设计一个Shell程序,在/home目录下建立一个userdata目录,在userdata目录下再建立5个目录,即user1~user5,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。 相关知识 为了完成

    2023年04月22日
    浏览(32)
  • 执行shell脚本报/bin/bash^M: bad interpreter错误的解决

    转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题描述: 在notepad++里面编辑修改了shell脚本,再上传到服务器执行,出现“-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory”的报错: 原因分析: 这个问题

    2024年02月02日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包