基本UNIX命令概览
可在命令提示符下执行数百条命令。不要感到压抑,虽然可用的命令有许多,但日常使用的不过就是那么几条。本节介绍在UNIX环境下需要使用的基本命令。 注解 如果想使用某条命令的帮助,可在命令提示下输入man以及打算得到帮助的内容。例如,如果输入man date,将会接收到关于date命令的信息以及其他大量资料。详细内容请参阅3.3.1节。 UNIX shell有几个简单、内建的命令。其他命令全都是可执行文件的形式,存放在名为bin(二进制的简写)的特殊目录中。表3-1给出一些需要知道的非常重 要的UNIX命令。UNIX命令较为隐晦,但其中一些命令Windows用户应该较为熟悉。例如,命令cd和mkdir在Windows具有与UNIX中 相同的意义。许多UNIX命令有扩展其基本功能的额外的选项和开关(就像在MS-DOS中一样),表3-1示出了最有用的命令开关。 表3-1 基本UNIX命令
(续)
提 示 在按下Enter键之前,很有必要检查一下自己是否位于文件结构中的正确位置,以避免执行破坏性的命令。下面的命令将有助于控制你在命令行的输入。在 Korn shell下,为了检索到你前面输入的所有命令,可按Esc键,后跟字母k。如果想检索到更早的命令,可连续按字母k,这样会得出以前输入的一系列命令。 如果已经输入了许多命令,希望编辑它们,可按Esc键,后跟字母h,或者按字母I转到所输入的命令行。 3.3.1 帮助和信息:man命令 有许多操作系统命令,其大多数都有几个选项。因此, 帮助系统嵌在操作系统中是很方便的,你可以方便地得到必要的信息。UNIX和Linux系统两者都有内建的称为man页面的功能,提供了关于所有操作系统 命令的很多信息。可输入man命令后跟需要查看的命令得到详细的信息,如下所示: 此命令将显示关于who命令的大量信息及其所有选项,下图是几个例子(见图3-2)。 图3-2 man命令的输出 在基于Linux的系统中,也可以使用灵巧的whatis命令来查看某条命令的功能。与man命令一样,whatis命令也是后跟想查看的命令。下面是一个简单的例子: 正如所见,相对于详细的man页,whatis命令提供了查看命令摘要信息的一个快速、简单的办法。 3.3.2 改变提示符 每种shell都有自己的默认提示符。Korn shell的默认提示为美元符号($)。可通过改变PS1 shell变量的值将其改为别的符号。 在下例中,先发布命令echo $ps1检查ps1变量的值。然后使用export命令设置ORACLE_SID环境变量为我的数据库名finance。再使用export命令将ps1 环境变量设置为与ORACLE_SID($ORACLE_SID)环境变量相同。现在shell提示符号已变为我的数据库名finance。因为我只导出 了ORACLE_SID变量值,但没有把它置入我的环境文件,所导出的值只在当前会话期间有效。 注 解 如果将PS1变量添加到自己的.cshrc文件(3.3.7节的“定制环境”中将要说明如何做这个工作),则每当打开一个新shell时,将显示你定制的 提示。如果要通过UNIX管理许多不同的数据库,则改变提示的能力很有用。可修改提示符以反映任何时候你正在工作的数据库。例如,如果你正在库存系统上工 作,提示可改为invent>。这样,就不会意外地在某个数据库中执行错误的命令了。 3.3.3 文件和目录的查找 有时你想找某个文件,但不能肯定位于文件系统中的位置。不过,whereis命令只是定位命令,而不是定位文件。为了找到文件或目录在何处,可以使用find命令,如下所示: 在这个例子中,find命令告知bill.sql文 件位于/u01/app/oracle/dba目录中。请注意,在find关键字后有一个圆点,表示从当前目录开始递归搜索,当前目录下的每个目录和子目 录都要搜索。如果希望从某个特定的目录开始搜索,需要在命令中指出。在下例中,find命令从根(/)目录开始搜索,如果找到则在屏幕上显示 test.txt文件的位置: 3.3.4 命令输出的控制 有时,一条命令输出的内容一个屏幕显示不下。有许多办法进行命令输出的控制。 more命令将显示一个文件的内容,一次一屏。按Enter就可以看到文件的下一屏。 管道命令(|)能够将一条命令的输出作为另一条命令的输入。在下面的例子中,|操作符取ps-ef命令的输出(当前系统中运行的进程列表),并传递给grep命令以搜索包含词Oracle的所有进程: 这个例子还演示了如何一次使用多个命令。 3.3.5 显示文件的内容 正如所知,可使用vi编辑器读写一个文件。但有时可能只想看看文件的内容。cat命令可以完成此工作,如下所示: 注解 也可以使用page命令细读文件。 3.3.6 文件相同还是不同 diff命令比较两个文件,返回不同的行,并说明如何使文件相同。下面举一个例子: 此diff命令的输出说明如果增加行New Test到test.one文件,就可以使它与test.two文件相同。第一个字符0为要在test.one中编辑的行号;a指出增加到test.one的行应该与test.two的第一行1相匹配。 3.3.7 UNIX变量 UNIX或Linux系统中主要有两种类型的变量,它们分别是用户创建的变量和shell变量。下面简要地看一下如何使用这两种变量。 1.用户创建的变量 用户可以创建变量并给它一个初始化值。变量中必须包含字母和数字,而且必须以字母打头。也可以使用export命令导出变量,以便在当前会话的任意shell中利用这些变量。 下面举一个用户创建变量的例子(请注意,回显变量本身只显示该变量名而非其值,要显示变量的值,必须在echo命令中的变量名前加一个$符号): 在此例子中,首先创建了一个名为database的 新变量,并赋给值nicko。然后用echo命令显示database变量的值,但echo命令只显示字符串database。再次使用echo命令,在 变量名前加了$符号($database)。这样做之后,变量database的值显示为nicko。 为了删除database变量的值,设置其为空即可,如下所示: 2.shell变量 shell变量是由shell自己设置值而不是由用 户设置值的变量。shell变量也称为关键词变量,因为这些变量中的有一些是用某些简写的关键词来表示的。当第一次登录UNIX系统时,必须使shell 得到一些信息,如你的主目录名、用来编辑文本的编辑器以及你的会话活动时系统显示的提示符等。这些东西都是由赋予shell变量的值所决定的。下面是两个 常见的shell变量。 q HOME:指定用户的主目录。 q PATH:指出shell执行命令时所要寻找的目录。PATH变量通常含有UNIX和Oracle软件的二进制(bin)目录。 幸运的是,不必每次登录系统时都手动设置环境变量。 有一个名为.profile或.loging的文件(具体是哪个文件要看登录的是什么样的UNIX shell)会在登录时自动为所有用户设置环境变量。在登录时,shell将查找合适的文件,并设置所有shell变量的值来建立环境。 3.使用export和setenv命令 用户定义变量和shell变量都局限于第一次声明它们的进程。如果希望从你登录的shell执行的shell脚本中访问这些变量,需要直接令这些变量对子进程的调用环境可用。 在Korn和BASH shell中,可利用export命令使一个变量的值为子进程可用。在C shell中,使用setenv命令完成相同的事情。举一个例子说明如何使用export命令来使一个变量的值为子进程所用: 下面的顺序也能达到与上面的export命令相同的结果: 在C shell中,使用setenv命令来设置变量的值,如下所示: 注解 UNIX程序和命令可以用两种完全不同的方式运行,即交互式方式和批量方式。交互式方式是在登录后直接在屏幕上输入命令;批量方式通常利用UNIX文本文件形式的可执行shell脚本,一次执行所有命令或一个完整的程序。 4.环境的显示 在系统提示下输入env,则所有环境变量将在屏幕上滚动。下面举一个例子: 为了看到某个特定而不是所有(可能会很长)环境变量的值,可使用如下的echo命令要求shell在屏幕上显示该变量的值。 请注意,在此echo命令中,环境变量名的前面放置了一个$,这样命令将显示变量的值而不是变量名。 5.定制环境 Bourne shell和Korn shell都使用.profile文件来设置所有shell变量的值。.profile文件在第一次登录UNIX或Linux系统时执行。 每次调用新的C shell时,都要执行.cshrc文件。.cshrc文件是一个含有一般的C shell命令的短文件,它在UNIX风格下仅需微小改动就能起作用。这表示在所有UNIX系统上具有基本相同的.cshrc文件。.cshrc文件在打 开UNIX或Linux环境下的终端窗口时执行,或者在执行一个脚本时执行。可在.cshrc文件中添加命令(用类似于vi的文本编辑器),这将使你在 UNIX中的工作效率更高。在你登录和启动一个新会话时,C shell也执行.login文件的内容。.login文件位于用户主目录中,例如对于大多数UNIX系统上的Oracle用户,它位于/home /oracle中。 下面列出各种主要的UNIX和Linux shell下执行的设置shell环境的不同的脚本。 q Bourne shell(sh):用户登录时仅执行.profile文件。.profile文件位于用户的主目录中。 q C shell(cshrc):此shell在执行.cshrc文件后执行.login。在用户登录创建一个新shell时,执行.cshrc脚本,但不执行.login文件。 q Korn shell(ksh):执行用户目录中的.profile文件。 q Bash shell(bash):登录时执行.bash_profile,然后在启动一个新shell时执行.bashrc文件。 为了永久改变环境变量,可编辑.profile或.login文件,对某个变量插入必要的值。例如,可如下对.login文件添加一行: 对于.profile文件,可如下添加行: 这些更改将在下次登录或调用一个C shell实例时起作用。在Bourne shell和Korn shell中,可利用以下的命令立即更改环境: 类似地,可使用C shell中的source命令立即进行环境变量更改: 3.3.8 UNIX中的输入和输出重定向 当在PC或UNIX工作站上使用UNIX窗口时,键盘是输入命令到shell的标准方法,终端是命令输出的标准位置。任何所导致的错误称为标准错误,通常显示在屏幕上。 注解 通常使用术语标准输入、标准输出和标准错误代表UNIX shell中的标准输入和输出位置。 但是,也可以使用文件作为输入,或者让UNIX发送输出到某个文件而不是屏幕。这种改变输入和输出路径的过程称为输入和输出重定向(input and output redirection)。 在不想要输出时,可将输出重定向到一个称为/dev/null的特定位置。如果使用/dev/null作为输出位置,则程序执行中发布的所有消息都被抛弃,并且不在文件系统的任何位置记录。下面的例子给出如何将一个文件的输出重定向到/dev/null,使其内容不可见。 这个例子中的第一条cat命令显示了testfile1的内容。但在cat命令重定向到/dev/null后,cat命令的输出不见了。 注解 cat命令的重定向输出有背于执行此命令的目的,但还有一些别的场合,如执行一个脚本而又不想看到所有命令的输出时,则可以进行输出重定向。 表3-2汇总了多数UNIX版本中的重要重定向操作符。 表3-2 UNIX中的输入/输出重定向
在下面的例子中,date命令的输出存储在file1中,而file2又得到file1的输出: 可利用UNIX的管道命令(|)达到相同的结果: 管道命令使用管道符号(|)指出shell取|符号前的命令的输出,将它作为|符号后的命令的输入。 3.3.9 noclobber shell变量 在将输出重定向一个文件时,可用noclobber shell变量来避免意外地覆盖某个已有文件。在启动文件(如.cshrc文件)中包括这个变量是一个很好的办法,如下所示: |
|