Shell中bash的特性小结

Shell:
用户与操作系统之间完成交互式操作的一个接口程序,为用户提供简化了的操作;上世纪的70年代中期在贝尔实验室,Bourne位Unix开发了一个shell程序Bourne Shell,简称sh;
 
Bill Joy:用C语言根据sh重新编写 C Shell,简称csh;躺床上为其衍生版;
 
David Korn:集合cshhesh的优点研发的Korn Shell,简称ksh;
 
GNU:GNU组织发现sh是比较好用的又进一步开发Borne Again Shell,简称bash;Linux系统中默认的shell程序;
 
zsh:最终Shell,功能非常强大;(但是在linux中并没有更换)
当前系统中所有可以支持的安全的shell:
 /etc/shells
注意:
1. 除了/sbin/nologin之外,其他的shell都可以用来测试使用;
2. 在更换shell时,最好在bash中更换其他shell,如果已经换成了其他shell就使用exit命令返回至bash,再行切换;
3. 选择shell
  [root@localhost ~]# cat /etc/shells
  /bin/sh
  /bin/bash
  /sbin/nologin
  /usr/bin/sh
  /usr/bin/bash
  /usr/sbin/nologin
  /bin/tcsh
  /bin/csh
  [root@localhost ~]# echo $0
  bash
  [root@localhost ~]# tcsh
  [root@localhost ~]# echo $0
  tcsh
  切换为原来的shell
  [root@localhost ~]# exit
  exit
  [root@localhost ~]# echo $0
  bash

bash的特性:

一、命令的别名——(自定义命令)
  alias-定义或显示别名
  格式:alias [-p] [名称[=值] ... ]
  如果alias命令不带任何选项或参数,则表示显示所有已经定义并生效的别名设置;
  #alias ALIAS=’COMMAND [OPTION]…[ARGUMENT]…’
 Unalias
  Unalias-从别名定义列表中删除每一个“名字”
  格式:unalias [-a] 名称 [名称 ...]
注意:无论使用alias 或是unalias命令,其功能都会立即生效;此两个命令的生命期仅为当前shell的生命期一但注销登陆,相当于关闭了bash,则使用alias命令定义的别名或使用unalias删除的命令,会立即失效;
对于每个用户来说,都有一个私有的bash的配置文件,就在用户的家目录当中的一个隐藏文件,文件名.bashrc,其主要功能用来保存命令的别名的文件
注意:在对于此文件中的命令别名进行编辑保存之后,在当前已经运行的bash中并不会立即生效,需要重新加载才能使配置生效,以下两种操作皆可实现:
  1.重启bash:注销之后再次登陆即可;
  2.指向文件中定义的命令:使用source命令,或者.命令;
  source/.
  “source”-在当前shell中执行一个文件中的命令。
  “ .”    -在当前shell中执行的一个文件中的命令
  格式:source/.文件名【参数】

二、bash的快捷键
  C:表示Ctrl键
  M:Alt键
  E:Esc键
  DEL:Backspace键
 
 C-l:清屏,相当于clear命令;
 C-a:将光标跳转至命令行编辑模式的行首
 C-e:将光标跳转至命令行编辑模式的行尾
 C-k:当前光标位置删除至行尾
 C-u:当前光标位置删除至行首
 C-c:结束前台进程
 M-.:引用上一个命令中的最后一个参数;(载Xshell中不能用)
 E按一次再按.:功能同上一个M-.可以在Xshell中使用

三、命令历史:
 bash进程会保存其会话中的用户曾经执行过的命令,以方便用户重复执行某个命令;命令历史包括两个各方面:
  1.用户曾经执行过的命令;
  2.用户层执行过的命令的路径;
在bash中有一个内置的变量-PATH,PATH变量的值为当前系统中所有命令的文件所在的路径集合;
命令如何被shell执行的?
 bash会将命令行的内容按照空白字符进行切片,分析第一个切片内容;
  1.判断第一个切片的内容是内部命令还是外部命令;
如果是内部命令,直接运行;
  如果是外部命令,先找hash表中的路径缓存,如果有则直接执行;否则,则需要通过查找PATH变量中包含路径中,是否有对应名称的文件;
  使用hash命令查看被记住的命令文件的路径;
  -r:清空hash表
  使用history命令来显示曾经执行过的命令参数;
  hietory-显示和操纵历史列表
  格式:history [-c] [-d 偏移量] [n] 或
                      history -anrw [文件名] 或 history -ps 参数 [参数...]
  常用选项:
-c:清空历史缓冲区中的命令历史纪录;
-d OFFSET:删除指定的历史命令条目;
重复执行历史缓冲区的命令:
“!编号” :直接调用历史缓冲区中此编号命令;
“!STRING” :重复执行历史缓冲区中以STRING开头的最后一次执行过的命令;
!?STRING :重复执行历史缓冲区中包含了“STRING”的最后一次执行过的命令;
    !-编号    :直接调用历史缓冲区中此编号命令;
使用上下箭头也可调用历史缓冲区命令回车执行;
C-r :在历史缓冲区中实施搜索,回车之后执行;
    !$ :在历史缓冲区中调用最后一个命令的最后一个参数;
!^ :在历史缓冲区中调用最后一个命令的第一个位置的参数;
!  :NUMBER:在历史缓冲区中调用最后一个命令中第NUMBER位置参数;
!SEQUENCE:NUMBER :历史缓冲区中调用第“SEQENCE”条命令中第NUMBE位置                          的参数;
 
在bash中与命令相关的内置变量:(变量名称大小写敏感不能打错)
  HISTSIZE:历史缓冲区中能够保存的命令历史的最大条目数量:默认是1000;
  HISIFILESIZE:~/.bash_history文件中能够保存的命令历史的最大条目数量:默认是1000;
  HISTIMEFOMAT:在命令历史缓冲区中记录历史命令时,同时记录命令的执行的时间戳标记:可以使用date命令的FORMAT来表示时间的记录格式:默认值为空;
  HISTCONTROL:控制命令历史的记录方式;
ignoredups:忽略连续切向同行的命令被记录到历史缓冲区,此为默认值;
ignotrspace:以空白字符开头的命令不会被记录到历史缓冲区;
Ignoreboth:上述两种情况都不会被记录到历史缓冲区;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13298.html