我正在研究一个使用 Java API 访问 VCenter 上的 VMWare 虚拟机的 Java 类。
Java API 允许我们连接到 VCenter,访问来宾 VM (CentOS7) 并列出目录中的文件,除了 /tmp 目录之外没有任何问题。
使用参考:文档:GuestFileManager
// filePathToCheck = "/tmp/some-file-to-find.txt
ManagedObjectReference fileManager = ...; // GuestFileManager
ManagedObjectReference vmGuest = ...; // VirtualMachine
String fileToCheckName = FilenameUtils.getName(filePathToCheck); // -> some-file-to-find.txt
String guestDirectory = filePathToCheck.replace(fileToCheckName,""); // -> /tmp/
guestFiles = vimPort.listFilesInGuest(fileManager, vmGuest, auth, guestDirectory, null, null, null);
我正在使用 GuestFileManager.listFilesInGuest() 并发现对于 /tmp 以外的任何目录,我都可以完全按照它们在 ssh 会话中的显示方式列出目录中的文件。
使用 listFilesInGuest() 查看路径“/tmp”目录,我得到以下列表:
.
..
vmware-root (directory)
即使我的 ssh 会话显示:
.
..
finishedinstall
.font-unix
.ICE-unix
systemd-private-f2b5415058d14dbfa4306235d53fed88-vmtoolsd.service-QN0Muw
.Test-unix
.X11-unix
.XIM-unix
我在 vmware-root 上做了一个发现,它出现在
/tmp/systemd-private-f2b5415058d14dbfa4306235d53fed88-vmtoolsd.service-QN0Muw/tmp/vmware-root
导航到该文件夹会显示在 listFilesInGuest() 中找到的文件:
.
..
vmware-root
这很好,我们在真空中操作,但程序将需要从其他程序安装程序和使用“the”/tmp 目录而不是 VMWare 的隐藏位置的接口读取、修改或执行 temp 目录中的文件。
我找不到任何有关重新配置 VMWare 工具的方法的文档,也找不到使用 API 进入 /tmp 目录的方法,我希望 SO 中的某个人会遇到并找到此 VMWare 功能的成功路径。
编辑:通过进一步的测试,我发现这个“特殊”的 tmp 目录只发生在 posix 中,Windows 上的 VMWareTools API 会按照我在所有操作系统中的预期导航。