有没有办法与“/dev”目录中的所有项目进行交互?

有没有办法与“/dev”目录中的所有项目进行交互?

有没有办法与目录中的所有项目进行交互/dev?据我了解,目录中的大多数项目/dev都不是“正常”文件。我想知道是否有任何命令或任何方式可以与它们交互,无论是列出它们的属性还是与它们一起做其他事情。

答案1

这是一个有点有趣的问题。我将引用您的评论:

由于大多数内容都是文件,有没有办法使用某种编辑器查看它们包含的内容?

这揭示了一种误解(我自己作为初学者就有这样的误解),即“一​​切都是文件”应该按字面意思理解。

“文件”当然是带有名称的字节集合,被视为单独的单元,通常存储在磁盘上。

当您听到“在 UNIX 中,一切皆文件”时,这不是所使用的“文件”的定义。

相反,这个意义上的“文件”是“可以使用标准以某种方式访问​​或处理的东西”系统调用用于处理文件。”

诸如此类的虚拟文件系统/proc很好地说明了这一点。中的“文件”和“目录”/proc并不是存储在磁盘上的实际文件和目录。它们没有存储在任何地方。

相反,当进程尝试读取这些文件之一时 -使用与从文件读取相同的系统调用——内核以不同的方式处理调用。内核不是从磁盘获取数据并返回数据,而是直接使用来自内核的适当运行时数据进行响应。但这是一个“透明”的抽象,因为除非要求内核这样做,否则没有进程从文件中读取数据。 (这就是“系统调用”一词所体现的概念。)

现在,其中的目录条目/dev是“特殊文件”。并非所有与文件相关的系统调用都适用于其中的每一个。然而,基本的抽象,即任何类型的特殊设备或任何事物可以通过一个进程来处理就好像它是一个文件一样,大部分情况下仍然成立。

由于 中的条目/dev是许多类型事物的抽象实际上不同的是,要给出一个涵盖您可以用它们做的所有事情类型的通用答案并不容易。

然而,要真正理解这些条目是什么、它们的含义以及如何处理它们,您应该阅读:


“文件”总是意思是“带有目录条目的东西”,它可能是也可能不是常规文件,以及“常规文件”总是表示“具有名称的字节集合”,通常简称为“文件”。

逐条回答这个问题的评论:

所以 /dev 中的所有项目都是“文件”......

是的,但都不应该是常规文件。

...但这并不一定意味着它们可以由人类编辑...

我想知道除了人类之外,你认为还有谁可以编辑任何东西?无论是一位早已离世的系统程序员还是你自己,人类是决策或意图的唯一来源。任何电脑系统。 (有关这方面的哲学背景,请参阅 Mark Burgess 的著作。):D

但我想我明白你的意思。我们可以准确地说,中的特殊文件/dev无法用普通的“文本编辑器”编辑,因为它们不是文本文件。并且,修改/dev条目本身需要 root 权限,尽管用户空间(也称为非 root)进程可能能够使用他们。

...因为在 UNIX 中,文件被称为由系统调用处理或管理的东西...

对,那是正确的。任何被称为“文件”的东西都是使用系统调用来处理的。这包括顺便说一下,常规文件。如果您使用gedit,它打开您要编辑的文件的方式是使用系统调用。它通过另一个系统调用读取文件的内容。

...但可由用户编辑。我对么?

不,最后一部分不正确。并非所有文件都可以由用户编辑。此外,当我们在这种细节级别上讨论时,“编辑”是一个非常非常不精确的词,几乎毫无意义。

相反,我们应该说所有常规文件可以由用户空间进程通过打开、读取、写入等文件的系统调用来处理,尽管这些系统调用中的任何一个都可能因各种原因而失败(权限不足、磁盘已满时尝试写入、尝试当磁盘以只读方式安装时写入,等等)。

特殊文件也可以由系统调用处理,尽管在这种情况下,对每个单独系统调用的支持取决于特殊文件的类型,并最终取决于处理该系统调用的底层驱动程序。


为了更好地理解块和字符特殊文件,请参阅:

相关内容