音讯 Unix / Linux外壳101

Unix / Linux外壳101

目录:

Anonim

Unix和Linux系统上的命令行已经非常强大,但是shell是比您想象中还要强大的工具。 您可以自定义它们,并根据自己的喜好切换它们,只要您知道如何操作即可。

什么是贝壳?

几乎每本Unix和Linux手册都有标准的外壳图,该外壳图环绕操作系统,类似于某种直板条。 Shell实际上只是操作系统(包括内核,文件系统以及各种系统调用和用户)之间的接口。 多年来,它是图形用户界面在1980年代变得普遍之前唯一的交互式用户界面。 图形用户界面也可以视为一种外壳程序,因为它们具有许多相同的功能:启动程序,配置系统和管理文件。


这些不起眼的基于文本的界面具有惊人的功能。 一方面,它们是成熟的编程语言。 在出现更强大的脚本语言(如Python)之前,shell脚本是编写不一定需要C功能的程序的理想选择。它们对于自动化系统任务和快速原型设计仍然很有用。


它们还具有许多使使用和查找文件更加容易的功能。 使用最广泛的方法之一是“通配符”或“通配符”。 几乎所有Unix和Linux用户都熟悉“ *”通配符以匹配任何字符。 这实际上是外壳的工作。 不同的外壳具有更强大的选择。


Unix的独特功能之一是能够重定向程序输入和输出。 Shell实现了此功能。


Shell只是另一个程序,因此任何具有适当技能的程序员都可以创建一个。 这些年来,出现了几种主要的外壳。

历史与炮弹综述

尽管在操作系统成立之初就有多个Unix shell,但第一个在贝尔实验室之外获得广泛认可的是Bourne Shell,它以Stephen R. Bourne的名字命名。 该Shell的主要创新之处在于它支持结构化编程的功能,这使得首次将Shell用作一种真正的编程语言成为可能。 它是如此不可或缺,以至所有现代Unix和Linux版本都仍使用它,尽管它通常是模仿Bourne shell的较新的shell之一。


下一个主要Shell是C Shell,通常缩写为“ csh”。 该外壳程序是由UC Berkeley开发的,成为Unix BSD风格的主要组成部分。 顾名思义,它的语法旨在类似于C编程语言,但实际上是为交互使用而设计的。


它包括一个历史记录机制,该机制允许用户返回并重复他们先前发出的所有命令,而不必重新键入整行内容,并改善了作业控制,这使运行多个任务变得更加容易。 (请记住,这是大多数人仍然使用基于文本的终端的时候。)


下一个主要的外壳是Korn Shell,它也来自Bell Labs。 顺便说一句,炮弹是以戴维·科恩(David Korn)而非乐队的名字命名的。 Korn Shell程序的主要创新是引入了命令行编辑功能,从而进一步扩展了历史记录功能。 用户可以使用类似于vi或Emacs编辑器的命令返回并编辑他们键入的命令。


自80年代末推出以来,主要弹药中的Bourne Again Shell或bash最受欢迎。 该外壳程序是GNU项目的一部分,结合了C和Korn外壳程序的创新,同时保持了与Bourne外壳程序的兼容性,因此得名。 它是大多数Linux发行版中的“标准”外壳。


Z Shell(zsh)于1990年首次发布,是命令行用户的梦想。 它不仅具有其他Shell具有的大多数其他主要功能,而且还可以通过许多强大的功能疯狂地进行自定义。 递归glob是最强大的功能之一,它允许用户在发出命令时匹配子目录中的文件名,而不是当前工作目录中的文件。 真正的高级用户还可以自定义完成选项,匹配文件而不必完全键入它们。 对于胖手指的打字员,它也可以纠正您的拼写错误。 该shell非常先进,其手册页已分为几个很长的部分。

脚本编写

如前所述,shell不仅是命令行界面,而且是功能强大的编程语言。 Shell脚本的优点在于,您既可以在常规交互使用中也可以在脚本中使用相同的语言,这使学习曲线更加平坦。 现代shell包括所有常用的编程语言功能,包括流控制,功能和变量。 其中一些甚至具有高级数据结构,如关联数组。


尽管有强大的功能,但是在Shell中进行编程还是有一些陷阱。 最大的问题是,编写依赖于某些程序的脚本太容易了,这些程序可能不在另一个系统上,或者取决于特定类型的Unix或Linux。 这就是为什么Shell脚本最适合您只知道将在一个系统上运行的程序的原因。 如果您想构建可移植的东西并且不想编写C程序,那么最好的选择是使用其他脚本语言(例如Perl或Python)编写。

Unix / Linux命令行下的速览

在Unix / Linux命令行的表面下隐藏着更多的功能。 本文可能会激发您窥视自己喜欢的外壳的内幕,以了解您真正可以做什么。 如果您想使用Shell脚本,则可能需要查阅Unix Power Tools和Learn the Bash Shell一书。 Stephen R. Bourne在他的shell上的原始论文也很好地介绍了shell脚本世界,即使它很旧。

Unix / Linux外壳101