摘要
尽管图形用户界面对 Linux 已经越来越重要,但是使用鼠标并不总是处理日常工作的最佳方式。命令行不仅高度灵活而且效率较高。基于文本的应用程序对于通过慢速网络链接控制计算机或在您希望作为 root 在 xterm 中的命令行上执行任务时非常重要。Bash shell 是 SUSE Linux 上的默认命令行解释器。
Linux 是一种多用户系统,对文件的访问受用户许可权控制。无论使用命令行还是 GUI,了解许可权概念都非常有用。使用命令行时,有些命令非常重要。从命令行配置系统时,常常会使用 vi 文本编辑器。许多系统管理员和开发人员也常用到它。
在 KDE 任务栏中,有一个图标显示的是带贝壳的监视器。单击该图标就会打开一个用于输入命令的终端窗口。Konsole 是终端程序,通常运行 Bash(Bourne again shell),该程序是作为 GNU 项目的一部分而开发的。在 GNOME 桌面上,单击上部面板中的计算机显示器图标,启动通常运行 Bash 的终端。
打开该 shell 后,请查看第一行的提示。提示通常由用户名、主机名和当前路径组成,但可对其进行自定义。当光标移到该提示后面时,您可以直接向所在计算机系统发送命令。
一条命令包含若干元素。第一个元素总是真正的命令,随后是参数或选项。按 Enter 键即可执行命令。在此之前,您可以很容易的编辑命令行、添加选项或更正输入错误。ls 是一个最常用的命令,该命令可以使用参数,也可以不使用。只输入 ls 命令将显示当前目录的内容。
选项以连字符为前缀。例如,命令 ls -l 将显示同一目录中内容的详细信息(长列表格式)。在每个文件名后,都可以看到文件的创建日期、以字节表示的文件大小和下文要涉及的其他详细信息。--help 是许多命令都有的非常重要的选项。输入 ls --help 可以显示 ls 命令的所有选项。
正确“使用引号”很重要的。如果文件名包含空格,可使用反斜杠(\)将空格转义或将文件名包含在单引号或双引号中。否则 Bash 会将例如 My Documents 的文件名解释为两个文件或目录的名称。单引号和双引号之间的区别在于双引号中可发生变量扩展。而单引号确保 shell 按字面查看括起来的字符串。
要高效使用 shell,掌握一些关于 Linux 系统的文件和目录结构的知识将有很大帮助。您可以将目录视为存储文件、程序和子目录的电子文件夹。层次中的顶级目录是根目录,用 / 表示。从此目录可以访问其它所有目录。
/home 目录包含用于存储个人用户私人文件的目录。图 27.1 “标准目录树节选” 显示 Linux 中的标准目录树,其中的主目录包含示例用户 xyz、linux 和 tux。Linux 系统目录树所具有的功能结构符合文件系统层次标准(FHS)。以下列表简要说明了 Linux 中的标准目录。
/根目录,目录树的起点
/home用户的个人目录
/dev代表硬件组件的设备文件
/etc重要的系统配置文件
/etc/init.d引导脚本
/usr/bin通常可访问的程序
/bin在引导过程初期需要的程序
/usr/sbin为系统管理员保留的程序
/sbin为系统管理员保留的用于引导的程序
/usr/includeC 编译器的头文件
/usr/include/g++C++ 编译器的头文件
/usr/share/doc各种文档文件
/usr/share/man系统手册页
/usr/src系统软件的源代码
/usr/src/linux内核源代码
/tmp、/var/tmp临时文件
/usr所有应用程序
/var配置文件(例如从 /usr 链接的文件)
/var/log系统日志文件
/var/adm系统管理数据
/lib共享库(供动态链接程序使用)
/proc处理文件系统
/syssystem 文件系统,在其中收集内核的所有设备信息
/usr/local本地的、与发布版无关的扩展
/opt选件,大型装载程序包(如 KDE、GNOME、Netscape)
Bash shell 提供的两种重要功能可以让您的工作变得更简单:
要重复以前输入的命令,请按 ↑ 键,直到先前命令在提示符处出现。按 ↓ 键可以在先前输入的命令列表中前移。要编辑命令行,只需使用箭头键将光标移至所需位置并开始键入。使用 Ctrl-R 可在历史记录中搜索。
在键入文件名的前几个字母直至可以被唯一标识后,补全完整的文件名。只需在键入前几个字母后按 Tab 键即可实现此功能。如果有多个文件名的前几个字母都相同,则按两次 Tab 键可获取这些文件的列表。
对命令如何显示、SUSE LINUX 中存在哪些目录以及如何在使用 Bash 时加快处理速度等内容有一定了解之后,现在让我们通过一个小练习学以致用。
从 KDE 或 GNOME 桌面单击 shell 图标打开控制台。
输入 ls 命令查看主目录下的内容。
使用命令 mkdir(代表 make directory,即创建目录),通过输入 mkdir test 创建一个名为 test 的新子目录。
现在通过按 Alt-F2 并在 KDE 中输入 kate 代表 Kate 或在 GNOME 中输入 gedit 代表 Gedit 来启动编辑器。在编辑器中键入一些字母,然后给文件起名 Testfile 并保存到主目录中。在 Linux 中需要区分大小写。本例中的文件名使用了大写 T。
再次查看主目录下的内容。不必再次键入 ls,只需按两次 ↑,ls 命令就会重新出现在提示符后。要执行该命令,单击 Enter。新建的目录 test 会以蓝色字母出现,而 Testfile 则显示为黑色。在控制台中就是用这种方法来区分目录和文件。
使用命令 mv 将 Testfile 移至子目录 test。要加快处理,可使用展开功能:仅输入 mv T 并按 Tab。只要目录中没有其它文件以此字母开头,shell 会展开该文件名并添加字符串 estfile。如果未能展开,您需要添加一两个字母,并按 Tab 接连测试 shell 是否能够展开该文件名。最后,在展开的文件名之后依次键入一个空格和 test,并按 Enter 执行该命令。
此时,Testfile 应已不在该目录中。再次输入 ls 进行检查。
要查看是否已成功移动该文件,通过 cd test 命令转至 test 目录。现在再次输入 ls。您应该能在列表中看到 Testfile。在任意位置只需输入 cd 即可返回主目录。
要复制文件,请使用 cp。例如,输入 cp Testfile Testbackup 可以将 Testfile 复制为 Testbackup。这时还可以使用 ls 命令查看这两个文件是否都在该目录下。
处理文件或目录时,指定正确的路径十分重要。不过,您不必输入从主目录到各个文件的完整(绝对)路径。您可以从当前目录开始指定。直接用 ~ 来表示主目录。这意味着有两种方法可以列出 test 目录中的 Testfile 文件:用 ls test 输入相对路径或用 ls ~/test 指定绝对路径。
要列出其他用户主目录的内容,请输入 ls ~username。在示例中提到的目录树中,其中一个示例用户是 tux。这样,使用 ls ~tux 就会列出 tux 主目录的内容。
用一个圆点(.)表示当前目录。树的上一级用两个点(..)来表示。输入 ls .. 可以查看当前目录的父目录的内容。命令 ls ../.. 可用于比当前目录高两个级别的目录的内容。
这是说明在 SUSE LINUX 系统的目录中如何移动的又一个示例。
使用命令 cd 转至主目录。然后输入 mkdir test2 在主目录中创建一个名为 test2 的目录。
输入 cd test2 转至新目录,并在其中创建一个名为 subdirectory 的子目录。要转至该子目录,可使用展开功能:输入 cd su,然后按 Tab。shell 会展开目录名的剩余部分。
现在尝试在不改换目录的前提下将先前创建的文件 Testbackup 移至当前目录 (subdirectory)。要执行该操作,需要指定该文件的相对路径:mv ../../test/Testbackup .(注意末尾有一个点)。此命令结尾的点是必需的,它指示 shell 当前目录是文件要移至的目标。在本例中,../../ 指您的用户主目录。
shell 的便捷之处还体现在支持路径名扩展的通配符上。Bash 提供三种不同的通配符:
完全匹配任一字符
匹配任意数目的字符
匹配在方括号中指定的字符组中的任一字符,这里用字符串 set 表示字符组。作为 set 的一部分,您也可以使用语法 [:class:] 指定字符类别,其中类别可以是 alnum、alpha 或 ascii 等。
在组的开始处使用 ! 或 ^([!set])会匹配除 set 确定的那些字符以外的某个字符。
假定 test 目录包含文件 Testfile、Testfile1、Testfile2 和 datafile,使用命令 ls Testfile? 则可以列出文件 Testfile1 和 Testfile2。使用 ls Test*,列表还将包括 Testfile。ls *fil* 会显示所有示例文件。最后,您可以使用 set 通配符表示所有末尾字符为数字的示例文件:ls Testfile[1-9] 或使用类别 ls Testfile[[:digit:]]。
四个通配符中匹配范围最广的是星号。使用它可以将某个目录内的所有文件复制到另一个目录,或通过一个命令删除所有文件。例如,使用命令 rm *fil* 可以删除当前目录中文件名包含字符串 fil 的所有文件。
Linux 包含两个直接在 shell 中查看文本文件的小程序。不必启动编辑器来阅读 Readme.txt 之类的文件,只需输入 less Readme.txt 即可在控制台窗口中显示其中的文本。使用 Space 可以向下滚动一页。使用 Page Up 和 Page Down 可以在文本中前后移动。要退出 less,请按 Q。
除使用 less 之外,您还可以使用 more 这种较早的程序。不过,该程序使用起来不太方便,因为它不允许向后滚动。
less 程序得名于 less is more(少即是多)原则,并且还可用来方便地查看命令输出。要了解该程序的这种功能,请参见第 27.1.7 节 “管道和重定向”。
通常,shell 的标准输出界面是您的屏幕或控制台窗口,而标准输入设备是键盘。要将命令的输出转发到像 less 这样的应用程序,就需要使用管道。
要查看 test 目录下的文件,请输入命令 ls test | less。test 目录的内容将使用 less 来显示。这只是在 ls 命令正常输出过长时才有意义。例如,当您使用 ls /dev 命令查看 dev 目录的内容时,您只能在窗口中看到一小部分。而使用 ls /dev | less 命令则能够查看整个列表。
也可以将命令的输出保存到文件中。例如,echo "test one" > Content 会生成名为 Content 的新文件,该文件包含单词 test one。用 less Content 命令可以查看该文件。
您也可以将文件作为命令的输入。例如,使用从文件 Content 重定向的标准输入中的 tr 替换字符,并将结果写入标准输出:通过调用 tr t x < Content 将 t 替换为 x。tr 的输出发送到屏幕。
如果需要一个新文件包含输出,则请将 tr 的输出用管道输出至一个文件。要测试此操作,请转至 test 并输入命令 tr t x < ../Content > new。最后,使用 less new 查看 new。
标准错误输出和标准输出一样,都发送至控制台。不过,要将标准错误输出重定向到名为 errors 的文件,则需要在相应命令中追加 2> errors。如果追加的是 >& alloutput,标准输出和标准错误都将保存到名为 alloutput 的文件中。最后,要将命令输出追加到现有文件,该命令后面必须跟有 >> 而不是 >。
您已经创建了一些文件和目录,现在该考虑一下存档和数据压缩的问题了。假定您想将整个 test 目录打包在一个文件中,以便备份到 USB 存储器或通过电子邮件发送。要执行该操作,请使用命令 tar(代表 tape archiver,即磁带存档程序)。使用 tar --help 可查看 tar 命令的所有选项。下面对最重要的一些选项进行了说明:
(代表 create)创建新档案。
(代表 table)显示档案中的内容。
(代表 extract)对档案解包。
(代表 verbose)创建档案时在屏幕上显示所有文件。
(代表 file)为档案文件选择一个文件名。创建档案时,此选项总应放在最后。
要将 test 目录下的所有文件和子目录打包到名为 testarchive.tar 的档案中,请使用选项 -c 和 -f。尽管不是必需的,但出于测试的目的,请同时添加 -v 选项,以便跟踪存档过程。在使用 cd 命令转至 test 目录所在的主目录后,输入 tar -cvf testarchive.tar test。之后,可使用 tar -tf testarchive.tar 查看档案文件的内容。test 目录及其所有文件和目录都在您的硬盘上保持不变。要对档案解包,请输入 tar -xvf testarchive.tar,但目前不要尝试。
对于文件压缩,典型的选择是 gzip 或(为了得到更好的压缩率)bzip2。 只需输入 gzip testarchive.tar(或 bzip2 testarchive.tar,但本示例中使用的是 gzip)即可。通过 ls,您可以看到文件 testarchive.tar 已不复存在,取而代之的是文件 testarchive.tar.gz。这个文件要小得多,因此也更适于通过电子邮件传送或存储到 USB 存储器上。
现在,将该文件解包到先前创建的 test2 目录中。这需要输入 cp testarchive.tar.gz test2 将文件复制到该目录中。使用 cd test2 转至该目录。扩展名为 .tar.gz 的压缩档案可用 gunzip 命令解压缩。输入 gunzip testarchive.tar.gz,
该命令将生成文件 testarchive.tar,然后还需使用 tar -xvf testarchive.tar 抽取或解压缩。您也可以用以下命令一次完成解压缩并抽取压缩存档:tar -xvf testarchive.tar.gz(不再需要添加 -z 选项)。通过 ls,您会看到新建的 test 目录,其内容与主目录中的 test 目录的内容完全相同。
mtools 是一套与 MS-DOS 文件系统配合使用的命令。mtools 中包含的命令允许您将第一软盘驱动器设为 a:(就如同在 MS-DOS 中一样),并且这些命令与 MS-DOS 命令很相似,只不过都带有前缀 m。
显示驱动器 a: 中软盘的内容
将文件 Testfile 复制到软盘
从 a: 中删除 Testfile
以 MS-DOS 格式来格式化软盘(使用 fdformat 命令)
将 a:作为当前目录
在软盘上创建子目录 test
从软盘上删除子目录 test
经过上面的速成培训,您应该对 Linux shell 或命令行的基础知识有了一定的了解。最后,您最好使用 rm 和 rmdir 命令删除各种测试文件和文件夹,清理您的主目录。在 第 27.3 节 “重要的 Linux 命令” 中,查找最重要命令的列表及其功能的简要描述。