Linux 为什么在程序更改和随后的重新启动之后,/etc/network/interfaces会是空的?

Linux 为什么在程序更改和随后的重新启动之后,/etc/network/interfaces会是空的?,linux,network-programming,debian,embedded-linux,Linux,Network Programming,Debian,Embedded Linux,我在嵌入式设备上运行node.js服务器,该设备提供web UI,允许用户修改网络接口设置,例如,从静态更改为DHCP或从DHCP更改为DHCP,或使用这些用户驱动的配置参数设置特定的静态IP设置(网络掩码、网关),等等,我能够以编程方式生成一个新的/etc/network/interfaces文件(当然,在将以前的文件备份到/etc/network/interfaces.bak文件之后)。我甚至对新配置文件的日志文件执行“cat/etc/network/interfaces”,以确认新接口文件

我在嵌入式设备上运行node.js服务器,该设备提供web UI,允许用户修改网络接口设置,例如,从静态更改为DHCP或从DHCP更改为DHCP,或使用这些用户驱动的配置参数设置特定的静态IP设置(网络掩码、网关),等等,我能够以编程方式生成一个新的/etc/network/interfaces文件(当然,在将以前的文件备份到/etc/network/interfaces.bak文件之后)。我甚至对新配置文件的日志文件执行“cat/etc/network/interfaces”,以确认新接口文件的内容和语法有效性。到目前为止,一切都很好

但是,如果在我的设备上重新启动(无论是否在重新启动前使用/etc/init.d/networking stop/start),我发现很多时候系统都会出现一个空的/etc/network/interfaces文件,因此没有网络接口。(幸运的是,我有一个允许SSH连接的JTAG接口,因此仍然可以连接到我的设备,但对用户来说,他们的设备基本上是砖砌的。)

什么会导致操作系统清空/etc/network/interfaces文件?我认为这必须在系统初始化期间完成-但原因是什么

如果我使用文本编辑器手动进行相同的更改并重新启动,那么一切都很好——每次都会出现新的界面设置

我无法解释是什么导致了这种行为

--

以下是我考虑过但排除的其他因素:

  • 可能文件保存不正确?我排除了这个可能性,因为 cat命令将指示它已成功保存
  • 可能还有其他文件(或持久设置)需要修改,如果没有这些文件,配置将被视为无效和空白?我排除了这一点,因为我的理解是接口文件是接口设置所需的唯一配置
  • 接口文件中可能存在语法错误。我已经裁决了 这是因为我将编程输出与有效文件进行了比较 事情看起来很好。此外,我不认为语法错误 会导致文件空白

编辑:我的设备基于TI Sitara,运行Debian Wheezy 3.14版本。我将node.js v0.12.x作为服务器后端运行。

可能修改的文件没有刷新到磁盘,而是保留在缓存中。
cat
命令可以从该缓存中读取文件


尝试使用
sync
()强制刷新底层存储。

可能文件未刷新到磁盘。
cat
可以从缓存中工作。看看
sync
()是否能起到作用。@Malt,你能把这当作一个答案吗?我已经用“sync”作为我服务器网络配置过程中的一个编程步骤运行了一些测试,一切似乎都正常。我想感谢你的贡献-非常感谢!我相信,作为答案,这对以后的其他人也会很有用。我认为未来的读者可以添加嵌入式设备的品牌和型号以及您正在运行的操作系统。其他人可能会在各种其他文件中遇到同样的问题。正如Malt所怀疑的,node.js的fs.write命令似乎从未完全提交到磁盘,但发出sync命令能够确保将文件保存到磁盘,因此在重新启动后就存在了。