跳转至内容

Slackersbible/UNIX 基础

来自维基教科书,为开放世界提供开放书籍

以下章节将涵盖 Slackware Linux 操作系统的基本命令和功能。大部分内容与任何类 UNIX® 操作系统都相关。如果您熟悉这些内容,可以随意略读本章。如果您是 Slackware 的新手,那么您一定需要仔细阅读本章内容。


阅读完本章后,您将了解

  • 如何使用 Slackware 的“虚拟控制台”。
  • UNIX 文件权限的工作原理。
  • 默认的 Slackware 文件系统布局。
  • Slackware 磁盘组织结构。
  • 如何挂载和卸载文件系统。
  • 什么是进程、守护进程和信号。
  • 什么是 shell,以及如何更改默认的登录环境。
  • 如何使用基本的文本编辑器。
  • 什么是设备和设备节点。
  • Slackware 使用哪种二进制格式。
  • 如何阅读手册页以获取更多信息。

虚拟控制台和终端

[编辑 | 编辑源代码]

Slackware 可以通过多种方式使用。其中之一是将命令输入文本终端。当以这种方式使用 Slackware 时,您可以轻松地使用 UNIX® 操作系统的灵活性和平易近人。本节介绍什么是终端控制台,以及如何使用它们。

控制台

[编辑 | 编辑源代码]

默认情况下,Slackware 配置为启动到命令行界面。除非您更改了此设置,否则系统在启动后,在启动脚本完成运行后,会向您显示登录提示符。您将看到类似以下内容

Loading OSS compatibility modules for ALSA.


Welcome to Linux 2.4.26 (tty1)
hawk login:

您的系统上的消息可能略有不同,但您会看到类似的内容。我们现在感兴趣的是最后两行。倒数第二行显示

Welcome to Linux 2.4.26 (tty1)

此行包含有关您刚刚启动的系统的一些信息。您正在查看Slackware 控制台。此机器的名称(每台 UNIX 机器都有一个名称)是 hawk,您现在正在查看它的系统控制台——tty1 终端。最后,最后一行始终是

login:

您需要在此处输入您的用户名才能登录 Slackware。下一节将介绍如何做到这一点。

登录 Slackware

[编辑 | 编辑源代码]

Slackware 是一个多用户、多处理系统。这通常是对一个可以由许多不同的人使用,并且可以在一台机器上同时运行许多程序的系统的正式描述。每个多用户系统都需要一些方法来区分一个用户与其他用户。在 Slackware(以及所有类似 UNIX 的操作系统中),这是通过要求每个用户在能够运行程序之前必须登录到系统来实现的。每个用户都有一个唯一的名称(用户名)和一个个人秘密密钥(密码)。Slackware 将要求提供这两个信息,然后才允许用户运行任何程序。Slackware 启动并完成运行启动脚本后,它会显示一个提示符并要求提供有效的用户名

login:

为了便于说明,让我们假设您的用户名是 john。在提示符下输入 john 并按 Enter 键。然后系统会提示您输入密码

login: john
Password:

现在输入 john 的密码,然后按 Enter 键。密码不会显示!您现在不必担心这个问题。 suffice it to say that it is done for security reasons. 如果您输入了正确的密码,您现在应该已登录 Slackware 并可以尝试使用所有可用的命令。您应该看到 MOTD 或每日消息,后面跟着一个命令提示符(#、$ 或 % 字符)。这表明您已成功登录 Slackware。3.2.3 多个控制台

在一个控制台中运行 UNIX 命令很好,但 Slackware 可以同时运行多个程序。当像 Slackware 这样的操作系统可以同时运行数十个程序时,只有一个控制台可以输入命令会有点浪费。这就是虚拟控制台非常有用的地方。Slackware 可以配置为向您显示许多不同的虚拟控制台。您可以通过按键盘上的几个键,从一个控制台切换到任何其他虚拟控制台。每个控制台都有自己的不同输出通道,Slackware 会在您从一个虚拟控制台切换到另一个虚拟控制台时,妥善地重定向键盘输入和显示器输出。

Slackware 为切换控制台保留了一些特殊的键组合。您可以使用 Ctrl+Alt-F1、Alt-F2 到 Alt-F8 切换到 Slackware 中的另一个虚拟控制台。TTY1(Ctrl+Alt+F1)是您在登录时看到的默认虚拟控制台。TTY1 到 TTY6 始终以文本模式可用。当图形系统启动时,TTY7 及更高版本将变为图形虚拟控制台。

当您从一个控制台切换到另一个控制台时,Slackware 会负责保存和恢复屏幕输出。结果是“幻觉,即有多个“虚拟屏幕和键盘,您可以使用它们输入命令以供 Slackware 运行。当您切换到其他虚拟控制台时,您在一个虚拟控制台中启动的程序不会停止运行。它们会在您切换到其他虚拟控制台时继续运行。

Slackware 基于几个关键的 UNIX 概念。第一个也是最突出的概念是 Slackware 是一个多用户操作系统。系统可以处理多个用户同时执行完全无关的任务。系统负责妥善地共享和管理对硬件设备、外设、内存和 CPU 时间的请求,以便公平地分配给每个用户。

由于系统能够支持多个用户,因此系统管理的任何内容都有一组权限,这些权限控制谁可以读取、写入和执行该资源。这些权限存储为三个八位字节,分为三个部分,一个用于文件的拥有者,一个用于文件所属的组,一个用于其他所有人。此数字表示形式如下

Value Permission 	              Directory Listing
0     No read, no write, no execute  ---
1     No read, no write, execute     --x
2     No read, write, no execute     -w-
3     No read, write, execute        -wx
4     Read, no write, no execute     r--
5     Read, no write, execute        r-x
6     Read, write, no execute        rw-
7     Read, write, execute           rwx


您可以使用 -l 命令行参数向 ls(1) 提供长目录列表,其中包括一列包含有关文件对于拥有者、组和其他所有人的权限的信息。例如,在任意目录中进行 ls -l 可能会显示

% ls -l
total 530
-rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile
-rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile

-rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt

...

以下是 ls -l 的第一列的分解方式

-rw-r--r--

第一个(最左边的)字符表示该文件是普通文件、目录、特殊字符设备、套接字还是其他特殊伪文件设备。在本例中,- 表示普通文件。接下来的三个字符,rw-,在本例中,给出文件拥有者的权限。接下来的三个字符,r--,给出文件所属组的权限。最后三个字符,r--,给出世界其他人的权限。破折号表示该权限已关闭。在本例中,该文件的权限设置为拥有者可以读取和写入该文件,该组可以读取该文件,世界其他所有人只能读取该文件。根据上表,此文件的权限将为 644,其中每个数字代表文件权限的三个部分。

这很好,但是系统如何控制设备的权限呢?Slackware 实际上将大多数硬件设备视为文件,程序可以像打开任何其他文件一样打开、读取和写入数据。这些特殊的设备文件存储在 /dev 目录中。

目录也作为文件处理。它们有读取、写入和执行权限。目录的可执行位具有与文件略微不同的含义。当目录被标记为可执行时,这意味着它可以被遍历,也就是说,可以“cd”(更改目录)到它。这也意味着,在目录中,可以访问其名称已知的文件(当然,要遵守文件本身的权限)。

特别是,为了执行目录列表,必须对目录设置读取权限,而要删除其名称已知的

还有更多的权限位,但它们主要用于特殊情况,例如setuid二进制文件和粘性目录。如果您想了解更多有关文件权限及其设置方法的信息,请务必查看chmod手册页。3.3.1 符号权限


由 Tom Rhodes 贡献。

符号权限,有时也称为符号表达式,使用字符代替八进制值来分配文件或目录的权限。符号表达式使用 (who) (action) (permissions) 的语法,其中可以使用以下值

Option Letter 	Represents
(who) 	u 	User
(who) 	g 	Group owner
(who) 	o 	Other
(who) 	a 	All (world)
(action) 	+ 	Adding permissions
(action) 	- 	Removing permissions
(action) 	= 	Explicitly set permissions
(permissions) 	r 	Read
(permissions) 	w 	Write
(permissions) 	x 	Execute
(permissions) 	s 	Set UID or GID	

这些值与 chmod 命令一起使用,就像之前一样,但使用字母。例如,您可以使用以下命令阻止其他用户访问 FILE

% chmod go= FILE

当需要对文件进行多个更改时,可以提供逗号分隔的列表。例如,以下命令将删除 FILE 上的组和世界写入权限,然后它将为所有人添加执行权限

% chmod go-w,a+x FILE

Slackware 是一个多任务操作系统。这意味着它看起来好像不止一个程序在运行。任何时候运行的每个程序都称为进程。您运行的每个命令都将启动至少一个新进程,并且有一些系统进程一直运行,使系统保持功能。

每个进程都由一个称为进程 ID 或 PID 的数字唯一标识,并且与文件一样,每个进程也只有一个所有者和组。所有者和组信息用于确定进程可以使用哪些文件和设备,使用前面讨论的文件权限。大多数进程也有一个父进程。父进程是启动它们的进程。例如,如果您正在向 shell 输入命令,那么 shell 就是一个进程,而您运行的任何命令也是进程。您以这种方式运行的每个进程都将以您的 shell 作为其父进程。对此的例外是一个称为 init(8) 的特殊进程。init 始终是第一个进程,因此其 PID 始终为 1。init 在 Slackware 启动时由内核自动启动。

前台和后台

当您运行命令时,通常该命令处于前台(您会看到它)并且它使用计算机直到完成。这可能看起来很明显,直到您意识到可以对此做些什么。例如,如果您启动一个命令然后决定要终止它,您通常可以使用 Ctrl+C 来终止它。此外,如果您想启动其他命令而不是等待程序退出,您可以使用 Ctrl+Z 来停止它,这样它将不再运行并“挡您的路”。

使用“fg”命令可以将停止的应用程序重新带到前台,它将继续运行。如果您想让命令继续运行,或者如果您想使用 Ctrl+C 来终止它,这将很有用。

另一个可以做的事情是在命令后使用一个与号 (&) 使其在后台运行。当您这样做时,您可能会看到以下内容

root@darkstar:~# updatedb & [1] 12353

这意味着程序已启动,并已分配了 PID(程序标识号)12353,如果您想使用“kill 12353”终止它,这将很有用。

有两个命令对于查看系统上的进程特别有用,ps(1) 和 top(1)。ps 命令用于显示当前正在运行的进程的静态列表,并且可以显示它们的 PID、它们使用多少内存、启动它们的命令行等。top 命令显示所有正在运行的进程,并每隔几秒更新显示,以便您可以交互式地查看计算机正在做什么。

默认情况下,ps 只显示您正在运行的命令,这些命令属于您。例如

raven@hawk:~$ ps
PID TTY TIME CMD
31674 pts/1 00:00:00 bash
31686 pts/1 00:00:00 ps

如您在此示例中看到的,ps(1) 的输出被组织成多个列。PID 是前面讨论的进程 ID。PID 从 1 开始分配,一直到 99999,当您用完时,就会环绕到开头。TT 列显示程序运行的 tty,可以安全地暂时忽略。STAT 显示程序的状态,同样可以安全地忽略。TIME 是程序在 CPU 上运行的时间量——这通常不是您启动程序以来的经过时间,因为大多数程序在需要花费时间在 CPU 上之前会花费大量时间等待事情发生。最后,COMMAND 是用于运行程序的命令行。

ps(1) 支持许多不同的选项来更改显示的信息。其中最有用的一组是 auxww。a 显示有关所有正在运行的进程的信息,而不仅仅是您自己的。u 显示进程所有者的用户名以及内存使用情况。x 显示有关守护进程的信息,而 ww 使 ps(1) 显示完整的命令行,而不是在它变得太长而无法容纳在屏幕上时将其截断。top(1) 的输出类似。一个示例会话如下所示

raven@hawk:~$ top

top - 22:52:10 up 11:29, 2 users, load average: 0.13, 0.04, 0.01
Tasks: 34 total, 1 running, 33 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0% user, 0.0% system, 0.0% nice, 100.0% idle
Mem: 190788k total, 187268k used, 3520k free, 44340k buffers
Swap: 976712k total, 740k used, 975972k free, 86176k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 8 0 240 240 212 S 0.0 0.1 0:04.64 init
2 root 9 0 0 0 0 S 0.0 0.0 0:00.24 keventd
3 root 19 19 0 0 0 S 0.0 0.0 0:00.35 ksoftirqd_CPU0
4 root 9 0 0 0 0 S 0.0 0.0 0:01.16 kswapd
5 root 9 0 0 0 0 S 0.0 0.0 0:00.05 bdflush
6 root 9 0 0 0 0 S 0.0 0.0 0:00.30 kupdated
10 root -1 -20 0 0 0 S 0.0 0.0 0:00.00 mdrecoveryd
11 root 9 0 0 0 0 S 0.0 0.0 0:00.00 kreiserfsd
60 root 9 0 588 588 508 S 0.0 0.3 0:00.07 syslogd
63 root 9 0 448 448 392 S 0.0 0.2 0:00.04 klogd
75 root 8 0 688 688 520 S 0.0 0.4 0:00.17 cardmgr
157 root 9 0 492 460 428 S 0.0 0.2 0:00.00 dhcpcd
272 root 9 0 0 0 0 S 0.0 0.0 0:00.00 khubd
762 root 9 0 520 520 464 S 0.0 0.3 0:00.00 inetd
765 root 9 0 1408 1408 1308 S 0.0 0.7 0:00.21 sshd
776 root 4 0 564 564 496 S 0.0 0.3 0:00.00 crond
778 daemon 9 0 616 616 548 S 0.0 0.3 0:00.01 atd

输出分为两部分。标题(前五行)显示最后一个运行进程的 PID、系统负载平均值(衡量系统繁忙程度)、系统运行时间(自上次重启以来的时间)和当前时间。标题中的其他数字与正在运行的进程数量(在本例中为 47)、已占用多少内存和交换空间以及系统在不同的 CPU 状态中花费了多少时间有关。

下面是一系列包含与 ps(1) 输出类似信息的列。如前所述,您可以看到 PID、用户名、CPU 时间量以及运行的命令。top(1) 还默认显示进程占用的内存空间量。它分为两列,一列用于总大小,一列用于驻留大小——总大小是应用程序需要的内存量,而驻留大小是它当前实际使用的内存量。

top(1) 每两秒自动更新此显示;这可以通过 s 选项更改。

文本编辑器

[编辑 | 编辑源代码]

许多 UNIX 管理涉及编辑配置文件,其中大部分只是文本文件。在这里,我们将介绍几个最常见的 UNIX 文本编辑器及其基本操作。

可以说,在 UNIX 世界中,没有哪个文本编辑器比 vi 更普遍。仅此一项就成为所有严肃的 UNIX(和 Slackware)用户都应该至少学习其基本功能的原因。这个名字来自命令“visual”,用于将 ex 行编辑器切换到visual 模式。这一事实说明了 vi 的两个有趣之处。首先,vi 是一种模态编辑器,这意味着它的编辑功能会根据程序所处的状态或模式而改变。第二个值得注意的有趣之处是,这个名字像许多 UNIX 程序一样,是对另一个程序的扩展。vi 拥有 UNIX 用户所要求的所有用户自定义和扩展性,这使其成为一个极其强大的程序。

[编辑 | 编辑源代码]

与一些简单地将按键回显到屏幕并依靠功能键组合来实现扩展功能的文本编辑器相比,模态编辑器——以及 vi——使用编辑器模式来定义对文本文件执行的操作。这最好通过示例来解释。

  1
~
~
~
~
~
~
~
~
~                              VIM - Vi IMproved
~
~                               version 7.0.122
~                           by Bram Moolenaar et al.
~                 Vim is open source and freely distributable
~
~                        Become a registered Vim user!
~                type  :help register<Enter>   for information
~
~                type  :q<Enter>               to exit
~                type  :help<Enter>  or  <F1>  for on-line help
~                type  :help version7<Enter>   for version info
~
~
~
~
~
~
~
~

您看到的是一个名为 Vim 的现代版 vi。Vim 继承了原始专有版 vi 的几乎所有功能,并添加了许多它自己的功能,这些功能在 GPL 兼容的自由软件许可下发布。上面的屏幕是 Vim 第一次加载时的样子。在这种状态下,它处于正常模式。正常模式也称为命令模式,因为从这种模式下,您可以在文本上执行各种命令或操作,例如更改、删除、复制等。要以标准方式输入文本,您必须首先将 vi 切换到插入模式。

从这种初始模式,我们可以通过以下几种方式之一切换到插入模式来输入文本。最简单的方法是只按“i”键(代表insert)。现在您可以根据需要输入文本。所有标准的字母数字字符(包括标点符号)都在键入时回显到显示屏上

图 5.1.1-1
  1 vi is my favorite text editor.
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
-- INSERT --

从这个例子中可以看出,Vim 会显示你输入的文本“vi is my favorite text editor.”,以及当前处于插入模式的事实。要切换回命令模式,只需按 Escape 键 (Esc)。vi 将返回到命令模式(Vim 会通过从屏幕底部删除“-- INSERT --”来反映这一点)。

重要:命令区分大小写
注意。vi 命令(例如这里的“i”)区分大小写,因此大写“I”与小写“i”不是同一个命令。同样地,强烈建议你在 vi 中编辑时不要使用 Caps Lock 键。尽管对大多数打字员来说,使用 Caps Lock 键基本上是多余的,但在切换回命令模式时,使用 Caps Lock 键会导致意想不到的结果。

基本命令

[编辑 | 编辑源代码]

“那么命令模式有什么用呢?”你问。好问题。让我们看一些基本命令,这些命令展示了模态编辑的强大功能。

移动光标
[编辑 | 编辑源代码]

命令模式似乎增加了文本编辑过程的复杂性,但实际上它旨在提高生产力。从命令模式中获得的第一个成果就是提高文本编辑的速度。即使你只知道几个命令,命令模式也能使文本编辑比标准文本编辑更快。以之前的例子为例(见图 5.1.1-1)。如果你在行尾按下“Esc”,vi 将进入命令模式,光标将置于最后输入的字符之上。从这种状态下,你可以使用“h”、“j”、“k”和“l”键分别在整个文件中将光标向左、下、上和右移动一个字符。

剪切、粘贴和删除文本
[编辑 | 编辑源代码]

vi 使用寄存器临时存储文本。使用剪切和粘贴命令,你可以将文本从文件的一部分复制或删除到寄存器中,然后将其粘贴到其他地方。

文件操作
[编辑 | 编辑源代码]

现在你已经可以执行一些命令了,你可能想打开一个文件进行编辑。

Emacs 是另一个流行的 UNIX 文本编辑器,与 vi 一样,它非常强大。Emacs 最初是由 GNU 项目创始人理查德·斯托曼构思的,作为另一个文本编辑器的编辑器宏集。它最终发展成为今天我们所知道的 Emacs(源自 Editor MACroS)。

进一步阅读

[编辑 | 编辑源代码]
华夏公益教科书