“一切皆文件”在 Linux 中意味着什么?“一切皆文件”在 Linux 中意味着什么?“一切皆文件”在 Linux 中意味着什么?“一切皆文件”在 Linux 中意味着什么?
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

“一切皆文件”在 Linux 中意味着什么?

Linux 和其他类 UNIX 操作系统的定义特征之一是“一切皆文件”。这是一种过度简化,但理解它的含义将有助于您理解 Linux 的工作原理。

Linux 上的许多东西都出现在你的文件系统中,但它们实际上并不是文件。它们是代表硬件设备、系统信息和其他内容的特殊文件——包括随机数生成器。

这些特殊文件可能位于伪文件系统或虚拟文件系统中,例如 /dev,其中包含表示设备的特殊文件,以及 /proc,其中包含表示系统和进程信息的特殊文件。

/过程

例如,假设您想查找有关您的 CPU 的信息。 /proc 目录包含一个包含此信息的特殊文件 - /proc/cpuinfo。

您不需要告诉您 CPU 信息的特殊命令——您可以使用任何适用于纯文本文件的标准命令来读取此文件的内容。例如,您可以使用命令 cat /proc/cpuinfo 将此文件的内容打印到终端——将您的 CPU 信息打印到终端。您甚至可以在文本编辑器中打开 /proc/cpuinfo 来查看其内容。

请记住,/proc/cpuinfo 实际上并不是包含此信息的文本文件——Linux 内核和 proc 文件系统将此信息作为文件公开给我们。这使我们能够使用熟悉的工具来查看和处理信息。

/proc 目录还包含其他类似的文件,例如:

  • /proc/uptime – 显示您的 Linux 内核的正常运行时间 – 换句话说,您的系统在没有关闭的情况下运行了多长时间。
  • /proc/version – 公开您的 Linux 内核的版本。

/开发

在 /dev 目录中,您会找到代表设备的文件以及代表其他特殊事物的文件。例如,/dev/cdrom 是您的 CD-ROM 驱动器。 /dev/sda 代表你的第一个硬盘,而 /dev/sda1 代表你第一个硬盘上的第一个分区。

想挂载您的 CD-ROM?运行 mount 命令并指定 /dev/cdrom 作为您要挂载的设备。想要对您的第一个硬盘进行分区吗?运行磁盘分区实用程序并将 /dev/sda 指定为要编辑的硬盘。想要格式化您的第一个硬盘驱动器上的第一个分区?运行格式化命令并告诉它格式化/dev/sda1。

如您所见,将这些设备公开为文件系统的一部分有其优势。文件系统提供了一个一致的“名称空间”,所有应用程序都可以使用它来寻址和访问设备。

/dev/null、/dev/random 和 /dev/zero

/dev 文件系统不仅仅包含代表物理设备的文件。以下是它包含的三个最著名的特殊设备:

  • /dev/null – 丢弃写入其中的所有数据 – 将其视为垃圾桶或黑洞。如果您看到一条评论告诉您将投诉发送到 /dev/null – 这是一种古怪的说法“将它们扔进垃圾桶。”
  • /dev/random – 使用环境噪声产生随机性。这是一个您可以利用的随机数生成器。
  • /dev/zero – 产生零——一个恒定的零流。

如果您将这三个视为文件,您将看不到它们的用途。相反,将它们视为工具。

例如,默认情况下,Linux 命令会产生错误消息和其他输出,它们会打印到标准输出(通常是终端)。如果你想运行一个命令而不关心它的输出,你可以将该输出重定向到 /dev/null。将命令的输出重定向到 /dev/null 会立即丢弃它。您可以将此方法与任何命令一起使用,而不是让每个命令都实现自己的“安静模式”。

命令 > /dev/null

如果你想要一个随机源——比如,为了生成一个加密密钥,你不需要编写你自己的随机数生成器——你可以使用 /dev/random。

要通过向硬盘写入 0 来擦除硬盘内容,您不需要专用于对驱动器进行清零的特殊实用程序——您可以使用标准实用程序和 /dev/zero。例如,dd 命令从一个位置读取并写入另一个位置。以下命令将从 /dev/zero 中读取零并将它们直接写入系统的第一个硬盘分区,完全擦除其内容。

(警告:如果您运行此命令,它将清除您第一个分区上的所有数据。只有在您想要销毁数据时才运行此命令。)

dd if=/dev/zero of=/dev/sda1

这里我们使用 dd 处理特殊文件(/dev/zero 和 /dev/sda1),但我们也可以使用 dd 读取和写入实际文件。同一命令既适用于直接操作设备,也适用于处理文件。

澄清

实际上,“一切都是字节流”比“一切都是文件”更准确。 /dev/random 不是一个文件,但它肯定是一个字节流。而且,虽然这些东西在技术上不是文件,但它们可以在文件系统中访问 - 文件系统是一个通用的“名称空间”,所有内容都可以访问。想要访问随机数生成器或直接从设备读取?你将在文件系统中找到两者;不需要其他形式的寻址。

当然,有些东西实际上并不是文件——在您的系统上运行的进程不是文件系统的一部分。 “一切都是文件”是不准确的,但很多东西确实表现为文件。

©2015-2025 艾丽卡 support@alaica.com