Annotated Unix Magic Poster
注解版 UNIX Magic 海报
准备好见证一些 UNIX 魔法吧... 🪄
关于
1
15
18
7
40
21
19
32
8
26
33
38
13
24
5
30
22
2
29
4
10
11
36
3
28
25
14
35
39
23
31
9
12
37
6
34
17
16
20
27
✖
1
Shell
控制系统的入口
在 UNIX Magic 海报中,Shell 占据着显著的位置,这反映了它在 UNIX 系统中的核心作用。Shell 过去(现在仍然是)是与内核交互的主要界面,是 UNIX 用户的工作台。它是一个非常强大的工具,允许用户启动和协调进程、执行复杂的计算,并直接与操作系统交互。
Shell 不仅仅是一个界面,它也是一种完整的编程语言。用户可以编写脚本来自动化任务、控制进程,并构建管道来有效地处理数据。这使得 Shell 既具有交互性又具有可编程性——这与当时的其他操作系统截然不同。
虽然现在存在许多 Shell,但最初的是 Bourne shell (sh),它为之后的一切奠定了基础。
最后,我想强调的是,Shell 是通往 UNIX 力量的入口。它是学习 UNIX 时的第一个接触点,掌握它就能释放系统的全部潜力。我认为海报完美地捕捉到了这一点——Shell 位于巫师魔法的核心,因为它控制系统的入口。 ✖ 15 AWK 一种为文本处理设计的语言 AWK 是一种特定领域的语言,专为文本处理而设计,可以直接在文件上运行,也可以用作管道的一部分。
AWK 于 20 世纪 70 年代在贝尔实验室创建,其名称源于其作者的姓氏:Alfred Aho、Peter Weinberger 和 Brian Kernighan。 ✖ 18 B 一种早期编程语言,用于早期的 Multics 项目。 B 是一种为递归、非数值、机器无关的应用设计的编程语言。B 来源于 BCPL,其名称可能来自 BCPL 的缩写。B 是一种几乎已经灭绝的编程语言,已被更现代的 C 语言所取代。
B 由 Ken Thompson 和 Dennis Ritchie 于 1969 年左右在贝尔实验室开发。 ✖ 7 Backpressure 告诉生产者停止发送数据,因为消费者无法跟上 当两个进程通过管道进行通信时,发送数据的进程是生产者,接收数据的进程是消费者。如果生产者发送数据的速度快于消费者处理数据的速度,操作系统会维护一个缓冲区来临时存储数据。但是,如果缓冲区已满,操作系统将阻止生产者,直到有可用空间为止。
这是艺术家的意图吗?你来决定——管道中的阀门手柄是对 UNIX 反压的一个巧妙参考,还是有点牵强? ✖ 40 banner 一个输出 ASCII 艺术字的程序 海报的标题出现在 banner 中,这难道是巧合吗?这个 UNIX 程序旨在将普通文本转换为大型 ASCII 字符以供显示。 ✖ 21 boot (或 sock?) 启动过程(或 UNIX 网络 Sockets) 我必须承认,这个物体看起来更像靴子而不是袜子,但我很难相信作者会忽略对 sockets 的引用,考虑到它们的重要性——不仅在 UNIX 中,而且在操作系统的历史上也是如此。
因此,我认为有两种可能性:
- 如果它是靴子,它可能代表 UNIX 操作系统的启动过程,这是使系统启动并运行的基本部分。
- 或者,如果它是袜子(诚然,是一只厚而超大的袜子!😄),那么它很可能是一个对 UNIX 网络 sockets 的有趣引用。网络 sockets 是 UNIX 在 BSD UNIX (4.2BSD, 1983) 中率先提出的一种抽象。Sockets 为进程间通信 (IPC) 提供了一个统一的接口,使进程既可以在本地(在同一台机器上)通过 UNIX 域 sockets 进行通信,也可以通过使用 TCP/IP 的网络进行通信。这项创新成为现代网络的基础,并且 socket API 后来被所有主要的操作系统所采用,从而塑造了今天的网络编程方式。
有关 BSD sockets 历史的更多信息,请参见 Berkeley Sockets – Wikipedia,或阅读 socket()
的官方 Linux 手册页 。
✖
19
cat
一个标准的 Unix 实用程序,用于顺序读取文件,并将它们写入标准输出。
cat
的名称来源于它连接 (con)cat 文件的功能。
cat
的原始版本是 Unix 版本 1 的一部分,由 Ken Thompson 和 Dennis Ritchie 编写。
✖
32
curses
一个终端控制库,用于辅助创建文本用户界面 (TUI)
curses
编程库提供了一个抽象层,用于直接发送图形和定位数据,从而允许在 Unix 终端中进行图形元素和光标定位。这个名字是“光标优化” (cursor optimization) 一词的双关语。
第一个 curses 库由 Ken Arnold 编写,最初与 BSD UNIX 一起发布。 ✖ 8 Daemons 在后台运行并监督系统或为其他进程提供功能的服务进程 Daemons 是在后台运行的程序,通常在系统启动时启动。它们通过执行某些任务来响应网络请求、硬件活动或其他程序。诸如 cron 之类的 daemons 也可以在计划的时间执行定义的任务。
这个术语是由麻省理工学院 Project MAC 的程序员创造的。它受到麦克斯韦妖和希腊神话的启发,作为在后台工作的超自然生物的隐喻。
✖
26
dates
一个显示和设置系统日期的命令
date
是一个显示和设置 UNIX 系统日期的命令。
Unix 时间当前定义为自 1970 年 1 月 1 日星期四 00:00:00 UTC 以来经过的非闰秒数,这被称为 Unix 纪元。
最早版本的 Unix 时间具有一个以 60 Hz 的速率递增的 32 位整数,这是早期 Unix 系统硬件上的系统时钟速率。以这种方式存储的时间戳只能表示两年多一点的范围。
Unix 工程师任意选择了当前的 1970 年 1 月 1 日 00:00:00 UTC 纪元,因为他们认为这是一个方便使用的日期。
✖
33
diff
一个用于查找文件内容之间差异的实用程序
diff
是一种数据比较工具,用于计算和显示文件内容中的差异。diff
是面向行的,通常用于确定同一文件的两个版本之间的更改。例如,diff
可用于查找源文件中已更改的行,从而仅传输更改而不是整个文件。
diff
是在 20 世纪 70 年代初在贝尔实验室开发的。
✖
38
Filesystem hierarchy
导航文件系统
巫师正在操作的液体的树状形状可能指的是 UNIX 文件系统层次结构。UNIX 将文件和目录组织成树状结构,从根目录 (/
) 开始并分支到子目录。
导航此结构是使用 UNIX 的一个基本部分,通常通过 shell 使用诸如 cd
、ls
和 pwd
之类的命令来完成。树的形状可以象征这个概念,以直观的方式表示用户如何在目录中移动、访问文件和执行命令。
或者,分支形式可以表示递归操作或进程树中的父子关系,这两个都是 UNIX 系统中的关键概念。
一些现代读者可能会将树形形状与诸如 Git 之类的版本控制系统相关联,在这些系统中,分支是一种常见的视觉隐喻。但是,这可能不是预期的引用,因为在创建海报时,分支版本控制工作流程在 UNIX 世界中并不像现在这样普遍。诸如 SCCS (1972) 和 RCS (1982) 之类的工具是可用的,但是它们更多地关注线性版本控制和文件锁定,而不是今天流行的分支模型。 ✖ 13 fork 一种进程创建自身副本的操作 在多任务操作系统中,进程需要一种创建新进程的方式。在类 Unix 系统中,Forking 一个进程通常是执行此操作的唯一方法。
最早对 fork 概念的引用之一出现在 Melvin Conway 于 1962 年发表的《A Multiprocessor System Design》中。
✖
24
Jfo nroff
一个文本格式化程序,为打印机和终端生成固定宽度的输出
nroff
,是 "new roff" 的缩写,是一个文本格式化程序,可以生成适合简单固定宽度打印机和终端窗口的输出。它是 Unix 帮助系统的组成部分,用于格式化 man pages 以供显示。
字母 Jfo 代表 Joseph Frank Ossanna,他为 Unix 版本 2 创建了 nroff
的原始版本。
✖
5
Legendary figures
Unix 历史中的传奇人物
在 Unix 历史的背景下,这三组首字母代表了 Unix 创建和发展中的传奇人物:
dmr:Dennis M. Ritchie,Unix 的共同创建者和 C 编程语言的创建者。
kt:Ken Thompson(在历史上的 Unix 参考中通常简称为“ken”),与 Ritchie 一起成为 Unix 的共同创建者。
bwk:Brian W. Kernighan,多本有影响力的 Unix 程序和书籍的合著者(包括《The C Programming Language》和《The UNIX Programming Environment》)。
✖
30
login
进入系统的入口
login
是进入系统的入口。它验证用户身份,通过更改为用户的 home 目录来初始化环境,并生成一个以用户身份(具有其 uid
和 gid
)运行的进程,使用他们选择的 shell。
此外,标准输入和输出需要连接到终端:这可以是伪终端(如果您在图形界面或使用 ssh
),也可以是物理终端(当时很常见)。
✖
22
make
一种软件开发工具,用于执行有序操作和管理依赖关系
Make 是一个命令行界面,可以读取配置文件 Makefile
,该文件通常用于代码可执行文件的编译和自动化。在 Make 之前,在 Unix 上构建主要包括为每个程序的代码库编写的 shell 脚本。Make 的依赖项排序和过时检查使构建过程更加健壮和高效。
Stuart Feldman 是 Make 的原始作者,于 1976 年 4 月在贝尔实验室完成了早期版本。 ✖ 2 man 用于获取不同 Unix 组件(包括其他 cmds)的详细文档的命令。 man(1) 命令(manual 的缩写)用于显示命令、系统调用、配置文件和系统其他方面的在线参考手册 (man pages)。man 提供了有关如何使用命令的详细文档,包括其选项、用法示例、相关文件和其他相关详细信息。
对于窗口中 man 的解释,存在一些歧义。这个人拿着一把大镰刀,这可能代表 reaping a process。在类似 Unix 的系统中,进程 reaping 是指父进程读取生成的子进程的退出状态,从而允许将子进程从进程表中删除。
其他人则认为,这个人可能代表 hacker,该术语过去表示熟练或聪明的程序员。
✖
29
mbox
邮件系统格式
mbox
是对早期 UNIX 邮件格式的引用。UNIX 是最早配备内置电子邮件功能的操作系统之一,它在这样做的同时,仍然忠于其信条:“一切皆文件”。在 mbox
格式中,所有电子邮件消息都存储在一个文件中,新消息只需附加到末尾即可。默认情况下,用户的邮件存储在 /usr/mail/<username>
中。这种设计自然使得可以通过电子邮件发送系统日志和通知,从而进一步将电子邮件嵌入为 UNIX 体验的核心部分。
✖
4
Memory leaks
计算机程序对内存的不当管理
当计算机程序不正确地管理内存分配时,就会发生内存泄漏,从而无法释放不再需要的内存。随着时间的推移,这些未释放的分配会累积,从而减少了其他进程可用的内存量,并可能导致速度减慢或崩溃。
✖
10
null
null 设备是一个设备文件,它会丢弃所有写入其中的数据,但报告写入操作已成功。
Null device 是一个设备文件,它会丢弃所有写入其中的数据,但报告写入操作已成功。此设备在 Unix 和类 Unix 系统上称为 /dev/null。null 设备通常用于处理进程不需要的输出流,或作为输入流的方便空文件。
✖
11
Oregano
牛至事件
来自 Sarah Groves Hobart:
据说牛至是指一个事件,其中一个与 BSD 相关的原始人员因携带一袋被认为是违禁品的物品越过加拿大/美国边境而受到骚扰,结果证明是牛至。 ✖ 36 Overflows Buffer overflows 这可能有点牵强,但考虑到缓冲区溢出在 UNIX 历史中是多么普遍,这种图像可能是故意的。从 shell 溢出的液体可能是对缓冲区溢出的视觉参考。
当程序将比它可以容纳的更多的数据写入缓冲区(固定内存块)时,会发生缓冲区溢出。多余的数据“溢出”到相邻的内存中,通常会覆盖关键信息(例如返回地址),这可能导致崩溃或打开安全漏洞。缓冲区溢出曾经(并且现在仍然是)UNIX 系统上 C 编程中的一种经典利用类型。
有关更多信息,请参见 Buffer overflow – Wikipedia。
✖
3
Pipes
连接 cmd 输出到 cmd 输入以创建复杂的 pipelines
Pipes 是 Unix 中的一项基本功能,使您可以将简单的实用程序组合成更强大的工作流程。通过将数据从一个命令的输出传递到另一个命令的输入,管道使您可以直接在命令行快速创建灵活、高效且可维护的解决方案。它们在 shell 中用竖线字符 (|) 表示。
✖
28
pwd
一个用于确定您在文件系统中的位置的 cmd
pwd
是一个简单的命令,用于显示您在文件系统中的当前位置。pwd
在视觉上呈现在一个框中是巧合吗?也许。但也许这是一个视觉线索,表明 pwd
是一个小型的自包含工具,就像许多经典的 UNIX 命令一样。
✖
25
root
UNIX 系统上的管理员帐户
root 用户通常是在 UNIX 系统上授予管理员或超级用户帐户的名称。在类 Unix 系统中,root 是用户的常规名称,该用户对所有模式(例如,单用户或多用户)下的所有文件和程序具有所有权利或权限。root 用户可以执行普通用户无法执行的许多操作,例如更改文件的所有权以及绑定到编号低于 1024 的网络端口。
✖
14
Shell script
一种进程创建自身副本的操作
shell script 是一种设计为由 Unix shell 运行的计算机程序。该术语也更广泛地用于表示运行操作系统 shell 的自动模式。
✖
35
Shell's symbols
shell 的符号
巫师斗篷上的 Shell 符号
巫师的斗篷上装饰着一些符号,这些符号代表 UNIX shell 中使用的一些最重要的特殊字符。这些符号是 UNIX 力量的“符文”,允许用户组合命令、重定向输入和输出,并精确地控制进程。掌握这些符号是将普通用户转变为“UNIX 巫师”的一部分。
%
– 作业控制
用于引用 shell 中的后台作业。
jobs
→ 列出后台作业。fg %1
→ 将作业 1 带到前台。bg %2
→ 在后台恢复作业 2。
$
– 变量扩展和 Shell 提示符
表示变量和参数替换。
$HOME
→ 扩展为HOME
环境变量的值。$?
→ 显示上一个命令的退出状态。
也经常作为 shell 提示符出现在普通用户。
>
– 输出重定向
将标准输出重定向到文件。
ls > files.txt
→ 将ls
的输出写入files.txt
(覆盖它)。
<
– 输入重定向
从文件重定向标准输入。
sort < input.txt
→ 从input.txt
读取输入,而不是从键盘读取。
*
– 通配符 (Glob)
匹配文件名中的任意数量的字符。
ls *.txt
→ 列出所有以.txt
结尾的文件。rm *
→ 删除当前目录中的所有文件(危险!)。
!
– 历史记录扩展
扩展为先前执行的命令。
!!
→ 重复上一个命令。!ls
→ 重复以上一个以ls
开头的命令。!$
→ 扩展为上一个命令的最后一个参数。
[
]
– 测试/条件表达式
用于 shell 条件和 if
语句。
[ -f file.txt ]
→ 测试file.txt
是否为常规文件。- 在 shell 脚本编写中很常见:
if [ -f file.txt ]; then
echo "File exists!"
fi
✖
39
skull
重定向到 stdout/stdin
连接到 shell 的头骨可能象征着 /dev/null
,这是一种特殊的 UNIX 设备,它会丢弃所有写入其中的数据。在 UNIX 中,将输出重定向到 /dev/null
会有效地将其发送到“黑洞”,在那里它永远丢失。输出重定向是更广泛的 standard stream UNIX 概念的一部分,该概念允许将一个进程的输出重定向到另一个进程的输入。
另一种解释是,活栓让人联想到滴水嘴兽,可能引用了 UNIX daemon 进程。
参见 (/dev/null) 标记。
✖
23
spawn
一种创建新子进程的操作
Spawning 是加载和执行新子进程的过程。密切相关的是 fork
和 exec
的概念,它们可以通过 fork 一个进程、让父进程终止并将子进程 exec
到所需的 spawn 进程中来模拟 spawning。
POSIX 允许 spawning 本身的概念,这可以比 fork
和 exec
更有效。
spawn 隐喻早在 1977 年就在 VMS 操作系统中使用。
✖
31
spells
一个检查拼写的命令
spell
是 Unix 和其他类 Unix 操作系统的标准英语拼写检查器。
原始版本由 Stephen C. Johnson 为贝尔实验室的 Version 6 UNIX 编写,于 1976 年编写。 ✖ 9 su 用于切换身份的命令 su 命令(“substitute user”或“switch user”的缩写)用于在其他用户帐户下启动 shell。通常,su 最常见的用途之一是切换到超级用户(root)帐户以获得管理权限。 ✖ 12 tar 一种用于将多个文件收集到单个存档文件中的软件实用程序。 Tar 是一种软件工具,用于将多个文件收集到单个存档文件中,通常称为 tarball。该名称来源于 “tape archive”,因为它最初是为将数据写入没有自己的文件系统的顺序 I/O 设备而开发的,例如使用磁带的设备。
该命令行实用程序于 1979 年 1 月在 Version 7 Unix 中首次引入,取代了 tp
程序(后者又取代了 tap
)。
✖
37
tee
管道中的 T 形接头,可能指的是 tee 命令。
管道的 T 形也可能引用 tee
命令,这是 UNIX 中的经典实用程序。tee
命令用于拆分命令的输出,将其同时发送到文件和管道中的下一个命令。
✖
6
The c programming language
在 Unix 创建中的关键编程语言
C 与 Unix 操作系统的历史和发展密切相关。C 由 Dennis M. Ritchie 于 20 世纪 70 年代初在贝尔实验室创建,用于将 Unix 从低级汇编重写为更高级的语言。这种转变使 Unix 在不同的硬件平台上更具可移植性,从而推动了其在学术界和工业界的迅速采用。随着时间的推移,C 发展成为历史上最具影响力和广泛使用的编程语言之一。
✖
34
traps
发送到正在运行的程序的进程间消息
Traps,或 signals,从内核发送到进程,通知进程发生了一个事件。常见的信号是中断、终止或杀死,一些信号处理对于进程间通信和协调很有用。
✖
17
troff
一个用于格式化文档处理系统文档的程序。
Troff 是贝尔实验室为 Unix 操作系统开发的文档处理系统的主要组件。Troff 代表 "typesetter roff",其中 roff
是一种排版标记语言。troff 的典型发行版包括许多文档样式的宏,包括 Unix man
页面。
Troff 由贝尔实验室在 20 世纪 70 年代开发,Joseph Ossanna 通过修改 nroff
以支持多种字体和比例间距来创建 troff
。
✖
16
usr
一个包含用户 home 目录的目录。
“用户文件系统” (/usr
) 是一个包含用户 home 目录的目录,包括可执行文件、库和共享资源。
线程的线轴也可能是对 Unix 线程 的引用,线程是轻量级进程。进程 是正在运行的程序的实例,具有自己独立的内存空间。另一方面,线程 是 进程中更轻量级的执行单元。线程 共享与进程相同的内存空间,但 可以独立运行,从而实现:
- 并行性: 程序的不同部分可以同时运行。
- 效率: 与进程相比,线程的创建速度更快,并且使用的系统资源更少。
- 轻松的数据共享: 线程可以轻松访问和修改共享数据,因为它们在同一内存空间中运行。
这使得线程成为 Unix 系统中 并发编程 的强大工具。
✖
20
uucp
一个用于文件复制请求的 Unix 程序。
uucp
是 Unix-to-Unix Copy 程序套件中的程序之一。
UUCP 最初由 Mike Lesk 在 AT&T 贝尔实验室编写。
✖
27
whoami
一个提供当前用户的有效用户名的命令
UNIX 系统上的用户可能想要切换到其他帐户,从而允许切换角色、升级或降级权限,或者可能跨网络登录到多台机器。whoami
是一个命令,告诉调用者他们以哪个用户身份登录。
最早的版本是在 2.9 BSD 中创建的。
这是 UNIX Magic 海报,最初由 Gary Overacre 在 20 世纪 80 年代中期创作,并由 UniTech Software 出版。后来在 USENIX Conference 上展出,反映了它在 UNIX 文化中的持久影响力。如果您想贡献力量,请访问 repo!
UNIX 从一开始就对我的职业生涯产生了重大影响。我第一次接触 UNIX 是在大学期间,当时我必须在连接到 HP-UX 主服务器的终端上编写我的大部分一年级编程作业。我立即被 UNIX 提供的简单性和强大功能所吸引——尤其是与我以前使用过的操作系统(例如 DOS 和 Windows)相比。
那次经历改变了我对计算机的看法。从那时起,我就再也没有回头——UNIX 一直是我在计算旅程中的忠实伴侣。这个项目是我谦卑的演绎——对 UNIX 及其对我的持久影响的庆祝。
$ ./enjoy
-drio
UNIX Magic 海报注解
准备好见证一些 UNIX 魔法吧... 🪄
关于
1
15
18
7
40
21
19
32
8
26
33
38
13
24
5
30
22
2
29
4
10
11
36
3
28
25
14
35
39
23
31
9
12
37
6
34
17
16
20
27
✖
1
Shell
控制系统的入口
在 UNIX Magic 海报中,Shell 占据着显著的位置,这反映了它在 UNIX 系统中的核心作用。Shell 过去(现在仍然是)是与内核交互的主要界面,是 UNIX 用户的工作台。它是一个非常强大的工具,允许用户启动和协调进程、执行复杂的计算,并直接与操作系统交互。
Shell 不仅仅是一个界面,它也是一种完整的编程语言。用户可以编写脚本来自动化任务、控制进程,并构建管道来有效地处理数据。这使得 Shell 既具有交互性又具有可编程性——这与当时的其他操作系统截然不同。
虽然现在存在许多 Shell,但最初的是 Bourne shell (sh),它为之后的一切奠定了基础。
最后,我想强调的是,Shell 是通往 UNIX 力量的入口。它是学习 UNIX 时的第一个接触点,掌握它就能释放系统的全部潜力。我认为海报完美地捕捉到了这一点——Shell 位于巫师魔法的核心,因为它控制系统的入口。 🔝 2 man 用于获取不同 Unix 组件(包括其他 cmds)的详细文档的命令。 man(1) 命令(manual 的缩写)用于显示命令、系统调用、配置文件和系统其他方面的在线参考手册 (man pages)。man 提供了有关如何使用命令的详细文档,包括其选项、用法示例、相关文件和其他相关详细信息。
对于窗口中 man 的解释,存在一些歧义。这个人拿着一把大镰刀,这可能代表 reaping a process。在类似 Unix 的系统中,进程 reaping 是指父进程读取生成的子进程的退出状态,从而允许将子进程从进程表中删除。
其他人则认为,这个人可能代表 hacker,该术语过去表示熟练或聪明的程序员。 🔝 3 Pipes 连接 cmd 输出到 cmd 输入以创建复杂的 pipelines Pipes 是 Unix 中的一项基本功能,使您可以将简单的实用程序组合成更强大的工作流程。通过将数据从一个命令的输出传递到另一个命令的输入,管道使您可以直接在命令行快速创建灵活、高效且可维护的解决方案。它们在 shell 中用竖线字符 (|) 表示。 🔝 4 Memory leaks 计算机程序对内存的不当管理 当计算机程序不正确地管理内存分配时,就会发生内存泄漏,从而无法释放不再需要的内存。随着时间的推移,这些未释放的分配会累积,从而减少了其他进程可用的内存量,并可能导致速度减慢或崩溃。 🔝 5 Legendary figures Unix 历史中的传奇人物 在 Unix 历史的背景下,这三组首字母代表了 Unix 创建和发展中的传奇人物: dmr:Dennis M. Ritchie,Unix 的共同创建者和 C 编程语言的创建者。 kt:Ken Thompson(在历史上的 Unix 参考中通常简称为“ken”),与 Ritchie 一起成为 Unix 的共同创建者。 bwk:Brian W. Kernighan,多本有影响力的 Unix 程序和书籍的合著者(包括《The C Programming Language》和《The UNIX Programming Environment》)。 🔝 6 The c programming language 在 Unix 创建中的关键编程语言 C 与 Unix 操作系统的历史和发展密切相关。C 由 Dennis M. Ritchie 于 20 世纪 70 年代初在贝尔实验室创建,用于将 Unix 从低级汇编重写为更高级的语言。这种转变使 Unix 在不同的硬件平台上更具可移植性,从而推动了其在学术界和工业界的迅速采用。随着时间的推移,C 发展成为历史上最具影响力和广泛使用的编程语言之一。 🔝 7 Backpressure 告诉生产者停止发送数据,因为消费者无法跟上 当两个进程通过管道进行通信时,发送数据的进程是生产者,接收数据的进程是消费者。如果生产者发送数据的速度快于消费者处理数据的速度,操作系统会维护一个缓冲区来临时存储数据。但是,如果缓冲区已满,操作系统将阻止生产者,直到有可用空间为止。
这是艺术家的意图吗?你来决定——管道中的阀门手柄是对 UNIX 反压的一个巧妙参考,还是有点牵强? 🔝 8 Daemons 在后台运行并监督系统或为其他进程提供功能的服务进程 Daemons 是在后台运行的程序,通常在系统启动时启动。它们通过执行某些任务来响应网络请求、硬件活动或其他程序。诸如 cron 之类的 daemons 也可以在计划的时间执行定义的任务。
这个术语是由麻省理工学院 Project MAC 的程序员创造的。它受到麦克斯韦妖和希腊神话的启发,作为在后台工作的超自然生物的隐喻。 🔝 9 su 用于切换身份的命令 su 命令(“substitute user”或“switch user”的缩写)用于在其他用户帐户下启动 shell。通常,su 最常见的用途之一是切换到超级用户(root)帐户以获得管理权限。 🔝 10 null null 设备是一个设备文件,它会丢弃所有写入其中的数据,但报告写入操作已成功。 Null device 是一个设备文件,它会丢弃所有写入其中的数据,但报告写入操作已成功。此设备在 Unix 和类 Unix 系统上称为 /dev/null。null 设备通常用于处理进程不需要的输出流,或作为输入流的方便空文件。 🔝 11 Oregano 牛至事件 来自 Sarah Groves Hobart:
据说牛至是指一个事件,其中一个与 BSD 相关的原始人员因携带一袋被认为是违禁品的物品越过加拿大/美国边境而受到骚扰,结果证明是牛至。 🔝 12 tar 一种用于将多个文件收集到单个存档文件中的软件实用程序。 Tar 是一种软件工具,用于将多个文件收集到单个存档文件中,通常称为 tarball。该名称来源于 “tape archive”,因为它最初是为将数据写入没有自己的文件系统的顺序 I/O 设备而开发的,例如使用磁带的设备。
该命令行实用程序于 1979 年 1 月在 Version 7 Unix 中首次引入,取代了 tp
程序(后者又取代了 tap
)。
🔝
13
fork
一种进程创建自身副本的操作
在多任务操作系统中,进程需要一种创建