Shell:对于Linux来说一种应用程序,在库调用和系统调用之上可以保护操作系统。
shell分为两类:
图形界面shell(GUIshell,Graphical User Interface shell)
命令行界面shell(CLIshell,Command Line Interface shell)
**********************************************************************************
shell发展:
Bourne Shell
首个重要的标准Unix Shell是1970年底在V7 Unix(AT&T第7版)中引入的,并且以它的创始科技部基础条件平台“国家气象网络计算应用节点建设”(2004DKA50730)资助者Stephen Bourne的名字命名。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。
C Shell
Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。
Korn Shell
有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,AT&T的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,Korn shell广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。
Bourne Again Shell (bash)
bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux.大多数的Linux(Red Hat,Slackware,Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。
POSIX Shell
POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0,POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.
-----------------------------------引自《搜狗百科》
Zsh(Zshell),功能很强大,是最接近所有shell集合的shell
*************************************************************************************
在我们的/etc/shells下可以查看系统支持的shell。当前系统使用的shell可以用echo $0查看,用cat /etc/shells查看的shell可以直接当作命令。
注意:
a)nologin不能随便使用。
b)在每一次换shell中,最好返回到bash。可以用exit退出当前shell。
bash:
一、别名的替换 ----> alias 别名=‘命令’
alias是集成在bash中的
alias [-p] [名称[=值] ... ] 定义或显示别名。
alias命令是显示已定义的别名
unalias: 用法:unalias [-a] 名称 [名称 ...] 从别名定义中删除每一个"名字"
*注意:如果注销系统,则使用alias和unalias定义的别名将失去作用,解决方案是将命令写入文件当中,在用户的家目录中的一个隐藏文件,文件名为".bashrc",其主要功能就是用来保存命令的别名的定义.
*注意:在对于此文件中的命令别名进行编辑并保存之后,在当前已经运行的bash中并不会立即生效,需要重新加载此文件才能使配置生效,以下两种操作皆可实现:
1.重启bash:注销之后再次登录即可;
2.执行文件中定义的命令:使用source命令,或者.命令;
source或者.
source : 在当前 shell 中执行一个文件中的命令。
. :在当前 shell 中执行一个文件中的命令。
格式:source或者. 文件名 [参数]
]%O5LV)4(V[8@2.png" alt='bash_bash'>
二、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-. 三、命令历史: Bash进程会保存其会话中的用户曾经执行过的命令,以方便用户重复执行某个命令操作; 命令历史包括两个方面: 1.用户曾经执行过的命令; 2.用户曾经执行过的命令的路径; 在Bash中有一个内置的变量——PATH,PATH变量的值为当前系统中所有的命令的文件所在的路径的集合; 命令如何被shell执行的? bash会将命令行的内容按照空白字符进行切片,分析第一个切片内容: 1.判断第一个切片的内容是内部命令还是外部命令; 如果是内部命令,直接运行; 如果是外部命令,先找hash表中的路径缓存,如果有,则直接执行;否则通过查找PATH变量中包含路径中,是否有对应名称的文件; 使用hash命令查看被记住的命令文件的路径; -r:清空hash表; 使用history命令查看被记住的命令的命令行参数; history - 显示或操纵历史列表。 格式: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 参数 [参数...] 常用选项: -c:清空历史缓冲区中的命令历史记录; -d OFFSET:删除指定的历史命令条目; 重复执行历史缓冲区中的命令: !NUMBER:重复执行历史缓冲区中编号为"NUMBER"的命令; !STRING:重复执行历史缓冲区中以"STRING"开头的最后一次执行过的命令; !?STRING:重复执行历史缓冲区中包含了"STRING"的最后一次执行过的命令; !-NUMBER:重复执行历史缓冲区中倒数第"NUMBER"条命令; 使用上、下Arrow可以从历史缓冲区中调用命令,回车之后执行; C-r:在历史缓冲区中实施搜索,回车之后执行;
!$:在历史缓冲区中调用最后一个命令的最后一个参数;
!SEQUENCE:NUMBER:历史缓冲区中调用第"SEQUENCE"条命令的第"NUMBER"位置参数
~+:调用bash的内置变量"PWD"的值;
六、命令的执行结果
其中:
其余数字(3-126,128-255):用户可以自定义的失败状态返回值;
七、引用功能:
*注意: 1.一般来讲,凡是被管道连接的命令,都应该能够在执行成功之后完成命令结果的输出,否则管道无意义;
~]# set -C //开启防止意外覆盖源文件开关,可以使用">|"符号完成覆盖重定向输出的操作,而无需关心是否开启此开关; ~]# set +C //关闭防止意外覆盖源文件开关 >>:追加输出重定向; 错误重定向: 2>:覆盖错误重定向; 2>>:追加错误重定向; 合并标准输出和标准错误的重定向: 1.COMMAND {>|>>} /PATH/TO/SOMEFILE 2>&1 2.&>, &>> bash中的其他特殊符号: <<:here document,此处文档,结束标记; <<<:here string,此处字符串,结束标记;