4. 命令行简介

命令行是向您的机器发送命令最直接的方式。如果您用了 GNU/Linux 命令行的话,您就会发现它要比您以前曾用过的任何其他命令行更为强大。这是因为您不仅能够访问所有 X 应用程序,还能够访问其他数以千计的终端模式(相对于图形模式)工具及其众多的参数和可能的参数组合,而这些是没有相对应的按钮或菜单等图形方式能够简单模拟的。

要承认的是,绝大多数人需要一点帮助才能开始。如果您还没有进入终端模式,并仍然在使用图形界面,那么首先请开启一个终端模拟器。访问主菜单,您就能在系统+终端菜单中找到许多模拟器。请选中其中的某一个,比如 Konsole简体中文终端。根据您用户界面的不同,面板上可能会有相应的图标(图 1.2 “KDE 面板上的终端图标”)。

图 1.2. KDE 面板上的终端图标

KDE 面板上的终端图标

当您启动该终端模拟器后,您实际上就在使用 shell这是同您交互的程序的名称。您将看到提示符

[zhang@localhost zhang]$

以上假设您的用户名是zhang,并且您机器的机器名是 localhost (当您的机器不属于某个网络时就是这种情况)。提示符后面就是您输入命令的地方。请注意,当您为 root 用户时,提示符中的 $ 字符将会变成 # (仅当您使用默认设置的时候,因为这些设置在 GNU/Linux 中都可以修改)。要升级到 root,请在启动 shell 后输入 su

[zhang@localhost zhang]$ su
# 输入 root 用户密码 (密码不会回显)
Password:
# 输入 exit (或按 Ctrl-D) 将让您返回普通用户账户
[root@localhost zhang]# exit
[zhang@localhost zhang]$

当您启动一个 shell 时,一般您应该位于您自己的主目录。要显示当前目录名,请键入 pwd (代表显示工作目录(Print Working Directory)):

$ pwd
/home/zhang

接下来,让我们讨论几个基本而非常有用的命令。

4.1. cd:改变目录(Change Directory)

命令 cdDOS 中的那个基本相同。它的作用是改变工作目录。您可以用 ... 分别来代表当前和上层目录。仅仅输入 cd 会让您返回您的主目录。键入 cd - 能让您返回您访问过的前一个目录。最后,您可以键入 cd ~li_si 进入li_si的主目录(单独的 ~ 表示您自己的主目录)。请注意,作为一个普通用户,一般您不能够进入其他用户的主目录(除非他们特别授权您,或者这是您系统上的默认配置)。不过 root 不受此限。因此作为 root 您可以:

$ su -
Password:
# pwd
/root
# cd /usr/share/doc/HOWTO
# pwd
/usr/share/doc/HOWTO
# cd ../FAQ-Linux
# pwd
/usr/share/doc/FAQ-Linux
# cd ../../../lib
# pwd
/usr/lib
# cd ~li_si
# pwd
/home/li_si
# cd
# pwd
/root

好,让我们键入 exit 并按 Enter 键(或按下 Ctrl-D)退回到普通用户。

4.2. 环境变量和 echo 命令

所有进程都拥有它们各自的环境变量shell 让您能够通过 echo 命令直接查看它们。现举几例:

  1. HOME:该环境变量保存表示您主目录的字符串。

  2. PATH:它保存了在您键入一个命令的时候 shell 应该搜索的所有目录列表。请注意,和 DOS 不同,默认情况下 shell 会在当前目录中搜索命令。

  3. USERNAME:该变量保存您的登录名。

  4. UID:这个保存了您的用户号。

  5. PS1:它决定了您的提示符应该显示什么。通常它是一个特殊序列的组合。详情请在终端键入 man bash 来查看 bash(1)手册页

要让 shell 打印出某个变量的值,您必须在该变量名前添加一个 $ 符号。例如:

$ echo Hello
Hello
$ echo $HOME
/home/zhang
$ echo $USERNAME
zhang
$ echo Hello $USERNAME
Hello zhang
$ cd /usr
$ pwd
/usr
$ cd $HOME
$ pwd
/home/zhang

正如您所见,shell 会在执行命令前先用变量的值来替换它们。否则,上述 cd $HOME 例子就不会起作用了。实际上,shell 先用 $HOME 的值 /home/zhang 来替换它。然后,该命令就变为 cd /home/zhang。而这正是我们所需要的。echo $USERNAME 也一样。

[提示]提示

如果其中某个环境变量并不存在,您可以通过键入 export 环境变量名=值 暂时创建它们。完成之后,您可以这样来验证:

$ export USERNAME=zhang
$ echo $USERNAME
zhang

4.3. cat:在屏幕上打印一个或多个文件的内容

不用多说,该命令的功能是:在标准输出(通常是屏幕)上输出一个或多个文件的内容。

$ cat /etc/fstab
# This file is edited by fstab-sync - see 'man fstab-sync' for details
/dev/hda2 / ext3 defaults 1 1
/dev/hdc /mnt/cdrom auto umask=0022,user,iocharset=utf8,noauto,ro,exec,users 0 0
none /mnt/floppy supermount dev=/dev/fd0,fs=ext2:vfat,--,umask=0022,iocharset=utf8,sync 0 0
none /proc proc defaults 0 0
/dev/hda3 swap swap defaults 0 0
$ cd /etc
$ cat modprobe.preload
# /etc/modprobe.preload: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line.  Comments begin with
# a `#', and everything on the line after them are ignored.
# this file is for module-init-tools (kernel 2.5 and above) ONLY
# for old kernel use /etc/modules

nvidia-agp
$ cat shells
/bin/bash
/bin/csh
/bin/sh
/bin/tcsh

4.4. less:分页器

这个名字是用来谐谑 UNIX® 上首先被使用的分页器 more 的。分页器是用来帮助用户一页一页(更准确地说,应该是一屏一屏)地查看长文件的程序。我们讨论 less 而不是 more 的原因是 less 更为直观。您应该使用 less 来查看单屏容纳不下的大文件。例如:

less /etc/termcap

要在该文件中浏览,请使用上下方向键。按 Q 就可以退出。less 能做的要比只是显示:“H 键显示可用选项帮助”要多得多。

4.5. ls:列出文件

ls (LiSt)命令基本等同于 DOS 下的 dir 命令,不过它还有许许多多额外功能。实际上,这很大程度上归因于 UNIX® 下的文件有更多特性。ls 命令的语法是:

ls [选项] [文件|目录] [文件|目录...]

如果没有在命令行中特别指明哪个文件或目录,ls 将列出当前目录中的文件。它有着众多的选项,这里我们只介绍其中的一些:

  • -a:列出所有文件,包括隐藏文件。还记得吗,UNIX® 下的隐藏文件是那些名字以 . 开头的。相对于选项 -a-A 选项会列出“几乎”全部的文件,除了 “.” 和 “..”。

  • -R:递归列出,即所有命令行中输入的文件、目录及其子目录。

  • -h:在每个文件后面以可读形式显示该文件的大小。这意味着您会看到文件大小中有后“K”、“M”和“G”之类的,例如“234K”和“132M”。请注意,该大小以 2 为底数,而不是以 10 为底数。这表示 1 K 实际上是 1024 字节而不是 1000 字节。

  • -l:打印出有关该文件的额外信息。诸如:它的权限,所有者和所有组,文件大小和最后访问时间。

  • -i:在每个文件旁边打印其 inode 号(该文件在文件系统中的唯一编号,参见第 4 章 Linux 文件系统)。

  • -d:像一般文件那样处理目录,而不是列出它们的内容。

举例如下:

  • ls -R:递归地列出当前目录的内容。

  • ls -ih images/ ..:列出 images/ 目录和上级目录中的每个文件及其 inode 号,文件大小以可读形式列出。

  • ls -l images/*.png:列出 images/ 目录中名称以 .png 结尾的所有文件,包括 .png 文件(如果它存在的话)。

4.6. 常用键盘快捷方式

有许多键盘快捷方式,它们主要的优点是节省了很多打字的时间。这一节假定您使用 Mandriva Linux 提供的缺省 shell -- bash,不过这些按键方式对其他 shell 也可能起作用。

首先:方向键。bash 保存了已执行命令的历史记录,您可以通过上、下方向键来查看。向前翻阅的最大行数由环境变量 HISTSIZE 定义。而且,这一历史记录能够在两个会话之间保留。因此,您就不会丢失您在上一个会话中曾经键入过的命令了。

左、右键在当前行移动光标,让您能够编辑您的命令。然而还有别的方式让您一次不止移动一个字符:例如 Ctrl-ACtrl-E 可以移到当前行的开头以及结尾。BackspaceDel 正如期望的那样起作用。Ctrl-K 可以从光标处删除到行末。Ctrl-W (或者 Alt-Backspace)可以删除光标前的一个单词。

在一个空白行中键入 Ctrl-D 将结束当前会话,这要比键入 exit 方便得多。Ctrl-C 将会打断当前正在执行的命令,不过如果您是在编辑命令行的过程中,它将会取消所有的编辑并返回到提示符。Ctrl-L 可以清屏。Ctrl-Z 暂停某项任务,并将其挂起。该快捷方式在您忘记在命令之后键入 “&” 时非常有用。比如:

$ xpdf MyDocument.pdf

不过这样一来您就不能再使用您的 shell 了,因为其前台被任务 xpdf 进程占领。要将该任务转入后台运行并恢复您对 shell 的控制,只要按下 Ctrl-Z 后键入 bg 命令。

最后,Ctrl-SCtrl-Q 分别用来暂停和继续对屏幕的输出。它们不常用,不过您可能会误按 Ctrl-S (毕竟在键盘上 SD 靠的很近)。所以,如果您碰上了不管您输入什么都不能在终端屏幕上看得的怪事时,请试着按按 Ctrl-Q。注意:您在 Ctrl-SCtrl-Q 之间输入的所有字符将会被一起显示到屏幕上。