从0开始云平台(2.9) --- Everything is a file

sin 2022-12-08 PM 1519℃ 0条

先阅读 从0开始云平台(2.8) --- 硬盘分区、格式化与挂载

介绍

linux的设计哲学是"In UNIX, everything is a file"。这里我说一下我自己的理解。

文件的意思是

  • 所有设备都被映射成一个文件
  • 对设备的操作都被映射为read,write函数

光这么说很难理解,我们可以举例来说明

块设备

虽然说所有设备都是文件,但是 说到底 ,一个 txt文档和 一个硬盘从底层来说,肯定是不一样的,有很多差别。所以,不同设备的文件 还有一个类型区别。

首先说一下设备文件分类,我们在文章开头Load的第一张图片(注意 图片中有错误),就是文件类型

  • - 普通文件
  • d 目录文件
  • l 软链接
  • s 套接字文件
  • p 管道文件
  • c 字符文件
  • b 块设备文件

我们来看一下文件

ls -al|grep "^b"

  • nvme0n1 是我nvme接口的第一块硬盘
  • nvme0n1p1 这是我的硬盘上的第一个分区(partion 1)
  • nvme0n1p2 这是我的硬盘上的第二个分区(partion 2)
  • nvme0n1p3 这是我的硬盘上的第三个分区(partion 3)
  • sr0 是我们的光驱
  • zram0 是内存压缩技术创建的一个块设备

我们最常接触的块设备就是硬盘。

增加一个硬盘20G的硬盘

重新再看一下文件

ls -l /dev|grep ^b

我们看到一个新增的sda,sata接口的第一个硬盘,sata接口的第二个硬盘叫sdb。

read/write接口

接下来,我们把上面加入的 /dev/sda 当作普通文件来使用。

with open('/dev/sda', 'rb') as f:
    f.seek(0, 2)
    disk_size = f.tell()
    print(disk_size)

这个首先打开文件,然后移动到末尾,然后打印出偏移量。

  • 对于普通文件,这是打印出文件大小
  • 对于硬盘,这是打印出硬盘大小。

这就做到了 把硬盘抽象成文件。

总结

综上,我们对不同设备的操作,都可以理解为对这个设备文件的read/write操作。

不光是我举例的硬盘,网卡等其他设备其实也是。

标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~