[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 下一页 ]


Debian 用户参考手册 (过时文档)
第 4 章 - 文件和文件系统


作者 = Havoc Pennington rhpennin@midway.uchicago.edu

主题 = 文件处理命令、目录处理命令、目录结构、文件系统等。

本章介绍如何在您的 Debian GNU/Linux 系统上操作文件,这些文件如何组织成文件系统,以及如何使用存储文件的物理设备(例如您的硬盘)。


4.1 基本概念

在描述任何实际的文件操作任务之前,需要说明一些关于文件的一般要点。 让我们看看 Debian 系统上的一些文件

/

一个简单的 / 代表根目录。 所有其他文件和目录都包含在根目录中。

/home/janeq

这是用户 “janeq” 的主目录。 从左到右阅读,要访问此目录,您需要从根目录开始,进入 home 目录,然后进入 janeq 目录。

/etc/X11/XF86Config

这是 X Window 系统的配置文件。 它位于 /etc 目录的 X11 子目录中。 /etc 反过来又是根目录 / 的子目录。

需要注意的事项

如果这一切还不是很清楚,请不要担心。 接下来还有很多示例。


4.2 基本文件命令 - 教程

要使用您的系统,您必须知道如何创建、移动、重命名和删除文件和目录。 您将从shell 提示符执行此操作,在 Debian 上,默认提示符为 $。 在本章的教程中,我们假设您已经登录,不是以 root 用户身份登录,并且您看到的是 $ 提示符。

最好的学习方法是尝试。 只要您不是 root 用户(并且尚未创建任何重要文件),您就不会造成太严重的混乱。 因此,请立即开始 - 在提示符下键入每个命令并按 Enter 键

  1. pwd

    pwd 代表 Present Working Directory(当前工作目录)。 您应该在屏幕上看到您所在目录的名称 - 可能是 /home/yourname

  1. ls

    ls 代表 “list”(列表),如 “list files”(列出文件)。 当您键入 ls 时,您应该看到当前工作目录中所有文件的列表。 如果您刚刚安装了 Debian,您的主目录很可能为空。 如果您的当前工作目录为空,ls 将不会在屏幕上显示任何内容。

  1. cd /

    cd 表示 Change Directory(更改目录)。 在这种情况下,您已请求更改为根目录。 再次键入 pwd,并验证您当前正在根目录中工作。 键入 ls,看看 / 中有什么。

  1. cd

    单独键入 cd 会将您带到您的主目录 - /home/yourname。 尝试 pwd 来验证这一点。

  1. mkdir practice

    在您的主目录中,让我们创建一个名为 practice 的目录。 我们将使用此目录来尝试一些其他命令。 您可以键入 ls 以验证您的新目录是否存在。

  1. cd practice

    将目录更改为 practice

  1. mkdir mysubdirectory

    创建 practice 的子目录。

  1. cp /etc/profile .

    好的,事情变得更加复杂了! cp 是 “copy”(复制)的缩写。 /etc/profile 只是您系统上的一个随机文件,现在不用担心它的用途。 我们已将其复制到 . - 但 . 是什么? . 只是表示 “我现在所在的目录”,或当前工作目录。 因此,我们创建了 /etc/profile 的副本,并将其放在我们的 practice 目录中。 尝试键入 ls 以验证当前工作目录中确实有一个名为 profile 的文件。

  1. more profile

    more 用于查看文本文件的内容,例如 /etc/profile。 它被称为 more 是因为它一次显示文件的一页,您按空格键以查看更多内容。 当您到达文件末尾或键入 q(退出)时,more 将退出。 您也可以尝试键入 more /etc/profile,以验证您的副本看起来与原始文件完全相同。

  1. mv profile mysubdirectory

    您可能猜到,mv 代表 “move”(移动)。 我们已将文件 profile 从当前目录移动到我们之前创建的子目录中。 也许键入 ls 和/或 ls mysubdirectory 以验证移动。

  1. cd mysubdirectory

    更改为子目录。

  1. mv profile myprofile

    mv 也用于重命名文件 - 通过将它们移动到新名称。 因此,没有单独的 rename 命令。 请注意,mv 的第二个参数可以是目录(将文件或目录移动到其中),也可以是新文件名。 cp 的工作方式相同。

    与往常一样,您可以键入 ls 以查看 mv 的结果。

  1. mv myprofile ..

    正如 . 表示 “我现在所在的目录” 一样,.. 表示 “当前目录的父目录”,在本例中是我们之前创建的 practice 目录。 使用 ls 验证 myprofile 现在是否在那里。

  1. cd ..

    将目录更改为父目录 - 在本例中为 practice,您刚刚将 myprofile 放在那里。

  1. rm myprofile

    rm 表示 “remove”(删除)- 这将删除 myprofile。 小心! 在 GNU/Linux 系统上删除文件是永久性的 - 没有撤消删除。 如果您 rm 它,它就永远消失了。

  1. rmdir mysubdirectory

    rmdir 就像 rm,只是它是用于目录的。 请注意,rmdir 仅适用于空目录 - 如果目录包含文件,您必须先删除这些文件,或者使用 rm -r 代替 rmdir

  1. rmdir .

    糟糕! 那没有用。 您无法删除您当前正在工作的目录。

  1. cd ..

    因此,移出当前目录,进入其父目录。 现在您可以键入

  1. rmdir practice

    这将删除您的练习会话的最后残余。

现在您知道如何创建、复制、移动、重命名和删除文件和目录了。 您还学习了一些快捷方式,例如简单地键入 cd 以跳转到您的主目录,以及 ... 分别指代当前目录及其父目录。


4.3 我的 Debian 系统上有哪些文件? 我应该把自己的文件放在哪里?

现在您可以浏览目录树了,让我们参观一下您安装 Debian 时创建的文件和目录。 如果您好奇,请 cd 到每个目录并键入 ls 以查看其内容。 如果列表不适合屏幕,请尝试 ls | more,其中 | 是 “管道” 字符,通常与反斜杠位于同一键上。

/

如前所述,这是根目录,其中包含所有其他目录。

/root

但不要将 //root 混淆! /root 是 root 用户或超级用户的主目录。 它是名为 /root 的目录,但它不是目录 /

/home

这是所有普通用户(即除 root 用户之外的所有用户)的主目录所在的位置。 主目录以拥有它们的用户命名。 如果您在学校或企业中使用大型系统,您的系统管理员可能会创建其他目录来包含主目录:例如 /home1/home2

您的主目录是您放置所有个人工作、电子邮件和其他信息以及个人配置首选项的位置。

/bin

此目录包含 “binaries”(二进制文件),即可执行文件,这些文件对于系统的运行至关重要。 示例包括:shell (bash) 以及您刚刚学习的命令,例如 cp

/sbin

此目录包含 “system binaries”(系统二进制文件),root 用户或系统管理员可能想要使用的东西,但您可能不想在日常活动中使用。

/usr

/usr 包含您会感兴趣的大部分文件。 它有许多子目录:/usr/bin/usr/sbin/bin/sbin 非常相似,只是 /usr 中的目录不被认为是 “对系统运行至关重要”。

虽然 /usr 不是计算机运行所必需的,但它确实包含您将用于完成实际工作的应用程序。 在 /usr 中,您还会找到 /usr/man/usr/info/usr/doc 目录 - 这些目录分别包含手册页、信息页和其他文档。 并且不要忘记 /usr/games

/usr/local

Debian 系统不会在此目录中安装任何内容。 如果您想安装自己编译的软件或 Debian 软件包中未包含的任何软件,则应使用它。 如果您是唯一使用它的人,您也可以在您的主目录中安装软件。

/etc

/etc 包含所有系统范围的配置文件。 每当您想要更改影响计算机所有用户的内容(例如您如何连接到互联网,或者您拥有哪种类型的显卡)时,您可能必须以 root 用户身份登录并更改 /etc 中的文件。

/tmp

您可以在这里找到临时文件,其中大多数是系统创建的。 此目录通常会定期或每次重新启动系统时擦除。 如果您愿意,您可以在此处创建文件,但请注意它们可能会被自动删除。

/var

/var 包含 “variable”(可变)文件,系统会自动更改这些文件。 例如,传入的邮件存储在这里。 系统在此处保留其操作日志。 这里还有许多其他自动生成的文件。 您主要会对 /var/log 的内容感兴趣,您可以在其中找到错误消息并尝试弄清楚如果出现问题,您的系统正在做什么。

显然,系统上还有更多目录,太多了,无法一一描述。 我们将在本手册的后面部分介绍其中一些目录。

对于更改内容,您通常只想将自己限制在您的主目录和 /etc 中。 在 Debian 系统上,很少有机会更改其他任何内容,因为其他所有内容都是为您自动安装的。

/etc 用于配置整个系统。 您将使用您自己的主目录(/home 的子目录)来配置您自己的首选项并存储您的个人数据。 想法是,在日常基础上,您将自己限制在 /home/yourname 中,因此您不可能破坏任何东西。 偶尔,您以 root 用户身份登录以更改系统范围目录中的某些内容,但这仅在绝对必要时才进行。 当然,如果您在学校或企业中使用 Debian,并且其他人是系统管理员,您将没有 root 访问权限,并且只能更改您的主目录。


4.4 文件所有权和权限

GNU 和 Unix 系统的设置允许多人使用同一台计算机,同时保持某些文件的私密性或阻止某些人修改某些文件。 您可以自行验证这一点

  1. 以您自己的身份登录,即不是以 root 用户身份登录。

  1. rm /etc/resolv.conf

    您应该被告知 “Permission denied.”(权限被拒绝)。 /etc/resolv.conf 是一个重要的系统配置文件 - 除非您是 root 用户,否则您无权更改或删除它。 这可以防止您意外地弄乱系统,如果计算机是公共计算机(例如在办公室或学校),则可以防止用户故意弄乱系统。

现在键入 ls -l /etc/resolv.conf

这应该给您类似如下的输出

     -rw-r--r-- 1 root root 119 Feb 23 1997 /etc/resolv.conf

ls-l 选项请求所有额外的信息。 右侧的信息很容易理解 - 文件大小为 119 字节,文件上次更改的日期是 1997 年 2 月 23 日,文件名是 /etc/resolv.conf。 在屏幕的左侧,事情变得有点复杂。

首先,简短的技术解释:-rw-r--r-- 是文件的模式1 是指向此文件的硬链接数(或目录中的文件数),两个 root 是拥有该文件的用户和组。

这有点神秘。 让我们慢慢地过一遍(硬链接部分除外 - 有关硬链接部分,请参阅 文件的真实性质:硬链接和 inodes,第 4.8.1 节)。


4.4.1 组

每个文件都有两个所有者 - 用户和组。 上述情况有点令人困惑,因为除了 root 用户之外,还有一个名为 root 的组。 组只是用户的集合,这些用户被集体允许访问系统的某些部分。 一个很好的例子是 games 组。 为了刻薄,您可以设置您的系统,以便只有 games 组中的人才能玩游戏。

更实际的例子:假设您正在为学校设置计算机。 您可能希望某些文件只能由教师访问,而不能由学生访问,因此您将所有教师放在一个组中。 然后,您可以告诉系统某些文件属于 teachers 组的成员,并且其他任何人都无法访问这些文件。 以下是一些您可以执行的操作来探索系统上的组

  1. groups

    在 shell 提示符下键入此命令将告诉您您是哪些组的成员。 您很可能只属于一个组,该组与您的用户名相同。(FIXME:查找对此的解释是什么)

  1. more /etc/group

    此文件列出了系统上存在的组。 请注意 root 组(此组的唯一成员是 root 用户)以及与您的用户名对应的组。 还有诸如 dialout(允许用户拨号连接调制解调器的用户)和 floppy(可以使用软盘驱动器的用户)之类的组。 但是,您的系统可能未配置为使用这些组 - 现在可能只有 root 用户可以使用软盘或调制解调器。 有关此文件的详细信息,请尝试键入 man group

  1. ls -l /home

    观察每个用户目录如何由该用户和该用户的个人组拥有。(如果您刚刚安装了 Debian,您可能是唯一的用户。)


4.4.2 模式

除了由一个用户和一个组拥有之外,每个文件和目录还具有模式,该模式确定谁被允许读取、写入和执行该文件。 模式还确定了一些其他事项,但它们是高级主题,因此我们现在将跳过它们。

模式在 ls 输出中看起来像这样:-rw-r--r--。 这里有十个 “空格”,但模式实际上由十二位组成(将位视为可以打开或关闭的开关)。 现在,我们只考虑这些位中的九个:那些控制文件所有者、文件组所有者和系统上所有人(有时称为 “世界”)的读取、写入和执行权限的位。 请注意,三种权限(读取、写入、执行)乘以三组可以拥有权限的人(用户、组、其他人)总共构成九种组合。

在模式行中,第一个 “空格” 给出了文件的类型。 在这种情况下,- 表示它是一个常规文件。 如果它是 d,我们将看到一个目录。 还有其他可能性太复杂,现在无法深入探讨(请参阅 文件类型,第 4.8.2 节)。

其余九个 “空格” 用于显示构成文件模式的 12 位。 基本的 9 位(用户、组和其他人的读取、写入和执行)显示为三个 rwx 块。 因此,如果所有权限都已打开,则模式将如下所示:-rwxrwxrwx。(其余三位通过将 x 更改为 stST 来显示,但这是一个复杂的主题,我们稍后会介绍。)

在此上下文中,“读取”、“写入” 和 “执行” 具有以下含义

目录模式有点令人困惑,因此这里有一些各种组合效果的示例

目录写入权限决定了您是否可以删除目录中的文件 - 如果您有权写入包含文件的目录,则可以删除只读文件。 您无法从只读目录中删除文件,即使您被允许更改文件也是如此。 文件权限与删除文件无关。

这也意味着,如果您拥有一个目录,您可以随时从中删除文件,即使这些文件属于 root 用户。

目录执行权限决定了您是否有权访问文件 - 以及文件权限是否起作用。 如果您对目录具有执行权限,则该目录的文件权限才变得相关。 否则,文件权限就无关紧要了;无论如何您都无法访问文件。

如果您对目录具有执行权限,则文件权限决定了您是否可以读取文件的内容、更改文件和/或将文件作为命令执行。

FIXME:接下来的两段是否正确?

最后,更改文件或目录权限的权限不受该文件或目录权限的影响。 相反,您始终可以更改您拥有的文件或目录的权限,但不能更改其他人拥有的文件的权限,只要您被允许访问该文件即可。 因此,如果您可以访问您拥有的文件(也就是说,您对包含它的目录具有执行权限),那么您可以更改其权限。

这意味着您无法永久删除自己的权限,因为您始终可以将其恢复。 假设您从您拥有的文件中删除用户写入权限,然后尝试更改该文件。 这将是不允许的,但您可以随时再次授予自己写入权限,然后更改该文件。 失去恢复权限能力的唯一方法是完全失去对文件的访问权限。


4.4.3 实践中的权限

FIXME:这不是很彻底。 但是,似乎彻底会使其变得非常冗长,并且涉及以 root 用户身份创建文件以显示不同所有权的影响等等,并且可能不值得这样做。

要更改权限,我们将使用 chmod 命令。

  1. cd; touch myfile

    这里有一些新技巧。 首先,您可以使用 ; 将两个命令放在一行上。 您可以将以上内容键入为

         $ cd 
         $ touch myfile
    

    或作为

         $ cd; touch myfile
    

    最终结果将是相同的。

    回想一下,单独 cd 会使您返回到您的主目录。touch 通常用于将文件的修改时间更改为当前时间,但它还有另一个有趣的功能:如果文件不存在,touch 会创建该文件。 因此,我们正在使用它来创建一个文件进行练习。 使用 ls -l 确认文件已创建,并注意权限模式

         $ ls -l 
         -rw-r--r-- 1 havoc havoc 0 Nov 18 22:04 myfile
    

    显然,当您尝试时,时间和用户/组名称会有所不同。 文件大小为 0,因为 touch 创建一个空文件。-rw-r--r-- 是 Debian 上的默认权限模式(您可以更改它 - 请参阅 FIXME:添加对 umask 的引用)。

  1. chmod u+x myfile

    此命令意味着为拥有该文件的用户 (u) 添加 (+) 执行 (x) 权限。 使用 ls -l 查看效果。

  1. chmod go-r myfile

    在这里,我们从拥有该文件的组以及其他所有人(其他人,o)中减去了读取权限。 再次使用 ls -l 验证效果。

  1. chmod ugo=rx myfile

    在这里,我们将用户、组和其他人的权限设置为 (=) 读取和执行。 这会将权限设置为完全您指定的内容,并取消设置任何其他权限。 因此,应设置所有 rx,并且应取消设置所有 w。 现在没有人可以写入该文件。

  1. chmod a-x myfile

    augo 或 “all”(全部)的快捷方式。 因此,现在应该取消设置所有 x 权限。

  1. rm myfile

    我们正在删除该文件,但没有写入权限。rm 会询问您是否确定

         rm: remove `myfile', overriding mode 0444?
    

    您应该通过键入 y 并按 Enter 键来响应。 这是 rm 的一项功能,而不是权限的事实 - 删除文件的权限来自目录权限,并且您对目录具有写入权限。 但是,rm 试图提供帮助,认为如果您不想更改文件(因此删除了写入权限),您也不想删除它,因此它会询问您。

rm 的问题中,0444 业务是什么? 回想一下,权限模式是一个十二位二进制数,如下所示:0001001001000444 是以八进制(八进制)数表示的此二进制数,这是编写模式的传统方式。 因此,您可以键入 chmod 444 myfile 而不是 chmod ugo=r myfile。 请参阅 将数字参数与 chmod 一起使用,第 4.8.4.1 节


4.5 文件系统

在这一点上,解释一些理论可能是一个好主意。 特别是文件系统的概念。[2] 这很令人困惑,因为它有几个含义。

任何您希望用于存储文件的物理设备都必须至少有一个文件系统。这里指的是第二种意义上的文件系统——文件和目录的层级结构,以及关于它们的信息。当然,任何文件系统都有类型,因此第三种意义也会发挥作用。如果您在单个设备上有多个文件系统,则每个文件系统可以具有不同的类型——例如,您的硬盘上可能同时具有 DOS 分区和 Linux 分区。

区分文件系统与磁盘的低级格式非常重要。在 DOS 和 Macintosh 世界中,文件系统被称为高级格式。当您使用这些操作系统之一格式化磁盘时,通常既执行低级格式化又创建文件系统(高级格式化)。在 GNU 和 Unix 系统上,人们通常简单地说“格式化”来表示低级格式化,而“创建文件系统”来表示高级格式化。

格式化与物理设备的细节有关,例如您的数据在软盘上的确切物理位置(例如在磁盘的边缘或中心)。文件系统是您需要关注的组织级别——目录和文件的名称、它们的大小等等。


4.6 如何访问特定设备(包括硬盘分区和软盘驱动器)

本节介绍如何挂载软盘或 Zip 磁盘、/dev 目录,以及如何在多个物理设备或分区上分布目录树。


4.6.1 挂载文件系统

正如我们之前所说,在 GNU/Linux 系统上,目录和物理设备之间没有像 DOS 那样必要的对应关系,例如在 DOS 中,每个驱动器都有自己的目录树,以一个字母开头(例如 C:\)。

相反,每个物理设备(如硬盘或软盘)都有一个或多个文件系统。为了使文件系统可访问,它被分配到另一个文件系统中的特定目录。为了避免循环,根文件系统(包含根目录 /)不被任何其他文件系统包含——当您启动 Debian 时,您可以自动访问它。

一个文件系统中包含另一个文件系统的目录称为挂载点。挂载点是第一个文件系统(例如您的硬盘)上某个设备上的一个目录,但它包含第二个文件系统,可能在另一个设备上(例如软盘)。要访问文件系统,您必须将其挂载到某个挂载点。

例如,您可以将 CD 挂载到挂载点 /cdrom。这意味着,如果您查看 /cdrom 目录,您将看到 CD 的内容。/cdrom 目录本身实际上在您的硬盘上。在所有实际用途中,CD 的内容都成为根文件系统的一部分,并且在键入命令和使用程序时,文件的实际物理位置无关紧要。您可以在硬盘上创建一个名为 /cdrom 的目录,并在其中放置一些文件,一切行为都将完全相同。一旦您挂载了文件系统,就没有必要关注物理设备了。

但是,在挂载文件系统之前,或者在尚未拥有文件系统的磁盘上实际创建文件系统之前,有必要引用设备本身。所有设备都有名称,这些名称都位于 /dev 目录中。如果您现在键入 ls /dev,您将看到 Debian 系统上可能拥有的每个可能设备的长列表。

可能的设备包括

要挂载文件系统,我们希望告诉 Linux 将在特定设备上找到的任何文件系统与特定挂载点关联起来。在此过程中,我们可能必须告诉 Linux 要查找的文件系统类型。


4.6.2 示例:挂载 CD-ROM

作为一个简单的演示,我们将完成挂载 CD-ROM 的过程,例如您可能用于安装 Debian 的 CD-ROM。您需要成为 root 用户才能执行此操作,因此请小心;每当您是 root 用户时,您都有权搞砸整个系统,而不仅仅是您自己的文件。此外,这些命令假设您的驱动器中有一张 CD;您现在应该将一张 CD 放入驱动器中。

  1. su

    如果您还没有这样做,您需要以 root 用户身份登录,或者使用 su(超级用户)命令获得 root 权限。如果您使用 su,请在提示时输入 root 密码。

  1. ls /cdrom

    在开始之前,查看 /cdrom 目录中有哪些内容。如果您没有 /cdrom 目录,您可能必须使用 mkdir /cdrom 创建一个。

  1. mount

    仅输入 mount 而不带参数会列出当前已挂载的文件系统。

  1. mount -t iso9660 CD 设备 /cdrom

    对于此命令,您应该将 CD-ROM 设备的名称替换为上面命令行中的 CD 设备。如果您不确定,/dev/hdc 是一个不错的猜测。如果失败,请尝试不同的 IDE 设备:/dev/hda 等。您应该看到类似这样的消息

         mount: block device /dev/hdc is write-protected, mounting read-only
    

    -t 选项指定文件系统的类型,在本例中为 iso9660。大多数 CD 都是 iso9660。下一个参数是要挂载的设备的名称,最后一个参数是挂载点。mount 有许多其他参数;有关详细信息,请参阅手册页。(例如,您可以通过在命令行上指定只读来避免上述消息。)

    一旦 CD 被挂载,您可能会发现您的驱动器托盘不会打开。您必须先卸载 CD 才能将其取出。

  1. ls /cdrom

    确认 /cdrom 现在包含驱动器中 CD 上的任何内容。

  1. mount

    再次查看文件系统列表,注意您的 CD 驱动器现在已挂载。

  1. umount /cdrom

    这将卸载 CD。现在可以安全地从驱动器中取出 CD。请注意,命令是 umount,没有“n”,即使它用于卸文件系统。

  1. exit

    不要让自己以 root 用户身份登录。立即注销,以确保安全。


4.6.3 /etc/fstab:自动化挂载过程

/etc/fstab 文件(代表“文件系统表”)包含您经常挂载的文件系统的描述。然后可以使用较短的命令(例如 mount /cdrom)挂载这些文件系统。您还可以配置文件系统在系统启动时自动挂载。您可能希望在启动时挂载所有硬盘文件系统。

现在查看此文件,方法是键入 more /etc/fstab。它将有两个或多个在您安装系统时自动配置的条目。它可能看起来像这样

     # /etc/fstab: static file system information.
     #
     # <file system>     <mount point>   <type>  <options>   <dump >  <pass>
     /dev/hda1            /               ext2    defaults    0       1
     /dev/hda3            none            swap    sw          0       0
     proc                 /proc           proc    defaults    0       0
     
     /dev/hda5            /tmp            ext2    defaults    0       2
     /dev/hda6            /home           ext2    defaults    0       2
     /dev/hda7            /usr            ext2    defaults    0       2
     
     /dev/hdc             /cdrom          iso9660 ro          0       0
     /dev/fd0             /floppy         auto    noauto,sync 0       0

第一列列出了文件系统所在的设备。第二列列出了挂载点,第三列列出了文件系统类型。以 proc 开头的行是一个特殊的文件系统,在 proc 文件系统,第 4.8.3 节中进行了解释。请注意,交换分区(示例中的 /dev/hda3)没有挂载点,因此挂载点列包含 none

最后三列可能需要一些解释。

第五列供 dump 实用程序用于决定何时备份文件系统。FIXME:交叉引用到 dump

第六列供 fsck 用于决定在启动系统时以什么顺序检查文件系统。根文件系统在此字段中应为 1,不需要检查的文件系统(例如交换分区)应为 0,所有其他文件系统应为 2。FIXME:交叉引用到 fsck,另外,交换分区真的是文件系统吗?

第四列包含挂载文件系统时使用的一个或多个选项。这是一个简短的摘要(其中一些可能还不太明白——它们在这里供将来参考)

asyncsync

同步或异步地执行 I/O。同步 I/O 立即将更改写入文件,而异步 I/O 可能会将数据保存在缓冲区中并在以后写入,以提高效率。FIXME:交叉引用到关于同步的部分以获得完整解释。另外,应该建议何时选择其中一个。

rorw

以只读或读写方式挂载文件系统。如果您不需要对文件系统进行任何更改,最好以只读方式挂载它,这样您就不会意外地搞砸任何东西。此外,只读设备(例如 CD-ROM 驱动器和带有写保护标签的软盘)应以只读方式挂载。

autonoauto

当系统启动时,或者每当您键入 mount -a 时,mount 都会尝试挂载 /etc/fstab 中列出的所有文件系统。如果您不希望它自动挂载文件系统,则应使用 noauto 选项。对于可移动媒体(如软盘),使用 noauto 可能是个好主意,因为驱动器中可能没有磁盘。您需要在放入磁盘后手动挂载这些文件系统。

devnodev

在此文件系统上使用或忽略设备文件。如果您将另一个系统的根目录挂载到您的系统上,您可以使用 nodev ——您不希望您的系统尝试使用另一个系统上的设备。

usernouser

允许或禁止普通用户挂载文件系统。nouser 表示只有 root 用户可以挂载文件系统。这是正常的安排。您可以使用 user 选项在不必成为 root 用户的情况下访问软盘驱动器。

execnoexec

允许或不允许在此文件系统上执行文件。可能您不需要这些选项。

suidnosuid

允许或不允许 suid 位生效。可能您不需要这些选项。请参阅 使文件 suid/sgid,第 4.8.4.2 节

defaults

等效于:rwdevsuidexecautonouserasync。您可以指定 defaults,后跟其他选项以覆盖 defaults 的特定方面。


4.6.4 可移动磁盘(软盘、Zip 磁盘等)

如何使用它们——设置使您可以从用户空间很好地访问它们。

FIXME 我实际上不确定如何编写此部分。默认安装的 fstab 中有什么?我们应该执行手动 su root 操作,还是使用那些 EZ 软盘挂载软件包之一?也许使用组权限来做些什么?或者只是 fstab 中的 user 选项?


4.6.5 准备磁盘以供使用:格式化和创建文件系统


4.7 杂项主题


4.7.1 查看文件内容

有几种方法可以查看文件中的内容;每种方法都有不同的用途。

最简单的方法是使用 catcat 是 “concatenate”(连接)的缩写,它将文件的内容转储到屏幕上(实际上是标准输出,但这在另一章中)。如果您传递给它两个或多个文件,它会将它们按顺序转储到屏幕上,就像它们是一个大文件一样——即,它将它们连接起来。但是,如果您只传递给它一个文件,使用语法 cat myfile,它只会将该文件转储到屏幕上。尝试键入 cat /etc/profile,以查看该文件的内容。

cat 的问题在于它只是一个不受控制的转储,如果文件长度超过一个屏幕,那就不好了。您看不到文件的开头。解决方案是 more 命令,它一次显示一个文件的内容,一次一页。less 执行相同的操作,只是它具有更多功能(“less is more”)。它们的调用方式与 cat 相同:命令名称后跟文件名。您可能必须键入 q 才能退出 less,但是当您到达文件末尾时,more 将自行退出。

这些实用程序仅限于查看文本文件;要查看其他类型文件的原始形式,您可能必须使用专门的实用程序,例如 od(八进制转储)。要查看图像、文字处理器文档以及类似的东西,您需要使用适当的应用程序。还有许多更专门的方式来查看文本文件:例如,您可能只查看文件的末尾,或查看包含特定单词的行。这些更专业的工具将在后面的章节中介绍。FIXME:添加交叉引用


4.7.2 以 . 开头的隐藏文件

在 GNU 和 Unix 系统上,任何以句点(也称为点)开头的文件通常都是不可见的。您可以使用 ls-a 选项来查看它们。

  1. cd

    cd 到您的主目录。

  1. ls -a

    列出目录中的所有文件,即使是点文件。

您应该看到许多以 . 开头的文件,这些文件在您通常键入 ls 时看不到。您还会看到简单的 ...,分别代表当前目录及其父目录。如果您键入 ls -A(大写 A),您将看不到这两个。

点文件的原因是许多文件与您的日常工作无关——相反,它们用于配置您的应用程序和存储机器生成的数据。因此,它们被隐藏起来,以免使目录混乱。

点文件有点类似于 Macintosh 上的控制面板,或 DOS 下的 AUTOEXEC.BAT 文件。您可以暂时忽略它们——在本手册的后面部分,我们将解释如何使用其中一些文件来自定义您的个人 Debian 设置。

许多点文件在 /etc 目录中都有一个系统范围的对应物。例如,您的目录中可能有一个 .bash_profile。这对应于 /etc/profile/etc/profile 的更改会影响每个人,.bash_profile 的更改只会影响您。


4.7.3 在系统上查找文件

有两种不同的工具用于查找文件:findlocatefind 搜索实际文件的当前状态。locate 搜索系统每天早上 6:42 生成的索引(这是一个 cron 作业,在本手册的其他地方进行了解释)。locate 不会找到索引生成后创建的任何文件。但是,由于 locate 搜索索引,因此速度更快——就像使用书的索引而不是通读整本书一样。

为了比较两种查找文件的方式,假设您不记得 X 配置文件 XF86Config 位于何处。

  1. locate XF86Config

    这应该很快。您将获得一个文件名列表,其中包含 XF86Config,如下所示

         /etc/X11/XF86Config 
         /usr/X11R6/lib/X11/XF86Config
         /usr/X11R6/lib/X11/XF86Config.eg
         /usr/X11R6/man/man5/XF86Config.5x.gz
    
  1. find / -name XF86Config

    您会听到很多磁盘活动,这将花费更长的时间。如果您讨厌听到磁盘长时间的研磨声,您可能不想实际键入此命令。结果将如下所示

         /etc/X11/XF86Config 
         /usr/X11R6/lib/X11/XF86Config 
         find: /var/spool/cron/atjobs: Permission denied 
         find: /var/spool/cron/atspool: Permission denied
         find: /var/lib/xdm/authdir: Permission denied
    

    请注意,find 仅找到名称完全XF86Config 的文件,而不是任何包含该字母串的文件。此外,find 实际上尝试查看系统上的每个目录——包括一些您没有读取权限的目录。因此出现了“Permission denied”(权限被拒绝)消息。

    语法也不同。您必须指定要搜索的目录—— / ——而 locate 会自动选择根目录。并且您必须使用 -name 选项指定按名称搜索。您也可以使用许多其他条件(例如修改日期或所有者)搜索文件。

一般来说,find 是一个更强大的实用程序,而 locate 对于日常快速搜索来说更快。可能的搜索范围很广,需要很长时间才能解释清楚;有关更多详细信息,请键入 info find,这将调出关于 findlocate 的非常详尽的信息页面。


4.7.4 使用 gzip 压缩文件

通常,使文件更小会很好:例如,更快地下载它,或者使其占用更少的磁盘空间。执行此操作的程序称为 gzip (GNU Zip)。

  1. cd; cp /etc/profile ./mysamplefile

    切换到您的主目录,然后将任意选择的文件 (/etc/profile) 复制到当前目录,在此过程中将其重命名为 mysamplefile。这为我们提供了一个可以使用 gzip 玩耍的文件。

  1. ls -l

    列出当前目录的内容。注意 mysamplefile 的大小。

  1. gzip mysamplefile

    压缩 mysamplefile

  1. ls -l

    观察结果:mysamplefile 现在称为 mysamplefile.gz。它也小了很多。

  1. gunzip mysamplefile.gz; ls -l

    解压缩。观察 mysamplefile 已恢复到其原始状态。请注意,要解压缩,请使用 gunzip,而不是 gzip

  1. rm mysamplefile

    删除文件,因为它只是用来练习的。


4.7.5 将文件拆分为较小的部分

有时文件太大而无法放入磁盘,或者您不想在一个块中通过网络发送一个巨大的文件。您可以使用 split 实用程序拆分文件,并使用 cat (concatenate) 实用程序重新组装它。

  1. cd; cp /bin/bash myfile; ls -l myfile

    bash 可执行文件复制到主目录中名为 myfile 的文件中。观察 myfile 占用略多于 300,000 字节,或大约 300 千字节。

  1. split -b100k myfile myprefix

    将文件拆分为 100 千字节的部分,并将这些部分命名为 myprefixaamyprefixab 等。键入 ls -l 以查看结果。

    您可以在 -b 之后指定任何数字:选择一个有意义的数字。如果您省略 k,则它将被理解为字节而不是千字节。如果您使用 m 而不是 k,则它将被理解为兆字节。

  1. cat myprefix* > mynewfile

    连接所有文件并将它们写入 mynewfile*> 是您将在后面的章节中学习的技巧。

  1. rm myfile mynewfile myprefix*

    删除所有内容。


4.7.6 管理磁盘空间

可能您没有您可能想要的所有磁盘空间,并且您的磁盘最终会填满。本节将介绍如何找出有多少空间,并提供一些关于如何腾出更多空间的技巧。例如,按大小查找和排序文件、dfdu、战略性 gzip、删除不必要的软件包。


4.7.7 备份和大规模文件复制

如何使用 tar 复制大量文件或备份文件。Tarball。我正在考虑这应该是一个针对单用户系统的简短部分,更全面的系统管理员讨论放在另一本手册中。

备份命令(由 Oliver Elphick 贡献,本节有待清理和详细说明)

dump - 一次转储一个文件系统;它的命令选项假设您正在使用半英寸磁带(每个卷轴最多 45Mb),因此当使用 DAT(2Gb 或更多)时有点烦人。可能是定期备份的最佳选择。不能用于 NFS 挂载的文件系统。

cpio - `find [directories] -print | cpio -ovH newc -B >/dev/st0'

tar - `tar cvf /dev/st0 [directories]'

afio - 类似于 cpio;支持在归档之前预压缩文件。

tob - afio 的前端


4.7.8 猜测文件内容

Debian 配备了一个实用程序,可以为您猜测文件的内容。它并不总是正确的。但是,它相当准确,您可以使用它来探索您的系统。

  1. file /bin/cp

    您应该看到类似这样的内容

         /bin/cp: ELF 32-bit LSB executable, Intel 386, version 1, stripped
    

    跳过技术部分,这是一个用于 Intel 机器的可执行文件。

  1. file /etc/init.d/boot

    给出此响应

         /etc/init.d/boot: Bourne shell script text
    

    这意味着这是一个文本文件,其中包含 Bourne shell 脚本(请参阅 Shells 章节)。


4.7.9 使用 umask 定义默认权限


4.8 高级主题


4.8.1 文件的真实性质:硬链接和 inode

系统上的每个文件都由一个 inode(索引节点)表示:inode 包含有关文件的所有信息。但是,inode 不是直接可见的。相反,每个 inode 都通过一个或多个硬链接链接到文件系统中。硬链接包含文件名和 inode 号。inode 包含文件本身,即存储在磁盘上的信息的位置、其访问权限、文件类型等等。系统一旦有了 inode 号,就可以找到任何 inode。

单个文件可以有多个硬链接。这意味着多个文件名引用同一个文件(即,它们与同一个 inode 号关联)。但是,您不能跨文件系统创建硬链接:对特定文件(inode)的所有硬引用都必须在同一个文件系统上。(我猜这是因为每个文件系统都有自己的一组 inode,并且文件系统之间会出现重复的 inode 号。FIXME:真正找出原因)

由于给定 inode 的所有硬链接都引用同一个文件,因此您可以更改文件,通过一个名称引用它,然后通过另一个名称引用它来查看这些更改。试试这个

  1. cd; echo "hello" > firstlink

    cd 到您的主目录并创建一个名为 firstlink 的文件,其中包含单词 “hello”。您实际所做的是重定向 echo 的输出(echo 只是回显您给它的内容),将输出放置在 firstlink 中。有关完整解释,请参阅关于 shell 的章节。

  1. cat firstlink

    确认 firstlink 的内容。

  1. ln firstlink secondlink

    创建一个硬链接:secondlink 现在指向与 firstlink 相同的 inode。

  1. cat secondlink

    确认 secondlinkfirstlink 相同

  1. ls -l

    注意,为 firstlinksecondlink 列出的硬链接数是 2。

  1. echo "change" >> secondlink

    这是另一个 shell 重定向技巧——不要担心细节。我们已将单词 “change” 附加到 secondlink。使用 cat secondlink 确认这一点。

  1. cat firstlink

    firstlink 也附加了单词 “change”!这是因为 firstlinksecondlink 引用的是同一个文件。当您更改它时,您称呼它什么名称都无关紧要。

  1. chmod a+rwx firstlink

    更改 firstlink 的权限。执行 ls -l 以确认 secondlink 的权限也已更改。这意味着权限信息存储在 inode 中,而不是链接中。

  1. rm firstlink

    删除此链接。这是 rm 的一个微妙之处——它实际上删除的是链接,而不是文件。现在键入 ls -l 并注意 secondlink 仍然存在。另请注意,secondlink 的硬链接数已减少到 1。

  1. rm secondlink

    删除另一个链接。当没有更多链接指向文件时,Linux 会删除文件本身,即其 inode。

所有文件都以这种方式工作——即使是特殊类型的文件,例如设备(例如 /dev/hda)。

目录只是文件名和 inode 号的列表,即硬链接列表。当您创建硬链接时,您只是将名称-编号对添加到目录中。当您删除文件时,您只是从目录中删除硬链接。


4.8.2 文件类型

到目前为止,我们一直隐瞒的一个细节是,Unix 认为几乎所有东西都是文件。这包括目录和设备:它们只是特殊类型的文件。

您可能还记得,ls -l 显示的第一字母表示文件类型。对于普通文件,这将只是 -。其他可能性是


4.8.2.1 符号链接

符号链接(也称为 symlink 或软链接)是除硬链接之外的另一种链接。符号链接是一个文件(具有自己的 inode 和硬链接!),它“指向”任何已挂载文件系统上的硬链接。当您尝试读取符号链接的内容时,它会给出它指向的文件的内容,而不是符号链接本身的内容。由于目录、设备和其他符号链接都是文件类型,因此您可以将符号链接指向任何这些东西。

因此,硬链接是文件名和 inode 号。文件实际上是一个 inode:磁盘上的位置、文件类型、权限模式等。符号链接是一个 inode,其中包含硬链接的名称。

指向同一文件的所有硬链接都具有相同的状态。也就是说,一个是和另一个一样好的;如果您对一个执行任何操作,它与对任何其他操作执行该操作是相同的。这是因为硬链接都引用同一个 inode。另一方面,对符号链接的操作有时会影响符号链接自己的 inode(包含硬链接名称的 inode),有时会影响被指向的硬链接。

符号链接和硬链接之间存在许多重要的区别

试试这个

  1. cd; ln -s /tmp/me MyTmp

    cd 到您的主目录。ln-s 选项创建一个符号链接;在本例中,一个名为 MyTmp 的符号链接,它指向文件名 /tmp/me

  1. ls -l MyTmp

    输出应如下所示

         lrwxrwxrwx   1 havoc    havoc           7 Dec  6 12:50 MyTmp -> /tmp/me
    

    当然,您的日期和用户/组名称会有所不同。请注意,文件类型为 l,表示这是一个符号链接。另请注意权限——符号链接始终具有这些权限。如果您尝试 chmod 符号链接,您实际上会更改被指向文件的权限。

  1. chmod 700 MyTmp

    您应该会收到 “No such file or directory”(没有这样的文件或目录)错误,因为文件 /tmp/me 不存在。请注意,无论如何您都可以创建一个指向它的符号链接。

  1. mkdir /tmp/me

    创建目录 /tmp/me

  1. chmod 700 MyTmp

    现在应该可以工作了。

  1. touch MyTmp/myfile

    MyTmp 中创建一个文件。

  1. ls /tmp/me

    该文件实际上是在 /tmp/me 中创建的。

  1. rm MyTmp

    删除符号链接。请注意,这会删除链接,而不是它指向的内容。因此,您使用 rm 而不是 rmdir

  1. rm /tmp/me/myfile; rmdir /tmp/me

    清理善后。


4.8.2.2 设备文件

设备文件指的是系统上的物理或虚拟设备,例如您的硬盘、显卡、屏幕或键盘。虚拟设备的一个示例是由 /dev/console 表示的控制台。

设备有两种类型:字符设备可以一次访问一个字符,也就是说,可以写入或从设备读取的最小数据单位是一个字符(字节)。

块设备必须以称为块的较大单位访问,块包含多个字符。您的硬盘是块设备。

您可以像从其他类型的文件一样读取和写入设备文件,尽管该文件很可能包含一些奇怪的、人类无法理解的乱码。将随机数据写入这些文件可能是一个坏主意。但有时它很有用:例如,您可以将 postscript 文件转储到打印机设备 /dev/lp0 中,或者将调制解调器命令发送到相应串行端口的设备文件。


4.8.2.2.1 如何创建设备文件。

MAKEDEV


4.8.2.2.2 /dev/null

/dev/null 是一个特殊的设备文件,它会丢弃您写入其中的任何内容。如果您不想要某些东西,请将其丢入 /dev/null。它本质上是一个无底洞。如果您读取 /dev/null,您将立即获得文件结束 (EOF) 字符。/dev/zero 与之类似,只是如果您从中读取,您会得到 \0 字符(与数字零不同)。


4.8.2.3 命名管道 (FIFO)

命名管道是一个充当管道的文件。您将某些东西放入文件中,它会从另一端出来。因此它被称为 FIFO,即先进先出 (First-In-First-Out):您放入管道的第一件事是第一个从另一端出来的东西。

注意:在您阅读有关进程和使用 shell 的内容之前,以下解释可能不太容易理解。

如果你向命名管道写入数据,写入管道的进程不会终止,直到写入的信息被从管道中读取。如果你从命名管道读取数据,读取进程会等待直到有数据可读才会终止。管道的大小始终为零 - 它不存储数据,它只是像 shell | 一样连接两个进程。然而,由于这个管道有一个名称,这两个进程不必在同一命令行上,甚至不必由同一用户运行。

你可以通过执行以下操作来尝试它

  1. cd; mkfifo mypipe

    创建管道。

  1. echo "hello" > mypipe &

    将一个进程放入后台,该进程尝试向管道写入 “hello”。请注意,该进程不会从后台返回。尝试直接使用 echo "hello" 而不进行重定向,以查看区别。

  1. cat mypipe

    此时,echo 进程应该返回,并且 cat 进程将打印 hello

  1. rm mypipe

    你可以像删除任何其他文件一样删除管道。


4.8.2.4 套接字

套接字类似于管道,只是它们通过网络工作。这是你的计算机进行网络连接的方式,也是互联网的基础:你可能听说过 “WinSock”,它是 Windows 的套接字。

我们不会进一步深入探讨这些,因为除非你正在编程,否则你可能不会有机会使用它们。但是,如果你在你的计算机上看到一个标记为类型 s 的文件,你就知道它是什么了。


4.8.3 proc 文件系统

Linux 内核提供了一个特殊的文件系统,在 Debian 系统上挂载在 /proc 下。这是一个 “伪文件系统” - 它实际上并不存在于你的任何设备上。

proc 文件系统包含关于系统和正在运行的进程的信息。/proc 中的一些 “文件” 对人类来说是相当容易理解的(尝试输入 cat /proc/meminfo),而另一些则是神秘的数字集合。通常,系统实用程序使用这些来收集信息,并以更易于理解的方式呈现给你。

人们经常在注意到一个特定的文件时感到恐慌 - /proc/kcore - 它通常非常大。这(或多或少)是你计算机内存内容的副本。它用于调试内核。它实际上并不存在于任何地方,所以不必担心它的大小。

如果你想了解关于 /proc 中所有内容的信息,请输入 man 5 proc


4.8.4 文件权限的高级方面


4.8.4.1 使用数字参数与 chmod

在本章前面,我们简要提到你可以使用数字设置文件权限。数字表示法被称为绝对模式,与符号表示法(例如 u+rx`) 相反,符号表示法通常被称为相对模式。这是因为数字指定要设置的确切模式,而符号仅指定要进行的更改(例如,“添加用户读取和执行权限”)。

数字模式是一系列四个八进制数字或十二个二进制数字。每个八进制(以 8 为基数)数字代表三个二进制数字:一个八进制数字和三个二进制数字是表示十进制数字 0 到 7 的两种方式。

推导出特定模式非常简单。你只需将要组合的模式相加,或减去你不想要的模式。例如,用户权限,仅启用读取权限,在二进制中将是 100。仅具有写入权限的用户权限在二进制中将是 010。同时启用读取和写入权限的用户权限将是 100 + 010 = 110。或者,你可以用八进制表示:4 + 2 = 6

对于完整模式,只需将此表中的数字相加

     0001        others, execute
     0002        others, write
     0004        others, read
     0010        group, execute
     0020        group, write
     0040        group, read
     0100        user, execute
     0200        user, write
     0400        user, read
     1000        sticky bit
     2000        set group id
     4000        set user id

要使用该表,首先确定要设置的权限。然后将这些权限的数字相加。总和就是你的模式。例如,要获得模式 0755

       0001   o=x
       0004   o=r
       0010   g=x 
       0040   g=r
       0100   u=x
       0200   u=w
     + 0400   u=r
     -------
       0755  u=rwx go=rw

实际上,你会将此模式简称为 755,而没有前导的 0,因为 chmod 会自动在模式的开头添加零 - 因此,仅仅 7 就变成了模式 0007

要将文件设置为 755,你需要输入 chmod 755 myfile

755 是目录非常常见的模式,因为它允许任何人使用该目录,但只有所有者才能在该目录中创建和删除文件。644 是文件的类似模式,它也很常见。它允许任何人使用该文件,但只有所有者可以更改它。对于可执行文件,755 是一种常见的模式;这只是 644 加上执行权限 (644 + 111 = 755)。


4.8.4.2 设置文件的 suid/sgid


4.8.4.3 设置粘滞位


4.8.5 其他尚未涵盖但应该涵盖的概念

fsck, mke2fs, dd, fdisk, 等等。

文件属于哪个软件包?

MSDOS 与 Mac 与 Unix 文本文件

sync

chattr


[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 下一页 ]


Debian 用户参考手册 (过时文档)

版本 0.1,2009 年 12 月 29 日

Ardo van Rangelrooij ardo@debian.org
Jason D. Waterman jwaterma@bbn.com
Thalia L. Hooker th@visi.com
Havoc Pennington rhpennin@midway.uchicago.edu
Oliver Elphick - 维护者 Oliver.Elphick@lfix.co.uk
Bruce Evry bruce@fantek.org
Karl-Heinz Zimmer khz@snafu.de
Andreas Franzen anfra@debian.org