/dev/sda
为什么可以像使用cat
十六进制编辑器一样查看块设备文件的内容?为什么我不能对像这样的字符设备做同样的事情/dev/pts/3
?
答案1
Unix 上的设备就像文件一样,但又不一样。对于某些设备来说,它对于设备软件的读取和写入的实现者来说更有意义,而对于其他设备来说,仅实现其中一种更有意义。
这并不是因为/dev/pts/3
它是字符设备而无法读取,而是存在其他可以读取的设备。对于该pts
设备,我可以看到读回可能意味着将字符作为screenwidth*screenheight
长度的线性数组从屏幕上取回,但这并不是非常有用也不是高效的。
虽然年纪有点大了,Linux 设备驱动程序,第 3 章是关于这个主题的有趣读物。
答案2
这(不一定)不是字符设备和块设备之间的区别。例如,/dev/urandom
是一个字符设备,您当然可以cat
在它上使用。
在您的情况下,/dev/sda
指的是已经存在的存储,因此从中读取会读取现有的存储。然而,/dev/pts/3
它是一个伪终端,从它读取数据会阻塞(等待),直到下一个输入字符准备好为止。
另一个区别是您可以寻找到设备上的特定位置,该位置提供对持久存储的访问,但您无法在终端上查找。
答案3
这解释了它/dev/pts/3
的用途以及你可以用它做什么。/dev/sda
指向您可以读取和写入的 HDD/SSD。当您在 上编辑数据时/dev/sda
,您将直接写入驱动器,而不一定写入分区。如果这样做,可能会损坏分区,因此它通常不用于保存数据。然而,在某些情况下,直接写入磁盘会很方便(例如,dd
为了安全地擦除磁盘)。在 Unix 中,一切都是文件,但您无法读取和/或写入每个文件。