先阅读 从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操作。
不光是我举例的硬盘,网卡等其他设备其实也是。