美国国防部高级研究计划署。也称为 DARPA(“D”代表“国防”),它起源于 1960 年代后期和 1970 年代初期,提出了互联网的提案和标准。因此,互联网最初被称为 ARPANet,它以旨在高度抵抗核攻击的方式将军队与美国各地的研究中心连接起来。
Bourne Again Shell,基于最初的命令解释器 Bourne shell (sh)。
Bourne shell 是最初的 Unix shell(命令执行程序,通常称为命令解释器),由 AT&T 开发。Bourne shell 以其开发者 Stephen Bourne 命名,也以其程序名 sh 而闻名。shell 提示符(指示准备好输入时显示的字符)使用 $ 符号。Bourne shell 家族包括 Bourne shell、Korn shell、bash 和 zsh shell。Bourne Again Shell (bash) 是与 Linux 系统一起发行的 Bourne shell 的免费版本。Bash 与最初的版本类似,但添加了命令行编辑等功能。它的名称有时拼写为 Bourne Again SHell,大写的 Hell 指的是有些人认为它很难用。
CLI(命令行界面)是计算机操作系统或应用程序的用户界面,用户在其中通过在指定的行中键入命令来响应可视提示,接收来自系统的响应,然后输入另一个命令,依此类推。Windows 操作系统中的 MS-DOS 提示符应用程序是提供命令行界面的一个示例。如今,大多数用户更喜欢 Windows、Mac OS、BeOS 等提供的图形用户界面 (GUI)。通常,当今大多数基于 Unix 的系统都提供命令行界面和图形用户界面。
当程序由于错误或违反操作系统或硬件的保护机制而意外终止时,会创建 core 文件。操作系统会终止程序并创建一个 core 文件,程序员可以使用该文件来找出问题所在。它包含程序在崩溃时的状态的详细描述。如果您想确定 core 文件来自哪个程序,请使用 file 命令,如下所示:$ file core 这将告诉您生成 core dump 的程序的名称。您可能需要写信给程序的维护者,告诉他们他们的程序 dumped core。要启用或禁用 Core Dump,您必须在 bash 中使用 ulimit 命令,在 tcsh 中使用 limit 命令,或在 ksh 中使用 rlimit 命令。有关详细信息,请参阅相应的手册页。此设置会影响从 shell 运行的所有程序(直接或间接),而不是整个系统。如果您希望默认情况下为所有进程启用或禁用 core dump,则可以在 /usr/include/linux/sched.h 中更改默认设置。请参阅 INIT_TASK 的定义,并查看 /usr/include/linux/resource.h。PAM 支持优化系统环境,包括允许用户使用的内存量。在某些发行版中,此参数可在 /etc/security/limits.conf 文件中配置。有关更多信息,请参阅 Linux 管理员安全指南。
在后台潜伏的进程,通常不被注意,直到某些事情触发它采取行动。例如,\cmd{update} daemon 大约每三十秒唤醒一次以刷新缓冲区缓存,而 \cmd{sendmail} daemon 在有人发送邮件时唤醒。
国防高级研究计划署是国防部 (DoD) 的中央研究和发展组织。它为国防部管理和指导选定的基础和应用研究与开发项目,并追求风险和回报都很高,且成功可能为传统军事角色和任务提供巨大进步的研究和技术。
动态主机控制协议,是一种类似于 BOOTP 的协议(实际上 dhcpd 包括 BOOTPD 的大部分功能)。它根据租用时间为客户端分配 IP 地址。DHCP 被 Microsoft 广泛使用,最近也被 Apple 广泛使用。它在任何多平台环境中都可能是必不可少的。
域名系统将互联网域名和主机名转换为 IP 地址。DNS 实施分布式数据库,以存储网络上所有公共主机的名称和地址信息。DNS 假定 IP 地址不会更改(即,静态分配而不是动态分配)。DNS 数据库驻留在特殊用途服务器的层次结构中。当访问网站或网络上的其他设备时,称为 DNS 解析器的一段软件(通常内置于网络操作系统中)首先联系 DNS 服务器以确定服务器的 IP 地址。如果 DNS 服务器不包含所需的映射,它将依次将请求转发到层次结构中更高level的 DNS 服务器。在 DNS 层次结构中发送了可能多次转发和委派消息后,给定主机的 IP 地址最终会传递给解析器。DNS 还包括对缓存请求和冗余的支持。大多数网络操作系统允许用户输入主、辅助和第三级 DNS 服务器的 IP 地址,每个服务器都可以为来自客户端的初始请求提供服务。许多 ISP 维护自己的 DNS 服务器,并使用 DHCP 自动将这些服务器的地址分配给拨号客户端,因此大多数家庭用户无需了解 DNS 配置背后的详细信息。注册的域名和地址必须定期续订,如果双方就给定名称的所有权发生争议(例如在商标方面),则可以调用 ICANN 的统一域名争议解决政策。也称为域名系统、域名服务、域名服务器。
环境变量,shell 启动的任何程序都可以使用的变量。
Enlightened Sound Daemon(启蒙声音守护进程)。此程序旨在将多个数字音频流混合在一起,以便由单个设备播放。
文件系统,操作系统用于跟踪磁盘或分区上文件的方法和数据结构;文件在磁盘上的组织方式。也用于描述用于存储文件或文件系统类型的分区或磁盘。
通常,创建 Linux 文件系统结构文档的组或文档本身被称为“FSSTND”。这是“file system standard”(文件系统标准)的缩写。该文档已帮助标准化了各地 Linux 系统上文件系统的布局。自该标准的最初版本发布以来,大多数发行商已经全部或部分地采用了它,这极大地造福了所有 Linux 用户。现在通常被称为 FHS(文件系统层级标准)文档,因为它已并入 LSB(Linux 标准库)项目。
图形用户界面。使用图片而不仅仅是文字来表示程序的输入和输出。具有 GUI 的程序在某些窗口系统(例如 X Window 系统、Microsoft Windows、Acorn RISC OS、NEXTSTEP)下运行。该程序在其屏幕上的窗口中显示某些图标、按钮、对话框等,用户主要通过移动屏幕上的指针(通常由鼠标控制)并通过在指针指向它们时按下鼠标上的按钮来选择某些对象来控制它。尽管 Apple Computer 想要声称他们用他们的 Macintosh 操作系统发明了 GUI,但这个概念起源于 1970 年代早期施乐的 PARC 实验室。
硬链接,目录条目,将文件名映射到 inode 号。一个文件可以有多个名称或硬链接。链接计数给出了可以访问文件的名称数量。硬链接不允许目录有多个名称,也不允许不同文件系统中有多个名称。
'init' 进程是内核启动的第一个用户级别进程。init 有许多重要的职责,例如启动 getty(以便用户可以登录)、实现运行级别以及处理孤立进程。本章解释了 init 的配置方式以及如何使用不同的运行级别。init 是对 Linux 系统的运行绝对必要的程序之一,但您仍然可以很大程度上忽略它。通常,只有在您连接串行终端、拨入(非拨出)调制解调器,或者想要更改默认运行级别时,才需要担心 init。当内核启动(已加载到内存中、已开始运行并且已初始化所有设备驱动程序和数据结构等)时,它通过启动用户级别程序 init 来完成其自身的启动过程。因此,init 始终是第一个进程(其进程号始终为 1)。内核在历史上用于它的几个位置查找 init,但它的正确位置是 /sbin/init。如果内核找不到 init,它会尝试运行 /bin/sh,如果也失败,则系统启动失败。当 init 启动时,它通过执行许多管理任务来完成启动过程,例如检查文件系统、清理 /tmp、启动各种服务以及为每个终端和用户应该能够登录的虚拟控制台启动 getty。在系统正常启动后,init 会在用户注销后为每个终端重新启动 getty(以便下一个用户可以登录)。init 还采用孤立进程:当一个进程启动一个子进程并在其子进程之前死亡时,该子进程立即成为 init 的子进程。这对于各种技术原因很重要,但了解它是有好处的,因为它使理解进程列表和进程树图更容易。init 本身不允许死亡。即使使用 SIGKILL 也无法杀死 init。有几种 init 变体可用。大多数 Linux 发行版使用 sysvinit(由 Miquel van Smoorenburg 编写),它基于 System V init 设计。BSD 版本的 Unix 有不同的 init。主要区别在于运行级别:System V 有运行级别,BSD 没有。
inode 是磁盘块的地址。当您通过 ls 查看 inode 信息时,ls 会打印文件中第一个块的地址。您可以使用此信息来判断两个文件是否真的是具有不同名称(链接)的同一个文件。文件有几个组成部分:名称、内容和管理信息,例如权限和修改时间。管理信息存储在 inode 中(多年来,连字符从“i-node”中消失了),以及必要的系统数据,例如它的长度、文件内容存储在磁盘上的位置等等。inode 中有三个时间:文件内容上次修改(写入)的时间;文件上次使用(读取或执行)的时间;以及 inode 本身上次更改的时间,例如设置权限。更改文件内容不会影响其使用时间,更改权限只会影响 inode 更改时间。理解 inode 很重要,不仅要理解 ls 上的选项,而且因为在某种程度上 inode 就是文件。所有目录层次结构所做的只是为文件提供方便的名称。系统的内部文件名是其 i-number:保存文件信息的 inode 的编号。
内核,操作系统的组成部分,实现与硬件的交互和资源共享。
库,可执行文件不应有未定义的符号,只应有有用的符号;所有有用的程序都引用它们未定义的符号(例如 printf 或 write)。这些引用通过从库中提取目标文件到可执行文件中来解决。
链接,符号链接(在 MacOS 中为别名,在 Windows 下为快捷方式)是指向另一个文件的文件;这是一种常用的工具。硬链接很少由用户创建,是一个文件名,它指向一个数据块,该数据块也具有其他几个文件名。
手册页,每个版本的 UNIX 都附带大量在线帮助页面,称为 man page(手册页的缩写)。man page 是关于您的 UNIX 系统的权威文档。它们包含有关内核和所有实用程序的完整信息。
邮件传输代理。与 Web 一起,邮件是 Internet 普及的首要原因。电子邮件是一种廉价且快速的错时消息传递方法,它非常像 Web,实际上是基于发送和接收纯文本文件。使用的协议称为简单邮件传输协议 (SMTP)。实现 SMTP 以将邮件从一台服务器移动到另一台服务器的服务器程序称为 MTA。曾经用户必须 Telnet 进入 SMTP 服务器并使用像 'mutt' 或 'pine' 这样的命令行邮件程序来检查他们的邮件。现在,像 Mozilla、Kmail 和 Outlook 这样的基于 GUI 的电子邮件客户端允许用户从本地 SMTP 服务器检查他们的电子邮件。SMTP 服务器和桌面邮件客户端之间使用 POP3 和 IMAP4 等附加协议,以允许客户端操作和从其本地邮件服务器下载文件。实现 POP3 和 IMAP4 的程序称为邮件传递代理 (MDA)。它们通常与 MTA 分开。
网络文件系统,是 UNIX 中与服务器消息块 (SMB) 等效的系统。它是不同机器可以通过它在彼此之间导入和导出本地文件的一种方式。然而,像 SMB 一样,NFS 发送包括用户密码在内的未加密信息,因此最好将其使用限制在您的本地网络内。
操作系统,在用户及其运行的应用程序之间共享计算机系统资源(处理器、内存、磁盘空间、网络带宽等)的软件。控制对系统的访问以提供安全性。
可插拔身份验证模块。一套共享库,用于确定用户将如何进行身份验证。例如,按照惯例,UNIX 用户通过在登录提示符处键入他们的姓名后在密码提示符处提供密码来验证自己的身份。在许多情况下,例如对工作站的内部访问,这种简单的身份验证形式被认为是足够的。在其他情况下,需要更多信息。如果用户想从外部来源(如互联网)登录到内部系统,则可能需要更多或替代信息 - 也许是一次性密码。PAM 提供此类功能以及更多功能。最重要的是,PAM 模块允许您使用必要的安全级别配置您的环境。
PATH,shell 在存储在 PATH 环境变量中的文件路径列表中查找命令和程序。环境变量将信息存储在其他程序和命令可以访问的位置。环境变量存储诸如您正在使用的 shell、您的登录名和您当前的工作目录之类的信息。要查看当前定义的所有环境变量的列表;在提示符下键入“set”。当您在 shell 提示符下键入命令时,shell 将按顺序在 PATH 变量中列出的每个目录中查找该命令的程序文件。将运行找到的与您键入的命令匹配的第一个程序。如果命令的程序文件不在您 PATH 环境变量中列出的目录中,则 shell 返回“commands not found”错误。默认情况下,shell 不会在您当前的工作目录或您的主目录中查找命令。这实际上是一种安全机制,这样您就不会意外执行程序。如果恶意用户在您的主目录中放置了一个名为 ls 的有害程序怎么办?如果您键入 ls 并且 shell 在 /bin 目录中的真实程序之前在您的主目录中查找伪造程序,您认为会发生什么?如果您认为会发生不好的事情,那么您就走对了。由于您的 PATH 没有将当前目录作为其搜索位置之一,因此必须使用绝对路径或指定为“./程序名”的相对路径来调用当前目录中的程序。要查看哪些目录是您的 PATH 的一部分,请输入以下命令:# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
管道和套接字,程序用来相互通信的特殊文件。它们很少见,但您可能会在 /dev/ 目录中看到一两个套接字。
进程标识符,在 ps 命令的标题中显示为 PID。分配给系统中运行的每个进程的唯一编号。
远程过程调用。它使系统能够透明地跨网络调用 NFS 等程序,使每个系统都能将调用解释为本地调用。在这种情况下,它会使导出的文件系统看起来像是本地文件系统。
设置组 ID (SGID) 权限导致脚本以其组设置为脚本的组而不是启动它的用户的组运行。通常认为以这种方式运行程序是非常糟糕的做法,因为它会带来许多安全问题。更高版本的 Linux 内核甚至会禁止运行设置了此属性的 shell 脚本。
设置用户 ID (SUID) 权限导致脚本以脚本的所有者用户而不是启动它的用户身份运行。通常认为以这种方式运行程序是非常糟糕的做法,因为它会带来许多安全问题。更高版本的 Linux 内核甚至会禁止运行设置了此属性的 shell 脚本。
信号,发送到程序的软件中断,指示发生了重要事件。事件范围从用户请求到非法内存访问错误不等。某些信号(如中断信号)表明用户已要求程序执行某些不在正常控制流程中的操作。
安全外壳,或 SSH,提供了一种通过加密连接运行命令行和图形应用程序以及传输文件的方式,所有可以看到的都只是乱码。它既是一种协议,也是一套小型命令行应用程序,可用于各种功能。SSH 取代了旧的 Telnet 应用程序,可用于跨 Internet 安全地远程管理机器。但是,它还有其他功能。SSH 通过自动设置 X 权限来提高远程运行应用程序的简易性。如果您可以登录到一台机器,它允许您在其上运行图形应用程序,这与 Telnet 不同,Telnet 要求用户了解通过 xauth 和 xhost 命令操作的 X 身份验证机制。SSH 还具有内置压缩功能,这使得您的图形应用程序在网络上运行得更快。SCP(安全复制)和 SFTP(安全 FTP)允许通过远程链接传输文件,可以通过 SSH 自己的命令行实用程序或像 Gnome 的 GFTP 这样的图形工具。与 Telnet 一样,SSH 是跨平台的。您可以找到适用于 Linux、Unix 和所有 Windows 版本、BeOS、PalmOS、Java 以及路由器中使用的嵌入式操作系统的 SSH 服务器和客户端。
标准错误。用于错误消息的特殊输出类型。STDERR 的文件描述符是 2。
标准输入。用户输入从 STDIN 读取。STDIN 的文件描述符是 0。
标准输出。脚本的输出通常是 STDOUT。STDOUT 的文件描述符是 1。
符号表,对象表的一部分,给出每个符号的值(通常作为节名称和偏移量),称为符号表。可执行文件也可能有一个符号表,该符号表给出符号的最终值。调试器使用符号表以符号形式而不是数字形式向用户呈现地址。可以从可执行文件中剥离符号表,从而生成较小尺寸的可执行文件,但这会阻止有意义的调试。
符号链接或软链接,一种特殊的文件类型,它是一个小的指针文件,允许同一个文件有多个名称。与硬链接不同,符号链接可以为目录创建,也可以跨文件系统创建。访问指向文件的命令被称为跟随符号链接。访问链接本身的命令不跟随符号链接。
系统调用,内核向应用程序提供的服务以及调用它们的方式。请参阅手册页的第 2 节。
系统程序,实现操作系统高级功能的程序,即不直接依赖于硬件的东西。有时可能需要特殊权限才能运行(例如,用于传递电子邮件),但通常只是普遍认为是系统的一部分(例如,编译器)。
tcp-wrappers,通过 inetd 提供的几乎所有服务都通过 tcp-wrappers 守护程序 tcpd 调用。tcp-wrappers 机制为它包装的服务的所有服务请求提供访问控制列表限制和日志记录。只要服务通过中央守护程序进程(如 inetd)调用,它就可以用于 TCP 或 TCP 服务。这些程序记录传入 telnet、ftp、rsh、rlogin、finger 等... 请求的客户端主机名。安全选项是每个主机、域和/或服务的访问控制;检测主机名欺骗或主机地址欺骗;用于实施早期预警系统的陷阱。
Zsh 由 Paul Falstad 开发,旨在替代 Bourne shell 和 C shell。它融合了所有其他 shell 的功能(例如文件名补全和历史机制)以及新功能。Zsh 被认为类似于 Korn shell。Falstad 旨在在 zsh 中创建一个 shell,它可以完成程序员可能合理地希望它完成的任何事情。Zsh 在高级用户中很受欢迎。与 Korn shell 和 C shell 一起,Bourne shell 仍然是使用最广泛的三种 shell 之一,并且包含在所有 UNIX 系统中。Bourne shell 通常被认为是开发脚本的最佳 shell。