错误:ENOENT:没有这样的文件或目录,stat“时区文件”

错误:ENOENT:没有这样的文件或目录,stat“时区文件”

我正在开发一个 React 应用程序,突然它停止了,以前从来没有发生过这种情况,所以我很好奇是什么原因导致的?

我不知道之前是否有一个名为“/Kolkata”的文件,但现在它出现了lrwxrwxrwx 1 root root

下面是我收到的错误,React 应用程序停止并抛出此错误:

node_modules/react-scripts/scripts/start.js:19
  throw err;
  ^

[Error: ENOENT: no such file or directory, stat '/Kolkata'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'stat',
  path: '/Kolkata'
}

我知道错误是关于“没有文件或目录存在”,但我更感兴趣的是“为什么这个错误实际上会发生,以及如果是正常的话,为什么或在什么情况下会发生这个错误?”

答案1

它不是一个常规文件,而是一个符号链接(如l第一列所示),它看起来像是一个破碎的符号链接——即指向另一条不再存在的路径。

符号链接断开后不会自动消失;您仍然可以在目录列表中看到它们,也可以调用lstat()它们——但在调用普通方法时,您当然会收到“不存在”的错误,stat()因为这应该返回有关目标的信息,而不是有关链接的信息,而且确实存在目标。

因此,如果您的应用程序被编写为列出目录并对其找到的每个项目调用 stat(),并且碰巧找到了损坏的符号链接,则出现此错误是正常的。如果您尝试cat或以其他方式打开损坏的链接,则会收到相同的错误。(该ls工具工作正常,因为它使用 lstat(),但如果您尝试,ls -L您仍然会收到相同的错误。)

谁创建了链接?具有 root 或权限的人(可能是你)。以防万一,sudo请检查 sudo 登录或 /var/log/auth.log。journalctl -t sudo

你的应用为什么决定查看它?它正在寻找时区文件,因此它一定是从TZ环境变量或文件中获取了此路径/etc/timezone。检查两者的内容 - 如果它们存在,则应该改为显示“Asia/Kolkata”。(如果其中任何一个不存在,也没关系。)

此外,检查/etc/localtime文件 - 它定义了系统范围的时区,它应该是某个文件的符号链接/usr/share/zoneinfo(尽管它有时可能只是该文件的普通副本,但我建议用符号链接替换它)。

当然,也有可能存在代码在你的程序中要求它专门加载该时区 - 并向该函数提供错误的时区名称。

相关内容