您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Linux Shell简介
5.1超级工具5.1.1相关背景5.1.1.3Shells要在终端中运行程序,就需要Shell。Shell是操作系统的一部分,用来与用户打交道,并且可以用来协调各个命令。第一个真正的UNIXShell—sh,亦称为BourneShell,诞生于1975年,作者是SteveBourne。很快,出现了其他Shell,如基于原始BourneShell的ksh、zsh,后者常用作专属UNIX系统中的标准Shell;也有一些从C语言中衍生出来的Shell,如csh或tcsh。在Linux中,标准的Shell是bash,即theGNUBourne-AgainShell。这个Shell功能非常强大,压缩的man帮助文档就有50KB。5.1超级工具5.1.2Shell起步基本的命令有:◘ls:(listdirectory,列出目录内容)◘cp:(copy,复制)◘mv:(move/rename,移动/重命名)◘cd:(changedirectory,改变目录)这些命令后面都可以跟上一些可选项,这方面man帮助文档有详细的介绍(manls、manmv等)。命令可能带一些可选项及参数。mv–Ifiledir其中“-i”是命令“mv”的一个可选项,而“file”和“dir”则是参数。所有可选项在该命令的man帮助文档中都有详细的介绍(此例中用manmv命令),而参数则由你提供。一般情况下可选项决定命令如何工作,参数则用于确定命令作用的目标。5.2简单实用功能介绍5.2.1自动补齐自动补齐功能可以根据前几个字母,来查找匹配的文件或子目录。比如,ls/usr/bin/zipTAB将列出所有/usr/bin下面,以字符串zip开头的文件或子目录。当然,完成这类任务还有更厉害的命令,但这个方法确实很管用。另外,碰到长文件名时就显得特别方便。假设要安装一个名为boomshakalakwhizbang-4.6.4.5-i586.rpm的RPM包,输入rpm–iboom后,如果目录下没有其他文件能够匹配,那Shell就会自动帮忙补齐。练习:建一个文件ADDFGSLDJSG,使用自动补齐打开,输入A后TAB下面这种补齐对命令也有效:[sea@Linuxsea]$greTABgrecordgrefergrep[sea@Linuxsea]$gre在这里Shell将列出搜索路径到表中所有以字符串gre开头的命令。5.2简单实用功能介绍5.2.2命令行的历史记录通过按向上方向键,可以向后遍历近来在该控制台下输入的命令。用向下方向键可以向前遍历。与Shift键同时使用的话,还可以遍历以往在该控制台中的输出。也可以编辑旧的命令,然后再运行。通过光标和功能键(Home、End等键),可以浏览并编辑命令行,如果需要,还可以用键盘的快捷方式来完成一般的编辑:Ctrl+K:删除从光标到行尾的部分Ctrl+U:删除从光标到行首的部分Alt+D:删除从光标到当前单词结尾的部分Ctrl+W:删除从光标到当前单词开头的部分Ctrl+A:将光标移到行首Ctrl+E:将光标移到行尾Alt+A:将光标移到当前单词头部Alt+E:将光标移到当前单词尾部Ctrl+Y:插入最近删除的单词!$:重复前一个命令最后的参数。例如:用命令mkdirdocuments新建了一个目录,现在想用命令cd进入该目录,可以用cd!$,Shell将把前一个命令mkdir的参数添加到现在的cd后面。还有一个常用的指令:$!!重复上一次的指令5.2简单实用功能介绍5.2.3可用的Shell快捷方式RedHatLinux带有不少快捷方式,其中一部分是bash原来就有的,而还有一些则是预先设置的。由于home目录是每位用户的活动中心,Linux对此有特殊的快捷方式。~就是home目录的简写形式。假设在其他目录,想把一个名为sometext的文件复制到home目录下的docs子目录中。除了输入:cpsometext/home/myusername/docs还可以用简写:cpsometext~/docs练习:新建一个文件夹doc,在该文件夹里新建文件file,内容自编。复制该文件到studentxxx,也就是你启动shell目录下。查看该文件内容。理论上,这也可以应用在命令cd上。无论当前路径在哪里,cd~将回到您的home目录。其实还可以简化,只要输入cd,就可以返回home目录了。5.3Shell命令行格式简介5.3.1命令的排列现在您将看到一些常用的命令排列。您可能想在一行中给出所有命令,然后就可以把注意力转移到其他地方。没问题,Shell允许您在不同的命令之间,放上特殊的排列字符。command1;command2先执行command1,不管command1是否出错,接下来执行command2。例如:$ls–a;du–hs%%%%%练习察看du–hs作用%%%%%%%先在屏幕上列出目录中的所有内容,然后列出所有目录及其子目录所占磁盘的大小。command1&&command2只有当command1正确运行完毕后,才执行command2。例如:$ls–abogusdir&&du–hs将返回ls:bogusdir:Nosuchfileordirectory,而du则根本没有运行(这是因为没有bogusdir目录)。如果将符号&&换成了“;”,du将被执行。5.3Shell命令行格式简介5.3.1命令的排列为了进一步说明“;”和“&&”的区别,及一般命令排列的用处,下面举一个经典的例子:Linux内核的编译和安装。要编译、安装Linux,需要执行一串命令:makedep、makeclean、makebzImage、makemodules、makemodules_install和makeinstall。如果要等一个命令完成后,再输入下一个,再等,再输入,……,那就太麻烦了。使用&&,每个命令只有当前面的命令都正确执行完毕后,才能开始执行。如果用“;”来排列命令,则即使有命令执行失败,后面的也照常运行,最后,您可能在“/boot”目录下得到一个有问题的内核映像(image)。用“&&”连接起来的命令行如下:#makedep&&makeclean&&makebzImage&&makemodules&&makemodules_install&&makeinstall不需要中途打断,就可以编译内核及其模块,并完成后面的安装,如果中间的某个命令执行失败则不再执行其后的命令。5.3Shell命令行格式简介5.3.2命令的任务调度当在终端里运行一个命令或开启一个程序时,终端要等到命令或程序运行完毕后,才能再被使用。在UNIX中,我们称这样的命令或程序在前台(foreground)运行。如果您想在终端下运行另一个命令,则需要再打开一个新的终端。这里还有一个更方便的方法,称为任务调度(jobbing)或后台(backgrounding)。当您运用任务的调度或将命令置于后台,终端就立即释放了,这样一来,终端立即就可以接受新的输入。为实现这样的目的,只需在命令后面添加一个&:$gedit&即告诉Shell将文本编辑器放到后台去执行(即当成job来运行)。命令jobs将列出当前终端窗口中,运行着哪些命令与程序:$jobs[1]+Runninggedit&注意关闭终端将导致所有在其中运行的任务都将被中止,在前例中,如果关闭了终端,由这个终端开启的gedit程序也将被关闭。5.3Shell命令行格式简介5.3.2命令的任务调度但如何将前台正在运行的程序放到后台去呢?Ctrl+Z组合键将挂起终端中正在运行的程序,bg命令将被挂起的进程放到后台去执行。举例如下:$geditCTRLz[2]+Stoppedgedit$bg[2]+gedit&注意在后台运行应用程序有时候是有用处的,这样可以在终端下显示这个程序的出错信息,虽然这对您可能没有直接的帮助,当如果碰到了麻烦,向别人询问时,这些出错提示就有用武之地了。使用gedit编写个人简历!一些程序,很可能还处在测试期(Beta),尽管在后台执行,也会在终端中输出一些信息。如果您对此不满,可以用下面的命令:#command&/dev/null&这不仅将程序送到后台执行,还将其输出到/dev/null文件。/dev/null是系统的“碎纸机”,所有送到那里的信息都将消失殆尽。5.4定制bash5.4.1bash配置文件在home目录下,运行:#ls.bash*将看到每一位用户的配置文件,编辑这些文件不需要root权限,还可以使你的bash更具个性。1.bash_history:记录了以前输入的命令1.bash_logout:当退出Shell时,要执行的命令1.bash_profile:当登录Shell时,要执行的命令1.bashrc:每次打开新的Shell时,要执行的命令请注意后两个的区别:.bash_profile只在会话开始时被读取一次,而.bashrc则每次打开新的终端(如新的xterm窗口)时,都要被读取。按照传统,您得将定义的变量,如PATH,放到.bash_profile中,而像aliases(别名)和函数之类,则放在.bashrc中。系统级的设置存储在/etc/profile、/etc/bashrc及目录/etc/profile.d下的文件中。当系统设置与用户设置发生冲突时,将采用用户的设置。5.4定制bash5.4.2提示符每次当打开一个控制台或xterm时,最先看到的就是提示符,类似于:account@hostname~$在默认设置下,提示符将显示您的用户名、主机名(默认是“localhost”)、当前所在目录(在UNIX中,~表示您的home目录)。按照传统,最后一个字符可以标识您是普通用户($),还是root(#)。可以通过$PS1变量来设置提示符,命令为:echo$PS1将显示当前的设定。其中可用字符的含义在manbash的PROMPTING部分有说明。如何才能完成理想的设置呢?对于初学者来讲,默认设定有些不友好,因为提示符只显示当前目录的最后一部分。如果看到像这样的提示符:[sea@localhostbin]$那么您的当前目录可能是/bin、/usr/bin、/usr/local/bin及/usr/X11R6/bin。当然,可以用pwd(输出当前目录,printworkingdirectory)来查看当前工作路径。5.4定制bash5.4.2提示符能不能让Shell自动告诉您当前目录呢?当然可以。这里将提到的设置(包括提示符)大都包含在文件/etc/bashrc中。您也可以通过编辑各自home目录下的.bash_profile和.bashrc来改变设置。在manbash中的PROMPTING部分,对这些参数(parameter)有详细说明。可以加入一些个性化设置,如不同格式的当前时间,命令的历史记录号,甚至不同的颜色。在~/.bashrc中,可以这样设置:PS1=“\[\033[1m\][\w]\[\033[0m\]”‘root’在‘~/.bashrc’中的设定是:PS1=“\[\033[031m\][\w]\[\033[0m\]”这样得到的提示符就是:[/usr/bin]当用“root”时,变成:[/usr/bin]这里已经除掉了主机名和用户名,但首先就能看出用户身份是普通用户还是“root”。注意到,普通用户的提示符可以是黑底白字,或白底黑字。5.4定制bash5.4.3改变$PATH$PATH与$PS1一样,也是环境变量。输入:#set将列出所有当前定义的环境变量。看到的这些环境变量在Shell的配置文件中定义,可能是用户自己的配置文件,也可能是由root通过/etc下面的系统级文件定义的。如果您使用X-Window,更多的一些变量将由X-Window、窗口管理器或桌面环境的启动文件配置。如果对这些设置不很清楚
本文标题:Linux Shell简介
链接地址:https://www.777doc.com/doc-3442363 .html