新手入门——shell入门前言使用Shell以下将介绍并解释基本的shell命令和机制。第一篇:超级工具/Terminals,xterms和Shells一、超级工具您或许听过这样的论调:命令行(themommandline)早就已经过时了,那东西神秘兮兮的,等等。有些人甚至觉得操作系统中应该没有这些命令才好。事实是上,您可以不懂任何shell,就能使用Linux。您启动系统后可以直接进入XWindow,最后在XWindow下关机。我坚信,用Linux而不懂shell,就象开车只会用头档(firstgear)一样。当然,最初看起来,直接而简单,在大多数情况下都管用。但速度慢,而且无法真正体验驾驶的乐趣。对,命令行很有趣。就象用一大堆收集到的积木,竟可以完成许多意想不到的创举,一些极其复杂的工作,只需几行命令就可以解决。这是因为,在Unix中,shell可不是简单的命令解释器(典型的有Windows中的DOS),而是一个全功能的编程环境。这并不意味着shell非常容易学通,您知道,好事多磨,这还是要花点工夫的。;-)但请相信我,这绝对值得。您在很短时间内,就能被一大帮门外汉吹捧为Unixwizard(奇才)。*grin*二、为了说明shell,这里需要一些背景知识。1、Terminals,xterms与Shells追溯到Unix诞生的那个年代,当时还没有现在流行的个人计算机。被称为计算机的机器,还是吞吐磁带与magneticmemory(用术语'core'来表示系统memory)的庞然大物。DEC公司(现在的Compaq)推出的PDP-11,体积小(被称为mini)而且价格底,在大学中引起了巨大的反响,很多学校直到那时才买得起一台计算机(PDP-11物美价廉,只有10000$)。这些机器的操作系统由汇编语言、机器语言写成,所以运行起来效率很高,但都无法移植(unportable)。每家计算机公司都给自己的机器配上独有的操作系统,然后再销售。这种笨拙的作法很快就被人们意识到了,于是就开始兴建一个可以在不同品牌机器上运行的操作系统。1969年,KenThompson开始写后来成为Unix的第一行代码。(Thompson曾经参加了一个项目:MULTICS,Unix是与这有关的一个玩笑词)其实,DennisRitchie为这个新的操作系统设计了一种新的编程语言--C语言后,事情才真正开始。虽然Unix的效率不及原来的操作系统,但有三个突出的优点:可以任意移植到其他机器,其中的C语言大大简化了编程,而且这些都free。很快,全美国的大学都忙着开始为机器安装Unix。2、终端(Terminals)Unix是可以在许多种机器上运行的操作系统,但人们又如何使用这些机器呢?他们是通过哑终端来连接到这些机器,也就是用键盘、显示器及足够的electronics(电子元件)组成的机器与中央计算机(centralcomputer)相连。在这些终端上,用户可以敲字符(teletypy),这就是字符串'tty'表示终端设备文件,和'getty'命令的名称来历。您可能会问,现在这些东西都在哪儿。这些终端的厂家无法达成一项最终标准,这导致每种牌子的终端都有各自的键盘布局、各自的在屏幕上显示字符的方法、发送或接收什么信号表示什么字符、控制代码等等。为了避免这些混乱,就创建了一个含有所有不同终端特性的(capability)文件,这就是'termcap'。用一个工具打开'/etc/termcap'瞧瞧,可别吓着了;-)。Linux终端大多数用'vt100'或'linux'作为终端类型。3、xterms在八十年代初期,产生了一个Unix的图形子系统--theXWindowSystem。九十年代早期,为了更好地实现基于Intel的Unix类系统上(如FreeBSD、NetBSD、Linux)的应用,产生了一个系统分支--XFree86。XWindow中一个很大的好处是可以运行多个虚拟(virtual)终端。甚至在XWindow下就有这么个应用程序--'xterm'。您将发现'xterm'和'virtualterminal'在很多情况下都是一样的。有的地方说'打开一个xterm',其实您不是非要用'xterm'程序,其他的终端模拟器(terminalemulator),如rxvt、konsole、aterm、eterm、wterm等等,一样有效。终端模拟器(又称为虚拟终端)通过伪(pseudo)tty设备--pty与系统相连,并且使用自己的显示标准--xterm。这导致不同的终端模拟器可能在一些按键或程序上存在细小的差别,这取决于模拟器多大程度上遵守了'xterm'的显示标准。4、Shells为了在终端中运行程序,需要shell。shell是操作系统的一部分,用来与用户打交道,并且可以用来协调各个命令。第一个真正的Unixshell--'sh',亦称为'Bourneshell',诞生于1975年,作者是SteveBourne。很快,出现了其他shell,如基于原始'Bourneshell'的'ksh'、'zsh',后者常用作专属Unixes系统中的标准shell;也有一些从C语言中衍生出来的shell,如'csh'或'tcsh'。在Linux中,标注的shell是'bash',即theGNUBourne-AgainShell(有点玩笑的味道……)。这个shell功能非常强大(甚至有人觉得太庞大了),压缩的manpage就有50KB。三、Shell起步首先,有一点小说明:在平常应用中,建议您不要用'root'帐号运行shell,如果您还是新手,这一点尤其要注意。作为普通用户,不管您有意还是无意,都无法破坏系统;但如果是'root',那就不同了,只要敲几个字母,就可能导致灾难性后果。当您登入系统或打开一个xterm窗口,首先看到的是提示符(prompt)。RedHatLinux的标准提示符包括了您的用户名、登入的主机名(没有设置的话,是'localhost')、当前所在的目录(workingdirectory)、提示符号:[tom@belbotom]$我以用户名'tom'登入名为'belbo'的主机,当前在我的home目录--'/home/tom'中。'root'的提示符:[root@belboroot]#除了不同的用户名外,提示符号由'$'变成了'#'。根据Bourneshell的传统,普通用户的提示符以'$'结尾,而超级用户用'#'。提示符的每个部分都可以定制,您在后面将有更深的了解。要运行命令的话,您只要在提示符后敲进命令,然后在按键。shell将在其路径中(详情见后)搜索这个命令,找到以后就运行,并在终端里输出相应的结果(如果有的话),命令结束后,再给出新的提示符:[tom@belbotom]$whoamitom[tom@belbotom]$顺带指出,当您敲ENTER时,光标(cursor)在哪里并不要紧,因为shell总是会整行地读取。基本的命令有:'ls'(listdirectory,列出目录内容)、'cp'(copy,复制)、'mv'(move/rename,移动/重命名),'cd'(changedirectory,改变目录),这些命令后面都可以跟上一帮可选项,这方面manpage有详细的介绍(manls,manmv等等)。在您动身前往shell领地前,这里有几个术语(terminology)的简短说明。命令可能带一些可选项(options)、参数(arguments):mv-ifiledir其中'-i'是命令'mv'的一个可选项,而'file'和'dir'则是参数。所有可选项在该命令的manpage都中有详细的介绍(此例中用manmv),而参数则由您提供。可选项决定命令如何工作,而参数则用于确定命令作用的目标。到目前为止,介绍得有点象许多人厌恶轻视的DOSshell,但伴随着下面的介绍,您将会有新的体验。第二篇:自动补齐/命令行的历史记录/编辑命令行/可用的Shell快捷方式Unix(及后继者Linux)在命令行下面诞生,因此,Unix中的命令行有许多非常实用的功能。在本篇中,我们将来作一些了解。一、自动补齐;如何用'cd'(改变目录,changedirectory)最快地从您当前所在的home目录跳到'/usr/src/redhat/'呢?cd/usrr这称为'命令行自动补齐'(automaticcommandlinecompletion),这在平常应用中是不可缺少的。让我们仔细看看这个例子:cd/u扩展成了cd/usr/,很简单吧。下面的cd/usr扩展为cd/usr/src/。如果您只敲了cd/us,'/usr'下匹配的('cd/u*/s*')三个子目录将列出供您选择:'/usr/sbin'、'/usr/share'和'/usr/src'。因此,键可以很方便地用于根据前几个字母,来查找匹配的文件或子目录。比如,ls/usr/bin/zip将列出所有'/usr/bin'下面,以字符串'zip'开头的文件或子目录。当然,完成这类任务还有更厉害的命令,但这个方法确实很管用。另外,碰到长文件名时就显得特别方便。假设您要安装一个名为'boomshakalakwhizbang-4.6.4.5-i586.rpm'的RPM包,您输入rpm-iboom,如果目录下没有其他文件能够匹配,那shell就会自动帮忙补齐。cd/usrl将扩展成cd/usr/src/linux,并等待继续。'/usr/src'中有两个匹配的目录:'/usr/src/linux-[...]'、'/usr/src/linux'。如何告诉shell您想要后面的那个呢?只要跟一个斜线(/,slash),就可以选择后面的那个了。假如您不确定是'/usr/src/linux/Documentation'还是'/usr/src/linux/documentation'。而您知道,Linux是区分大小写的。如果已经仔细读过前面部分的话,您想到可以用:cd/usrl/d扩展成了'/usr/src/linux/drivers/',因此应该是'Documentation'(大写的'D')。这种补齐对命令也有效:[tom@belbotom]$gregrecordgrefergrep[tom@belbotom]$gre在这里shell将列出所有以字符串'gre'开头的已知命令。二、命令行的历史记录通过按向上方向键,您可以向后遍历近来在该控制台下输入的命令。用向下方向键可以向前遍历。与SHIFT键连用的话,您还可以遍历以往在该控制台中的输出。您也可以编辑旧的命令,然后再运行。按后,shell就进入reverse-i(ncremental)-search(向后增量搜索)模式。现在输入您要找的命令的首字母:(reverse-i-search)`':.敲入'i'可能会变成:(reverse-i-search)`i':isdnctrlhangupippp0如果您再按键,上面的命令将再次执行。而如果您按了向右、向左方向键或,上面的命令将回到普通的命令行,这样您就可以进行适当编辑。编辑命令行通过光标和功能键(Home、End等键),您可以浏览并编辑命令行,如果您需要,还可以用键盘的快捷方式来完成一般的编辑:l:删除从光标到行尾的部分l:删除从光标到行首的部分l:删除从光标到当前单词结尾的部分l:删除从光标到当前单词开头的部分l:将光标移到行首l:将光标移到行尾l:将光标移到当前单词头部l:将光标移到当前单词尾部l:插入最近删除的单词l:重复前一个命令最后的参数。例如:您用命令mkdirpeter/pan/documents/tinkerbell新建了一个目录,现在您向用命令'cd'进入该目录,您可以用cd!$,shell将把前一个命令'mkdir'的参数添加到现在的'cd'后面。当您更深入了解Linux后,将看到这些快捷方式在其他应用程序下输入时,有时也有效,比如,在浏览器中的输入框中。三、可用的Shell快捷方式Red