next up previous contents
下一主题: 5 X Window 系统 上一层: Linux 安装和入门 前一主题: 3 Linux 教程

4 系统管理

 

 

本章涵盖了关于 Linux 系统管理的最重要知识,其详细程度足以让您舒适地开始使用系统。为了保持本章的可管理性,它仅涵盖了基础知识,并省略了许多重要的细节。《Linux 系统管理员指南》,作者 Lars Wirzenius(见附录 A)提供了关于系统管理主题的更多详细信息。它将帮助您更好地理解事物是如何运作和联系在一起的。至少,略读一下 SAG,以便您了解它包含什么以及您可以从中获得什么样的帮助。

4.1root账户。

Linux 区分不同的用户。他们之间以及他们对系统可以做的事情是受到管制的。文件权限的安排使得普通用户无法删除或修改类似目录中的文件/bin/usr/bin。大多数用户使用适当的权限保护自己的文件,以便其他用户无法访问或修改它们。(没有人希望别人能够阅读自己的情书。)每个用户都被赋予一个账户,其中包括用户名和主目录。此外,还有特殊的、系统定义的账户,它们具有特殊的权限。其中最重要的是 root 账户,系统管理员使用它。按照惯例,系统管理员是用户,root.

对 没有限制。root他或她可以读取、修改或删除系统上的任何文件,更改任何文件的权限和所有权,以及运行特殊程序,例如那些对硬盘进行分区或创建文件系统的程序。基本思想是,负责维护系统的人员以 身份登录root以执行普通用户无法执行的任务。因为root可以做任何事情,所以很容易犯下具有灾难性后果的错误。

如果普通用户不小心尝试删除 中的所有文件/etc,系统将不允许他或她这样做。但是,如果root尝试做同样的事情,系统根本不会抱怨。当使用 时,很容易破坏 Linux 系统root。防止事故的最佳方法是

将 的root账户想象成一顶特殊的、神奇的帽子,它赋予您强大的力量,您可以通过挥舞双手来摧毁整个城市。对于您用手做的事情要小心一点,这是一个好主意。因为很容易以破坏性的方式挥舞双手,所以当不需要魔法帽时,即使感觉很棒,也不要戴上它。

我们将从第 gif页开始更详细地讨论系统管理员的职责。

4.2 引导系统。

  有些人使用包含 Linux 内核副本的软盘引导 Linux。此内核将 Linux 根分区编码到其中,因此它知道在哪里查找根文件系统。例如,这是 Slackware 在安装期间创建的软盘类型。

要创建您自己的启动软盘,请找到您硬盘上的内核镜像。它应该在文件中/vmlinuz,或/vmlinux。在某些安装中,/vmlinuz是实际内核的软链接,因此您可能需要通过跟踪链接来找到内核。

一旦您知道内核在哪里,请使用 将内核镜像的根设备设置为您的 Linux 根分区的名称rdev命令。命令的格式是


tscreen4572
其中 kernel-name 是内核镜像的名称,root-device 是 Linux 根分区的名称。例如,要将内核中的根设备设置为/vmlinuz/dev/hda2,请使用命令
tscreen4580
rdev可以在内核中设置其他选项,例如在启动时使用的默认 SVGA 模式。命令
tscreen4583
在屏幕上打印帮助消息。设置根设备后,只需将内核镜像复制到软盘即可。但是,在将数据复制到任何软盘之前,最好使用 MS-DOSFORMAT.COM或 Linuxfdformat程序来格式化软盘。这会布置适合软盘容量的扇区和磁道信息。

软盘格式及其设备驱动程序文件将在第 gif页开始进一步讨论。

如前所述,设备驱动程序文件位于/dev目录中。要将文件 中的内核复制/etc/Image到 中的软盘/dev/fd0,请使用命令
tscreen4591
这个软盘现在应该可以引导 Linux 了。

4.2.1 使用 LILO。

 

LILO 是一个单独的引导加载程序,它驻留在您的硬盘上。当系统从硬盘驱动器启动时,它会被执行,并且可以自动从存储在那里的内核镜像启动 Linux。

LILO 也可以用作多个操作系统的第一阶段引导加载程序,这允许您选择要引导的操作系统,例如 Linux 或 MS-DOS。使用 LILO,除非您在启动序列期间按下 Shift 键,或者在prompt指令在lilo.conf文件中给出,否则默认操作系统将被引导。在任何一种情况下,都会为您提供一个启动提示符,您可以在其中键入要引导的操作系统的名称(例如 ``linux'' 或 ``msdos'')。如果您在启动提示符下按 Tab 键,将提供系统知道的操作系统列表。

安装 LILO 的简单方法是编辑配置文件/etc/lilo.conf。命令
tscreen4602
将修改后的lilo.conf配置重写到硬盘的引导扇区,并且每次修改 时都必须运行lilo.conf.

LILO 配置文件为每个您想要引导的操作系统包含一个“节”。演示这一点的最佳方法是使用示例。lilo.conf下面的文件适用于根分区在/dev/hda1上的 Linux 系统,以及 MS-DOS 分区在/dev/hda2.


tscreen4609

第一个操作系统节是 LILO 要引导的默认操作系统。另请注意,如果您使用上面的 ``root ='' 行,则没有理由使用rdev来设置内核镜像中的根分区。LILO 在启动时设置它。

Microsoft Windows '95 安装程序将覆盖 LILO 引导管理器。如果您要在安装 LILO 后在系统上安装 Windows '95,请务必先创建启动盘(请参阅第 4.2节)。使用启动盘,您可以引导 Linux 并在 Windows '95 安装完成后重新安装 LILO。这只需以 root 身份键入命令/sbin/lilo即可完成,如上面的步骤所示。可以使用与引导 MS-DOS 分区相同的lilo.conf条目配置 Windows '95 分区以使用 LILO 引导。

《Linux FAQ》(见附录 A)提供了有关 LILO 的更多信息,包括如何使用 LILO 与 OS/2 Boot Manager 一起引导。

4.3 关闭系统。

 

关闭 Linux 系统可能很棘手。您永远不应该只是关闭电源或按下复位开关。内核会在内存缓冲区中跟踪磁盘读/写数据。如果您在没有给内核机会将其缓冲区写入磁盘的情况下重新启动系统,则可能会损坏文件系统。

在关机期间也采取了其他预防措施。所有进程都会收到一个信号,允许它们优雅地终止(例如,首先写入和关闭所有文件)。为了安全起见,文件系统被卸载。如果您愿意,系统还可以提醒用户系统即将关闭,并给他们一个注销的机会。

最简单的关机方法是使用shutdown命令。命令的格式是
tscreen4623
命令。time 参数是关闭系统的时间(格式为 hh:mm:ss),warning-message 是在关机前显示在所有用户终端上的消息。或者,您可以将 time 指定为 ``now'',以立即关机。-r选项可以给定给shutdown在关机后重新启动系统。

例如,要在晚上 8:00 关闭并重新启动系统,请使用命令
tscreen4634

命令halt可用于强制立即关机,而无需任何警告消息或宽限期。halt如果您是唯一使用系统的人并且想要关闭并关闭机器,则 非常有用。

在您看到消息之前,不要关闭电源或重新启动系统
tscreen4638
使用 命令“干净地”关闭系统非常重要shutdownhalt命令。在某些系统上,按下 Ctrl-Alt-Del 将被捕获并导致shutdown。在其他系统上,使用“瓦肯捏神经”将立即重新启动系统并导致灾难。

4.3.1/etc/inittab文件。

 

在 Linux 启动并且内核挂载根文件系统后,系统执行的第一个程序是init。此程序负责启动系统启动脚本,并将系统操作状态从初始启动状态修改为标准的多用户状态。init还为系统上的所有 tty 设备生成loginshell,并指定其他启动和关机程序。

启动后,init在后台静默运行,监控并在必要时更改系统的运行状态。 程序必须处理许多细节init。这些任务在/etc/inittab文件中定义。下面显示了一个示例/etc/inittab文件。

不正确地修改/etc/inittab文件可能会阻止您登录到您的系统。至少,在更改/etc/inittab文件时,请手头保留原始的、正确的文件副本,以及启动/根紧急软盘,以防您犯错。


tscreen4659

在启动时,此/etc/inittab启动六个虚拟控制台,一个login提示符在连接到/dev/ttyS0的调制解调器上,以及一个login提示符在通过 RS-232 串行线连接到/dev/ttyS1.

的字符终端上。简而言之,init逐步完成一系列运行级别,这些级别对应于系统的各种操作状态。运行级别 1 在系统启动后立即进入,运行级别 2 和 3 是系统的正常多用户操作模式,运行级别 4 通过 X 显示管理器xdm启动 X Window 系统,运行级别 6 重新启动系统。与每个命令关联的运行级别是/etc/inittab文件。

每一行中的第二个项目。
tscreen4670
将在串行终端上为运行级别 1-5 维护一个login提示符。“s2”在第一个冒号之前是由 内部使用的符号标识符init. respawninit关键字,通常与串行终端结合使用。如果在一段时间后,agetty程序(它生成终端的login提示符)在终端上没有收到输入,则程序超时并终止执行。“respawnrespawninit”告诉agetty重新执行login,确保终端始终有一个agetty提示符,无论是否有人登录。其余参数直接传递给login并指示它生成shell、串行线的数据速率、串行设备以及终端类型,如 中定义的那样/etc/termcap.

/etc/terminfo程序处理与系统上的终端 I/O 相关的许多细节。有几个不同的版本通常在 Linux 系统上使用。它们包括mgetty, psgetty,或简单地,getty.

/etc/inittab行的情况下
tscreen4692
允许用户通过连接到串行线 的调制解调器登录/dev/ttyS0,参数 ``/etc/terminfoparameters ``-mt60'' 允许系统逐步通过拨入系统的呼叫者可能使用的所有调制解调器速度,并在 60 秒后没有连接时关闭/etc/terminfo。这称为协商连接。支持的调制解调器速度也在命令行上以及要使用的串行线和终端类型中枚举。当然,两个调制解调器都必须支持最终由两台机器协商的数据速率。

本节中省略了许多重要的细节。 维护的任务/etc/inittab本身就可以写成一本书。有关更多信息,请参阅initagetty程序的手册页,以及 Linux 文档项目的 Serial HOWTO,可从附录 A 中列出的来源获得,这些都是起点。

4.4 管理文件系统。

 

系统管理员的另一项任务是维护文件系统。这项工作的大部分内容是定期检查文件系统是否损坏或文件损坏。许多 Linux 系统还在启动时自动检查文件系统。

4.4.1 挂载文件系统。

在文件系统可供系统访问之前,必须将其挂载到目录上。例如,如果您在软盘上有一个文件系统,您必须将其挂载在类似 的目录下/mnt才能访问软盘上的文件(请参阅第 gif页)。挂载文件系统后,文件系统中的所有文件都会出现在该目录中。卸载文件系统后,该目录(在本例中为/mnt)将为空。

硬盘驱动器上的文件系统也是如此。系统会在启动时自动挂载硬盘驱动器上的文件系统。所谓的“根文件系统”挂载在目录/上。如果您为/usr有一个单独的文件系统,则将其挂载在/usr上。如果您只有一个根文件系统,则所有文件(包括 中的文件/usr)都存在于该文件系统上。

mountumount


tscreen4721
由文件自动执行/etc/rc在启动时,或由文件/etc/rc.d/boot在某些 Linux 系统上(请参阅第 gif页)。文件/etc/fstab提供有关文件系统和挂载点的信息。示例/etc/fstab文件是

 
tscreen4729

第一个字段device是要挂载的分区的名称。第二个字段是挂载点。第三个字段是文件系统类型,例如ext2(对于 ext2fs)或minix(对于 Minix 文件系统)。表 4.1 列出了可以在 Linux 下挂载的各种文件系统类型。gif 并非所有这些文件系统类型都可以在您的系统上使用,因为内核必须编译了对它们的支持。有关构建内核的信息,请参阅第 gif页。

  table4737
表 4.1: Linux 文件系统类型

的最后一个字段fstab文件是mountoptions。这通常设置为.

defaults/etc/fstab交换分区包含在none,类型为swap。命令swapon -a,从/etc/rc/etc/init.d/boot执行,用于在 中列出的所有交换设备上启用交换/etc/fstab.

/etc/fstab文件包含 的一个特殊条目/proc文件系统。如第 gif页所述,/proc文件系统用于存储有关系统进程、可用内存等信息。如果/proc未挂载,则像 这样的命令ps将无法工作。

mount命令只能由 root 用户使用。这确保了系统的安全性。您不希望普通用户随意挂载和卸载文件系统。有几个软件包可用于允许非 root 用户挂载和卸载文件系统,特别是软盘,而不会危及系统安全。

mount -av命令实际上挂载了除根文件系统之外的所有文件系统(在上面的表中,/dev/hda2)。根文件系统在启动时由内核自动挂载。

您可以手动挂载文件系统,而不是使用mount -av。命令
tscreen4782
相当于挂载 的条目的文件系统/dev/hda3在示例/etc/fstab文件中,如上所示。

4.4.2 设备驱动程序名称。

  除了 中列出的分区名称之外/etc/fstab文件,Linux 识别许多固定和可移动介质设备。它们按类型、接口和安装顺序分类。例如,您系统上的第一个硬盘驱动器(如果是 IDE 或较旧的 MFM 硬盘驱动器)由设备驱动程序控制,该驱动程序由/dev/hda指向。硬盘驱动器的第一个分区是/dev/hda1/dev/hda1/dev/hda2,第二个分区是/dev/hda3/dev/hda2,第三个分区是/dev/hda3,等等。第二个 IDE 驱动器的第一个分区通常是/dev/hdb1

,第二个分区是
/dev/hdb2

,等等。表 4.2 给出了用于 Intel 架构、ISA 和 PCI 总线机器的最常用 IDE 驱动器的命名方案。

  table4796表 4.2: IDE 设备驱动程序名称。使用扩展 IDE/ATAPI 驱动器接口的 CD-ROM 和磁带驱动器也使用这些设备名称。但是,许多机器,包括高端个人计算机工作站和基于 Digital Equipment Corporation 的 Alpha 处理器的机器,都使用小型计算机系统接口 (SCSI)。由于 SCSI 寻址的更大灵活性,SCSI 设备的命名约定与上面给出的有所不同。系统上的第一个 SCSI 硬盘驱动器是/dev/sda

,第二个 SCSI 驱动器是
/dev/sdb

,等等。表 4.3 中给出了常用 SCSI 设备的列表。

  table4812

表 4.3: SCSI 设备驱动程序

请注意,SCSI CD-ROM 和磁带驱动器的命名与 SCSI 硬盘驱动器不同。可移动 SCSI 介质(如 Iomega Zip 驱动器)遵循不可移动 SCSI 驱动器的命名约定。从第 gif页开始描述了使用 Zip 驱动器进行备份。

 

流式磁带驱动器,例如那些读取和写入 QIC-02、QIC-40 和 QIC-80 格式磁带的驱动器,有自己的一组设备名称,这些名称在第 gif页中进行了描述。/etc/rc/etc/init.d/boot).

软盘驱动器使用另一种命名方案,该方案在第 gif页中进行了描述。4.4.3 检查文件系统。通常最好不时检查您的文件系统是否存在损坏或损坏的文件。某些系统会在启动时自动检查其文件系统(使用
tscreen4835
中的适当命令)。用于检查文件系统的命令取决于文件系统的类型。对于 ext2fs 文件系统(最常用的类型),此命令是/dev/hda2e2fsck

。例如,命令4.4.3 检查文件系统。检查 上的 ext2fs 文件系统
tscreen4839
并自动纠正任何错误。/dev/hda2通常最好在检查文件系统之前卸载它,如果要对文件系统执行任何修复,这是必要的。命令卸载 上的文件系统

。唯一的例外是您无法卸载根文件系统。为了在卸载根文件系统时检查它,您应该使用维护启动/根软盘(请参阅第 gif页)。如果它包含的任何文件“繁忙”——即正在被运行的进程使用,您也无法卸载文件系统。例如,如果任何用户的当前工作目录在该文件系统上,则无法卸载文件系统。您将收到“4.4.3 检查文件系统。Device busy”错误消息。其他文件系统类型使用不同形式的命令,例如efsck

xfsck。在某些系统上,您可以简单地使用命令fsck4.4.3 检查文件系统。,它会自动确定文件系统类型并执行相应的命令。

/proc如果 e2fsck 报告它对已挂载的文件系统执行了修复,您必须立即重新启动系统。您应该给出命令/procshutdown -r

以执行重新启动。这允许系统在

 

修改后重新同步有关文件系统的信息。

文件系统永远不需要以这种方式检查。
tscreen4858
是一个内存文件系统,由内核直接管理。4.5 使用交换文件。您可以使用交换文件而不是为交换空间保留单独的分区。但是,您需要安装 Linux 并让一切运行起来,然后才能创建交换文件。安装 Linux 后,您可以使用以下命令创建交换文件。下面的命令创建一个大小为 8208 块(约 8 Mb)的交换文件。此命令创建交换文件
tscreen4862
/swap
tscreen4864
。“4.5 使用交换文件。。命令count=”参数是交换文件的大小,以块为单位。

此命令初始化交换文件。同样,将交换文件的名称和大小替换为适当的值。

现在系统正在文件上进行交换

sync

命令确保文件已写入磁盘。使用交换文件的一个主要缺点是,对交换文件的所有访问都通过文件系统完成。这意味着组成交换文件的块可能不是连续的。性能可能不如交换分区,在交换分区中,块始终是连续的,并且 I/O 请求直接发送到设备。大型交换文件的另一个缺点是,如果出现问题,文件系统更有可能损坏。保持常规文件系统和交换分区分离可以防止这种情况发生。
tscreen4869
如果您需要临时使用更多交换空间,交换文件可能很有用。如果您正在编译一个大型程序,并且想稍微加快速度,您可以创建一个临时交换文件并将其与常规交换空间一起使用。
tscreen4871

要删除交换文件,请首先使用

swapoff

,如

然后可以删除该文件。root每个交换文件或分区可能最大为 16 兆字节,但您最多可以在系统上使用 8 个交换文件或分区。

4.6 管理用户。

  

即使您是系统上的唯一用户,也必须了解 Linux 下用户管理的各个方面。您至少应该拥有一个自己的帐户(除了
dispitems4880

)来完成您的大部分工作。每个用户都应该有自己的帐户。让几个人共享同一个帐户通常不是一个好主意。安全是一个问题,并且帐户唯一地标识系统中的用户。您必须能够跟踪谁在做什么。4.6.1 用户管理概念。
tscreen4901
系统跟踪有关每个用户的以下信息
tscreen4903
此信息存储在文件/etc/passwd中。文件中的每一行都具有格式

一个例子可能是在此示例中,第一个字段 ``kiwi

'' 是用户名。下一个字段 ``Xv8Q981g71oKK每个用户都应该有自己的帐户。让几个人共享同一个帐户通常不是一个好主意。安全是一个问题,并且帐户唯一地标识系统中的用户。您必须能够跟踪谁在做什么。'' 是加密的密码。密码不会以人类可读的格式存储在系统上。密码使用自身作为密钥进行加密。换句话说,必须知道密码才能解密它。这种加密形式是相当安全的。下一个字段 ``某些系统使用“影子密码”,其中密码信息存储在文件

/etc/shadow102中。因为100是世界可读的,提供了一定程度的额外安全性,因为它的访问权限受到更多限制。影子密码还提供其他功能,例如密码过期。第三个字段 ``

0'' 是 UID。对于每个用户,这必须是唯一的。第四个字段 ``100'' 是 GID。此用户属于编号为 100 的组。组信息存储在文件/etc/group中。有关更多信息,请参阅第 4.6.5节。第五个字段是用户的全名 ``

Laura Poole

''。最后两个字段分别是用户的主目录 (每个用户都应该有自己的帐户。让几个人共享同一个帐户通常不是一个好主意。安全是一个问题,并且帐户唯一地标识系统中的用户。您必须能够跟踪谁在做什么。/home/kiwi

) 和登录 shell (/bin/bash)。不要求用户的主目录与用户名同名。它只是有助于标识目录。4.6.2 添加用户。

)。不要求用户的主目录与用户名同名。它只是有助于标识目录。添加用户时,必须采取几个步骤。首先,在中为用户提供一个条目,其中包含唯一的用户名和 UID。必须指定 GID、全名和其他信息。必须创建用户的主目录,并设置目录的权限,以便用户拥有该目录。Shell 初始化文件必须安装在主目录中,并且必须在系统范围内配置其他文件(例如,用于用户传入电子邮件的假脱机目录)。手动添加用户并不困难,但是当您运行具有许多用户的系统时,很容易忘记某些事情。添加用户的最简单方法是使用交互式程序,该程序会自动更新所有系统文件。此程序的名称是

useradd中为用户提供一个条目,其中包含唯一的用户名和 UID。必须指定 GID、全名和其他信息。必须创建用户的主目录,并设置目录的权限,以便用户拥有该目录。Shell 初始化文件必须安装在主目录中,并且必须在系统范围内配置其他文件(例如,用于用户传入电子邮件的假脱机目录)。文件。
tscreen4924

)。不要求用户的主目录与用户名同名。它只是有助于标识目录。adduser中为用户提供一个条目,其中包含唯一的用户名和 UID。必须指定 GID、全名和其他信息。必须创建用户的主目录,并设置目录的权限,以便用户拥有该目录。Shell 初始化文件必须安装在主目录中,并且必须在系统范围内配置其他文件(例如,用于用户传入电子邮件的假脱机目录)。,具体取决于安装的软件。命令从文件/etc/adduser.conf获取其信息,该文件定义了所有新用户的标准默认配置。一个典型的除了定义, 命令使用的预设变量之外,,或.bashrc还指定了每个用户的默认系统配置文件的位置。在此示例中,它们位于目录)。不要求用户的主目录与用户名同名。它只是有助于标识目录。/etc/skel

中,如

SKEL=行所定义的那样。放置在此目录中的文件,例如系统范围的默认文件.profile

.tcshrc*文件,将由每个用户都应该有自己的帐户。让几个人共享同一个帐户通常不是一个好主意。安全是一个问题,并且帐户唯一地标识系统中的用户。您必须能够跟踪谁在做什么。命令自动安装在新用户的主目录中。/etc/passwd每个用户都应该有自己的帐户。让几个人共享同一个帐户通常不是一个好主意。安全是一个问题,并且帐户唯一地标识系统中的用户。您必须能够跟踪谁在做什么。4.6.3 删除用户。
tscreen4941
可以使用命令/etc/passwduserdel

deluser每个用户都应该有自己的帐户。让几个人共享同一个帐户通常不是一个好主意。安全是一个问题,并且帐户唯一地标识系统中的用户。您必须能够跟踪谁在做什么。删除用户,具体取决于系统上安装的软件。如果您想暂时“禁用”用户登录系统,而不删除他或她的帐户,只需在。命令
tscreen4947
中的密码字段前添加星号 (``*'')。。例如,将root条目更改为

阻止登录。4.6.4 设置用户属性。创建用户后,您可能需要更改该用户的属性,例如主目录或密码。执行此操作的最简单方法是直接在

中更改值。要设置用户的密码,请使用

 

passwd

。例如,命令将更改, larry的密码。只有可以以这种方式更改其他用户的密码。但是,用户可以更改自己的密码。在某些系统上,命令chfnchsh, 允许用户设置自己的全名和登录 shell 属性。如果没有,系统管理员必须为他们更改这些属性。的密码。只有4.6.5 组。.

如上所述,每个用户属于一个或多个组。组关系的唯一真正重要性与文件权限有关。正如您从第 3.10节回忆的那样,每个文件都有一个“组所有权”和一组组权限,这些权限定义了该组中的用户如何访问该文件。提供了一定程度的额外安全性,因为它的访问权限受到更多限制。影子密码还提供其他功能,例如密码过期。有几个系统定义的组,例如
tscreen4964
bin
tscreen4966
rootmailrootchfnsys。用户不应属于这些组中的任何一个;它们用于系统文件权限。相反,用户应该属于像 这样的个人组*'')。users每个用户都应该有自己的帐户。让几个人共享同一个帐户通常不是一个好主意。安全是一个问题,并且帐户唯一地标识系统中的用户。您必须能够跟踪谁在做什么。。您还可以为用户维护多个组,例如提供了一定程度的额外安全性,因为它的访问权限受到更多限制。影子密码还提供其他功能,例如密码过期。。命令student

stafffaculty文件/etc/group/etc/passwd包含有关组的信息。每一行的格式是

一些示例组可能是提供了一定程度的额外安全性,因为它的访问权限受到更多限制。影子密码还提供其他功能,例如密码过期。第一个组rootcommand),将密码字段设置为 ``*''.

命令addgroupgroupadd可以用来向你的系统添加组。通常,更简单的方法是直接在提供了一定程度的额外安全性,因为它的访问权限受到更多限制。影子密码还提供其他功能,例如密码过期。中添加条目,因为添加组不需要进行其他配置。要删除一个组,只需删除其在提供了一定程度的额外安全性,因为它的访问权限受到更多限制。影子密码还提供其他功能,例如密码过期。.

4.6.6 系统管理职责。

由于系统管理员拥有如此大的权力和责任,当一些用户首次有机会以root身份登录 Linux 系统或其他地方时,往往会滥用root的特权。我认识一些所谓的“系统管理员”,他们阅读其他用户的邮件,在没有警告的情况下删除用户的文件,并且通常像孩子一样表现,因为被赋予了如此强大的“玩具”。

由于管理员在系统上拥有如此大的权力,因此需要一定的成熟度和自制力才能按照预期使用root帐户——为了运行系统。在系统管理员和系统用户之间存在一种不成文的荣誉准则。如果你的系统管理员正在阅读你的电子邮件或查看你的文件,你会有什么感受?对于分时计算机系统上的电子隐私,目前还没有强有力的法律先例。在 UNIX 系统上,root用户有能力放弃系统上的所有安全和隐私机制。系统管理员与他的用户建立信任关系非常重要。我再怎么强调也不为过。

4.6.7 如何应对用户。

系统管理员在处理滥用用户时可以采取两种立场:他们可以是多疑的,也可以是信任的。多疑的系统管理员通常造成的危害比他或她预防的要多。我最喜欢的一句话是:“永远不要将可以归因于愚蠢的事情归因于恶意。” 换句话说,大多数用户没有能力或知识对系统造成真正的危害。百分之九十的情况下,当用户在系统上制造麻烦时(例如,通过用大文件填满用户分区,或运行大型程序的多个实例),用户只是没有意识到他或她正在制造问题。我曾经批评过一些制造了很多麻烦的用户,但他们只是出于无知而行动——而不是恶意。

当你处理可能造成麻烦的用户时,不要指责。举证责任在你身上;也就是说,“无罪推定”的原则仍然适用。最好的方法是简单地与用户交谈,并询问他或她有关麻烦的事情,而不是对抗。你最不希望的就是站在用户的对立面。这将引起很多关于你——系统管理员——是否正确运行系统的怀疑。如果用户认为你不信任或不喜欢他们,他们可能会指责你删除文件或侵犯系统隐私。这肯定不是你想处境的局面。

如果你发现用户试图“破解”或以其他方式故意损害系统,不要以自己的恶意回报恶意行为。相反,提供警告,但要灵活。在许多情况下,你可能会抓住用户“正在”损害系统的“现行”。给他们一个警告。告诉他们不要再发生这种情况。但是,如果你确实再次抓住他们造成损害,请绝对确定这是故意的。我甚至无法描述有多少次看起来好像是用户在制造麻烦,但实际上要么是意外,要么是我自己的过错。

4.6.8 制定规则。

运行系统的最佳方式不是铁腕统治。这可能是你管理军队的方式,但 Linux 不是为这种纪律而设计的。制定一些简单而灵活的指导原则是有意义的。你的规则越少,违反规则的可能性就越小。即使你的规则完全合理且清晰,用户有时仍然会在无意中违反它们。对于学习系统规则的新用户来说尤其如此。下载千兆字节的文件并通过邮件发送给系统上的每个人并非显而易见。用户需要帮助来理解规则以及规则存在的原因。

如果你确实为你的系统指定了使用指南,请确保某个特定指南的基本原理是明确的。如果你不这样做,用户会找到各种创造性的方法来规避规则,并且不知道他们正在违反规则。

4.6.9 这意味着什么。

我们不会详细地告诉你如何运行你的系统。这取决于你如何使用系统。如果你有很多用户,情况与你只有几个用户,或者如果你是系统上的唯一用户相比,会大不相同。但是,在任何情况下,理解成为系统管理员真正意味着什么始终是一个好主意。

成为系统管理员并不会使你成为 Linux 向导。有很多管理员对 Linux 知之甚少。同样,许多“普通”用户比任何系统管理员都更了解 Linux。此外,成为系统管理员并不允许对用户使用恶意。仅仅因为系统赋予管理员修改用户文件的能力,并不意味着他或她有权这样做。

成为系统管理员没什么大不了的。无论你的系统是一台微小的 386 还是 Cray 超级计算机,都无关紧要。无论如何,运行系统都是相同的。知道root密码不会为你赢得金钱或名声。它将允许你维护系统并保持其运行。仅此而已。

4.7 归档和压缩文件。

在我们讨论备份之前,我们需要介绍用于在 UNIX 系统上归档文件的工具。

4.7.1 使用tar.

tar命令最常用于归档文件。其命令语法为


tscreen5009
其中 optionstar的命令和选项列表,files 是要添加到存档或从中提取的文件列表。

例如,命令
tscreen5016
/etc中的所有文件打包到 tar 存档backup.tar中。第一个参数是tar, ``cvf'',是tar“命令”。c告诉tar创建一个新的存档文件。v强制tar使用详细模式,在归档每个文件名时进行打印。“f”选项告诉tar,下一个参数backup.tar是要创建的存档的名称。其余的参数tar是要添加到存档的文件和目录名称。

命令
tscreen5031
将提取 tar 文件backup.tar到当前目录中。

将文件提取到现有目录时,同名的旧文件将被覆盖。

在提取 tar 文件之前,重要的是要知道文件应该解包到哪里。假设你归档了以下文件/etc/hosts, 提供了一定程度的额外安全性,因为它的访问权限受到更多限制。影子密码还提供其他功能,例如密码过期。的密码。只有每个用户都应该有自己的帐户。让几个人共享同一个帐户通常不是一个好主意。安全是一个问题,并且帐户唯一地标识系统中的用户。您必须能够跟踪谁在做什么。。如果你使用命令
tscreen5037
目录名/etc/将添加到每个文件名的开头。为了将文件提取到正确的位置,请使用
tscreen5040
因为文件是使用存档文件中保存的路径名提取的。

但是,如果你使用命令
tscreen5042
归档文件,则目录名不会保存在存档文件中。因此,你需要先“cd /etc”,然后再提取文件。正如你所看到的,tar 文件的创建方式对你提取它的位置产生了很大的影响。命令
tscreen5045
可用于显示存档文件的列表,而无需提取它们。你可以查看存档中的文件相对于哪个目录存储,并在正确的位置提取存档。

4.7.2 gzipcompress.

与 MS-DOS 的归档程序不同,tar不会在归档文件时自动压缩文件。如果你要归档两个 1 兆字节的文件,则生成的 tar 文件大小为 2 兆字节。gzip命令压缩文件(它不必是 tar 文件)。命令
tscreen5051
压缩backup.tar,并留下backup.tar.gz,该文件的压缩版本。-9开关告诉gzip使用最高的压缩因子。

gunzip命令可用于解压缩 gzipped 文件。或者,你可以使用 ``gzip -d''.

gzip是 UNIX 社区中相对较新的工具。多年来,一直使用compress命令代替。但是,由于多种因素,包括针对compress数据压缩算法的软件专利纠纷,以及gzip效率更高这一事实,compress正在逐步淘汰。

compress输出的文件以 ``.Z.'' backup.tar.Z结尾。是backup.tar的压缩版本,而backup.tar.gz是 gzipped 版本gifuncompress命令用于展开compressed 文件。它等效于 ``compress -d.'' gunzip知道如何处理compressed 文件。

4.7.3 将它们放在一起。

要归档一组文件并压缩结果,请使用命令
tscreen5079
结果是backup.tar.gz。要解包此文件,请使用反向命令
tscreen5082
始终确保在解包 tar 文件之前位于正确的目录中。

你可以使用一些 Linux 技巧在一个命令行上完成此操作。
tscreen5084
在这里,我们将 tar 文件发送到 ``-'',它代表tar的标准输出。这通过管道传递给gzip,后者压缩传入的 tar 文件。结果保存在backup.tar.gz。命令-c选项告诉gzip将其输出发送到标准输出,该输出重定向到backup.tar.gz.

解包此存档的单个命令将是
tscreen5093
同样,gunzip解压缩backup.tar.gz的内容并将生成的 tar 文件发送到标准输出。这通过管道传递给tar,后者读取 ``-'',这次指的是tar的标准输入。

令人高兴的是,tar命令还包括z选项,可以使用gzip压缩算法自动即时压缩/解压缩文件。

命令
tscreen5103
等效于
tscreen5105
就像命令
tscreen5107
可以代替
tscreen5109

一样。有关更多信息,请参阅targzip手册页。

4.8 使用软盘和制作备份。

      软盘通常用作备份介质。如果你的系统没有连接磁带驱动器,则可以使用软盘(尽管它们速度较慢且可靠性稍差)。

如前所述,软盘必须使用 MS-DOSFORMAT.COM或 Linuxfdformat程序进行格式化。这会布置适合软盘容量的扇区和磁道信息。

表 4.4 中给出了一些 Linux 可访问的软盘设备名称和格式。

  table5125
表 4.4: Linux 软盘格式。

fd0开头的设备是第一个软盘驱动器,在 MS-DOS 下命名为A驱动器。第二个软盘设备的驱动程序文件名以fd1开头。通常,Linux 内核可以检测已格式化的软盘的格式——你可以简单地使用/dev/fd0并让系统检测格式。但是,当你第一次使用全新的、未格式化的软盘时,如果系统无法检测到软盘的类型,你可能需要使用驱动程序规范。

Linux 分配的设备中给出了 Linux 设备及其设备驱动程序名称的完整列表,作者是 H. Peter Anvin(参见附录 A)。

你还可以使用软盘来保存单个文件系统并mount软盘来访问其上的数据。请参阅第 4.8.4 节。

4.8.1 使用软盘进行备份。

      使用软盘进行备份的最简单方法是使用tar。命令
tscreen5147
将使用软盘驱动器/dev/fd0您可以使用交换文件而不是为交换空间保留单独的分区。但是,您需要安装 Linux 并让一切运行起来,然后才能创建交换文件。M'' 选项tar允许备份跨越多个卷;也就是说,当一个软盘已满时,tar将提示插入下一个软盘。命令
tscreen5153
恢复完整备份。此方法也可以与连接到你的系统的磁带驱动器一起使用。请参阅第 4.8.3 节。

    还存在其他几个用于制作多卷备份的程序;在backflops程序,可在tsx-11.mit.edu上找到,可能会派上用场。

使用软盘进行系统完整备份可能既耗时又耗费资源。许多系统管理员使用增量备份策略。每月进行一次完整备份,每周只备份上周修改过的文件。在这种情况下,如果你在本月中旬破坏了你的系统,你可以简单地恢复上一次完整的月度备份,然后根据需要恢复上一次的每周备份。

   find命令对于查找在特定日期之后修改的文件非常有用。有关管理增量备份的几个脚本可以在sunsite.unc.edu上找到。    

4.8.2 使用 Zip 驱动器进行备份。

 

使用 Zip 驱动器进行备份类似于进行软盘备份,但由于 Zip 磁盘通常具有 98 Kb 的容量,因此使用单个已挂载的 Zip 磁盘进行单个备份存档是可行的。

Zip 驱动器有三种不同的硬件接口:SCSI 接口、IDE 接口和并行端口 PPA 接口。Zip 驱动器支持未包含为预编译的 Linux 选项,但可以在为你的系统构建自定义内核时指定。第 gif 页描述了 Iomega Zip 设备驱动程序的安装。

SCSI 和 PPA 接口 Zip 驱动器使用 SCSI 接口,并遵循第 gif 页上描述的其他 SCSI 设备的命名约定。

Zip 磁盘通常预先格式化为 MS-DOS 文件系统。你可以使用现有的 MS-DOS 文件系统(你的 Linux 内核必须支持它),也可以使用mke2fs或类似的程序将 Linux 文件系统写入磁盘。

当作为第一个 SCSI 设备挂载时,Zip 磁盘是/dev/sda4.
tscreen5173

通常为 Zip 文件系统提供单独的挂载点很方便;例如,/zip。以下步骤(必须以root身份执行)将创建挂载点
tscreen5177
然后你可以使用/zip来挂载 Zip 文件系统。

将存档写入 Zip 磁盘类似于归档到软盘。要将/etc目录归档并压缩到已挂载的 Zip 驱动器,使用的命令将是
tscreen5181

此命令可以从任何目录执行,因为它指定了绝对路径名。存档名称etc.tgz是必要的,如果 Zip 驱动器包含 MS-DOS 文件系统,因为写入磁盘的任何文件都必须具有符合 MS-DOS 的 8+3 命名约定的名称;否则,文件名将被截断。

同样,提取此存档需要以下命令
tscreen5184

要例如在 Zip 驱动器上创建 ext2 文件系统,你将给出命令(对于未挂载的 Zip 磁盘)
tscreen5187

以这种方式挂载 Zip 驱动器,使用 ext2 文件系统,可以使用单个命令备份整个文件系统。
tscreen5189

请注意,在许多情况下,使用tar进行备份仍然优于简单地使用cp -a命令制作存档副本,因为tar保留了原始文件的修改时间。

4.8.3 备份到磁带设备。

 

归档到流式磁带驱动器类似于备份到软盘文件系统,只是设备驱动程序不同。磁带的格式化和处理方式也与软盘不同。表 4.5 中列出了一些 Linux 系统的代表性磁带设备驱动程序。

  table5197
表 4.5: 磁带设备驱动程序。

软盘磁带驱动器使用软盘驱动器控制器接口,并由 ftape 设备驱动程序控制,这将在下面介绍。第 gif 页描述了 ftape 设备驱动程序模块的安装。SCSI 磁带设备列在表 4.3 中。

要将/etc目录归档到带有tar,请使用命令
tscreen5216

的磁带设备,请使用命令。同样,要从磁带中提取文件,请使用命令
tscreen5218

这些磁带,像软盘一样,必须先格式化才能使用。ftape 驱动程序可以在 Linux 下格式化磁带。要格式化 QIC-40 格式的磁带,请使用命令
tscreen5220
其他磁带驱动器有自己的格式化软件。查看磁带驱动器的硬件文档或与其关联的 Linux 设备驱动程序的文档。

在从驱动器中取出磁带之前,必须先倒带并将 I/O 缓冲区写入磁带。这类似于在弹出软盘之前卸载软盘,因为磁带驱动程序也会在内存中缓存数据。用于控制磁带驱动器操作的标准 UNIX 命令是mt。你的系统可能不提供此命令,具体取决于它是否具有磁带驱动器设施。ftape 驱动程序有一个类似的命令,ftmt,用于控制磁带操作。

要在取出磁带之前倒带磁带,请使用命令
tscreen5224
当然,请为你的系统替换正确的磁带设备驱动程序。

在写入磁带后,重新张紧磁带也是一个好主意,因为磁带容易拉伸。命令
tscreen5226

要获取磁带设备的状态(驱动器中装有格式化的磁带),请给出命令
tscreen5228

4.8.4 将软盘用作文件系统。

        你可以在软盘上创建文件系统,就像在硬盘分区上一样。例如,
tscreen5235
/dev/fd0中的软盘上创建文件系统。文件系统的大小必须与软盘的大小相对应。高密度 3.5 英寸磁盘为 1.44 兆字节,或 1440 个块。高密度 5.25 英寸磁盘为 1200 个块。如果系统无法自动检测软盘的容量,则必须以块为单位指定文件系统的大小。

  为了访问软盘,你必须挂载其上包含的文件系统。命令
tscreen5239
将在/dev/fd0中的软盘挂载到目录/mnt上。现在,软盘上的所有文件都将显示在你的驱动器上的/mnt下。

挂载点,即你挂载文件系统的目录,在使用mount命令时必须存在。如果它不存在,请使用mkdir创建它,如第 gif 页所述。

有关文件系统、挂载和挂载点的更多信息,请参阅第 gif 页。

    请注意,与硬盘 I/O 一样,任何到软盘的 I/O 都是缓冲的。如果你更改了软盘上的数据,你可能看不到驱动器指示灯亮起,直到内核刷新其 I/O 缓冲区。重要的是,在卸载软盘之前,不要取出软盘,命令是
tscreen5251
不要像在 MS-DOS 系统上那样简单地切换软盘。每当你更换软盘时,第一个软盘和mount下一个软盘。

4.9 升级和安装新软件。

 

    系统管理员的另一项职责是升级和安装新软件。

Linux 系统开发非常迅速。新的内核版本每隔几周就会出现,其他软件的更新频率也几乎相同。因此,新的 Linux 用户经常感到需要不断升级他们的系统,以跟上快速变化的步伐。这是不必要的,并且浪费时间。如果你跟上 Linux 世界的所有变化,你将把所有时间都花在升级上,而没有时间使用系统。

有些人认为,当发布新的发行版时,你应该升级;例如,当 Slackware 发布新版本时。许多 Linux 用户每次都使用最新的 Slackware 版本完全重新安装他们的系统。

升级系统的最佳方式取决于你拥有的 Linux 发行版。Debian、S.u.S.E.、Caldera 和 Red Hat Linux 都具有智能软件包管理软件,允许通过安装新软件包轻松升级。例如,C 编译器gcc以预构建的二进制软件包形式提供。安装后,旧版本的所有文件将被覆盖或删除。

在大多数情况下,毫无意义地升级以“跟上潮流”根本不重要。这不是 MS-DOS 或 Microsoft Windows。没有重要的理由运行所有软件的最新版本。如果你发现你想要或需要新版本提供的功能,那么就升级。如果不是,请不要升级。换句话说,只在你必须升级时升级你必须升级的东西。不要为了升级而升级。这会浪费大量时间和精力。

4.9.1 升级内核

  升级内核就是获取内核源代码并编译它们。这通常是一个轻松的过程,但如果你尝试升级到开发内核或升级到新的内核版本,你可能会遇到问题。内核的版本有两个部分,内核版本和补丁级别。在撰写本文时,最新的稳定内核版本是2.0.33。命令 2.0是内核版本,33是补丁级别。奇数内核版本,如2.1是开发内核。除非你想冒险,否则请远离开发内核!作为一般规则,你应该能够轻松升级到另一个补丁级别,但升级到新版本需要升级与内核密切交互的系统实用程序。

  Linux 内核源代码可以从任何 Linux FTP 站点检索(有关列表,请参阅第 gif 页)。在sunsite.unc.edu例如,内核源代码位于/pub/Linux/kernel中,按版本号组织到子目录中。

内核源代码以 gzipped tar 文件的形式发布。例如,包含 2.0.33 内核源代码的文件是linux-2.0.33.tar.gz.

内核源代码在/usr/src目录中解包,创建目录/usr/src/linux。通常,/usr/src/linux是到另一个包含版本号的目录的软链接,例如/usr/src/linux-2.0.33。这样,你可以安装新的内核源代码并在删除旧内核源代码之前对其进行测试。创建内核目录链接的命令是
tscreen5283

当升级到同一内核版本的较新补丁级别时,内核补丁文件可以节省文件传输时间,因为内核源代码在被gzip压缩后约为 7MB。要从内核 2.0.31 升级到内核 2.0.33,你需要下载补丁文件patch-2.0.32.gzpatch-2.0.33.gz,这些文件可以在与内核源代码相同的 FTP 站点找到。将补丁放在/usr/src目录中后,按顺序将补丁应用于内核以更新源代码。一种方法是
tscreen5289
在解包源代码并应用任何补丁后,你需要确保/usr/include中的三个符号链接对于你的内核发行版是正确的。要创建这些链接,请使用命令
tscreen5292
创建链接后,当你安装下一个内核补丁或更新的内核版本时,无需再次创建它们。(有关符号链接的更多信息,请参阅第 3.11 节。)

  为了编译内核,你必须在你的系统上安装gccC 编译器。gcc版本 2.6.3 或更高版本是编译 2.0 内核所必需的。

首先cd/usr/src/linux。命令make config会提示你输入许多配置选项。这是你选择内核将支持的硬件的步骤。要避免的最大错误是不包括对你的硬盘控制器的支持。如果内核中没有正确的硬盘支持,系统甚至无法启动。如果你不确定内核选项的含义,可以通过按 ? 和 Enter 键获得简短描述。

接下来,运行命令make dep以更新所有源代码依赖项。这是一个重要的步骤。make clean从内核源代码树中删除旧的二进制文件。

  命令make zImage编译内核并将其写入/usr/src/linux/arch/i386/boot/zImage。Intel 系统上的 Linux 内核始终是压缩的。有时,你想编译的内核太大,无法使用make zImage使用的压缩系统进行压缩。内核太大会导致内核编译退出,并显示错误消息内核镜像过大。如果发生这种情况,请尝试命令make bzImage,它使用支持更大内核的压缩系统。内核被写入/usr/src/linux/arch/i386/boot/bzImage.

编译内核后,你需要将其复制到引导软盘(使用类似 ``cp zImage /dev/fd0'' 的命令)或安装镜像,以便 LILO 将从你的硬盘驱动器启动。有关更多信息,请参阅第 gif 页。

4.9.2 向内核添加设备驱动程序。

 

第 gif 页描述了如何使用 Iomega Zip 驱动器进行备份。与许多其他设备一样,对 Iomega Zip 驱动器的支持通常不会编译到标准的 Linux 发行版内核中——设备的种类实在太多,无法在可用的内核中支持所有这些设备。但是,Zip 并行端口设备驱动程序的源代码包含在内核源代码发行版中。本节介绍如何添加对 Iomega Zip 并行端口驱动器的支持,并使其与连接到不同并行端口的打印机共存。

你必须已安装并成功构建自定义 Linux 内核,如上一节所述。

选择 Zip 驱动器ppa设备作为内核选项需要你在步骤中,当你确定自定义内核的配置时,对相应的问题回答Ymake config。特别是,ppa设备需要对三个选项回答“步骤中,当你确定自定义内核的配置时,对相应的问题回答”。
tscreen5322

在你成功运行make config以及你想要包含在内核中的所有支持选项后,然后运行make dep, make clean的密码。只有make zImage构建内核,你必须告诉内核如何安装驱动程序。这是通过 LILO 引导加载程序的命令行完成的。如第 4.2.1 节所述,LILO 配置文件/etc/lilo.conf为它知道的每个操作系统都有“节”,并且还有在启动时向用户显示这些选项的指令。

LILO 识别的另一个指令是“append=”,它允许你将各种设备驱动程序启动时所需的信息添加到命令行。在这种情况下,Iomega Zipppa驱动程序需要未使用的中断和 I/O 端口地址。这与指定单独的打印机设备(如LPT1在 MS-DOS 下)完全类似。

例如,如果你的打印机使用十六进制(以 16 为基数)端口地址0x378(如果你不知道地址,请参阅你的并行端口卡的安装手册),并且是轮询的(也就是说,它不需要 IRQ 线,这是一种常见的 Linux 配置),你需要在你系统的/etc/lilo.conf文件中放置以下行
tscreen5336
值得注意的是,Linux 会在启动时自动识别一个/dev/lp端口,但在指定自定义端口配置时,需要启动时指令。

端口地址后的“0”告诉内核不要为打印机使用 IRQ(中断请求)线。这通常是可以接受的,因为打印机比 CPU 慢得多,因此一种较慢的访问 I/O 设备的方法,称为轮询,即内核定期自行检查打印机状态,仍然允许计算机跟上打印机的速度。

然而,像串行线和磁盘这样以更高速度运行的设备,每个都需要一个 IRQ,中断请求 线。这是一个硬件信号,当设备需要处理器注意时,例如,如果设备有数据等待输入到处理器时,设备会将其发送给处理器。处理器停止正在执行的任何操作,并处理设备的中断请求。Zip 驱动器ppa设备需要一个空闲的中断,该中断必须与连接 Zip 驱动器的打印机卡上设置的中断相对应。在撰写本文时,Linuxppa设备驱动程序不支持并行端口设备的“链接”,Zipppa设备和每台打印机必须使用单独的并行端口。

要确定系统上已在使用哪些中断,可以使用以下命令
tscreen5347
显示设备列表以及它们使用的 IRQ 线。但是,您还需要注意不要使用任何自动配置的串行端口中断,这些中断可能未在/proc/interrupt文件中列出。《Linux 文档项目》的串行 HOWTO 文档,可从附录 A 中列出的来源获得,详细描述了串行端口的配置。

您还应该通过打开机器的机箱并目视检查跳线设置(如果需要)来检查机器上各种接口卡的硬件设置,以确保您没有占用另一个设备已在使用的 IRQ 线。多个设备争用一条中断线可能是 Linux 系统无法运行的最常见原因。

useradd/proc/interrupt文件看起来像
tscreen5352
第一列是这里感兴趣的。这些是系统上正在使用的 IRQ 线的编号。对于ppa驱动程序,我们希望选择一个列出的线路。IRQ 7 通常是一个不错的选择,因为它在默认系统配置中很少使用。我们还需要指定ppa设备将使用的端口地址。此地址需要在接口卡上物理配置。并行 I/O 端口被分配了特定的地址,因此您需要阅读并行端口卡的文档。在本例中,我们将使用 I/O 端口地址0x278,它对应于 MS-DOS 下的 LPT2: 打印机端口。将 IRQ 线和端口地址都添加到上面的启动时命令行中,将产生以下语句,因为它将出现在/etc/lilo.conf文件中放置以下行
tscreen5360

的适当节中。这些语句被附加到内核的启动参数中。它们确保连接到系统的任何打印机都不会干扰 Zip 驱动器的操作。当然,如果您的系统没有安装打印机,则“lp=”指令可以并且应该省略。

在您按照第 4.2.1 节中的描述安装了自定义内核本身之后,并在您重新启动系统之前,请务必运行以下命令
tscreen4602
以在硬盘的引导扇区上安装新的 LILO 配置。

4.9.3 安装设备驱动程序模块。

 

第 gif 页描述了如何将文件备份到磁带驱动器。Linux 提供了对各种磁带驱动器的支持,包括 IDE、SCSI 和一些专有接口。另一种常见的磁带驱动器直接连接到软盘驱动器控制器。Linux 提供了 ftape 设备驱动程序作为模块。

在撰写本文时,ftape 的最新版本是 3.04d。您可以从sunsite.unc.eduFTP 存档(有关说明,请参阅附录 B)中检索该软件包。ftape 存档位于/pub/Linux/kernel/tapes中。务必获取最新版本。在撰写本文时,这是ftape-3.04d.tar.gz.

/usr/src目录中解压缩 ftape 存档后,在顶层 ftape 目录中键入make install将编译 ftape 驱动程序模块和实用程序(如果需要),并安装它们。如果您在使用 ftape 可执行发行文件和系统内核或库时遇到兼容性问题,则执行以下命令make cleanmake install将确保模块在您的系统上编译。

要使用此版本的 ftape 驱动程序,您必须将模块支持编译到内核中,以及对kerneld内核守护进程的支持。但是,您不得将内核的内置 ftape 代码作为内核选项包含在内,因为更新的 ftape 模块完全取代了此代码。

make install还会在正确的目录中安装设备驱动程序模块。在标准 Linux 系统上,模块位于目录
tscreen5380
中。如果您的内核版本是 2.0.30,则系统上的模块位于/lib/modules/2.0.30。命令make install步骤还确保可以通过将适当的语句添加到模块文件的顶层目录(在本例中为modules.dep文件)中的模块来定位这些模块。ftape 安装将以下模块添加到您的系统中(在本例中使用内核版本 2.0.30)/lib/modules/2.0.30加载模块的说明也需要添加到系统范围的模块配置文件中。这是
tscreen5387

文件,在许多系统上是/etc/conf.modules文件。要根据需要自动加载 ftape 模块,请将以下行添加到/etc/conf.modules文件中放置以下行
tscreen5391
中。第一条语句在内核访问主设备号为 27(ftape 设备)的设备时,根据需要加载所有与 ftape 相关的模块。由于对 zftape 模块(为磁带设备提供自动数据压缩)的支持需要其他 ftape 模块的支持,因此所有模块都由内核按需加载。第二行指定模块的加载时参数。在本例中,ftape 软件包提供的实用程序/sbin/swapout确保有足够的 DMA 内存可用于 ftape 驱动程序正常运行。

要访问 ftape 设备,您必须首先在驱动器中放入格式化磁带。有关格式化磁带和磁带驱动器操作的说明,请参见第 4.8.3 节。

4.9.4 升级库。

    如前所述,系统上的大多数软件都经过编译以使用共享库,共享库包含不同程序之间共享的公共子例程。

如果您在尝试运行程序时看到消息
tscreen5398
,则需要升级到程序所需的库版本。库是向后兼容的。编译为使用旧版本库的程序应该可以使用已安装的新版本库。但是,反之则不然。

最新版本的库可以在 Linux FTP 站点上找到。在sunsite.unc.edu上,它们位于/pub/Linux/GCC中。那里的“release”文件应该解释您需要下载哪些文件以及如何安装它们。简而言之,您应该获取文件image-version.tar.gzinc-version.tar.gz,其中 version 是要安装的库的版本,例如4.4.1。这些是使用gzip。命令压缩的 tar 文件。image文件包含要安装在/lib/usr/lib。命令中的库映像。inc文件包含要安装在/usr/include

中的包含文件。release-version.tar.gz应该详细解释安装过程(确切的说明因每个版本而异)。一般来说,您需要安装库的.a.sa文件到/usr/lib中。这些是编译时使用的库。

此外,共享库映像文件,libc.so.version 安装在/lib中。这些是程序在运行时加载的共享库映像。每个库在/lib.

中都有一个使用库主版本号的符号链接。libc库版本 4.4.1 的主版本号为4。包含库的文件是libc.so.4.4.1。名称为libc.so.4的符号链接也放置在/lib中,指向该库。升级库时,您必须更改此符号链接。例如,当从libc.so.4.4libc.so.4.4.1升级时,您需要更改符号链接以指向新版本。

您必须一步到位地更改符号链接,如下所述。如果您删除符号链接libc.so.4,则依赖于该链接的程序(包括像lscatlibc.so.4这样的基本实用程序)将停止工作。使用以下命令更新符号链接libc.so.4.4.1:
tscreen5434
以指向文件。您还需要以相同的方式更改version 中的符号链接。如果您要升级到不同版本的库,请替换上面的相应文件名。库发行说明应解释详细信息。(有关符号链接的更多信息,请参见第 gif 页。)

4.9.5 升级gcc.

   gccC 和 C++ 编译器用于编译系统上的软件,最重要的是内核。最新版本的gcc可以在 Linux FTP 站点上找到。在sunsite.unc.edu上,它位于目录/pub/Linux/GCC中(以及库)。应该有一个用于release发行版的文件,详细说明您需要下载哪些文件以及如何安装它们。大多数发行版都有与其软件包管理软件一起使用的升级版本。一般来说,这些软件包比“通用”发行版更容易安装。gccdistribution

4.9.6 升级其他软件。

升级其他软件通常只是下载适当的文件并安装它们的问题。大多数 Linux 软件都以压缩的 tar 文件形式分发,其中包括源代码、二进制文件或两者兼而有之。如果发行版中不包含二进制文件,您可能需要自己编译它们。这意味着至少在源代码所在的目录中键入make

  阅读 Usenet 新闻组comp.os.linux.announce以获取新软件发布的公告是了解新软件的最简单方法。每当您在 FTP 站点上查找软件时,下载 FTP 站点的ls-lR索引文件并使用grep查找所需文件是定位软件的最简单方法。如果您有archie可用,它也可以提供帮助gif。还有其他专门用于 Linux 的 Internet 资源。有关更多详细信息,请参见附录 A

   

4.10 其他任务。

信不信由你,系统管理员还有许多不属于任何主要类别的内务处理任务。

4.10.1 系统启动文件。

      当系统启动时,在任何用户登录之前,系统会自动执行许多脚本。以下是发生情况的描述。

            在启动时,内核会生成进程/etc/init. Init是一个程序,它读取其配置文件/etc/inittab,并根据此文件的内容生成其他进程。从inittab启动的重要进程之一是在每个虚拟控制台上启动的/etc/getty进程。该getty进程占用 VC 以供使用,并在 VC 上启动一个login进程。这使您可以在每个 VC 上登录。如果/etc/inittab不包含特定 VC 的getty进程,您将无法在该 VC 上登录。

       /etc/inittab执行的另一个进程是/etc/rc,主系统初始化文件。此文件是一个简单的 shell 脚本,它执行启动时所需的任何初始化命令,例如挂载文件系统(请参见第 gif 页)和初始化交换空间。在某些系统上,init执行文件/etc/init.d/rc.

。您的系统也可能执行其他初始化脚本。例如/etc/rc.local,它通常包含特定于您自己系统的初始化命令,例如设置主机名(请参见下一节)。rc.local可以从/etc/rc或直接从/etc/inittab启动。

4.10.2 设置主机名。

      在网络环境中,主机名用于唯一标识特定机器,而在独立机器上,主机名只是赋予系统个性和魅力。这就像给宠物命名:您总是可以将您的狗称为“The dog”,但是给狗分配一个名字(例如 spot 或 woofie)会更有趣。

设置系统的主机名是一个简单的事情,即使用hostname命令。如果您在网络上,您的主机名应该是您机器的完整主机名,例如goober.norelco.com。如果您不在任何类型的网络上,则可以选择任意主机名和域名,例如loomer.vpizza.com, shoop.nowhere.edu,或floof.org.

主机名必须出现在文件/etc/hosts中,该文件为每个主机分配 IP 地址。即使您的机器不在网络上,您也应在/etc/hosts中包含您自己的主机名。如果您不在 TCP/IP 网络上,并且您的主机名是floof.org,只需在/etc/hosts:
tscreen5516
中包含以下行即可。这会将您的主机名floof.org分配给回环地址 127.0.0.1。无论机器是否连接到网络,回环接口都存在。localhost别名始终分配给此地址。

如果您在 TCP/IP 网络上,则您的实际 IP 地址和主机名应出现在/etc/hosts中。例如,如果您的主机名是goober.norelco.com,并且您的 IP 地址是 128.253.154.32,则将以下行添加到/etc/hosts:
tscreen5523

中。要设置您的主机名,只需使用hostname命令。例如,命令
tscreen5526
将主机名设置为goober.norelco.com。在大多数情况下,hostname命令是从系统启动文件之一执行的,例如/etc/rc/etc/rc.local。编辑这两个文件并更改在那里找到的hostname命令以设置您自己的主机名。重新启动后,系统将使用新名称。

4.11 紧急情况下该怎么办。

    在某些情况下,系统管理员将面临从完全灾难中恢复的问题,例如忘记 root 密码或破坏文件系统。最好的建议是,不要惊慌。每个人都会犯愚蠢的错误——这是了解系统管理的最佳方式:艰难的方式。

Linux 不是 UNIX 的不稳定版本。实际上,我遇到系统挂起问题的次数比许多平台上的商业 UNIX 版本要少。Linux 还受益于强大的专家团队,他们可以帮助您摆脱困境。(双关语是有意的。)

解决任何问题的首要步骤是找出问题所在。四处看看,看看事情是如何运作的。很多时候,系统管理员在根本没有调查问题的情况下就发布了绝望的求助请求。您会发现自己解决问题实际上非常容易。这是通往启蒙和大师之路。

在少数情况下,需要从头开始重新安装系统。许多新用户意外删除了某些重要的系统文件,并立即拿起安装盘。这不是一个好主意。在采取如此激烈的措施之前,请调查问题并向他人寻求帮助。在许多情况下,您可以从维护软盘恢复系统。

4.11.1 使用维护软盘恢复。

                系统管理员必不可少的工具之一是所谓的“启动/根磁盘”,这是一个软盘,可以启动完整的 Linux 系统,独立于您的硬盘驱动器。启动/根磁盘实际上非常简单——您在软盘上创建一个根文件系统,将所有必要的实用程序放在上面,并在软盘上安装 LILO 和可引导内核。另一种技术是使用一个软盘用于内核,另一个软盘用于根文件系统。在任何情况下,结果都是相同的:您完全从软盘驱动器运行 Linux 系统。

启动/根磁盘的典型示例是 Slackware 启动盘。这些软盘包含可引导内核和根文件系统,全部都在软盘上。它们旨在用于安装 Slackware 发行版,但在进行系统维护时非常方便。

H.J Lu 启动/根磁盘,可从/pub/Linux/GCC/rootdisksunsite.unc.edu上获得,是维护磁盘的另一个示例。如果您有雄心壮志,您可以创建自己的磁盘。但是,在大多数情况下,现成的启动/根磁盘更容易使用,并且可能更完整。

使用启动/根磁盘非常简单。在您的系统上启动磁盘,并以root身份登录(通常没有密码)。为了访问硬盘驱动器上的文件,您需要手动挂载文件系统。例如,命令
tscreen5563
将 ext2fs 文件系统挂载到/dev/hda2下的/mnt。请记住,/现在位于启动/根磁盘本身上;您需要在某个目录下挂载硬盘驱动器文件系统才能访问文件。因此,硬盘驱动器上的每个用户都应该有自己的帐户。让几个人共享同一个帐户通常不是一个好主意。安全是一个问题,并且帐户唯一地标识系统中的用户。您必须能够跟踪谁在做什么。现在是/mnt/etc/passwd,如果您将根文件系统挂载到/mnt.

上。

4.11.2 修复 root 密码。/mnt    如果您忘记了 root 密码,这并不是问题,令人惊讶的是。启动启动/根磁盘,将根文件系统挂载到root上,并在/mnt/etc/passwd中将
tscreen5577
的密码字段留空,如本例所示root。现在root没有密码。当您从硬盘驱动器重新启动时,您应该能够以如果您想暂时“禁用”用户登录系统,而不删除他或她的帐户,只需在.

身份登录并使用重置密码。您是否很高兴学会了如何使用vi重置密码。您是否很高兴学会了如何使用?在您的启动/根磁盘上,Emacs 等编辑器可能不可用,但

应该可用。

4.11.3 损坏的文件系统。4.4.3 检查文件系统。      如果您以某种方式损坏了文件系统,则可以运行efsck或适用于文件系统类型的相应形式的

。(请参见第 gif 页。)在大多数情况下,从软盘更安全地更正硬盘驱动器文件系统上的任何损坏数据。4.4.3 检查文件系统。    文件系统损坏的一个常见原因是超级块损坏。超级块是文件系统的“标头”,其中包含有关其状态、大小、可用块等信息。如果您损坏了超级块,例如,意外地将数据直接写入文件系统的分区表,则系统可能根本无法识别该文件系统。尝试挂载文件系统将失败,并且

将无法解决问题。4.4.3 检查文件系统。幸运的是,ext2fs 文件系统类型会在驱动器上的“块组”边界处保存超级块的副本,通常每 8K 块保存一次。要告诉
tscreen5596
使用超级块的副本,请使用类似以下的命令,其中 partition 是文件系统所在的分区。选项告诉4.4.3 检查文件系统。-b 8193

使用存储在文件系统中块 8193 处的超级块副本。

4.11.4 恢复丢失的文件。  如果您不小心删除了系统上的重要文件,则无法“取消删除”它。但是,您可以将相关文件从软盘复制到硬盘驱动器。如果您删除/bin/login/mnt,例如,它允许您登录,只需启动启动/根软盘,将根文件系统挂载到
tscreen5606
,然后使用命令选项告诉-acp

以保留正在复制的文件上的权限。

当然,如果您删除的文件不是启动/根软盘上具有对应项的重要系统文件,那么您就倒霉了。但是,如果您进行备份,则始终可以还原它们。

4.11.5 损坏的库。/lib  如果您不小心损坏了库或中的符号链接,则依赖于库的命令很可能将不再起作用(请参见第 gif 页)。最简单的解决方案是启动启动/根软盘,挂载根文件系统,并修复/mnt/lib

中的库。第 gif 页描述了如何安装运行时库及其符号链接。


next up previous contents
下一主题: 5 X Window 系统 上一层: Linux 安装和入门 前一主题: 3 Linux 教程

   
Clarica Grove