命令行简介

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

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

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

KDE 面板上的终端图标

当您启动该终端模拟器后,您实际上是在执行一个 shell。这是您与之交互的程序的名字。接着您就会看到提示符

[zhang@localhost zhang]$

以上假定您的用户名为zhang而您的机器名为 localhost (当您的机器不是某个现存网络的一部分的时候)。在提示符后面是让您输入命令的地方。请注意,当您是 root 的时候,提示符中的 $ 字符会变为 # (这只在默认配置下成立,因为您能够自定义 GNU/Linux 中所有这些细节)。要成为 root,请在启动 shell 后输入 su

# 输入 root 密码(您输入的密码不会在屏幕上回显)
[zhang@localhost zhang]$ su
Password:
# exit (或 Ctrl-D) 会让您返回普通用户帐户
[root@localhost zhang]# exit
[zhang@localhost zhang]$

下文中将只是以一个 $ 来代表提示符,而不论您是一个普通用户还是 root。当您需要作为 root 来执行某条命令的时候,我们会提示您的。因此,请牢记上述 su 命令。

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

$ pwd
/home/zhang

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

cd:改变目录(Change Directory)

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

# 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 (或按下 Ctrl-D)退回到普通用户。

环境变量和 echo 命令

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

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

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

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

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

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

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

$ echo 你好
你好
$ echo $HOME
/home/zhang
$ echo $USERNAME
zhang
$ echo 你好 $USERNAME
你好 zhang
$ cd /usr
$ pwd
/usr
$ cd $HOME
$ pwd
/home/zhang

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

[Tip]提示

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

$ export USERNAME=zhang
$ echo $USERNAME
 zhang

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

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

$ cat /etc/fstab
/dev/hda5 / ext2 defaults 1 1
/dev/hda6 /home ext2 defaults 1 2
/dev/hda7 swap swap defaults 0 0
/dev/hda8 /usr ext2 defaults 1 2
/dev/fd0 /mnt/floppy auto sync,user,noauto,nosuid,nodev 0 0
none /proc proc defaults 0 0
none /dev/pts devpts mode=0620 0 0
/dev/cdrom /mnt/cdrom auto user,noauto,nosuid,exec,nodev,ro 0 0
$ cd /etc
$ cat modules.conf shells
alias parport_lowlevel parport_pc
pre-install plip modprobe parport_pc ; echo 7 > /proc/parport/0/irq
#pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
#alias char-major-14 sound
alias sound esssolo1
keep
/bin/zsh
/bin/bash
/bin/sh
/bin/tcsh
/bin/csh
/bin/ash
/bin/bsh
/usr/bin/zsh

less:分页器

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

less /etc/termcap

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

ls:列出文件

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

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

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

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

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

  • -s:在每个文件旁边显示该文件的大小,单位为千字节。

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

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

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

举例如下:

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

  • ls -is images/ ..:列出 images/ 目录和上级目录中的每个文件及其 inode 号和以千字节为单位的大小。

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

常用键盘快捷方式

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

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

左、右键在当前行移动光标,让您能够编辑您的命令。然而还有别的方式让您一次不止移动一个字符:例如 Ctrl-ACtrl-E 可以移到当前行的开头以及结尾。BackspaceDel 正如期望的那样起作用。Backspace 相当于 Ctrl-HDelCtrl-D 也一样。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 之间输入的所有字符将会被一起显示到屏幕上。