我对 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 将此当前目录传递给其子进程,例如ls
。ls
正确列出没有文件,因为您已从以前的目录文件中删除了它们/test/application
。
当您使用cd application
in时,将读取/test
目录文件,其中包含指向新创建的./test
application
/test/application