Linux运维实战之2-2:bash的工作特性

这次博文我们主要来谈谈bash的工作特性哈。

主要内容:

  1. bash是一种shell解释程序    

  2. bash工作特性之命令状态返回值

  3. bash工作特性之命令行展开

  4. bash工作特性之命令补全

  5. bash工作特性之路径补齐

  6. bash工作特性之命令引用

  7. bash工作特性之命令别名

  8. bash工作特性之文件名通配

  9. bash工作特性之命令hash


问题引入:Linux中,命令是如何被执行的呢?

Linux命令的执行必须依赖于Shell命令解释器。Shell实际上是在Linux系统中运行的一种特殊程序,它位于操作系统内核与用户之间,负责接受用户输入的命令并进行解释,将需要执行的操作传递给系统内核执行,Shell在用户和内核之间充当了一个“翻译官”的角色。当用户登陆到Linux系统时,会自动加载一个Shell程序,以便给用户提供可以输入命令的操作环境,如下图所示:

blob.png

一、bash一种shell解释程序:

Bash是Linux系统中默认使用的Shell程序,文件位于/bin/bash。Linux系统中的shell程序有多种,可以通过/etc/shells文本文件查看:

blob.png

如何得知当前Linux系统默认使用的shell是哪一个呢?,可以查看环境变量SHELL的值哈。

blob.png

根据Linux命令与Shell程序的关系,一般分为以下两种类型: 

  • 内部命令:指的是集成于Shell解释器程序(如Bash)内部的一些特殊指令,也成为内建(Built-IN)指令。内部命令属于Shell的一部分,所以并没有单独对应的系统文件,只要Shell解释器被运行,内部指令也就自动载入内存了,用户可以直接使用。内部命令无需从硬盘中重新读取文件,因此执行效率更高。 

  • 外部命令:指的是Linux系统中能够完成特定功能的脚本文件或二进制程序,每个外部命令对应了系统中的一个文件,是属于Shell解释器程序之外的命令,所以称为外部命令。Linux系统必须知道外部命令对应的文件位置,才能够由Shell加载并执行。 

Linux系统默认会将存放外部命令、程序的目录(如/bin、/usr/bin、/usr/local/bin等)添加到用户的“搜索路径(PATH环境变量)”中,当使用位于这些目录中的外部命令时,用户不需要指定具体的位置,如下图所示:blob.png

说明:多个路径以:分割,放在左边的路径最先被搜索。 

bash作为一个解释程序,有许多工作特性,归纳起来最主要的特性如下图所示:

blob.png


二、bash的工作特性之1:命令状态返回值

问题引入:在Linux中,如何得知命令执行成功或失败了呢?

也许大家会说是看输出结果,在Linux中没有返回信息就是最好的信息,意思就是命令执行成功后在屏幕上不会显示任何反馈信息。例如:

blob.png

如果命令执行错误一般会在屏幕上显示相应的报错信息,例如:

blob.png

问题拓展:但像ls、cat这样的命令执行结果到底是成功还是失败如何判断呢?还有在非交互模式下,命令执行成功与否如何得知呢?

靠命令状态返回值$?–它是Linux的一个特殊变量,其值为0或非0;为0表示命令执行成功,非0表示命令执行失败。例如:

blob.png


三、bash的工作特性之2:命令行展开

实现下面的功能:

  1. 创建/tmp目录下的a_c,a_d,b_c,b_d;

  2. 创建/tmp/mylinux目录下的:

blob.png

实现过程:

(1)一般的做法是什么?肯定是这样:

mkdir -pv /tmp/a_c
mkdir -pv /tmp/a_d
mkdir -pv /tmp/b_c
mkdir -pv /tmp/b_d

但这样mkdir命令要敲4遍,冗余操作太多了哈。可以利用bash的特性–命令行展开来简化操作,如下图所示:

blob.png

(2)我们用命令行展开功能来创建题目中列出的Linux目录结构:

mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},
    lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}

命令执行结果:

blob.png


四、bash工作特性之3:命令补全

bash支持命令补全,用户不必输入完整的命令,这样可以避免输入错误提高效率。

命令的部分字符<tab>
    会搜索PATH环境变量所指定的路径下的所有可执行文件,如果“命令的部分字符”能惟一表示某命令,则直接补全为那个命令;
    如果不能惟一标示,则再敲一次tab键,会显示所有以“命令的部分字符”开头的命令;

范例:例如要在命令行下面键入“mkdir”命令,不用敲完整,敲入部分字符按tab键就可以

blob.png

可以看出,键入的命令越趋于完整,补全给出的命令选项就越少哈。

那么我们不禁要问,bash为什么会支持命令补全呢?它是如何搜索命令的呢?

通过环境变量$PATH的值作为搜索标准,如下图所示:

blob.png

以敲ls命令为例,bash会先搜索/usr/lib64/qt-3.3/bin如果找到了就在屏幕显示出来,如果没找到就接着搜索/usr/local/sbin,直到最后,找到就显示在屏幕上,没找到就报错

Linux中有很多环境变量,这些环境变量定义了用户的使用环境,用2个命令可以查看:

export
printenv

blob.png


五、bash工作特性之4:路径补齐

路径补齐的特性与命令补全的特性类似,支持用<tab>键补齐文件路径

blob.png

小结:

  • 在打命令和目录的时候,我们一定要用TAB键来补全,这样比较轻松,也能检查命令是否正确。如果不能补全就证明我们敲入的命令有问题

  • 用命令补全,TAB,他会自动加上最后那个/符号,证明这是个目录,如果后面没有/的话,这个可能是目录,也可能是文件


六、bash工作特性之5:命令引用

如何在命令中引用另一个命令的执行结果?(要注意是执行结果,而不是执行状态)

命令引用:
`命令`或$(命令)

例如:

blob.png

此时,$mylinux变量的值为/tmp/mylinux/下的内容


七、bash工作特性之6:命令别名

如何定义一个命令的别名?

命令别名:
定义别名:alias 别名='正常命令'
撤销别名:unalias 别名

使用注意事项:

别名的作用范围是当前shell进程;要想永久生效,需要定义在配置文件中;

当别名跟命令的名字相同时,如果使用原有的命令而非别名,则使用“\命令”

例如:

blob.png

blob.png


八、bash工作特性之7:文件名通配

globbing:文件名通配机制

匹配模式:元字符

bash支持的文件通配符:
*:表示任意长度的任意字符;
?:表示任意单个字符
[]:指定范围内的任意单个字符:
[a-z]:所有的小写字母
[A-Z]:所有的大写字母
[0-9a-zA-Z]:所有的数字和字母
字符集合:
[:digit:]:所有数字,相当于0-9   如:[[:digit:]]
[:lower:]:所有小写字母
[:upper:]:所有大写字母
[:alpha:]:所有的字母
[:alnum:]:相当于[0-9a-zA-Z]
[:space:]:空白字符
[:punct:]:所有标点符号
[^]:脱字符,取反,指定范围外的任意单个字符,如:[^0-9]

练习:

blob.png

1、~]# ls -d /var/l?[[:lower:]]
2、~]# ls -d /etc/[0-9]*[^0-9] 
3、~]# ls -d /etc/[^[:alpha:]][[:alpha:]]*    或  ls -d /etc/[^a-z][a-z]*
4、~]# mkdir -p /tmp/magedu.com;  cp -r /etc/m*[^0-9]  /tmp/magedu.com/
5、~]# mkdir /tmp/man; cp -r /usr/share/man/man*[0-9]  /tmp/man/
6、~]# mkdir /tmp/conf.d; cp -r /etc/{m,n,r,p}*.conf /tmp/conf.d  或 cp -r /etc/[mnrp]*.conf /tmp/conf.d

九、bash工作特性之8:命令hash

bash为了加速命令查找,缓存此前命令的查找结果:哈希码(Key-value)存储

key:搜索键

value:值

hash命令的用法:
hash:列出缓存的命令
hash -d COMMAND:删除指定的缓存命令
hash -r:清空缓存

例如:

blob.png


本次博文就这么多哈,欢迎各位大大指正!~~

原创文章,作者:N4_jjx,如若转载,请注明出处:http://www.178linux.com/57877

(0)
N4_jjxN4_jjx
上一篇 2016-11-06 16:00
下一篇 2016-11-06 16:56

相关推荐

  • linux 软件包管理

    1、Linux软件包管理 Redhat, SUSE: RPM Redhat Package Manager PRM is Package Manager 前端工具:yum, apt-get 后端工具:RPM, dpt   2、rpm: 数据库:/var/lib/rpm  rpm包: 软件包作者下载源程序,编译配置完成后,制作成rpm包 格…

    Linux干货 2017-08-06
  • 马哥教育网络班22期+第一周课程练习

        操作系统:centos 7.2  64位 计算机组成及功能。 计算机组成: 由存储器、运算器、控制器、输入设备、输出设备组成。 功能: 存储器:用来存放计算程序及参与运算的各种数据;例如:硬盘、内存 运算器:负责数据的算术运算和逻辑运算即数据的加工处理 控制器:负责对程序规定的控制信息进行分析,控制并…

    Linux干货 2016-08-15
  • Linux安全与加密基础(一)

    Linux安全与加密基础(一) 常见的加密算法 SSL: Openssl与CA认证 ssh服务 dropbear AIDE sudo 常见的加密算法 密码学古以有之,尤其是在中国古代的战争中,在现在科技中,密码学不得不说是一门高深的学问,普通人知其一二足矣;本文要讨论的是关于加密与解密的基本原理与应用,以及关于Linux系统中的一些安全管理问题,如ssh服务…

    Linux干货 2016-10-06
  • CentOS7系统用户空间管理进程systemd详解

    概述:     系统启动过程中,当内核启动完成,后加载根文件系统,后就绪的一些用户空间的服务的管理工作,就交由init进行启动和管理,在CentOS6之前的init的管理方式都类似,相关的内容我们在之前的文章中也做出过介绍。在CentOS7上,init变成了systemd,其管理方式也发生了重大的变化,本章就跟大家欧一…

    Linux干货 2016-09-21
  • varnish的基本配置

    主程序:varnish 配置文件: ·/etc/varnish/varnish.params—配置varnish服务进程的工作特性,例如监听的地址和端口,缓存机制; ·/etc/varnish/default.vcl—配置各Child/Cache线程的缓存工作属性; VCL状态引擎: 内建变量: ·req.*:request,表示由客…

    2017-08-08
  • 磁盘管理

    一、知识整理 1、每个扇区:512字节;每个柱面:256个磁头*63个扇区*512字节,大概为8M。centos6中分区使用起始结束柱面;centos7中分区使用起始结束扇区。EBR:扩展分区的第一个扇区。 2、MBR:master root record,1982年,使用32位表示扇区数,分区不超过2T。其中,一共512bytes字节,446bytes为b…

    Linux干货 2016-08-29

评论列表(2条)

  • 马哥教育
    马哥教育 2016-11-10 20:25

    总结的比较详细,能注意下排版会更好~加油~

  • N25_Nva
    N25_Nva 2016-11-10 22:55

    受教,hash那边再详细些就好了