一个完整的计算机架构包括:硬件和软件,软件分为系统软件和应用软件。系统软件的内核部分负责硬件的管理和运行。用户无法处理硬件或内核。用户通过应用程序或部分系统软件发送指令(可能通过浏览器发送电子邮件),这些指令将被翻译并传递给内核。内核知道用户的需求后,调度硬件资源来完成操作(例如,使用网卡发送数据包)。在Linux环境下,我们一般都是通过Shell与内核进行通信,最终达到我们想要使用计算机资源的目的。由于Linux的开放性,Linux下的shell有很多选择。CentOS6.3系统可以使用的shell包括/bin/sh、/bin/bash、/bin/tcsh、/bin/csh。/etc/shells文件显示当前系统上可用的shell。不同的外壳有不同的特点和操作方法。这里我们取CentOS默认使用的shell为Bash。BASH功能介绍1.命令历史Bash具有自动记录命令历史的功能。用户执行的命令会在退出时自动记录在主目录下的.bash_history等隐藏文件中。查看这些命令的历史有多种方式,可以直接打开文件查看,也可以使用键盘上的上下键上下滚动历史,也可以使用history命令查看history,所有的命令历史都记录了序号。命令历史中可以记录的信息量由HISTSIZE变量决定。CentOS6.3默认通过/etc/profile文件定义HISTSIZE=1000,即最多可以记录1000条最近使用的命令。当执行第1001条命令时*第一条命令会被覆盖,执行history-c命令清除所有历史记录。除了查看记录的命令历史记录外,还可以在需要的时候直接调用历史记录再次执行命令:1).使用向上和向下键滚动浏览历史命令,找到合适的命令并按Enter执行它。2).输入!string调用历史命令(string是关键字),例如!vim会调用vim开头的最后执行的命令。或者使用!n来准确定位历史记录,例如!242会直接调用并执行命令历史记录中的第242条记录。3).使用快捷键Ctrl+r打开搜索功能,然后输入关键字在命令历史中搜索相关命令,回车完成执行。如果没有找到合适的命令,按ESC键退出搜索。2、命令别名在CentOS6.3系统中,我们可以直接使用ll命令来显示文件的详细信息。事实上,系统中并没有ll这个命令。它只是一个预先定义好的别名。别名的好处是可以简化长指令的缩写,为常用和复杂的命令和选项创建别名可以大大提高日常工作效率。3.管道和重定向Bash的标准输入设备是键盘、鼠标、手写板等设备,标准输出是显示器。一般我们通过键盘输入命令并执行。系统会将返回的信息显示在屏幕上。无论是正确还是错误信息都会输出到显示器上。标准输入的文件描述符为0,标准输出的文件描述符为1,错误输出的文件描述符为2。但是有时候我们需要改变这样的标准输入输出方式。在Linux中,我们可以使用重定向字符(<、>、<<、>>、|)来重新定义输入和输出。管道允许我们将多个命令连接在一起。它的作用是将一个命令的标准输出重定向到下一个命令,并作为该命令的标准输入。例如,使用ifconfigeth0|grep'inetaddr'命令过滤包含IP地址的行。ifconfig本身会输出大量的网络接口信息。由于此处使用了管道符号(|),因此ifconfig命令的所有输出都将用作grep命令。输入内容,最终实现对包含IP地址的行的过滤。标准输出信息输出到显示器,有时你可能不需要输出信息,或者暂时不需要在屏幕上看到信息;另外,输入一般是通过键盘输入的,有时你可能希望能够从一个文件中读取输入信息。输出重定向可以使用>或>>符号,使用>将输出导入文件,文件不存在则创建文件,文件已存在则覆盖文件内容;并使用>>将输出附加到文件;另外,错误信息对应的重定向需要使用2>或2>>符号来实现。输入重定向可以使用<符号,它可以帮助我们从文件中提取输入信息。下面通过几个简单的例子来演示重定向的使用:4.快捷键Bash准备了大量的快捷键供用户使用。熟练掌握这些快捷键的全部或部分,将对你的工作大有裨益。有时候你可能需要花很多时间去记住这些快捷键,但是一旦记住了它们,你的工作效率就会直线上升。下面列出了常用的快捷键及其功能说明。BASH使用技巧1.重定向技巧1).如果你写了一个脚本来自动修改系统账号的密码,那么默认情况下,当密码修改成功时,系统会提示成功之类的提示信息。如果您需要更改20个帐户密码,它会显示20条这样的信息。在这种情况下,大量的成功提示并不是我们关注的重点,管理员更关心的是错误提示。所以这个时候可以考虑屏蔽掉标准的正确输出。Linux提供了一个特殊的设备/dev/null,它非常类似于太阳黑洞。写入其中的任何内容都将永远消失。许多无意义的输出可以通过管道传输到/dev/null设备。2).标准输出和错误输出是分离和重定向的。很多时候,自动运行的脚本写好后,要在深夜服务器负载***的时候,以无人值守的方式运行。那么管理员在检查脚本运行状态的时候,会想看看哪些命令执行成功,哪些命令有问题,为了方便管理,需要将正确的输出和错误的输出分别存放在两个不同的地方记录文件,所以分离重定向就显得尤为重要。接下来我们查看系统中是否存在tom用户。如果存在,则在用户文件中记录tom相关信息,否则在错误文件中记录:2、命令顺序在Linux中,我们可以使用控制字符(;、&&、||、&)来控制命令的执行方式执行。其中,[&]控制符使命令打开一个子shell并在后台执行;使用[;]控制符组合多个命令,但多个命令之间没有逻辑关系,只是顺序执行;使用[&&]控制符也可以组合多个命令,但是[&&]控制符后面的命令只有在前一个命令执行成功后才会执行;[||]控制符的作用正好与[&&]相反,只有当前命令执行失败才会执行[||]控制符之后的命令。下面通过实例进行演示。1).火狐浏览器是通过前端启动的,这样当前的Shell会暂时不可用:[root@centos6~]#firefox2)。后台运行浏览器不影响当前Shell的使用:[root@centos6~]#firefox&3)。所有命令按顺序执行(不管前面的命令成功与否,后面的命令一定要正常执行):[root@centos6~]#ls/tmp;ls/root;ls/home4)。如果文件存在则显示内容,否则报错(只有ls执行成功才会执行cat):[root@centos6~]#lstest.txt&&cattest.txt5)。如果有gedit编辑器,打开程序,否则打开vim编辑器:[root@centos6~]#gedit||vim6)。如果idtom执行成功,说明该用户存在,屏幕会显示Hi,tom,否则显示Nosuchuser:[root@centos6~]#idtom&>/dev/null&&echo"Hi,tom"||echo"Nosuchuser"例5先通过&>重定向符屏蔽所有id命令的输出,然后使用&&和||判断id命令是否执行成功。如果成功,会显示问候语,否则会显示没有该用户。3.作业控制Bash环境下,通过命令启动进程时,使用&字符使进程进入后台执行,或者在命令执行后使用Ctrl+z快捷键将进程置于后台并暂停执行,以后随时使用jobs命令可以查看这些后台进程,并且会给每一个这样的进程分配一个编号,可以通过fg
