04 bash程序的基本特性

Posted burnovblog

tags:

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

  我们知道Linux系统有两种操作方式,一种为GUI的图形界面化管理方式,其中图形程序常见的有Gnome、KDE、xfce;另一种管理方式就是就是GLI的命令行管理方式,而命令行的管理方式就是通过shell程序来进行管理,而shell程序则分为多种,我们这节就来详细介绍shell程序;

bash程序及其特性

  shell程序在Linux系统下的分类:通过cat /etc/shells查看系统所支持的shell程序;

技术分享图片

  CLI命令行管理下,我们包含sh、bash(Linux系统的默认shell程序,和sh是链接关系)、csh、ksh(csh的加强版,它是商业化的产品,需要服务)、tcsh(csh的开源版本)、zsh(终极shell程序,比之前的shell程序都要强大)

  【红帽系统的和众多Linux发行商的shell层序默认都是bash】

 

  shell程序运行起来后,就是一个独立的进程,用来关联或者管理控制其他的程序;同时shell层序可以同时运行多个,而且多个shell层序之间可以嵌套,且shell程序之间相互独立,说白了,就是shell-1不知道有shell-2的存在,不管他们之间存在什么样的关系;

技术分享图片

  pstree  #查看进程树,这个内容在我们详细介绍进程的时候再说;

  此时,我们的命令行控制界面就在最后一个bash程序中,而在这个程序里面所执行的命令或者修改的参数,与其他的shell程序(上一级的bash或则上上级的bash)是无关的;

  通过配置exit退出当前的bash;

技术分享图片

 

  用户的工作环境:

    在bash程序中,除了root用户工作在“#”下,其他的bash程序下的工作环境都是一样的“$”,而他们之间的shell程序有一定的关联,这里我们仔细介绍下(root用户与普通用户的关联--环境参数):

    首先,我要明白站在用户角度来说,shell分为两种类型:1、登录式的shell  2、非登录式的shell;登录式的shell也就是通过终端ssh或者telnet,或者通过su - USERNAME切换过去的,都叫做登录式的shell层序;而非登录式的shell为图形界面下的teminal打开的管理窗口,以及su USERNAME切换过来的就叫做非登录式的shell;

    了解他们两则的区别之前,我们先了解一些文件:/etc/profile,/etc/profile.d/*.sh,/etc/bashrc(这些文件是全局配置文件),以及~/.bash_profile,~/.bashrc(这些文件都时在用户的家目录下,为个人配置文件)

技术分享图片

技术分享图片

    同时,根据文件类型可以将以上文件分为:1、profile文件  2、bashrc文件;profile文件用来定义环境变量,在/etc/profile里面配置,或者生成一个新的sh文件放在/etc/profile.d/目录下,如果配置文件只写在~/.bash_profile下,则只在个人shell程序下生效;bashrc类文件一般用来设置本地变量,定义命令的别名(alias);

    在登录shell的时候需要加载这些配置文件的内容,而加载的顺序或者优先级是怎么样的呢?

    对于登录式的shell程序读取配置文件的顺序如下:/etc/profile-->/etc/profile.d/*.sh-->~/.bash_profile-->~/.bashrc-->/etc/bashrc

    对于非登录式的shell程序读取配置文件的顺序如下:~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh

技术分享图片

    如上图:在hive用户的~/.bash_profile文件下修改的登录参数,登录hive的shell的程序的时候就会运行这个echo命令;

bash的特性

  1、命令历史

  history  带着行号显示过去执行的所有命令

技术分享图片

    上图显示,history为一个内部命令,所以可以通过help history来寻找帮助;

    -c  清空整个命令历史

    -d  删除指定编号的命令历史

      history -d 500   #删除第500行命令历史

      history -d 500 10  #删除从500行命令历史向下数10条来删除

    一般来说,history保存的命令都存放在~/.bash_history文件中,所以下次登录的时候已让能看到这个命令的历史记录,这个保存过程一般是自动进行,如果想要手动保存,就是-w参数来进行这个操作;

      history -w

    同时,我们通过printenv | gerp -i histsize,能够查看到history的环境变量HISTSIZE,用来记录我们的命令历史保存的最大条目数;

技术分享图片

  history除了用来读取命令历史外,还可以用来调用历史命令。我们知道,通过上下键可以读取之前敲过的命令,但是如果命令执行的太过于靠前,就需要桥很多次上键,这样就比较累,这时候我们通过history的小技巧来执行过去执行过命令:

    !n  #n代表history查看到的前面数值,这句话代表执行第n条命令;

    !-n  #代表从最后一个命令数起,执行第倒数第n条命令;

    !!  #代表执行上一条命令,和“上”键相同;

    !string  #!加上字符串,匹配最近一次执行的命令

技术分享图片

    !$  #应用上一个命令的最后一个参数(传参!)

技术分享图片

  2、管道与重定向【次内容我们后面的文章会和正则表达式一起专门介绍】

  3、命令别名

  alias CMDALIAS=‘COMMAND [options] [qrguments]‘

  4、命令行编辑

  命令光标跳转:

    ctrl+a  跳到命令行行首

    ctrl+e  跳到命令行行尾

    ctrl+d  删除光标所在字符(单个字符)

    ctrl+u  删除光标至命令行行首的内容

    ctrl+k  删除光标至命令行行尾的内容

    ctrl+l  clear清屏命令

  5、命令行展开

  6、文件名通配符

  7、支持使用的变量

  8、支持编辑,也就是shell脚本(这是bash的重要特性,这点我们之后会详细说到)

 

以上是关于04 bash程序的基本特性的主要内容,如果未能解决你的问题,请参考以下文章

bash初识,shell的基础语法及基本特性

Linux基础之bash shell介绍及基本特性

Linux基础3-1 Bash及其特性

Linux基础3-1 Bash及其特性

bash及其特性

linux--bash基础及特性