Linux 文件系统对通过 samba 从外部删除文件的反应

Linux 文件系统对通过 samba 从外部删除文件的反应

我对 SAMBA 上的文件如何/何时刷新有疑问

我正在做类似的事情:

me@server:~/test/application

me@server:~/test/application$ dotnet myapp.dll

Application prints hello world

现在我正在application使用Windows(它通过连接SAMBA)删除文件夹,并在其中插入相同的文件夹,与我的新应用程序位于同一位置。

现在我要返回到我的 Linux 终端(通过 SSH 连接),该终端保持在相同的路径中/test/application/并使用

dotnet myapp.dll

结果是:

System.IO.FileNotFoundException: Unable to find the specified file.
   at Interop.Sys.GetCwdHelper(Byte* ptr, Int32 bufferSize)
   at Interop.Sys.GetCwd()
   at System.Environment.get_CurrentDirectory()
   at System.IO.Directory.GetCurrentDirectory()
   at Microsoft.DotNet.Cli.Utils.CommandResolver.TryResolveCommandSpec(ICommandResolverPolicy commandResolverPolicy, String commandName, IEnumerable`1 args, NuGetFramework framework, String configuration, String outputPath, String applicationName)
   at Microsoft.DotNet.Cli.Utils.Command.Create(ICommandResolverPolicy commandResolverPolicy, String commandName, IEnumerable`1 args, NuGetFramework framework, String configuration, String outputPath, String applicationName)
   at Microsoft.DotNet.Cli.Utils.Command.Create(String commandName, IEnumerable`1 args, NuGetFramework framework, String configuration, String outputPath, String applicationName)
   at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, ITelemetry telemetryClient)
   at Microsoft.DotNet.Cli.Program.Main(String[] args)

我的应用程序似乎有问题,但是

使用ls列出文件没有显示任何内容 - 就像文件夹为空一样,

但完成后cd ..一切cd application正常(ls 列出我的文件,应用程序正常工作)

基本上它需要“刷新文件夹”,但其背后的原因是什么?

朋友告诉我,有类似“加载了先前磁盘 INode 的旧文件夹会话”之类的内容

答案1

在 Linux 或 Unix 中,您可以删除仍由进程打开的文件或目录。

在您的情况下,外壳程序仍将旧的/test/application打开目录作为其当前目录。

application 通过 samba,您已经删除了父目录中的所有文件和目录条目/test。该目录的 inode 仍在被 shell 使用,并且 shell 将此当前目录传递给其子进程,例如lsls正确列出没有文件,因为您已从以前的目录文件中删除了它们/test/application

当您使用cd applicationin时,将读取/test目录文件,其中包含指向新创建的./testapplication/test/application

也可以看看https://stackoverflow.com/q/2028874/10622916

相关内容