一、 Shell

1.1 Shell简介

对于图形界面,用户点击某个图标就能启动某个程序;对于命令行,用户输入某个程序的名字(可以看做一个命令)就能启动某个程序。这两者的基本过程都是类似的,都需要查找程序在硬盘上的安装位置,然后将它们加载到内存运行。

换句话说,图形界面和命令行要达到的目的是一样的,都是让用户控制计算机。

然而,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁。

由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核。如此一来,用户和内核之间就多了一层“代理”,这层“代理”既简化了用户的操作,也保护了内核。

用户界面和命令行就是这个另外开发的程序,就是这层“代理”。在Linux下,这个命令行程序叫做 Shell

Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、一键搭建Web开发环境、日志分析等,Shell 都非常合适。

使用 Shell 的熟练程度反映了用户对 Linux 的掌握程度,运维工程师、网络管理员、程序员都应该学习 Shell。

尤其是 Linux 运维工程师,Shell 更是必不可少的,是必须掌握的技能,它使得我们能够自动化地管理服务器集群,否则你就得一个一个地登录所有的服务器,对每一台服务器都进行相同的设置,而这些服务器可能有成百上千之多,会浪费大量的时间在重复性的工作上。

1.2 常见的shell

知道什么是Shell 之后,那么我们来了解一下 Linux 使用的是哪一个 shell 呢?什么!哪一个?难道说 shell 不就是『一个 shell 吗?』哈哈!那可不!由于早年Unix 年代,发展者众,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的 Bourne SHell (sh) 、在 Sun 里头预设的 C SHell、商业上常用的 K SHell、, 还有TCSH 等等,每一种 Shell 都各有其特点。至于 Linux 使 用的这一种版本就称为『 Bourne Again SHell (简称 bash) 』,这个 Shell 是 Bourne Shell 的增强版 本,也是基准于 GNU 的架构下发展出来的呦!

那么目前我们的 Linux (以 CentOS 7.x 为例) 有多少我们可以使用的 shells 呢? 你可以检查一下 /etc/shells 这个文件,至少就有底下这几个可以用的 shells:

/bin/sh (已经被 /bin/bash 所取代) 

/bin/bash (就是 Linux 预设的 shell)

· /bin/tcsh (整合 C Shell ,提供更多的功能) 

/bin/csh (已经被 /bin/tcsh 所取代)

利用命令cat /etc/shells 可查看如图所示

2.1 shell的简介、功能、命令格式以及文件目录的介绍_系统/运维

1.3 Shell功能:

✦命令历史 (history)

bash 的功能里头,相当棒的一个功能就是『他能记住使用过的指令!』 这功能真的相当的棒!因为我们只需要在指令列按『↑↓键』就可以找到前/后一个输入的指令! 默认的指令记忆功能可以到达 1000 个!也就是说,你曾经下达过的指令几乎都被记录下来了。

✦命令与文件补全功能: ([tab] 按键的好处)

[tab]这个按键的功能就是在 bash 里头才有的啦!常常在 bash 环境中使用 [tab] 是个很棒的习惯喔!因为至少可以让你 1)少打很多字; 2)确定输入的数据是正确的! 使用 [tab] 按键的时机依据 [tab] 接在指令后或参数后而有所不同。

✧[Tab] 接在一串指令的第一个字的后面,则为命令补全; 

✧[Tab] 接在一串指令的第二个字以后时,则为『文件补齐』! 

✧若安装 bash-completion 软件,则在某些指令后面使用 [tab] 按键时,可以进行『选项/参数的补齐』功能!

所以说,如果我们想要知道在我们的环境当中所有以 c 为开头的指令呢?就按下『 c[tab][tab] 』就好啦! ^_^! 是的!真的是很方便的功能,所以,有事没事,在 bash shell 底下,多按几次 [tab] 是一个不错的习惯!

✦别名机制: (alias)

假如我们需要知到一个目录的文件属性,那么我就必须要下达 『 ls -dl 』这样的指令串,唉!真麻烦,有更简单的取代方式吗?就使用命令别名呀!例如直接lk这个自定义的命令来取代上面的命令,也就是说, lk 会等于 ls -dl 这样的一个功能,那么要如何作呢?就使用 alias 即可!在指令列输入 alias 就可以知道目前的命令 别名有哪些了!也可以直接下达命令来设定别名呦:

✧ alias lk=‘ls -dl‘

✦通配符: (Wildcard)

除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与指令下达。举例来说,想要 知道 /usr/bin 底下有多少以 X 为开头的文件吗?使用:『 ls -l /usr/bin/X* 』就能够知道啰~此外, 还有其他可供利用的通配符,之后我们再详细解释,这些都能够加快使用者的操作呢!

此外,Shell还具有如下功能:

✧重定向、管道、命令替换、Shell编程等等。

1.4 常用的Shell元字符及含义

2.1 shell的简介、功能、命令格式以及文件目录的介绍_Linux_02

二、 命令格式和通配符

2.1 命令格式

Shell命令的一般格式为

上述指令详解如下:

1. 一行指令中第一个输入的部分绝对是『指令(command)』或『可执行文件案(例如批次脚本,script)』 2. command 为指令的名称,例如变换工作目录的指令为 cd 等等;

3. 中刮号[]并不存在于实际的指令中,而加入选项设定时,通常选项前会带 - 号,例如 -h;有时候会使用选项的完整全名,则选项前带有 -- 符号,例如 --help;

4. arguments1 arguments 2.. 为依附在选项后面的参数,或者是 command 的参数;

5. 指令, 选项, 参数等这几个咚咚中间以空格来区分,不论空几格 shell 都视为一格。所以空格是很重要的特殊字符!;

6. 按下[Enter]按键后,该指令就立即执行。[Enter]按键代表着一行指令的开始启动。

7. 指令太长的时候,可以使用反斜杠 (\) 来跳脱[Enter]符号,使指令连续到下一行。注意!反斜杠后就立刻接特殊字符,才能跳脱!

8.并非所有命令的格式都遵从以上规则,如dd、find。

2.2通配符

2.1 shell的简介、功能、命令格式以及文件目录的介绍_Linux_03

★:*能匹配文件或目录名中的.,但不能匹配首字符是.的文件或目录。要匹配隐藏文件应使用.*。

2.3 Linux文件类型

2.1 shell的简介、功能、命令格式以及文件目录的介绍_系统/运维_04

2.1 shell的简介、功能、命令格式以及文件目录的介绍_系统/运维_05

第一个字符代表这个文件是『目录、文件或链接文件等等』:

o 当为[ d ]则是目录,例如上表档名为『.config』的那一行;

o 当为[ - ]则是文件,例如上表档名为『initial-setup-ks.cfg』那一行;

o 若是[ l ]则表示为连结档(link file);

o 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);

o 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

o 若是[ s ]则表示为套接字;

o 若是[ p ]则表示为管道;

2.4 Linux的目录结构

2.1 shell的简介、功能、命令格式以及文件目录的介绍_系统/运维_06

2.1 shell的简介、功能、命令格式以及文件目录的介绍_系统/运维_07

参考文献:

http://c.biancheng.net/cpp/view/6994.html

鸟哥的Linux私房菜基础学习篇(第四版)

https://www.cnblogs.com/xiaochina/p/9158067.html

https://blog.csdn.net/mzl87/article/details/79673012