这是关于 Unix 魔法的介绍,包含众多 Unix 相关的概念、工具及历史等内容:
- UNIX 魔法海报:由 Gary Overacre 于 20 世纪 80 年代中期创建,后在 USENIX 会议展出,其影响力深远,可在repo贡献。
- 对作者的影响:作者大学时接触 HP-UX 主机,被 Unix 的简洁和强大吸引,从此 Unix 成为其计算之旅的伙伴,此项目是对 Unix 及其影响的庆祝。
- Unix 中的壳(Shell):在 Unix 魔法海报中位置突出,是与内核交互的主要界面,是强大工具,可编写脚本自动化任务等,是其他操作系统所没有的,最初的 Bourne shell(sh)奠定了基础,掌握壳可解锁 Unix 系统的全部潜力。
- man 命令:用于显示在线参考手册,关于命令等的详细文档,窗口中的 man 手持镰刀可能代表收割进程或黑客。
- 管道(Pipes):Unix 的基础特征,能将简单工具组合成更强大的工作流,通过垂直栏字符(|)传递数据,是灵活、高效、可维护的解决方案。
- 与 Unix 历史相关的人物缩写:dmr 是 Dennis M. Ritchie,kt 是 Ken Thompson,bwk 是 Brian W. Kernighan,他们在 Unix 的创建和发展中起重要作用。
- C 语言与 Unix:C 语言由 Dennis M. Ritchie 在 20 世纪 70 年代初创建,用于将 Unix 从低级汇编重写成高级语言,使其更易于在不同硬件平台上移植,成为历史上最有影响力的编程语言之一。
- 进程通信(Producer 和 Consumer):通过管道通信时,发送数据的是生产者,接收数据的是消费者,操作系统会维护缓冲区,满时会阻塞生产者。
- 守护进程(Daemons):在后台运行,在系统启动时启动,响应网络请求等执行任务,如 cron 按计划执行任务,其名称源于 Maxwell 的恶魔和希腊神话。
- su 命令:用于在不同用户账户下启动 shell,通常用于切换到超级用户(root)账户以获得管理权限。
- 空设备(Null device):丢弃写入的数据但报告写入成功,通常用于处理不需要的输出流或作为空文件。
- Tar 工具:用于将多个文件收集到单个归档文件(tarball)中,最初用于将数据写入磁带等设备,1979 年在 Version 7 Unix 中引入。
- Forking 进程:在 Unix 类系统中创建新进程的方式,最早在 1962 年的 A Multiprocessor System Design 中出现。
- Shell 脚本:为在 Unix 壳中运行而设计的计算机程序,是运行操作系统壳的自动化模式。
- AWK 语言:用于文本处理的领域特定语言,由 Alfred Aho、Peter Weinberger 和 Brian Kernighan 在 Bell Labs 于 20 世纪 70 年代创建。
/usr/spool
目录:用于临时存储等待处理的数据。- Threads 与 UNIX:早期 Unix 没有线程,Andrew Tannenbaum 指出这一点,并提供了 Rob Pike 的 UNIX 测验链接。
- Troff 文档处理系统:Bell Labs 为 Unix 操作系统开发的主要文档处理系统组件,由 Joseph Ossanna 创建。
- B 语言:为递归、非数值、与机器无关的应用设计的编程语言,由 Ken Thompson 和 Dennis Ritchie 在 Bell Labs 于 1969 年开发,已被 C 语言取代。
cat
命令:用于连接文件,最初版本由 Ken Thompson 和 Dennis Ritchie 在 Unix 1 版中编写。uucp
程序:Unix-to-Unix Copy 程序套件中的一个程序。- 关于袜子和靴子的讨论:可能代表 Unix 操作系统的启动过程或网络套接字,网络套接字是 Unix 在 BSD UNIX 中开创的,对现代网络编程有重要影响。
- Make 命令:用于读取配置
Makefile
进行代码编译和自动化,Stuart Feldman 于 1976 年在 Bell Labs 完成早期版本。 - Spawn 进程:加载和执行新子进程的过程,与
fork
和exec
相关,POSIX 允许独立的 spawn 概念,其早期在 VMS 操作系统中使用。 nroff
程序:用于格式化 man 页面的文本格式化程序,由 Joseph Frank Ossanna 为 Version 2 Unix 创建。- 根用户(Root user):Unix 系统中的管理员或超级用户账户,拥有所有文件和程序的权限。
date
命令:用于显示和设置 Unix 系统日期,最早版本的 Unix 时间有 32 位整数限制,当前的 1970 年 1 月 1 日 00:00:00 UTC 是任意选择的。whoami
命令:用于显示当前登录的用户,最早版本在 2.9 BSD 中创建。pwd
命令:显示当前在文件系统中的位置,其在海报中的呈现方式可能有特殊含义。mbox
格式:早期 Unix 中的邮件格式,所有邮件消息存储在单个文件中,便于系统日志和通知的集成。login
命令:是进入系统的网关,进行用户认证等操作。spell
命令:Unix 上的标准英语拼写检查器,最初版本由 Stephen C. Johnson 在 1976 年为 Version 6 Unix 编写。curses
库:提供在 Unix 终端中进行图形和光标定位的抽象层,由 Ken Arnold 编写并最初与 BSD UNIX 一起发布。diff
命令:用于比较文件内容的差异,在 20 世纪 70 年代初的 Bell Labs 开发。- Shell 符号在巫师披风上:巫师披风上的符号代表 Unix 壳中的重要特殊字符,如
%
用于作业控制,$
用于变量扩展和壳提示符,>
用于输出重定向,<
用于输入重定向,*
用于通配符,!
用于历史扩展,[
]
用于测试和条件表达式。 - 可能的缓冲溢出意象:海报中溢出的液体可能是对 Unix 中缓冲溢出的视觉参考,缓冲溢出是 C 编程中的常见漏洞。
- 管道的 T 形与
tee
命令:管道的 T 形可能参考tee
命令,用于分割命令输出。 - 液体的树状形状:可能参考 Unix 文件系统层次结构,象征用户在目录中移动、访问文件和执行命令,也可能代表递归操作或进程树的父-子关系。
- skull 与
/dev/null
:连接到壳的 skull 可能象征/dev/null
,将数据丢弃,也可能参考守护进程。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。