4.1 Linux命令行

通常说的Linux命令行是指运行在终端(terminal)的shell。Linux命令行是Linux系统的核心,往往也是初学者最大的瓶颈。有的读者用了很长时间的Linux图形界面,基本不使用在命令行中输入命令这种方式,所安装的Linux几乎成了摆设。利用命令行可以对系统进行各种配置,要想熟练并成功地管理Linux操作系统,必须对Linux环境下的命令行有深入地理解。

4.1.1 命令行说明

在Linux操作系统中,用命令行进行操作是主要的操作方式。命令行是一种在字符模式下对系统操作的界面,与图形界面相对。目前,在计算机操作系统中,图形界面已成为主流。然而,以字符界面形式出现的命令行方式由于具有占用系统资源少、性能稳定并且非常安全等特点,使其仍发挥着重要作用。Linux命令行方式在服务器管理中一直有着广泛的应用。利用命令行可以对系统进行各种操作,这些操作虽然没有图形化界面那样直观明了,但是却快捷而顺畅。

在Linux中,命令有大小写的区分,且所有的Linux命令和选项都区分大小写,例如-V和-v是两个不同的命令,这与Windows操作系统有所区别。在Windows操作系统环境下,所有命令都没有大小写的区别。初学者应遵循所有Linux环境下控制台命令的输入均为小写这一原则。

学习Linux环境下的命令行有助于初学者了解系统的运行情况和计算机的各种设备,如中央处理器、内存、磁盘驱动器、键盘、鼠标及其他输入/输出设备和用户文件等。可以说,Linux的命令行对于整个系统的运行以及设备与文件之间的协调具有核心的作用。虽然近几年来个人计算机的潮流已经从命令行的方式向图形界面的方式转换,用户也热衷于利用鼠标在图形界面下对系统进行操作。但是命令行方式仍然有其强大的生命力,如系统管理员就必须经常和命令行打交道。与图形界面相比,利用命令行对系统进行管理和操作显得更为快捷和安全。特别是在服务器应用方面,Linux命令行更是处于一种核心的地位,这主要是因为在字符界面下的操作具有更大的稳定性和安全性能。

4.1.2 命令行分类

命令行有如下六种分类。

1.系统设置命令

系统设置命令主要用来完成对Linux操作系统进行各种配置,如安装内核载入、启动管理程序以及设置密码和各种系统参数等,它主要是对系统的运行做初步的设置。部分系统设置的重要命令如表4-1所示,它们的使用方法将在后续章节中详细介绍。

表4-1 系统设置的重要命令

2.系统管理命令

系统管理命令是对Linux操作系统进行综合管理和维护的命令,对系统的顺利运行及其功能的发挥有着重要的作用。在Linux环境下的系统管理就是对操作系统的有关资源进行有效的计划、组织和控制。操作者合理地对Linux操作系统进行管理有助于加深对系统的了解并提高其运作的效率及安全性能。部分系统管理的重要命令如表4-2所示。

表4-2 系统管理的重要命令

3.文件管理命令

文件管理命令主要针对在文件系统下存储于计算机系统中的文件和目录进行操作。系统中的文件可以有不同的格式,这些格式决定了信息如何存储为文件和目录。在Linux系统环境下,每一个分区都是一个文件系统,都有各自的目录和层次结构。文件管理命令正是在文件系统中对文件进行各种操作与管理。部分文件管理的重要命令如表4-3所示。

表4-3 文件管理的重要命令

4.磁盘管理命令

在Linux操作系统中,为了合理利用和划分磁盘的空间,需要对磁盘各个分区的使用情况作整体性的了解。磁盘管理命令主要是对磁盘的分区空间及格式化分区进行综合的管理,在Linux环境下有一套较为完善的磁盘管理命令。部分磁盘管理的重要命令如表4-4所示。

表4-4 磁盘管理的重要命令

5.网络配置与管理命令

任何一种操作系统都离不开对网络的支持,Linux系统提供了完善的网络配置和各种操作功能。在Linux环境下对网络的配置主要包括因特网的设置、收发电子邮件和设置局域网。网络配置与管理的部分重要命令如表4-5所示。

表4-5 网络配置与管理的重要命令

6.文本编辑命令

查看和浏览文档是操作系统必备的功能,在Linux操作系统中附带了现成的文本编辑器,用户可以利用这些编辑器对文档进行修改、存储及其他管理操作。在目前的Linux环境中,VI是比较流行的编辑器之一。文本编辑的部分重要命令如表4-6所示。

表4-6 文本编辑的重要命令

4.1.3 shell与命令提示符

在登录Linux系统后,会启动一个和Linux内核交互界面的程序,这个程序就是shell,它将执行用户在键盘上输入的命令。当一个shell运行时,将出现命令提示符并等待用户输入命令。当用户输入一个命令并按回车键后,shell将解释并执行该命令。如果输入了一个不存在的命令,shell将给出提示,并重新出现命令提示符并等待下一个命令。因为shell的主要用途就是解释命令,所以又称为Linux命令解释器。当从Linux系统获得一个新账号时,默认登录shell是由系统管理员决定的,可以通过运行一个适当的命令来使用自己喜欢的shell方法。

shell命令可以是内部的或外部的。执行内部命令的代码是shell进程的一部分,而处理外部命令的代码是以二进制可执行程序文件或shell脚本的形式驻留在一个文件中。因为shell执行从键盘键入的命令,当它无法从键盘读取任何内容时就会终止。所以可以在一个新行的开始按快捷键Ctrl+D来通知shell。当shell接收到快捷键Ctrl+D后,它将终止运行并让用户退出系统。然后系统重新显示login命令提示符,表示要使用系统就得重新登录。shell在解释命令时,认为命令行的第一个单词是要执行的命令。它把以连字符(-)开始的其他单词作为选项,剩余的作为命令参数。在读取命令行之后,shell将判断这个命令是内部命令还是外部命令,它将使用内部代码的相应程序段来执行所有内部命令。

目前在Linux环境下被广泛支持的shell主要有3种:Bash、Tcsh和Pdksh。它们在对话模式下的表现非常相似,但是在语法和执行效率方面却有所不同。

Bash

Bash是Linux下标准的shell,以前常被用于系统管理之中,大部分的系统管理文件都是命令文档,并且在单一用户模式下以root身份登录时常被系统管理者使用。Bash以其简洁、快速而闻名,其默认的提示符为$。

Tcsh

Tcsh中加入了一些新的特性,如别名、命令列历程、内建算术和工作控制等。这些功能对于经常在对话模式下使用的用户来说较为受欢迎,而对于系统管理者而言用Bash作为命令档则显得简单而快速。Tcsh默认的提示符为%。

Pdksh

Pdksh是Bash的扩展,它增加了一些新的特性,比Tcsh更为先进,包括了可编辑历程、正规表达式万用字符、合作处理等特殊功能并具有向上兼容的能力,Pdksh默认的提示符为%。

RHEL 6系统中默认使用的shell称为Bash。shell分为两种模式:交互模式(等待用户的输入)和非交互模式(脚本形式)。shell字符界面有如下两种进入方式。

(1)X-window界面虚拟字符终端

在X-window界面右击鼠标,从菜单中选择【在终端中打开(E)】命令,如图4-1所示,之后出现字符界面,如图4-2所示。

图4-1 终端打开界面

图4-2 字符终端界面

可使用如下快捷键对shell字符界面进行操作:

Shift+Ctrl+ + 放大字体。

Ctrl+- 缩小字体。

Shift+Ctrl +T 新建标签。

Alt + 数字 标签间切换。

Ctrl + L 清屏。

(2)通过putty、xshell、SecureCRT等工具链接

通过工具链接shell字符界面需要知道本机的IP地址:单击桌面右上方电脑图标选择【system eth0】选项链接Internet,如图4-3所示;然后右击电脑图标选择【编辑链接】/【system eth0】/【编辑】选项,选择【自动链接】,这样重启后网卡即自动启动;通过终端查看IP地址为“10.15.72.194”,如图4-4所示。

图4-3 选择【system eth0】

图4-4 通过终端查看IP地址

这里使用x shell。在工具栏输入“ssh ip”,跳出链接对话框,然后单击【Accept & Save】按钮,输入用户名和密码即可,如图4-5所示。

图4-5 使用xshell

内部命令:指的是集成在shell里的命令,属于shell的一部分。系统中没有与命令单独对应的程序文件,只要shell被执行,内部命令就自动载入内存,用户可以直接使用,如cd命令等。

外部命令:考虑到运行效率等原因,不可能把所有的命令都集成在shell里,更多的Linux命令是独立于shell之外的,这些称为外部命令。每个外部命令都对应了系统中的一个文件,而Linux系统必须要知道外部命令对应的程序文件所在的位置,才能由shell加载并执行这些命令。如cp、ls等都属于外部命令。

外部命令的程序文件大都存放在/bin、/sbin、/usr/bin等目录里,Linux系统会默认将这些路径添加到一个名为PATH的变量里,执行“echo $PATH”命令可以显示出PATH变量里保存的目录路径(路径之间用“:”间隔)。

每当要执行一个外部命令时,Linux系统就会先从PATH变量所保存的这些路径里去寻找命令所对应的程序文件,只有找到了程序文件才能正确地去执行外部命令。这也就意味着,如果把一个外部命令所对应的程序文件删了,或者是存放外部命令程序文件的目录没有添加到PATH变量里,都会导致外部命令无法正常执行。

  [root@localhost ~]# echo $PATH
  /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sb
  in:/
  usr/bin:/root/bin

4.1.4 命令行模式的启动及退出

现在的Linux桌面发行版通常都提供了友好的图形界面,使得习惯使用Windows操作模式的用户不再像数年前那样对Linux望而生畏。用户登录系统之后,即可通过鼠标、键盘直接对系统进行操作,就像在使用早已熟悉的Windows系统一样。但是,在Linux中有很多操作命令在命令行模式下运行得更加快捷,而且,用作服务器的Linux系统出于稳定性及安全性方面的考虑是在命令行模式下运行的,这时就需要频繁地使用命令对系统进行操作,而对Linux系统有一定使用经历的用户也都习惯于使用命令对系统进行操作。

1.字符界面下的命令行操作

启动桌面发行版的Linux系统进入图形界面后,可以通过同时按住Ctrl+Alt+Fn(n=1~6)键进入字符界面,例如同时按住Ctrl+Alt+F3键可进入虚拟控制台tty3(tty7通常运行X Window图形界面),此时输入正确的用户名及登录密码后即可进入字符界面进行命令行操作。若输入的是一个错误的密码,则系统提示登录不正确并要求重新登录,直到输入了正确的用户名和登录密码后,才能成功登录。

注意 Linux系统不会显示输入的密码,而且不论是输入的用户名错误还是输入的密码不正确,系统都将给出同样的错误信息并提示重新输入用户名和密码。

作为服务器的Linux系统是运行在命令行模式下的,用户在输入正确的用户名及登录密码后即进入了字符界面的命令行操作环境。

2.图形界面的命令行操作

在图形界面下进行命令行的操作,可以通过应用【程序】/【系统工具】/【终端】选项,启动命令行的图像操作界面。某些Linux发行版有右键打开终端的选项。在桌面上单击鼠标右键,在弹出的快捷菜单中选择【打开终端】选项即可。

3.Linux远程登录命令行操作

如果没有使用自己的终端、控制台或者其他直接连接登录到要登录Linux系统的设备,那么可以利用一个终端模拟程序通过网络连接到要登录的Linux系统,这样用户就可以登录到Linux系统了。通常需要使用telnet和ssh连接到远程Linux系统。telnet是一种极不安全的服务,原因之一是它通过网络以ASCII码方式明文发送登录时的用户名和密码认证,这使得登录信息极易被黑客截获。而ssh则将所有信息进行加密之后再通过网络发送出去,在主机和客户机两端均使用认证密钥,提供了很强的安全认证,可以在不安全的网络环境中安全地通信。所以ssh是比telnet更好的选择。ssh工具由两部分组成,一部分是服务器端软件包,另一部分是客户端软件包。以当前用户root远程登录本机的tom用户进行测试,在命令行中输入命令:

  ssh tom@localhost

在登录后命令提示符前面的用户名已由root变成了tom,即已经成功地登录了tom的系统。若要查看ssh服务器端是否已经正常启动,可在命令行中输入命令:

  Net
  stat –tl

如果看到结果中有“*: ssh”,就说明服务已经正常启动了。若系统尚未启动ssh服务,则在命令行输入命令:

  /etc/init.d/sshd start

此命令需要管理员root权限才能运行。

Linux命令行下的提示符有两种:“$”和“#”。通常登录到命令行后看到的提示符为美元符号“$”,即为Linux的一种命令提示符(也称shell提示符),代表当前用户具有普通用户权限;如果当前用户是超级用户root(即以用户名root登录系统),将会看到另一种命令行提示符“#”,表示用户拥有最高权限,可对系统做任意的修改。

如要退出Linux命令行模式,可在命令提示符后面输入命令exit或按Ctrl+D快捷键。例如,在命令提示符“#”后输入“exit”,然后按Enter键或Ctrl+D快捷键,即可退出登录的系统。

4.1.5 在Linux命令行下获得帮助

Linux的发行版通常都提供了丰富的联机帮助文档,man和info命令是查看程序文档的两个基本命令。从Linux的早期版本开始,用户就可以通过这两个命令获得man页(用户手册)和info页的内容。下面介绍如何在Linux命令行下获取各种帮助信息。

1.帮助命令

(1)help,查看内部命令的帮助信息

例如,想要获取命令cd的帮助信息,可以在命令提示符后面输入:

  help cd

这样就可以看到cd命令的帮助文档了。

help命令也提供其自身的帮助,例如,在命令提示符后面输入两个help,即:

  help help

然后,就可以看到help命令自身的帮助信息了。

单独使用help命令可以获取它所提供的所有命令列表,如在命令行输入:

  help

若help命令列表较长而不能在一屏内全部显示,则用户能看到的其实是help命令列表的最后一页。要想看到该命令的所有帮助内容,需要在命令后添加一个选项参数,即在命令提示符下输入:

  help |more

即可以显示help命令列表的第一页,再次按Enter键将一行行向后翻页,按空格键将直接跳转到最后一页。

若想在中途退出帮助文档,可以按Q键,之后将直接退出帮助文档,返回到命令行提示符下。

help命令只能查看内部命令的帮助信息,对于外部命令,大都可以使用一个通用的命令选项“--help”,以查看外部命令的帮助信息。

(2)man,查看命令的帮助手册

man命令用于显示系统文档中man页的内容(man为manual的简写),单独使用man命令不能获得man所提供的帮助命令列表。若要了解某个工具较为详细的信息,可以在man命令后接工具名来实现。与help命令一样,man命令也可以查看命令信息,用法与help类似。例如,要查看命令clear的详细信息,可以在命令提示符下输入:

  man clear

man命令给出的信息往往非常详细,所占页面较多,通常需要分页显示。与help命令不同的是,man会自动分页,用户可以分页浏览帮助信息,按空格键或PageDown键向后翻页,按PageUp键向前翻页,按Q键退出man信息查看并返回到命令行提示符下。

如果要搜索某个man信息页,可以使用带有-k选项的man命令。例如搜索与clear相关的man信息页,可以在命令行输入:

  man -k clear | more

由于与clear相关的命令可能有很多,这里加上了选项more以便分页查看。

要找出关于man命令用法的更多信息,可以在命令行中输入:

  man man

即可查看它自己的帮助信息。

man页通常存放在/usr/share/man/目录下,在命令行输入:

  cd /usr/share/man/
  dir

即可查看该目录下的内容。在Linux系统中,man分为10部分,放在不同的man文件夹下,每部分描述了相关工具的使用方法。最常用的是man1(用户命令)、man5(文件格式)和man8(系统管理)。有些情况下,不同工具的手册对应相同的名字,例如,在命令行输入“man clear”可以查看clear程序的帮助信息,而输入“man 3 clear”则可以查看clear子程序的帮助信息。

如果要查看更为详尽的帮助信息,可以使用man命令查看指定命令的帮助手册;阅读下一行内容按Enter键,阅读下一屏内容按空格键,退出输入“q”。

(3)info,查看工具信息

info是另一种形式的在线文档,可以显示GNU工具更完整、最新的信息。若man信息页中包含的某个概要信息在info中也有,那么,帮助信息中会有请用户参考info页更详细内容的提示。info工具是GNU项目开发的基于菜单的超文本系统,并由Linux发布。

直接使用info命令可以获得系统中info文档的分类列表,在命令行中输入:

  info

可以看到以超文本的形式列出info文档的分类列表。

在上面的示例中可以按其他键进行进一步操作,其功能如表4-7所示。

表4-7 操作键

若要用info命令显示工具信息,例如查看dir命令的信息,可在命令行输入:

  dir

即可看到dir命令的详细信息,以及与之相关的命令。

info命令还提供了大量的快捷键以便在页面层次结构内移动,最常用的快捷键如表4-8所示。

表4-8 快捷键

(4)通过帮助选项获得帮助

大多数命令均可以使用帮助选项来获取帮助,shell命令使用--help选项来获得帮助信息。例如,想获取显示文件命令dir的帮助信息,可在命令行下输入:

  dir --help |more

2.命令行的历史记录和编辑

目前的Linux发行版默认使用bash shell,它已成为Linux系统的实际标准。bash shell命令行具有非常强大的功能。事实证明,从Windows操作系统转向Linux操作系统的用户,刚开始都习惯尝试使用图形界面进行操作,但他会逐渐意识到,命令行是执行许多任务的更加快捷、方便的方法。bash shell提供了一些特性使输入命令行操作变得容易。

(1)命令行的历史记录

可以通过重复按向上方向键遍历最近在控制台下输入的命令。按向下方向键可以向前遍历,与Shift键联用可以遍历以往在该控制台中的输出。例如,要在命令行下输入命令“dir --help |more”,可以在命令行下重复按向上方向键↑,直到出现“dir --help |more”为止,然后按Enter键即可执行这一命令,如图4-6所示。

图4-6 遍历命令行的历史记录

(2)编辑命令行

在命令行下按Ctrl+R快捷键将进入向后增量搜索模式,命令行界面会出现“(reverse-i- search)`’:”,如图4-7所示。

图4-7 向后增量搜索模式

此时尝试输入以前输入过的命令,每输入一个字符时,命令行都会滚动显示历史命令,当显示到想要查找的命令时,直接按Enter键就可以执行该命令。仍以“dir --help |more”命令为例,当输入字符d时,搜索出来的命令是cd,这不是所需要的历史命令,继续输入第二个字符i,这时就出现了所需要的历史命令“dir --help |more”,然后按Enter键即可执行该命令,如图4-8所示。

图4-8 查找历史命令

在命令行中按Ctrl+P或者Ctrl+N快捷键可以快速向前或向后滚动查找一个历史命令,这可以快速提取刚刚执行过不久的命令。例如,在命令行输入如下命令:

  echo "Hello,Linux world"

命令行下将出现字符“Hello,Linux world”,然后按Ctrl+P快捷键,命令行下将出现刚刚输入过的命令,如图4-9所示。

图4-9 显示上次输入的命令

通过一些功能键可以快速浏览并编辑命令行,下面给出常用的用来完成一般编辑工作的键盘快捷键,如表4-9所示。

表4-9 键盘快捷方式

例如,用命令mkdir在/home/tom/tmp/目录下新建一个目录music,在命令行输入:

  mkdir /home/tom/tmp/music

在命令行输入如下命令进入music目录:

  cd !$

之后可以在命令行下输入pwd命令查看当前工作目录,如图4-10所示。

图4-10 命令行编辑的快捷方式

3.从因特网获得帮助

因特网上有许多Linux方面的站点以及相关文档,除此以外,还可以利用搜索引擎如百度(www.baidu.com)、Google(www.google.com),输入所遇到的错误信息进行搜索,通常可以找到问题的相关介绍和解决办法。

(1)Linux文档项目

Linux文档项目(LDP,Linux Documentation Project)提供了大量关于Linux的免费发布的书籍,其历史几乎和Linux一样长,内容有使用指南、FAQ、HOWTO、杂志、man帮助信息页等。LDP的主页是www.tldp.org,支持多种语言,可以进行本地搜索,简单易用。LDP文档除了提供多语言版本,还提供各种文档格式,比如PDF(Adobe的文档格式)、HTML、纯文本、PostScript以及XML相关源码。

(2)GNU

在GNU(GNU’s Not Unix)的主页(www.gnu.org)上可以得到很多GNU的文档以及其他资源。与LDP一样,GNU的文档也提供多语言版本,在www.gnu.org/manual站点可以获得GNU的手册页。

(3)各Linux发行版官方网站及BBS论坛

大多数Linux发行版都有其主页和BBS,上面提供许多文档,若有问题也可以在BBS上留言寻求帮助。此外还可以在一些非常优秀的BBS上寻求帮助,例如红联(www.linux110.com)、中国Linux论坛(www.linuxforum.net)、ChinaUnix(www.chinaunix.net)和www.linuxsir.org等。