mknod命令的作用是什么?


51

我刚开始使用Ubuntu作为主要操作系统,我想学习一些我不应该做的事情,并了解人们过去做过的坏事。我收到了这些电子邮件这些邮件讲述了UNIX和Linux sys管理员在新系统上在自己的系统上所做的恐怖故事。他们中的许多人都使用了mknod命令来发现和解决问题。我以前从未听说过此命令,而Ubuntu中的手册页不是很有帮助。所以我的问题是,该命令用于什么用途?在日常使用中有哪些有用的示例?

Answers:


47

mknod最初用于创建角色并阻止填充的设备/dev/。如今,udev当内核检测到相应的硬件时,类似软件之类的软件会自动在虚拟文件系统上创建和删除设备节点,但最初/dev只是其中的一个目录,/该目录是在安装期间填充的。

因此,是的,在几乎完全灾难导致/dev虚拟文件系统无法加载和/或udev无法正常运行的情况下,可以mknod尽力地重新填充至少一个基本的设备树来备份某些东西 ……但是,是的,这是系统管理员的恐怖讲故事的时间。就个人而言,我建议使用应急USB记忆棒或CD。

除了创建命名管道外,我无法想到最终用户可能需要担心的单个日常使用-甚至扩展了“日常使用”的定义。


因此,这是创建虚拟文件的一种非常专业的方法,该虚拟文件实际上被连接到系统的设备用作与系统进行通信的方式,而不必学习如何通过其驱动程序与设备进行通信?
马克汤姆林

1
但是udev是特定于Linux的,不是吗?也许其他类似Unix的系统仍在手动创建设备?
Faheem Mitha

2
@mark Er,不。创建虚拟设备文件是软件如何通过其驱动程序与设备通信的方式。驱动程序在内核中创建钩子;mknod创建将钩子链接到软件可以随后连接到的设备文件的设备文件。
Shadur 2011年

@Faheem我不确定;FreeBSD似乎使用了devfs和/或,devd但是我都没有亲身经历。我怀疑其他联合国机构已经找到了自己的方法来使制造设备节点的过程自动化。
Shadur 2011年

@mark例如,Alsa /dev/snd对应于它检测和支持的声音硬件每一位的各个元素生成一系列节点。使用声音的软件可以使用这些设备生成声音,而不必确切知道他们正在与哪种声卡通话。
Shadur 2011年

7

您可以使用它来创建命名管道。

我将其与一个程序一起使用来读取,而另一个程序则将其写入。

使流程之间的通信更加容易。

否则,您可以为不存在的设备创建设备文件。

另外:http : //publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds3/mknod.htm


虽然您的答案是正确的,但是Shadur提供的答案对于所有级别的读者都是显而易见的,因此我认为这是寻找该问题答案的人们的最佳选择。
马克·汤姆林

我知道,我只是尝试从实际方法中进行解释。使用mknod比使命名管道别的东西比少见多。
polemon

5

当oracle DBA在原始设备上创建Oracle ASM磁盘组时,我们经常使用它们mknod来链接设备。

上面的回复对我很有帮助,因为我们不是系统管理员。我只是想指出,从存储管理员的角度来看,使用它可能很少见,mknod但从Oracle ASM的角度来看,它是一种常见用法。(也许有人可以为我们提供更好的方法?)


1
我在Linux上运行ASM,没有任何理由运行mknod。我有一些udev脚本可以建立符号链接,但不确定是否需要mknod ...除非您不在Linux上。当然。
derobert

@JayJee注意,在现代的Linux系统中,如果你进行更改或添加到/devmknod,这些更改将在下次系统重新启动离开。您需要编写一个脚本或udev规则文件,以便在启动时为您进行更改/添加,以使其持久化。
telcoM

3

恕我直言,即使是用于创建命名管道,mkfifo命令也比mknod更好。第一,它的名称具有自我描述性,第二,它允许-m选项覆盖umask设置。


1
...直到命名管道十年后才出现;mknod foo p当这是唯一的方法时,我们很多人都学会了。

直到最近浏览coreutils时,我才听说过mknod。我一直只用过mkfifo ...
六点

0

AT&T在Unix(tm)版本4中向被许可方发布了“ mknod”命令。我会建议大家花些时间和金钱来获得一份副本是值得的

贝尔系统技术杂志,57:6。1978年7月至8月,第1905-1929页。UNIX分时系统。(DM里奇;肯塔基州汤普森)

这个问题,尤其是该文章,将使您对几个基本概念有所了解,这些基本概念允许构建Unix(tm)曾是优雅,紧凑,快速,稳定,安全和通用的操作系统。现在可用的各种系统仍然相当通用;-)

我会在这里提及其中一些。

1)setuid和setgid位以及这些位的使用如何使用户分为可信和不可信特权域。Hop永无止境,可信赖的用户将不太可能将系统命令为“#cd /;”。rm -rf * .o”,请注意特权的不当使用和“破坏空间”。还请注意,带引号的句子结尾指示句号和结束引号的顺序。英语语法sucks(fm)。dmr和ken向公众捐赠了该学期专利,祝福他们。

2)通过与文件相同的名称空间访问设备。在这里,小工具的简单优雅与其他简单的工具相结合,可以执行创始人未曾想到的活动。

3)数据空间中的文件是字符串。结构是由程序空间中的程序所强加的,并不与复杂的Swiss-Army-Knife程序紧密相关。如果其中更多的产品阅读BSTJ,则Apple(R),Microsoft(R)和IBM(R)可能会有更好的产品。

4)stdin,stdout,stderr。

5)shell,解释性命令处理器,能够轻松组合简单的工具。

6)仅在内部循环中优化代码,在有限的时间和金钱上花费有限的时间。

7)不要在语言翻译处理器中嵌入I / O语法。

C. <FORTRAN

8)吻

9)“设计并实现将多用户分时使用ayaeem系统扩展设计为良好的实时系统要比用另一种方式更容易,”我说到RSX-11D的分时扩展,它是使用MACRO编写的小型工具实现的当不可避免时为11,否则高级语言的PR脚本就很好了,16个用户使用248k字节的PDP-11 // 45(其余内核为16k固态存储器)。使用LAB-11和创造性的自定义A / D接口,使用FOCAL,BASIC,FORTRAN IV,C,MACRO-11,链接编辑,程序执行,批处理,交互以及控制/数据采集进行多个科学实验的并行程序开发, D / A,高分辨率时钟,...

使用9600baud CRT或120cps打印机30cps DECwriters时,没有明显的刺激性延迟编辑。300 lpm打印机有点断断续续。UT200和2780(用于RJE)。比RSX-11M,RSX-11M +,IAS和VMS的早期版本更快的程序开发。

一个真正简单的分时调度程序,使用优先级链接的ATL的出队列特性,实现为实时任务。

如今,Unix品种迅猛发展,但这只是因为CPU可以在三秒钟内完成无限循环。TFC。


请原谅我输入错误。iPhone和帕金森氏症的配合不好。C <FORTRAN <COBOL <PL / 1,左更好。
k6mrm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.