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 可查看如图所示
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命令的一般格式为
上述指令详解如下:
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.3 Linux文件类型
第一个字符代表这个文件是『目录、文件或链接文件等等』:
o 当为[ d ]则是目录,例如上表档名为『.config』的那一行;
o 当为[ - ]则是文件,例如上表档名为『initial-setup-ks.cfg』那一行;
o 若是[ l ]则表示为连结档(link file);
o 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
o 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
o 若是[ s ]则表示为套接字;
o 若是[ p ]则表示为管道;
2.4 Linux的目录结构
参考文献:
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