Unix/Linux编程:什么是shell

shell

定义

  • 一说到命令行,实际上我们指的是shell
  • shell是一个具有特殊用途的程序,它读取用户输入的命令,然后把命令传递给操作系统去运行。因此,也叫做“命令解析器”
  • 术语登录shell(login shell)是指用户刚登陆系统时,由系统创建,用于运行shell的进程。
  • 几乎所有的Linux发行版都提供一个名为bash的程序,bash是shell的一种,来自GNU项目。
  • bash是sh的增强版,sh是最初的Unix的shell程序。

尽管某些操作系统将命令解释器集成于内核中,而对 UNIX 系统而言,shell 只是一个用户进程。shell 的种类繁多,同一台计算机可以同时使用多个shell。

种类

纵观 UNIX 历史,出现过以下几种重要的 shell。

  • Bourne shell(sh):这款由 Steve Bourne 编写的 shell 历史最为悠久,且应用广泛,曾是第七版 UNIX 的标配 shell。Bourne shell 包含了在其他 shell 中常见的许多特性,I/O 重定向、管道、文件名生成(通配符)、变量、环境变量处理、命令替换、后台命令执行以及函数。
  • C shell(csh):由 Bill Joy 于加州大学伯克利分校编写而成。其命名则源于该脚本语言的流控制语法与 C 语言有着许多相似之处。C shell 当时提供了若干极为实用的交互式特性,并不为 Bourne shell 所支持,这其中包括命令的历史记录、命令行编辑功能、
    任务控制和别名等。C shell 与 Bourne shell 并不兼容。尽管 C shell 曾是 BSD 系统标配的交互式 shell,但一般情况下,人们还是喜欢针对 Bourne shell 编写 shell 脚本,以便其能够在所有 UNIX 实现上移植
  • Korn shell(ksh):AT&T 贝尔实验室的 David Korn 编写了这款 shell,作为 Bourne shell的“继任者”。在保持与 Bourne shell 兼容的同时,Korn shell 还吸收了那些与 C shell相类似的交互式特性
  • Bourne again shell(bash):这款 shell 是 GNU 项目对 Bourne shell 的重新实现。Bash提供了与 C shell 和 Korn shel 所类似的交互式特性。Brian Fox 和 Chet Ramey 是 bash的主要作者。bash 或许是 Linux 上应用最为广泛的 shell 了。在 Linux 上,Bourne shell(sh)其实正是由 bash 仿真提供的

POSIX.2-1992 基于当时的 Korn shell 版本定义了一个 shell 标准。如今,Korn shell 和bash 都符合 POSIX 规范,但两者都提供了大量对标准的扩展,其扩展之间存在许多差异。

作用

设计 shell 的目的不仅仅是用于人机交互,对 shell 脚本(包含 shell 命令的文本文件)进行解释也是其用途之一。为实现这一目的,每款 shell 都内置有许多通常与编程语言相关的功能,其中包括变量、循环和条件语句、I/O 命令以及函数等

终端仿真器

  • 当使用图形用户界面是,我们需要另外一个叫做“终端仿真器”的程序(简称为“终端”),去和Shell交互
  • 不同的Linux发行版有不同的“终端”,比如KDE用的是konsole,GNOME用的是gnome-terminal,它们都是完成同样的功能—和shell交互

第一次运行

启动shell终端,会发现如下:
在这里插入图片描述

这个叫做shell提示符,当shell准备好了去接受输入时,它就会出现。

shell提示符可能会以各种各样的面孔显示,这则取决于不同的 Linux 发行版,它通常包括你的用户名 @ 主机名,紧接着当前工作目录(稍后会有更多介绍)和一个美元符号

如果提示符的最后一个字符是“#”, 而不是“$”, 那么这个终端会话就有超级用户权限

  • 可以通过上下箭头获取命令历史:许多 Linux 发行版默认保存最后输入的 500 个命令
  • 可以通过左右箭头来移动光标:光标定位到命令行的任意位置

可以在shell终端执行一些命令

  • date显示系统当前时间和日期
[me@linuxbox ~]$ date
Thu Oct 25 13:51:54 EDT 2007
  • cal默认显示当前月份的日历。
[me@linuxbox ~]$ cal
October 2007
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
  • 查看磁盘剩余空间的数量
[me@linuxbox ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 15115452 5012392 9949716 34% /
/dev/sda5 59631908 26545424 30008432 47% /home
/dev/sda1 147764 17370 122765 13% /boot
tmpfs 256856 0 256856 0% /dev/sh
  • 显示空闲内存的数量
[me@linuxbox ~]$ free
total used free shared buffers cached
Mem: 2059676 846456 1213220 0
44028 360568
-/+ buffers/cache: 441860 1617816
Swap: 1042428 0 1042428

结果终端会话

我们可以终止一个终端会话,通过关闭终端仿真器窗口,或者是在 shell 提示符下输入 exit命令:

[me@linuxbox ~]$ exit

关于鼠标和光标

虽然,shell 是和键盘打交道的,但你也可以在终端仿真器里使用鼠标

  • X 窗口系统(使GUI 工作的底层引擎)内建了一种机制,支持快速拷贝和粘贴技巧。
    • 如果你想高亮一些文本,可以按下鼠标左键,沿着文本拖动鼠标(或者双击一个单词),那么这些高亮的文本就被拷贝到了一个由 X 管理的缓冲区里面。
    • 然后按下鼠标中键,这些文本就被粘贴到光标所在的位置
  • 注意:不要在一个终端窗口里,使用 Ctrl-c 和 Ctrl-v 快捷键,来执行拷贝和粘贴操作。它们不起作用。对于 shell 来说,这些控制代码有着不同的含义,它们被赋值,早于 MicrosoftWindows 许多年。
  • 你的图形桌面环境(像 KDE 或 GNOME),努力想和 Windows 一样,可能会把它的聚焦策略设置成“单击聚焦”【在窗口管理器的配置程序中设置】。
    • 这意味着,为了让窗口聚焦(变得活跃)你需要单击它。
    • 这与“聚焦跟随着鼠标”的传统 X 行为不同,传统 X 行为是指只要把鼠标移动到一个窗口的上方,这个窗口就成为活动窗口。
    • 这个窗口不会成为前端窗口,直到你单击它,但它能接受输入。
    • 设置聚焦策略为“聚焦跟随着鼠标”,可以使拷贝和粘贴技巧更有益。

幕后控制台

  • 即使,终端仿真器没有运行,几个终端会话仍然在后台运行着。它们叫做虚拟终端或者是虚拟控制台。
  • 在大多数 Linux 发行版中,这些终端会话都可以访问,按下 Ctrl-Alt-F1 到Ctrl-Alt-F6 访问不同的虚拟终端。
  • 当一个会话被访问的时候,它会显示登录提示框,我们需要输入用户名和密码。
  • 从一个虚拟控制台转换到另一个,按下 Alt 和 F1-F6。返回图形桌面,按下 Alt-F7
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值