一个完整计算机的体系结构包括:硬件与软件,而软件又分为系统软件与应用软件,负责对硬件仅需管理与操做的是系统软件的内核部分,用户是没法与硬件或内核打交道的,用户经过应用程序或部分系统软件发出指令(多是经过浏览器发送一封邮件),这些指令会被翻译并传给内核,内核在得知用户的需求后调度硬件资源来完成操做(好比,使用网卡发送数据包)。前端
在Linux环境下,咱们通常经过Shell来与内核交流,并最终实现咱们想要使用计算机资源的目的。因为Linux的开放性特色,使得在Linux下对Shell的选择也不少,CentOS 6.3系统中可使用的Shell有/bin/sh、/bin/bash、/bin/tcsh、/bin/csh这几种,/etc/shells文件说明了当前系统有哪些可用的Shell。不一样的Shell有不一样的特色以及操做方式,咱们这里以CentOS默认使用的Shell为讲解案例即Bash。shell
BASH功能介绍vim
1命令历史centos
Bash拥有自动记录命令历史的功能,用户所执行的命令会在注销时自动记录到本身家目录下的.bash_history 这样一个隐藏文件中。查看这些命令历史记录的方法有不少,能够经过直接打开文件来查看,也能够经过键盘的上下键来上翻或下翻历史记录,还能够经过history命令查看历史记录,全部的命令历史都有记录编号。命令历史可以记录的信息数量由HISTSIZE变量所决定,CentOS 6.3默认经过/etc/profile文件定义了HISTSIZE=1000,也就是最多能够记录最近所使用的1000条命令,当有第1001条命令执行时第一条命令会被覆盖,执行history -c命令能够清空全部的历史记录。浏览器
记录命令历史的除了能够查看历史记录外,还能够在须要时直接调用历史记录再次执行该命令:bash
1.上下键翻阅历史命令,找到合适的命令后直接回车便可执行。服务器
2. 输入!string调用命令历史(string为关键字),如!vim将调用最后一次执行的以vim开头的命令。或者经过!n来准肯定位历史记录,如!242将直接调用命令历史的第242条记录并执行。网络
3. 经过Ctrl+r快捷键打开搜索功能,接着输入关键字便可在命令历史中搜索相关命令,回车完成执行操做。若是没有搜索到适合的命令按ESC键退出搜索。编辑器
2命令别名firefox
在CentOS 6.3系统中咱们能够直接使用ll命令来显示文件的详细信息,其实系统中并无ll这样一个命令,它仅是被提早定义好的一个别名而已,别名的好处是能够把原本很长的指令简化缩写,为经常使用且复杂的命令及选项建立别名能够大大提升平常工做效率。
3管道与重定向
Bash的标准输入设备是键盘、鼠标、手写板等设备,标准输出为显示器,通常咱们经过键盘输入命令并执行,系统将返回信息显示在屏幕上,默认不论是正确的仍是错误的信息都将输出至显示器。标准输入的文件描述符为0,标准输出的文件描述符为1,错误输出的文件描述符为2。但有时咱们须要改变这样的标准输入与输出方式,Linux中咱们可使用重定向符(<、>、<<、>>、|)从新定义输入与输出。
管道使得咱们能够将多条命令链接在一块儿使用,它的做用是将一个命令的标准输出重定向给下一个命令并做为该命令的标准输入。例如,使用ifconfig eth0 | grep ‘inet addr’命令过滤包含IP地址的行,ifconfig自己会输出大量网络接口的信息,因为这里使用了管道符号(|)因此ifconfig命令的全部输出都将做为grep命令的输入内容,最终实现过滤包含IP地址的行。
对于标准的输出信息是输出至显示器,而有时你可能并不须要这些输出信息,又或者是暂时不须要在屏幕上看到这些信息;另外对于输入通常是经过键盘输入,而有时你或许但愿能够从文件中读取输入信息。输出重定向可使用>或>>符号,使用>能够将输出导入至文件,若是文件不存在则建立该文件,若是文件已经存在则会覆盖该文件的内容;而使用>>能够将输出追加至文件;另外,对应错误信息的重定向须要使用2>或2>>符号实现。输入重定向可使用<符号,它能够能够帮助咱们从文件中提取输入信息。
如下经过几个简单的实例演示重定向的使用方法:
4快捷键
Bash准备了大量的快捷键为用户使用,熟练掌握这些快捷键的所有或部分会使你在工做中受益颇多,开始的时候你可能须要花费大量的时间来记忆这些快捷键,但一旦你记住了他们,你的工做效率会直线上升。下面列出了经常使用的快捷键及其功能描述。
BASH使用技巧
1重定向技巧
1.若是你编写了一个脚本实现自动修改系统账号的密码,那么默认当密码修改为功后系统会提示successfully这样的提示信息,若是须要修改20个帐户密码则显示20条这样的信息。像这样的案例,大量的成功提示信息并非咱们关注的重点,管理员更多的是关心错误提示。因此这时能够考虑将标准正确输出屏蔽,Linux中提供了一个特殊设备/dev/null,它很像太阳黑洞,任何东西往里写入都将永远消失。对大量无心义的输出信息能够经过管道导入至/dev/null设备。
2.标准输出与错误输出分离重定向
不少时候自动运行的脚本编写完成后,是要在深夜服务器负载最低时以无人职守方式运行的,那么当管理员去检查脚本运行状况时会但愿看到哪些命令执行成功了,哪些命令出现了问题,而且为了方便管理须要将正确输出与错误输出分写保存在两个不一样的记录文件中,那么分离重定向就显得尤其重要了。下面咱们检查系统中是否存在tom用户,若是存在则将tom相关信息记录至user文件中,不然记录至error文件中:
2命令序列
在Linux中咱们可使用控制字符(;、&&、||、&)来控制命令的执行方式。其中[&]控制符使得命令开启一个子Shelll并在后台执行;使用[;]控制字符能够把多个命令组合,但多个命令之间没有任何逻辑上的关系,仅按循序执行;使用[&&]控制字符也能够将多个命令组合,但仅当前一个命令执行成功后才会执行[&&]控制符后面的命令;[||]控制字符的做用与[&&]恰好相反,仅当前一个命令执行失败才会执行[||]控制符后面的命令。下面经过实例演示。
1.火狐浏览器经过前端启动,使得当前Shell将暂时没法使用:
[root@centos6 ~]# firefox
2.后台运行浏览器,不影响当前Shell的使用:
[root@centos6 ~]# firefox &
3.全部命令按顺序执行(无论前面的命令是否成功,后面的命令必定正常执行):
[root@centos6 ~]# ls /tmp ; ls /root ; ls /home
4.若是某个文件存在则显示该文件内容,不然报错(仅当ls执行成功才会执行cat):
[root@centos6 ~]# ls test.txt && cat test.txt
5.若是有gedit编辑器则打开该程序,不然打开vim编辑器:
[root@centos6 ~]# gedit || vim
6.若是id tom执行成功则说明用户存在屏幕将显示Hi,tom,不然显示No such user:
[root@centos6 ~]# id tom &>/dev/null && echo “Hi,tom” || echo “No such user”
实例5首先经过&>重定向符将id命令的全部输出屏蔽,让后使用&&与||来判断id命令是否执行成功,成功就显示问候语不然显示没有该用户。
3做业控制
Bash环境中经过命令开启进程的时候使用&符可使得该进程进入后台执行,或者一个命令执行后使用Ctrl+z快捷键能够将该进程放入后台并暂停执行,之后随时使用jobs命令能够查看这些后台进程,而且会为每一个这样的进程分配一个编号,经过fg <编号>的形式能够将这些后台进程再次调回前台执行。
[root@centos6 ~]# firefox &
[root@centos6 ~]# jobs
[1]+ Running firefox &
[root@centos6 ~]# fg 1
4花括号{}的使用
经过括号扩展能够生产命令行或脚本须要的字串,括号中能够包含连续的序列或使用逗号分割的多个项目,连续的序列包括一个起点与一个终点并使用..分割。接下来看看具体的语法格式案例: