前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux一切都是文件的思想

Linux一切都是文件的思想

作者头像
程序那些事儿
发布2023-03-07 13:29:40
9640
发布2023-03-07 13:29:40
举报
文章被收录于专栏:程序那些事儿

介绍

  • 什么是文件?

文件就是操作系统记录和保持信息的通用结构体。与其他操作系统不同,类似 UNIX 的操作系统将一切视为通用文件。 这意味着,不仅分区作为文件装载,而且特定设备(如 RAM、智能手机、外部磁盘和光盘)的目录都是文件。除了这些,套接字和管道也是文件!

此外,每个 TTY 终端(使用CTRL ALT F1打开的终端)都是系统眼中的"文件"。

目录/dev

如果浏览 /dev 目录,您将看到相对于其他媒体对应系统装载的所有文件。就好像你把手机插入电脑,一个外部硬盘驱动器,甚至一个U盘,都变成了操作系统的"文件"。 系统分区是在 /dev 文件夹中使用"sd"启动的文件。在同一文件夹中,TY 是远程打字机设备,由"CTRL ALT F1"命令访问的外壳终端。光学媒体系统(DVD、CD 等)使用的程序集块也在此文件夹中,所有文件都在这里列出。

特殊设备

这篇文章最大的好奇心是因为这4个小文件在文件夹/dev:full,zero,random和null。你能区分他们每个人的功能吗? 它们的共同之处在于它们是"特殊档案",而不仅仅是目录。

设备空:/dev/null

null 设备(设备 null)通常用于丢弃由于某种原因结果无关紧要的进程的输出流。它还可用作一个空的便利文件。通常,此操作通过系统控制台上的重定向命令执行。发送到设备"/dev/null"的任何文件都将因操作方式而永久消失,并立即丢弃数据。

它就像一个大黑洞,一个永远也不填满的垃圾堆。

程序员因为这种特殊性而对/dev/null开很多玩笑。

请尝试以下命令:

$echo "hello world"

会看到"hello world"作为命令输出。

现在尝试:

  • $ echo "hello world"> /dev/null

将返回空输出。也就是说,什么都不会发生。

因为命令输出"hello world"被丢弃了,它被黑洞吞没了。

/dev/null 基于 UNIX 的系统的工作方式类似于黑洞:

那里发送的东西不会回来!抛开笑话不谈,基本上,进程的命令输出没有存储,它是直接丢弃,就好像它从未生成过一样。

设备已满:/dev/full

在 Linux 上,始终完整的设备是一个特殊的文件,在访问时始终返回相同的错误代码:ENOSPC -这意味着"设备上没有可用空间"。

此外,它还有另一个函数:因为它始终已满,因此它为以读取形式访问它的任何进程提供无限数量的空字符 (NULL)。此设备通常用于测试程序在遇到由于内存磁盘而出错时的行为!

请尝试以下命令:$echo "hello world">/dev/full它将给这个设备完全错误,模仿一个拥挤的硬盘! bash:echo:write error:No space left on device

零设备:/dev/zero

在类似 Unix 的操作系统上,/dev/zero 是一个特殊的文件,它提供从其中读取的空字符数 — ASCII 表的 NULL,0x00;而不是"零位"、"0"字符,其值为 0x30*。

例如,此设备生成的空字符流可用于覆盖磁盘上的信息(以清理它)或生成大小为 X 到无穷大的干净文件。BSD 系统通过 mmap 函数实现共享内存,该函数将 /dev /zero 映射到 RAM 来使用它。

创建称为"test"的大型空文件:

  • $ dd if=/dev/zero of=/home/
  • $ USER /test count=1000 bs=1000

如果不对命令施加限制,则获取为"dd if=/dev/zero=/home/ $ USER/test",您将看到一个文件,该文件将无限制增长直到磁盘写满,它才会停止增长,从而导致"无磁盘空间可用"错误。

当您要恢复分区表已损坏且无法恢复的笔驱动器时,此命令很有趣。dd命令强制写入,和 /dev /zero 将填充每个存储块,zero。它将处于新制造状态,要求您稍后使用程序(如磁盘或 Gparted)来重建分区表!

请注意此命令,如果输出为 of=/dev/sda1,则对整个 sda1 磁盘(用零填充)归零,从而使文件无法恢复。

随机设备:/dev/random

它的工作原理是使用 of=/dev/zero 相同的逻辑,但填充磁盘或使用随机值创建大小 n 的文件,这些文件由计算机处理生成、收集 GPU 信息字符、RAM 内存等。

/Dev/random 应适用于需要高质量随机数(如 SSH 和其他共享网络的一次性键盘或公钥生成)的用途。

神奇的事情!

如果我们无处派人去,会发生什么?也就是说,如果我们将 /dev/零的内容发送到 /dev/null

  • $ sudo dd if=/dev/zero of=/dev/null

此命令将生成一个趋向于无穷大的文件,该文件将记录在无限空间设备中 – 我们的黑洞!实际上,它不会损坏硬件磁盘,因为实际上不会生成数据并将其写入磁盘。但是,在内核的角度来看,有数据传输:它将产生高CPU消耗,这将选择其中一个内核来生成占用100%使用量的此类处理。

这种类型的命令用于性能测试,例如,检查计算机在 CPU 中以 100% 的用法表现。

1. 使用 DD 命令创建充满zero的 4Gb 文件。

它将在 /home/$USER 中创建;如果没有足够的磁盘空间,则更改此路径。

  • $ dd if=/dev/zero of=~/test bs= 1M count=40962

现在,让我们格式化此文件,选择具有 EXT4 格式!

  • $mkfs.ext4 -m .005 ~/test

命令中的 -m 标志会导致我们默认将 EXT4 设置为 05 的"根"空间。这对于安装系统和防止 EXT4 在默认情况下占用大量磁盘空间甚至很有用。

现在你有一个4GB的文件类型"unkown"的"test"在你的/home目录下。

把它装成分区!

  • $ sudo mkdir /media/test
  • $ sudo mount -rw ~/test/media/test/

这样我们就创建好了一个EXT4 格式文件,并且您创建了一个 EXT4 分区,我们可以在这里面创建文件或者写入东西。

可以针对任何文件格式执行相同的过程:EXT2、FAT32、NTFS 等。一切都只取决于您的需求!但是,不要认为您可以在其上安装 Windows,因为它是分区内的分区,在 EXT4(或 btrfs 或 xfs)下管理它,具体取决于您的系统)。将其作为分区安装在 Windows 上也比较棘手,因为系统不作为基于 UNIX的设备运行,将块设备读取为文件,而是以不同的方式对待它们。您甚至可以使用 -F 标志强制程序集,但只有基于 UNIX的系统才能识别并装载它。

一切都是一个文件

也就是说,文件夹、目录、分区(即存储事物的东西)只不过是定义磁盘或 SSD 扇区中的"索引文件"。当他们说基于UNIX的系统具有简单化的理念时,我们谈论的就是简单:一切都只是一个文件,显而易见,简单和实用,易于操作,直截了当。

这里最大的教训是,您只需了解操作系统 (VirtualBox) 的基本虚拟化方式:在文件(虚拟框中创建分区)以 .vdi 格式创建分区,并在安装系统内创建分区。

某些文件系统(如 JFS)通过允许更好地组织数据(如果数据较小(文本文档),在其他情况下(如果是大型文件(磁盘图像、高清照片、.flac 歌曲)时,允许它们更好地组织数据。拥有具有这些格式之一的虚拟分区可以优化消耗的磁盘空间。

  • $ sudo umont /media/test

我们就卸载了我们挂载的分区。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序那些事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • 目录/dev
    • 特殊设备
      • 设备空:/dev/null
        • 设备已满:/dev/full
          • 零设备:/dev/zero
            • 随机设备:/dev/random
              • 神奇的事情!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档