您的位置:首页技术文章
文章详情页

UNIX 新手指南,第 1 部分: 文件维护工具

【字号: 日期:2024-06-13 15:57:36浏览:3作者:猪猪

开始之前

了解本教程中包含的内容以及如何最好地利用本教程。

关于本系列

这个由四部分组成的文章系列将从用户的角度出发,介绍 Unix® 的基本知识。对于很久没有使用类 UNIX 操作系统的用户来说,这个初始的教程是个很好的温习。对于具有 Windows® 使用经验的新的 UNIX 用户来说,它也很有价值,因为其中引用了 Windows,并将两者进行了比较。本系列中后续的教程将详细介绍一些特定的应用程序(例如,vi),并讨论 Shell 的诀窍与技巧。

关于本教程

系统管理员可以在命令行中使用各种程序来维护 UNIX 系统中的文件。除了这里演示的基本程序外,还有更多的程序可供使用,但这里介绍的程序都是 UNIX 系统中的基本组成部分。您可以使用 mv 命令对文件和目录进行移动和重命名。cp 命令可以用来复制一个或多个文件或目录。有一个称为 tar 的应用程序,它可以快速地将文件聚集在一起形成一个存档。本教程还将讨论如何遍历文件系统、处理文件权限和简单的输入/输出,以便为新的 UNIX 用户顺利地使用系统而打下基础。

目标

本教程的目标是让新的 UNIX 用户能够熟练地使用命令行遍历系统和处理文件。它重点关注于用来操作文件的一些常用命令行实用程序,但同时也讨论了关于文件权限和输入/输出的内容,以便向您完整地介绍日常工作中需要使用的命令。

先决条件

要学习本教程,您需要对计算机和文件有基本的认识,但并不一定需要具备使用类 UNIX 操作系统的经验。您应该知道什么是目录(文件夹)和文件,并能够使用您的帐户登录到类 UNIX 操作系统中。如果您对 Dos 或 Microsoft® Windows 命令行比较熟悉,那么您将发现其中一些相似之处,但对于从未使用过这些命令行的用户来说,也可以顺利地学习本教程。

系统要求

在任何运行类 Unix 操作系统的计算机上拥有您自己的帐户,这是完成本教程所需的要求。类 UNIX 操作系统包括 IBM AIX® 操作系统、Linux®、Berkeley Software Distribution (BSD) 和 Mac OS® X(通过终端来访问命令行),以及其他一些系统。

开始学习之前

在开始学习之前,有一点需要注意:目前可以获得许多不同的类 UNIX 分发版,从商业分发版(如 AIX)到免费的分发版(如 BSD 和 Linux)。本教程重点关注于所有分发版中都提供的一些命令和命令行选项,如果您发现与自己的分发版相比存在差异,那么请查看您的 man 页面(稍后将会进行描述)。

请根据您的选择,登录到相应的类 UNIX 操作系统,以便开始学习。在登录之后,您应该自动地开始于您的用户 home 目录中。本教程中的示例使用 tuser(测试用户)用户名。

man

在开始使用特定的命令之前,需要了解关于 man 的内容。man 表示手册 (manual),对于那些自信能够做到自给自足的 UNIX 用户来说,它是非常关键的工具。输入 man application-name 可以查看关于需要了解的内容的解释。在本教程的每个页面中,我们鼓励您在执行其中指令的同时,查看相应的 man 页面。

尝试输入下面的命令(请注意,$ 在本教程中表示命令提示符,在本教程的示例中,您应该在美元符号后面输入您所看到的内容):$ man ls

目录

您需要了解的第一件事情是,如何遍历和查看文件系统。在 UNIX 中,目录用来以一种层次结构对文件进行组织。您可以在命令行中使用一系列的命令和列表来查看和遍历 UNIX 文件系统,而不要单击目录进入其中并且用图标来表示每个文件。

ls

如果您是第一次使用类 UNIX 操作系统,但是曾经使用过 Dos 或 Windows 命令行,那么 ls 基本上相当于 dir。它是列出目录 (List Directory) 的缩写。ls 可以与各种命令行选项一同使用,以便获得详细的列表、显示隐藏的文件、递归列出子目录,等等。请输入下面的示例:$ ls$ ls -l$ ls -a$ ls -R

如果您正在命令行中考虑下一步应该进行什么操作,那么可以执行 ls,它可以帮助您了解现在所处的位置以及正在进行的操作。可以把它看作图形用户界面中的屏幕刷新操作,用来让您了解系统的当前状态。

cd

要遍历文件系统,可以使用 cd 来更改目录。输入 cd,然后输入您希望进入的目录的名称。如果在开头使用了 /,那么这个目录的名称是绝对 目录路径:它从文件系统的根开始。如果在开头没有使用 /,那么该目录是相对 路径:从您的当前工作 目录开始。例如,如果您位于自己的 home 目录 (/home/tuser),并且希望移动到某个子目录,可以在 cd 的后面输入希望进入的目录名称。例如,如果有一个 Documents 目录,那么您可以输入下面的命令:$ cd Documents

因为您开始于 /home/tuser/,所以该命令将使您进入 /home/tuser/Documents/。

与此相反,您可以使用绝对路径名来指定一个位置。例如,如下所示,您可以移动到 /tmp,然后返回到您的 home 目录:$ cd /tmp$ cd /home/tuser

特殊目录名称

在 Unix 中,使用一些特殊的目录名称可以使得对文件系统的遍历变得简单。三个最重要的特殊名称分别指向当前目录、当前目录的父目录和用户的 home 目录。当前目录可以由点号指定。例如,如果您输入 $ cd .,那么您依然位于当前目录中,即 /home/tuser/。当您运行当前工作目录中的可执行文件时,该字符变得特别重要。在缺省情况下,许多 UNIX Shell 会在应用程序目录中搜索应用程序,但不会搜索当前工作目录。通常可以在文件名前面使用 ./,以显式地引用当前工作目录中的文件和应用程序。父目录由两个点号来引用。要遍历到您的当前工作目录的父目录,可以输入下面的命令:$ cd ..

如果您以前位于 /home/tuser,那么现在就在 /home 中。为了演示第三个特殊目录名称,可以使用快捷方法返回您的 home 目录(波浪符号)。可以输入下面的命令:$ cd ~

pwd

要查看当前目录,您可以使用 pwd,它表示打印工作目录 (Print Working Directory)。它可以告诉您现在位于文件系统中的何处,这将帮助您在指定相对路径名称时确定应该使用什么样的名称。请尝试使用这三种特殊目录名称、绝对路径和相对路径,以遍历您的文件系统。在每一步骤中,可以使用 pwd 查看当前位置。

查看当前目录(如果您执行了前面部分中的操作步骤,那么现在应该位于您的 home 目录):$ pwd

mkdir、rmdir

mkdir 和 rmdir 分别用来创建和删除目录。rmdir 仅当该目录为空有效(它并不删除文件)。

尝试使用下面的命令:$ mkdir TUTORIAL$ cd TUTORIAL$ pwd$ ls

您现在位于刚刚创建的 TUTORIAL 目录,而且该目录为空。

您还可以使用 ~ 波浪号字符到达该目录。要进入 /home/tuser/TUTORIAL,可以输入:$ cd ~/TUTORIAL$ pwd

目录布局

您已经了解了如何在目录中移动并获取清单,现在可以开始研究典型的 Unix 分发版中的目录布局了。您可以通过几种不同的方式来组织 UNIX 文件系统。本教程讨论了一些在大多数类 UNIX 分发版中常见的根级目录。当然还有其他一些重要的根级目录,但下面这些是最常见的:/home (or /users)/etc/bin/sbin/usr/car/tmp

/home 用来存放用户目录。例如,tuser 用户位于 /home/tuser。

/etc 是用来存储系统范围设置的目录,包括启动脚本和网络配置文件。该目录中的大多数文件都需要使用 root 用户进行编辑。

/bin 和 /sbin 是用来存储系统可执行文件(比如在本教程中学习的命令)的目录。/sbin 用于存放系统命令,如 shutdown,而 /bin 用于存放用户命令。

应用程序通常安装在 /usr 中。/usr/local/ 中的子目录通常用来包含一些安装的应用程序,而这些应用程序并不属于基本分发版中的一部分。

/var 是用来存放类似日志文件这样的内容的目录,需要不断地对其进行更新和存储。

临时文件存储在 /tmp 中。系统中所有的用户都可以对该目录进行写入,并且在一些系统中,会周期性地删除其中的旧文件。

文件

既然您已经知道了如何使用命令行在文件系统中移动,那么现在可以开始对文件进行处理了。本部分内容将介绍如何创建示例文件、复制文件、删除文件,以及查看和更改基本的文件权限。在像 Unix 这样的多用户操作系统中,必须了解所有权和权限的概念。

touch

首先,创建一个空文件,您将在本教程中使用到该文件。touch 命令可以用来创建一个空文件(对文件使用 touch 命令,通常用来更新文件的修改日期和访问日期)。

返回到用户 home 目录中的 TUTORIAL 目录,并输入下面的命令创建一个文件:$ cd ~/TUTORIAL$ touch example.txt

cp

cp 命令用来复制文件。输入 cp 加上需要复制的文件的名称,再加上需要将该文件复制到的目录(您还可以使用相应的选项来指定新文件的名称)。例如,尝试将 example.txt 文件复制到 /tmp/:$ cp example.txt /tmp/$ ls /tmp/

您应该可以在 /tmp/ 中看到 example.txt。现在,将 /tmp/ 中的文件复制回您的当前目录,但是为它取一个新的名称:$ cp /tmp/example.txt ./example2.txt$ ls

请注意,这里使用一个点号来指定需要将这个新文件放到您的当前目录。在本示例中,不需要包括 ./(因为复制操作的缺省路径就是您的当前工作目录),但是它可以清楚地说明您要完成的任务。后面的 ls 命令则显示了在当前工作目录中有两个示例文件。

mv

移动(move)文件可以使用 mv 命令来完成。对于移动和复制操作来说,大多数语法和命令行选项都是相同的。如果您希望将新文件 example2.txt 移出当前目录并放入到 /tmp/,那么可以输入下面的命令:$ 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 can 以查看是否存在这些命令。srm 用作安全版本的 rm,它对删除的文件使用随机数据进行覆盖,以防止对其进行恢复。can 在一些方法上与 srm 相反,can 可以保留文件,而将其移动到一个特殊的垃圾箱目录,类似于 Windows 的回收站。

所有权和权限

在类 UNIX 操作系统中,文件所有权和权限是非常重要的概念。UNIX 从一开始就是多用户的操作系统。尽管现在新版本的 Windows 也可以用作多用户系统,但如果追溯到早期的个人计算机和 Dos 时期,Windows 的祖先是单用户的。即使在今天,有些 Windows 用户也很少考虑多用户系统中关于多个帐户和文件权限的问题。对于 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 列中看到文件的用户所有权和组所有权。该文件由 tuser 用户和 admin 组所有。现在,暂时不管这个文件,输入下面的命令可以得到更多的信息:$ man chown$ man chgrp

该命令的基本语法是使用用户名或组名作为第 1 个输入,后面是需要进行操作的文件或文件列表。例如:$ chown tuser example.txt$ chgrp admin example.txt

chmod

在 UNIX 中,使用与每个文件相关联的一组 9 个标志来处理基本文件权限。这些标志分别对应于不同用户类别(用户、组和其他用户)和三种文件操作(读取、写入和执行)。输入下面的命令:$ ls -l

您应该看到与下面所示类似的内容:-rw-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

如果打开了某个文件所有的权限,那么它应该与下面所示类似:-rwxrwxrwx 1 tuser admin 0 Aug 13 15:35 example.txt

您可以看到 3 组 rwx。如前所述,有 3 种不同的用户类别(用户、组和其他用户)。每一组 rwx 对应于其中的一个类别:

第 1 组 rwx 表示 user 的权限。换句话说,这可以告诉您,该文件的拥有者可以对其进行哪些操作。

第 2 组对应于 group。这可以告诉您,组成员可以对该文件进行哪些操作。

第 3 组对应于 other。这可以告诉您,系统中所有的用户可以对该文件进行哪些操作,无论该文件属于谁。

让我们更仔细地研究一下 example.txt 文件当前的权限:-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

现在,可以考虑一下这样的可能性,即该文件中保存了私有的信息,而您不希望任何其他的用户进行读取。您可能希望删除其他组和所有其他用户的读取权限。可以使用 chmod 更改这些权限。与 Unix 中的许多操作一样,使用 chmod 的方法很多,本部分内容重点关注其中之一。使用三个字母(u、g 和 o)来表示三种类别(用户、组和其他用户)。使用三个字母(r、w 和 x)来表示三种权限(读取、写入和执行)。要更改这些权限,可以使用 chmod,加上需要更改的类别的字母,再加上一个加号或减号(分别表示打开或关闭),然后使用相应的字母给出需要更改的权限。最后,加上需要进行更改的文件的名称。最好通过一个示例来进行说明:$ chmod og-r example.txt$ ls -l

您应该看到下面的结果:-rw------- 1 tuser admin 0 Aug 13 15:35 example.txt

在这个示例中,您指定了其他用户和组(o 和 g),并使用减号表示希望对这些类别关闭某些权限。然后,使用 (r) 表示需要关闭读取访问权限。现在,文件的所有者 tuser 仍然可以对该文件进行读取和写入操作,但系统中所有其他的用户(除了超级用户之外)都不能访问该文件。注意:超级用户 (root) 可以重写所有的文件权限。

处理多个文件

现在,您已经了解了如何遍历目录和处理单个文件。本教程中的下一个内容是,了解如何处理一组文件。几乎所有的 Unix 命令除了可以处理单个文件外,还可以处理文件列表。通过显式地输入需要使用的每个文件的名称,或使用通配符表示需要使用的、具有共同名称特征的所有文件,您可以输入文件的列表。

通配符

对于处理多个文件,最常用的方法就是使用 * 通配符。通过使用 * 来表示任何字符或任何数量的字符,您可以选择文件列表。为了创建更多的文件以进行演示,可以输入下列命令:$ cp example.txt example2.txt$ cp example.txt script.sh

现在,输入下面的命令:$ ls *.txt

您应该仅看到扩展名为 .txt 的文件。接下来,输入:$ ls exa*

这次,您应该看到两个示例文件,但不应该看到 script.sh。

任何能够处理多个文件的命令行应用程序都可以使用通配符。

递归

许多用来处理文件的命令行应用程序都具有一个 -R 选项。当使用了 -R 时,该应用程序将递归地进入一个目录及其所有的子目录,并且针对其中的每个文件执行所需的命令。例如,您可以返回您的 home 目录,然后复制整个 TUTORIAL 目录:$ cd ~$ cp -R TUTORIAL /tmp/.$ ls /tmp/TUTORIAL/

现在,可以删除该目录,以便对系统进行清理:$ rm -R /tmp/TUTORIAL/$ ls /tmp/

这就删除了整个目录,包括其中包含的所有文件。请注意:您可能会比原计划删除更多的数据,尤其是当通配符和 -R 一同使用时。

存档和压缩

许多日常的文件操作都可以使用单个文件、目录和通配符来完成,但对于那些对备份、将文件集传输给其他用户、或仅为了节省空间感兴趣的用户来说,了解如何使用存档和压缩是非常重要的。Unix 操作系统中有许多用于存档和压缩数据的实用程序。

tar

要将多个文件聚集成单个文件(存档),最常用的方法是使用 tar 命令。tar 是磁盘存档程序 (Tape Archiver) 的缩写,这是因为它开始时使用备份磁带进行存档,但现在通常用来执行磁盘到磁盘的操作。尝试对 TUTORIAL 目录中的内容进行存档:$ cd ~$ tar cvf /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 tutorial$ ls

请注意,第 1 个 ls 命令显示了 tutorial.tar,但它并没有显示 TUTORIAL 目录。第 2 个 ls 命令(在 tar 命令之后),它显示出在 /tmp/ 中有一个 TUTORIAL 目录。删除 /tmp/TUTORIAL 目录,以便对系统进行清理:$ rm -R /tmp/TUTORIAL

标签: Unix系统
相关文章: