1、UNIX 新手指南,第 1 部分: 文件维护工具级别: 中级Tim McIntire (), 咨询师, 自由撰稿人2007 年 1 月 18 日系统管理员可以在命令行中使用各种程序来维护 UNIX 系统中的文件。在本教程中,您将试验使用一些命令,如 cd、 cp 和 tar,以便在命令行中导航 UNIX 文件系统并处理文件和目录。cd 命令用来更改目录,cp 命令用来复制文件或目录,而 tar 可以快速地对文件进行存档。您还将了解如何处理文件权限并执行简单的输入/输出。开始之前了解本教程中包含的内容以及如何最好地利用本教程。关于本系列这个由四部分组成的文章系列将从用户的角度出发,介绍 UNIX
2、 的基本知识。对于很久没有使用类 UNIX 操作系统的用户来说,这个初始的教程是个很好的温习。对于具有 Windows 使用经验的新的 UNIX 用户来说,它也很有价值,因为其中引用了 Windows,并将两者进行了比较。本系列中后续的教程将详细介绍一些特定的应用程序(例如,vi),并讨论 Shell 的诀窍与技巧。关于本教程系统管理员可以在命令行中使用各种程序来维护 UNIX 系统中的文件。除了这里演示的基本程序外,还有更多的程序可供使用,但这里介绍的程序都是 UNIX 系统中的基本组成部分。您可以使用 mv 命令对文件和目录进行移动和重命名。cp 命令可以用来复制一个或多个文件或目录。有一
3、个称为 tar 的应用程序,它可以快速地将文件聚集在一起形成一个存档。本教程还将讨论如何遍历文件系统、处理文件权限和简单的输入/ 输出,以便为新的 UNIX 用户顺利地使用系统而打下基础。目标本教程的目标是让新的 UNIX 用户能够熟练地使用命令行遍历系统和处理文件。它重点关注于用来操作文件的一些常用命令行实用程序,但同时也讨论了关于文件权限和输入/输出的内容,以便向您完整地介绍日常工作中需要使用的命令。先决条件要学习本教程,您需要对计算机和文件有基本的认识,但并不一定需要具备使用类 UNIX 操作系统的经验。您应该知道什么是目录(文件夹)和文件,并能够使用您的帐户登录到类 UNIX 操作系统
4、中。如果您对 DOS 或 Microsoft Windows 命令行比较熟悉,那么您将发现其中一些相似之处,但对于从未使用过这些命令行的用户来说,也可以顺利地学习本教程。 系统要求在任何运行类 UNIX 操作系统的计算机上拥有您自己的帐户,这是完成本教程所需的要求。类 UNIX 操作系统包括 IBM AIX 操作系统、Linux、Berkeley Software Distribution (BSD) 和 Mac OS X(通过终端来访问命令行),以及其他一些系统。开始学习之前在开始学习之前,有一点需要注意:目前可以获得许多不同的类 UNIX 分发版,从商业分发版(如 AIX)到免费的分发版(
5、如 BSD 和 Linux)。本教程重点关注于所有分发版中都提供的一些命令和命令行选项,如果您发现与自己的分发版相比存在差异,那么请查看您的 man 页面(稍后将会进行描述)。请根据您的选择,登录到相应的类 UNIX 操作系统,以便开始学习。在登录之后,您应该自动地开始于您的用户 home 目录中。本教程中的示例使用 tuser(测试用户)用户名。 man在开始使用特定的命令之前,需要了解关于 man 的内容。man 表示手册 (manual),对于那些自信能够做到自给自足的 UNIX 用户来说,它是非常关键的工具。输入 man application-name 可以查看关于需要了解的内容的解
6、释。在本教程的每个页面中,我们鼓励您在执行其中指令的同时,查看相应的 man 页面。尝试输入下面的命令(请注意,$ 在本教程中表示命令提示符,在本教程的示例中,您应该在美元符号后面输入您所看到的内容): $ man ls 目录您需要了解的第一件事情是,如何遍历和查看文件系统。在 UNIX 中,目录用来以一种层次结构对文件进行组织。您可以在命令行中使用一系列的命令和列表来查看和遍历 UNIX 文件系统,而不要单击目录进入其中并且用图标来表示每个文件。ls如果您是第一次使用类 UNIX 操作系统,但是曾经使用过 DOS 或 Windows 命令行,那么 ls 基本上相当于 dir。它是 列出目录
7、(List Directory) 的缩写。ls 可以与各种命令行选项一同使用,以便获得详细的列表、显示隐藏的文件、递归列出子目录,等等。请输入下面的示例: $ ls $ ls -l $ ls -a $ ls -R 如果您正在命令行中考虑下一步应该进行什么操作,那么可以执行 ls,它可以帮助您了解现在所处的位置以及正在进行的操作。可以把它看作图形用户界面中的屏幕刷新操作,用来让您了解系统的当前状态。 cd要遍历文件系统,可以使用 cd 来更改目录。输入 cd,然后输入您希望进入的目录的名称。如果在开头使用了 /,那么这个目录的名称是 绝对 目录路径:它从文件系统的根开始。如果在开头没有使用 /,
8、那么该目录是 相对 路径:从您的当前 工作 目录开始。例如,如果您位于自己的 home 目录 (/home/tuser),并且希望移动到某个子目录,可以在 cd 的后面输入希望进入的目录名称。例如,如果有一个 Documents 目录,那么您可以输入下面的命令: $ cd Documents 因为您开始于 /home/tuser/,所以该命令将使您进入 /home/tuser/Documents/。与此相反,您可以使用绝对路径名来指定一个位置。例如,如下所示,您可以移动到 /tmp,然后返回到您的 home 目录: $ cd /tmp $ cd /home/tuser特殊目录名称在 UNIX
9、中,使用一些特殊的目录名称可以使得对文件系统的遍历变得简单。三个最重要的特殊名称分别指向当前目录、当前目录的父目录和用户的 home 目录。当前目录可以由点号指定。例如,如果您输入 $ cd .,那么您依然位于当前目录中,即 /home/tuser/。当您运行当前工作目录中的可执行文件时,该字符变得特别重要。在缺省情况下,许多 UNIX Shell 会在应用程序目录中搜索应用程序,但不会搜索当前工作目录。通常可以在文件名前面使用 ./,以显式地引用当前工作目录中的文件和应用程序。父目录由两个点号来引用。要遍历到您的当前工作目录的父目录,可以输入下面的命令: $ cd . 如果您以前位于 /ho
10、me/tuser,那么现在就在 /home 中。为了演示第三个特殊目录名称,可以使用快捷方法返回您的 home 目录(波浪符号)。可以输入下面的命令: $ cd pwd要查看当前目录,您可以使用 pwd,它表示 打印工作目录 (Print Working Directory)。它可以告诉您现在位于文件系统中的何处,这将帮助您在指定相对路径名称时确定应该使用什么样的名称。请尝试使用这三种特殊目录名称、绝对路径和相对路径,以遍历您的文件系统。在每一步骤中,可以使用 pwd 查看当前位置。 查看当前目录(如果您执行了前面部分中的操作步骤,那么现在应该位于您的 home 目录): $ pwd mkdi
11、r、rmdirmkdir 和 rmdir 分别用来创建和删除目录。rmdir 仅当该目录为空有效(它并不删除文件)。尝试使用下面的命令: $ mkdir TUTORIAL $ cd TUTORIAL $ pwd $ ls您现在位于刚刚创建的 TUTORIAL 目录,而且该目录为空。 您还可以使用 波浪号字符到达该目录。要进入 /home/tuser/TUTORIAL,可以输入: $ cd /TUTORIAL $ pwd目录布局您已经了解了如何在目录中移动并获取清单,现在可以开始研究典型的 UNIX 分发版中的目录布局了。您可以通过几种不同的方式来组织 UNIX 文件系统。本教程讨论了一些在大多
12、数类 UNIX 分发版中常见的根级目录。当然还有其他一些重要的根级目录,但下面这些是最常见的: /home (or /users)/etc/bin/sbin/usr/car/tmp/home 用来存放用户目录。例如,tuser 用户位于 /home/tuser。 /etc 是用来存储系统范围设置的目录,包括启动脚本和网络配置文件。该目录中的大多数文件都需要使用 root 用户进行编辑。/bin 和 /sbin 是用来存储系统可执行文件(比如在本教程中学习的命令)的目录。/sbin 用于存放系统命令,如 shutdown,而 /bin 用于存放用户命令。 应用程序通常安装在 /usr 中。/us
13、r/local/ 中的子目录通常用来包含一些安装的应用程序,而这些应用程序并不属于基本分发版中的一部分。 /var 是用来存放类似日志文件这样的内容的目录,需要不断地对其进行更新和存储。 临时文件存储在 /tmp 中。系统中所有的用户都可以对该目录进行写入,并且在一些系统中,会周期性地删除其中的旧文件。 文件既然您已经知道了如何使用命令行在文件系统中移动,那么现在可以开始对文件进行处理了。本部分内容将介绍如何创建示例文件、复制文件、删除文件,以及查看和更改基本的文件权限。在像 UNIX 这样的多用户操作系统中,必须了解所有权和权限的概念。 touch首先,创建一个空文件,您将在本教程中使用到该
14、文件。touch 命令可以用来创建一个空文件(对文件使用 touch 命令,通常用来更新文件的修改日期和访问日期)。 返回到用户 home 目录中的 TUTORIAL 目录,并输入下面的命令创建一个文件: $ cd /TUTORIAL$ touch example.txtcpcp 命令用来复制文件。输入 cp 加上需要复制的文件的名称,再加上需要将该文件复制到的目录(您还可以使用相应的选项来指定新文件的名称)。例如,尝试将 example.txt 文件复制到 /tmp/: $ cp example.txt /tmp/$ ls /tmp/您应该可以在 /tmp/ 中看到 example.txt。
15、现在,将 /tmp/ 中的文件复制回您的当前目录,但是为它取一个新的名称: $ cp /tmp/example.txt ./example2.txt$ ls请注意,这里使用一个点号来指定需要将这个新文件放到您的当前目录。在本示例中,不需要包括 ./(因为复制操作的缺省路径就是您的当前工作目录),但是它可以清楚地说明您要完成的任务。后面的 ls 命令则显示了在当前工作目录中有两个示例文件。 mv移动(move)文件可以使用 mv 命令来完成。对于移动和复制操作来说,大多数语法和命令行选项都是相同的。如果您希望将新文件 example2.txt 移出当前目录并放入到 /tmp/,那么可以输入下面的
16、命令:$ mv example2.txt /tmp/.请注意,这里再次使用了点号显式地说明您正在进行的操作。 rm要对系统进行清理,可以删除在 /tmp/ 中创建的文件。rm 命令用来从文件系统中删除文件。这与将文件移动到回收站或垃圾箱不同,该命令删除了文件指针,所以在使用 rm 命令时应当格外小心。输入以下命令: $ rm /tmp/example.txt$ rm /tmp/example2.txt$ ls /tmp/tmp/ 中的那两个示例文件都应该消失了。 根据您所使用的类 UNIX 操作系统的不同,您还可以使用其他的删除命令,如 srm 或 can。尝试输入 man srm 和 man
17、 can 以查看是否存在这些命令。 srm 用作安全版本的 rm,它对删除的文件使用随机数据进行覆盖,以防止对其进行恢复。can 在一些方法上与 srm 相反, can 可以保留文件,而将其移动到一个特殊的垃圾箱目录,类似于 Windows 的回收站。 所有权和权限在类 UNIX 操作系统中,文件所有权和权限是非常重要的概念。UNIX 从一开始就是多用户的操作系统。尽管现在新版本的 Windows 也可以用作多用户系统,但如果追溯到早期的个人计算机和 DOS 时期,Windows 的祖先是单用户的。即使在今天,有些 Windows 用户也很少考虑多用户系统中关于多个帐户和文件权限的问题。对于
18、UNIX 用户来说,理解文件所有权和权限是至关重要的。chown、chgrp可以使用 ls -l 查看 UNIX 中的文件所有权,可以使用 chown 和 chgrp 对其进行更改。输入下面的命令: $ ls -l使用 -l 指定需要查看长格式的文件清单。长格式包括关于权限、所有权、修改日期和文件大小等信息。您应该看到与下面所示类似的内容: tsystem:/TUTORIAL tuser$ ls -ltotal 0-rw-r-r- 1 tuser admin 0 Aug 13 15:35 example.txt当详细显示目录清单时,您可以分别在第 3 和第 4 列中看到文件的用户所有权和组所有
19、权。该文件由 tuser 用户和 admin 组所有。现在,暂时不管这个文件,输入下面的命令可以得到更多的信息: $ man chown$ man chgrp该命令的基本语法是使用用户名或组名作为第 1 个输入,后面是需要进行操作的文件或文件列表。例如:$ chown tuser example.txt$ chgrp admin example.txtchmod在 UNIX 中,使用与每个文件相关联的一组 9 个标志来处理基本文件权限。这些标志分别对应于不同用户类别(用户、组和其他用户)和三种文件操作(读取、写入和执行)。输入下面的命令: $ ls -l您应该看到与下面所示类似的内容: -rw
20、-r-r- 1 tuser admin 0 Aug 13 15:35 example.txt当您阅读目录的长格式清单时,其中的第 1 列显示了文件权限。请注意,该列中有 10 个字符(而不是 9 个)。第 1 个字符表示您正在处理的文件的类型。例如,短横线 -,告诉您这是一个常规文件。d 表示目录,而不是普通文件。现在,我们重点关注于其他的 9 个字符,每个字符可以为下列几种情况其中之一:-、 r、w 或 x。如果关闭了某个文件所有的权限,那么它应该与下面所示类似: - 1 tuser admin 0 Aug 13 15:35 example.txt如果打开了某个文件所有的权限,那么它应该与下
21、面所示类似: -rwxrwxrwx 1 tuser admin 0 Aug 13 15:35 example.txt您可以看到 3 组 rwx。如前所述,有 3 种不同的用户类别(用户、组和其他用户)。每一组 rwx 对应于其中的一个类别: 第 1 组 rwx 表示 user 的权限。换句话说,这可以告诉您,该文件的拥有者可以对其进行哪些操作。 第 2 组对应于 group。这可以告诉您,组成员可以对该文件进行哪些操作。 第 3 组对应于 other。这可以告诉您,系统中所有的用户可以对该文件进行哪些操作,无论该文件属于谁。 让我们更仔细地研究一下 example.txt 文件当前的权限: -
22、rw-r-r- 1 tuser admin 0 Aug 13 15:35 example.txt第 1 组三个标志表示该文件的所有者可以对其进行读取、写入操作,但是不能执行它(其中有 r 和 w,但没有 x)。从第 2 组三个标志中您可以看出,拥有该文件的组可以对其进行读取,但不能写入或执行(其中有 r,但没有 w 或 x)。第 3 组三个标志显示了,所有其他的用户可以读取该文件,但不能对其进行写入或执行操作(其中有 r,但没有 w 或 x)。这里给出了一个很好的示例,说明了详细的 man 页面非常重要。您可以停下来,并输入下面的命令: $ man chmod现在,可以考虑一下这样的可能性,即
23、该文件中保存了私有的信息,而您不希望任何其他的用户进行读取。您可能希望删除其他组和所有其他用户的读取权限。可以使用 chmod 更改这些权限。与 UNIX 中的许多操作一样,使用 chmod 的方法很多,本部分内容重点关注其中之一。使用三个字母(u、g 和 o)来表示三种类别(用户、组和其他用户)。使用三个字母(r、w 和 x)来表示三种权限(读取、写入和执行)。要更改这些权限,可以使用 chmod,加上需要更改的类别的字母,再加上一个加号或减号(分别表示打开或关闭),然后使用相应的字母给出需要更改的权限。最后,加上需要进行更改的文件的名称。最好通过一个示例来进行说明: $ chmod og-
24、r example.txt $ ls -l 您应该看到下面的结果: -rw- 1 tuser admin 0 Aug 13 15:35 example.txt在这个示例中,您指定了其他用户和组(o 和 g),并使用减号表示希望对这些类别关闭某些权限。然后,使用 (r) 表示需要关闭读取访问权限。现在,文件的所有者 tuser 仍然可以对该文件进行读取和写入操作,但系统中所有其他的用户(除了超级用户之外)都不能访问该文件。注意:超级用户 (root) 可以重写所有的文件权限。 处理多个文件现在,您已经了解了如何遍历目录和处理单个文件。本教程中的下一个内容是,了解如何处理一组文件。几乎所有的 UN
25、IX 命令除了可以处理单个文件外,还可以处理文件列表。通过显式地输入需要使用的每个文件的名称,或使用通配符表示需要使用的、具有共同名称特征的所有文件,您可以输入文件的列表。通配符对于处理多个文件,最常用的方法就是使用 * 通配符。通过使用 * 来表示任何字符或任何数量的字符,您可以选择文件列表。为了创建更多的文件以进行演示,可以输入下列命令: $ cp example.txt example2.txt$ cp example.txt script.sh现在,输入下面的命令: $ ls *.txt 您应该仅看到扩展名为 .txt 的文件。接下来,输入: $ ls exa*这次,您应该看到两个示例
26、文件,但不应该看到 script.sh。任何能够处理多个文件的命令行应用程序都可以使用通配符。 递归许多用来处理文件的命令行应用程序都具有一个 -R 选项。当使用了 -R 时,该应用程序将递归地进入一个目录及其所有的子目录,并且针对其中的每个文件执行所需的命令。例如,您可以返回您的 home 目录,然后复制整个 TUTORIAL 目录: $ cd $ cp -R TUTORIAL /tmp/. $ ls /tmp/TUTORIAL/ 现在,可以删除该目录,以便对系统进行清理: $ rm -R /tmp/TUTORIAL/ $ ls /tmp/这就删除了整个目录,包括其中包含的所有文件。请注意:
27、您可能会比原计划删除更多的数据,尤其是当通配符和 -R 一同使用时。 存档和压缩许多日常的文件操作都可以使用单个文件、目录和通配符来完成,但对于那些对备份、将文件集传输给其他用户、或仅为了节省空间感兴趣的用户来说,了解如何使用存档和压缩是非常重要的。UNIX 操作系统中有许多用于存档和压缩数据的实用程序。tar要将多个文件聚集成单个文件(存档),最常用的方法是使用 tar 命令。tar 是 磁盘存档程序 (Tape Archiver) 的缩写,这是因为它开始时使用备份磁带进行存档,但现在通常用来执行磁盘到磁盘的操作。尝试对 TUTORIAL 目录中的内容进行存档: $ cd $ tar cvf
28、 /tmp/tutorial.tar TUTORIAL $ ls /tmp/ 现在,您应该可以在 /tmp/ 中看到一个名为 tutorial.tar 的文件。该文件包含了目录 TUTORIAL 以及这个目录中所包含的文件。这个示例中使用了命令行选项 cvf: c 表示创建 (create),它用来告诉 tar 创建一个新的存档。 v 表示详细 (verbose),它用来告诉 tar 显示加入到存档的每个文件的清单。 f 表示文件 (file),它用来告诉 tar 将存档写入到文件而不是设备。 然后,进入 /tmp 并提取该存档的内容: $ cd /tmp/ $ ls $ tar cvf tu
29、torial $ ls请注意,第 1 个 ls 命令显示了 tutorial.tar,但它并没有显示 TUTORIAL 目录。第 2 个 ls 命令(在 tar 命令之后),它显示出在 /tmp/ 中有一个 TUTORIAL 目录。删除 /tmp/TUTORIAL 目录,以便对系统进行清理: $ rm -R /tmp/TUTORIALgzip在有了 tar 文件之后,您可能希望对其进行压缩。在大多数 UNIX 分发版中,有大量的压缩选项可供使用,但本教程重点关注于使用 gzip 来创建所谓的 tarball。tarball 是一个经过压缩的 tar 文件。下面让我们来创建一个压缩版本的 tut
30、orial.tar,以使其占用更少的空间: $ gzip tutorial.tar $ ls 现在,已经对 tutorial.tar 存档进行了压缩,并将其重命名为 tutorial.tar.gz。这是一个 tarball。要解压该文件,可以输入: $ gzip -d tutorial.tar.gz 所得的结果是没有压缩的原始 tar 文件 tutorial.tar。 文件系统和文件的大小可以很容易地了解如何处理单独的文件并查看它们的大小和内容。您可以使用相同的方法来查看整个目录和文件系统中的内容。许多新版本的 UNIX 可以使用简单的数值格式来显示该信息,并使用字母来表示相应的单位。dfdf
31、 表示 显示空闲 (Display Free) 磁盘空间。要使用该命令,可以简单地输入 df,您将获得关于计算机中每个文件系统的磁盘空间、已用空间和空闲空间的信息。在缺省情况下,大多数系统以 512KB 大小的块为单位进行显示,这将难以阅读。使用 -g 表示以千兆为单位显示信息,或使用 -m 表示以兆为单位显示信息。有些系统还提供了 -h 选项,它表示以 人可读的 (human-readable) 的方式显示数据。这使得 df 使用像 G、M 和 K 这样的后缀,并且以 3 个或更少的位数来显示每个数值。输入下面的命令: $ df -h 下面是在一台简单的服务器上可能看到的输出示例: $ df -h Filesystem Size Used Avail Use% Mounted on