2.4 Linux命令行使用
Linux命令包括内部命令和程序(相当于外部命令)。内部命令包含在Shell内部,而程序是存放在文件系统中某个目录下的可执行文件。Shell首先检查命令是否是内部命令,如果不是,再检查是否是一个单独程序,然后由系统调用该命令传给Linux内核,如果两者都不是就会报错。当然就用户使用而言,没有必要关心某条命令是不是内部命令。
2.4.1 命令语法格式
用户进入命令行界面时,可以看到一个Shell提示符(管理员为#,普通用户为$),提示符标识命令行的开始,用户可以在它后面输入任何命令及其选项和参数。输入命令必须遵循一定的语法规则,命令行中输入的第1项必须是一个命令的名称,从第2项开始是命令的选项(Option)或参数(Arguments),各项之间必须由空格或TAB制表符隔开,格式如下:
提示符 命令 选项 参数
有的命令不带任何选项和参数。Linux命令行严格区分大小写,命令、选项和参数都是如此。
(1)选项。选项是包括一个或多个字母的代码,前面有一个“-”连字符,主要用于改变命令执行动作的类型。例如,如果没有任何选项,ls命令只能列出当前目录中所有文件和目录的名称,而使用带-l选项的ls命令将列出文件和目录列表的详细信息。
zxp@LinuxPC1:~$ ls examples.desktop zxpbak.tar hello 公共的 hello~ 模板 jdk1.8.0_45 视频 manifest.txt 图片 news 未命名 5.odf news.zip 文档 test 无标题文档~ test.c 下载 testdb.odb 音乐 test_pp 桌面 test_pp~ zxp@LinuxPC1:~$ ls -l 总用量 869376 -rw-r--r-- 1 zxp zxp 8980 1月 5 2015 examples.des -rwxrwxr-x 1 zxp zxp 72 4月 5 2015 hello -rwxrwxr-x 1 zxp zxp 189 3月 11 2015 hello~ drwxrwxr-x 2 zxp zxp 4096 2月 6 2015 news -rw-rw-r-- 1 zxp zxp 160 2月 14 2015 news.zip -rwxr-xr-x 1 root root 8544 4月 14 2015 test drwxr-xr-x 2 zxp zxp 4096 1月 5 2015 公共的 drwxr-xr-x 2 zxp zxp 4096 1月 5 2015 模板 drwxr-xr-x 2 zxp zxp 4096 8月 25 16:42 视频 drwxr-xr-x 2 zxp zxp 4096 8月 25 10:51 图片 -rw-rw-r-- 1 zxp zxp 7327 8月 30 08:53 未命名 5.odf drwxr-xr-x 3 zxp zxp 4096 8月 27 17:02 文档 drwxr-xr-x 2 zxp zxp 4096 8月 23 17:36 下载 drwxr-xr-x 2 zxp zxp 4096 8月 26 10:06 音乐 drwxr-xr-x 3 zxp zxp 4096 7月 30 17:14 桌面
使用一个命令的多个选项时,可以简化输入。例如,将命令ls-l-a简写为ls-la。
对于由多个字符组成的选项(长选项格式),前面必须使用“-”符号,如1s-directory。
有些选项既可以使用短选项格式,又可使用长选项格式,例如1s-a与1s-all意义相同。
(2)参数。参数通常是命令的操作对象,多数命令都可使用参数。例如,不带参数的ls命令只能列出当前目录下的文件和目录,而使用参数可列出指定目录或文件中的文件和目录。例如:
zxp@LinuxPC1:~$ ls /home/test examples.desktop
使用多个参数的命令必须注意参数的顺序。有的命令必须带参数。
同时带有选项和参数的命令,通常选项位于参数之前。
2.4.2 命令行基本用法
1. 编辑修改命令行
命令行实际上是一个可编辑的文本缓冲区,在按回车键前,可以对输入的内容进行编辑,如删除字符、删除整行、插入字符。这样用户在输入命令的过程中出现错误,无需重新输入整个命令,只需利用编辑操作,即可改正错误。在命令行输入过程中,使用快捷键<Ctrl>+<D>将提交一个文件结束符以结束键盘输入。
2. 调用历史命令
用户执行过的命令保存在一个命令缓存区中,称为命令历史表。默认情况下,bash可以存储1000个历史命令。用户可以查看自己的命令历史,根据需要重新调用历史命令,以提高命令行使用效率。
按上、下箭头键,便可以在命令行上逐次显示已经执行过的各条命令,用户可以修改并执行这些命令。
如果命令非常多,可使用history命令列出最近用过的所有命令,显示结果中为历史命令加上数字编号,如果要执行其中某一条命令,可输入“!编号”来执行该编号的历史命令。
3. 自动补全命令
bash具有命令自动补全功能,当用户输入了命令、文件名的一部分时,按<Tab>键就可将剩余部分补全,如果不能补全,再按一次<Tab>键就可获取与已输入部分匹配的命令或文件名列表,供用户从中选择。这个功能可以减少不必要的输入错误,非常实用。
4. 一行多条命令和命令行续行
可在一个命令行中使用多个命令,用分号“;”将各个命令隔开。例如:
ls -l;pwd
也可在几个命令行中输入一个命令,用反斜杠“\”将一个命令行持续到下一行。例如:
ls -l -a \
5. 强制中断命令运行
在执行命令的过程中,可使用组合键<Ctrl>+<C>强制中断当前运行的命令或程序。例如,当屏幕上产生大量输出,或者等待时间太长,或者进入不熟悉的环境时,就可立即中断命令运行。
6. 获得联机帮助
Linux命令非常多,许多命令都有很多选项和参数,在具体使用时要善于利用相关的帮助信息。Linux系统安装有联机手册(Man Pages),为用户提供命令和配置文件的详细介绍,是用户的重要参考资料。
使用命令man显示联机手册,基本用法如下:
man [选项] 命令名或配置文件名
运行该命令显示相应的联机手册,如图2-10所示。它提供基本的交互控制功能,如翻页查看,输入命令q即可退出man命令。
图2-10 man命令执行结果
对于Linux命令,也可使用选项--help来获取某命令的帮助信息,如要查看cat命令的帮助信息,可执行命令cat--help。
2.4.3 命令行输入与输出
与DOS类似,Shell程序通常自动打开3个标准文档:标准输入文档(stdin)、标准输出文档(stdout)和标准错误输出文档(stderr)。其中stdin一般对应终端键盘,stdout和stderr对应终端屏幕。进程从stdin获取输入内容,将执行结果信息输出到stdout,如果有错误信息,同时输出到stderr。多数情况下使用标准输入输出作为命令的输入输出,但有时可能要改变标准输入输出,这就涉及重定向和管道。
1. 输入重定向
主要用于改变命令的输入源,让输入不要来自键盘,而来自指定文件。基本用法:
命令 < 文件名
例如,wc命令用于统计指定文件包含的行数、字数和字符数,直接执行不带参数的wc命令,将等待用户输入内容之后,按<Ctrl>+<D>结束输入后才对输入的内容进行统计。而执行下列命令通过文件为wc命令提供统计源。
zxp@LinuxPC1:~$ wc < /etc/protocols 64 474 2932
2. 输出重定向
主要用于改变命令的输出,让标准输出不要显示在屏幕上,而是写入到指定文件中。基本用法:
命令 > 文件名
例如,ls命令在屏幕上列出文件列表,不能保存列表信息。要将结果保存到指定的文件,就可使用输出重定向,下列命令将当前目录中的文件列表信息写到所指定的文件中。
ls > /home/zxp/myml.lst
如果要写入已有文件,则将该文件重写(覆盖)。要避免重写破坏原有数据,可选择追加功能,将>改为>>,下列命令将当前目录中的文件列表信息追加到指定文件的末尾。
ls >> /home/zhongxp/myml.lst
以上是对标准输出来讲的,至于标准错误输出的重定向,只需要换一种符号,将>改为2>,将>>改为2>>。将标准输出和标准错误输出重定向到同一文件,则使用符号&>。
3. 管道
管道用于将一个命令的输出作为另一个命令的输入,使用符号“|”来连接命令。可以将多个命令依次连接起来,前一个命令的输出作为后一个命令的输入。基本用法:
命令1 | 命令2 …… | 命令n
在Linux命令行中,管道操作非常实用。例如,以下命令将ls命令的输出结果提交给grep命令进行搜索。
ls | grep "ab"
在执行输出内容较多的命令时可以通过管道使用more命令进行分页显示,例如:
cat /etc/log/messages | more
4. 命令替换
命令替换与重定向有些类似,不同的是命令替换将一个命令的输出作为另一个命令的参数,常用命令格式如下:
命令1 `命令2`
其中命令2的输出作为命令1的参数,注意这里的符号是指反引号,被它括起来的内容将作为命令执行,执行的结果作为命令1的参数。例如以下命令将pwd命令列出的目录作为cd命令的参数,结果仍停留在当前目录下。
cd `pwd`
2.4.4 执行Shell脚本
Shell脚本是指使用Shell所提供的语句所编写的命令文件,又称Shell程序。Shell脚本可以包含任意从键盘输入的Linux命令。Shell脚本最基本的功能就是汇集一些在命令行输入的连续指令,将它们写入脚本中,然后直接执行脚本来启动一连串的命令行指令,如用脚本定义防火墙规则或者执行批处理任务。如果经常用到相同执行顺序的操作命令,就可以将这些命令写成脚本文件,以后要进行同样的操作时,只要在命令行输入该脚本文件名即可。
执行Shell脚本最常用的方式是将Shell脚本的权限设置为可执行,然后在提示符下直接执行它。直接编辑生成的脚本文件没有执行权限,如果要将Shell脚本直接当作命令执行,就需要利用命令chmod将它置为具有执行权限。例如:
chmod +x example1
这样就可以像执行Linux命令一样来执行脚本文件。执行Shell脚本的方式与执行一般的可执行文件的方式相似。Shell接收用户输入的命令(脚本名),并进行分析。如果文件被标记为可执行的,但不是被编译过的程序,Shell就认为它是一个脚本。Shell将读取其中的内容,并加以解释执行。
Shell本身就是一种解释型的程序设计语言,编写Shell脚本的过程就是Shell编程,Shell编程属于高级系统管理内容。