运维基础--Linux中bash的基础特性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维基础--Linux中bash的基础特性相关的知识,希望对你有一定的参考价值。

bash 的基础特性如下:

  一、命令的别名--alias 命令

   用来定义和显示命令的别名,unalias撤销定义的别名;但是要注意以下几点:

   1.alias的效果仅限于当前shell的生命期;

   2.如果修改.bashrc配置文件,其中保存的别名不会立即生效,只有在重新加载该文件的内容后,才会生效且永久生效;

   3.为了能够保证设置的别名有效,通常两种操作都要做;

 二、命令历史

  shell进程会其会话中保存此前用户提交执行过的命令,history是shell的内置命令

  1.命令语法格式:

  history [-c] [-d OFFSET] [n]

  history -anrw [FILENAME]

  history -ps VALUE [VALUE...]

  -c: 清空命令历史;

  -d offset(偏移量):删除指定命令历史offsethistory显示出来的命令数字

  -r: 从文件读取命令历史至历史列表中;

 -w:把历史列表中的命令追加至历史文件中;

history #:显示最近的#条命令;

  

重复使用命令缓冲区中的命令

  ●!#:再一次执行历史列表中的第#条命令;

  ●!-#:执行倒数第几条命令;

  ●!!:再一次执行上一条命令;

  ●!STRING:再一次执行命令历史列表中最近一个以STRING开头的命令;


重复使用历史命令的一部分

  ●!$:表示最后一次命令中最后一个参数;

  ●ESC,.  最后一次命令中最后一个参数;

  ●Alt+.  真正终端上才可以使用此用法;

  ●!^: 第一个位置的参数

  ●!:NUM  表示最后一次命令中的第NUM个位置的参数;

  ●!SEQUENCE:NUM  表示第SE条命令的第NUM个参数;

  ●!STRING:^|$|*|NUM;

2.与历史相关的bash变量

  HISTSIZE:shell进程可保留的命令历史的条数;

  HISTFILE:持久保存命令历史的文件,默认为.bash_history

  HISTFILESIZE:命令历史文件的存储历史命令数量条数;

  HISTCONTROL:控制命令历史记录的方式

    ignoredups:忽略重复的命令;

    ignorespace:忽略以空白字符开头的命令;

    ignoreboth:以上两者同时生效;

三、快捷键:

 按键组合映射成bash可以识别的命令;

 Ctrl+a:跳转至命令行行首

 Ctrl+e:跳转至命令行行尾

 Ctrl+u:删除行首至光标所在处之间的所有字符;

 Ctrl+k:删除光标所在处至行尾的所有字符;

 Ctrl+l:清屏,相当于clear


四、命令补全机制:

 % SHELL命令的执行过程:

  1.SHELL会根据用户键入“ENTER”来判断用户的输入结束;

  2.SHELL会将收集的命令信息,根据空白字符来分段:第一个分段被理解为命令字段;

  3.判断第一个字段是内部或者外部命令:如果是内部命令,直接运行;如果是外部命令,通过PATH变量所指示的路径信息,去查找相关的位置,以确定是否存在同名文件,如果有就执行,否则报错;

  4.判断选项以及参数是否正确;%

 

两个方面的理解:

 命令本身的字符串补全&&参数的补全;


使用TAB键可以完成命令或者路径的补全:

   注意:如果给出的字符串不是唯一标识,则bash不予不全,再次TAB键,bash给出参考列表;如果参考列表中的内容过多,bash会询问是否显示该列表;


还可以根据提供的参数路径进行补全,如果参数没有任何提示字符串信息,则默认从工作目录查找;

五、shell 的命令行展开(用简单的字符实现bash能够识别的复杂信息)


~: 

  ~ bash会自动将其展开为当前登录用户的家目录;

  ~STR :bash会自动将其展开为以STR为用户名的家目录;

 ~+ :调用SHELL变量”PWD”的值;

 ~- : 调用SHELL变量”OLDPWD”


{}:在其中可以填充一个以”,”分隔的路径列表,bash会将其展开为多个独立的路径;

 例如:mkdir /{a,b}_{c,d} 创建了四个目录:a_c,a_d, b_c, b_d。


六、命令的执行结果

  1.bash通过状态返回值来输出结果:成功:0  失败:1-255

    0:命令执行成功;1,2,127: bash内置的状态返回值;1表示小问题,2表示严重问题,127表示命令本身出现问题;3-126以及128-255:用户自定义的状态信息;

  2.状态返回值保存于bash的特殊变量:$?

  3.引用命令的执行结果:$(COMMAND)或`COMMAND`


任何一个命令都有两种执行结果:

其一:命令的正常输出结果;

与用户需求相关的返回内容 

引用方法:

``:反向单引号—反引号;

$():标准的命令引用格式;

   补充命令:

    wc:统计一个文件的行数,字数以及字节数;

    -c:只显示字节数

    -l:只显示行数

    -w:只显示字数;

其二:命令的执行状态返回值;

  与命令执行成功与否相关的返回内容,保存在bash的一个特殊变量中:$?;


七、引用特性

 ‘ ’ :强引用,凡是被单引号引用的内容,bash一律将其视为普通字符,即便其本身有特殊功能和作业也是如此,但是单引号本身是个例外;

 “ ” :弱引用,被双引号引用的内容,有些特殊的字符仍会保留其特殊含义,比如: $、\、”


八、转义功能:

 \:bash定义的转义字符,只能使其后一个字符失去特殊含义;


九、Globbing,文件名通配,简称为glob;

  匹配模式:元字符(一组代替一个或多个字符的字符)

    具有特殊意义的专用字符,可以用来规定其前导字符在目标对象的出现模式

      *:匹配任意长度的任意字符,包括空字符

      ?:匹配任意单个字符

      []:匹配指定范围内的任意单个字符

      例如[abc]、[a-z]、[A-Z]、[a-zA-Z]、[A-Z]、[0-9]、[a-z0-9]

特殊格式:

[[:upper:]]:所有大写字母

[[:lower:]]:所有小写字母

[[:alpha:]]:所有字母

[[:digit:]]:所有数字

[[:alnum:]]:所有的字母和数字

[[:space:]]:所有空白字符

[[:punct:]]:所有标点符号

   [^]:  匹配指定范围外的任意单个字符

十、输入输出重定向;

  在使用计算机时 实现某种功能的主体是:程序 (= 指令 + 数据;)

    数据是指令操作的对象,在Linux体现就是文件; 

    可以用于输入的设备也是一种文件;

     例如键盘设备,文件系统中的常规文件、网卡声卡设备;

    可以用于输出的设备:文件

     显示器,文件系统的常规文件,网卡声卡…


每一种程序都有三种形式的数据流:

  a).输入数据流:为程序获取数据的数据流;默认的输入数据流的来源是键盘;

  b).输出数据流:将程序所处理的数据结果展示给用户的数据流;默认输出数据流的终点 是显示器;

  c).错误数据流:将程序无法处理或处理过程中出现的问题的结果展示给用户的数据流;默认错误数据流的终点是显示器;


  从键盘实现的输入数据流成为标准输入;

  到显示器上的输出数据流称为标准输出;

  到显示器上的错误数据流称为标准错误输出,简称标准错误;


文件描述符:File Descriptor,FD。

  0:标准输入,stdin

  1:标准输出,stdout

  2:标准错误,stderr



IO重定向:采用非标准设备文件实现的IO操作;


简单来说,

 不是从键盘设备完成的数据流输入,就可以称为输入重定向或者叫做重定向输入;

 不是到显示器设备正确输出数据流就被称为输出重定向,或叫重定向输出 



输出重定向:

  >:覆盖输出重定向

   set –C //开启防误覆盖开关,此开关启后,可以用“>|”符号继续覆盖重定向;

   set +C//关闭防误覆盖

  >>:追加输出重定向



错误重定向:

 2>:覆盖错误重定向

 2>> :追加错误重定向


以上是关于运维基础--Linux中bash的基础特性的主要内容,如果未能解决你的问题,请参考以下文章

马哥2016全新Linux+Python高端运维班-Linux 网络基础管理,包管理,bash脚本练习

linux学习14 Linux运维高级系统应用-glob通配及IO重定向

新手做linux运维需要学哪些知识

Linux运维工程师主要学点啥?

linux运维基础篇 unit15

运维工程师需要学习哪些课程