从远程路径执行命令

从远程路径执行命令

当我们执行 iels命令时,终端应用程序会ls在我们的PATH变量中搜索该命令。PATH通常包含许多系统目录和一些用户特定目录。因此,可能首先在用户目录中搜索命令,如果未找到,则将在系统目录中查找。

是否可以添加远程路径(来自网络/互联网)PATH?这样就可以从 192.168.1.100 或等效名称搜索和检索命令。

我想mycommand在(让我称之为)命令服务器上定义,然后转到网络中的另一台机器并输入:

PATH = 192.168.1.100:PATH
mycommand

答案1

是否可以添加远程路径(来自网络/互联网)PATH

不,不是直接的。ProperPATH指定了文件层次结构中可用的目录。不过,有一种通用方法可以将远程文件(此处mycommand)带入层次结构:

  1. 让服务器使用某些协议(例如 NFS)共享mycommand(或可能/可能包含某些目录树)。mycommand
  2. 在另一台机器上挂载相关共享,因此mycommand出现在它是文件层次结构就像本地文件一样。不要使用noexec,您可以明确使用exec(请参阅man 8 mount)。但一般来说,某些协议/工具/解决方案可能不允许文件可执行。
  3. 在那里进行调整PATH:添加指向包含mycommand该目录的路径名出现当地的。

笔记:

  • 如果mycommand是二进制可执行文件,则可能由于架构或内核不匹配而无法工作。
  • 所使用的任何路径名都mycommand将在本地解析。特别是 shebang(如果有)。
  • 如果mycommand需要其他文件,它可能会使用本地文件;这可能不是您想要的。
  • 如果mycommand要使用服务器上现有的其他文件(例如库),可能不容易获取它们。如果从服务器获取它们,可能不容易实际使用它们。对于库,我认为在某些情况下LD_LIBRARY_PATH可以LD_PRELOAD提供帮助(取决于可执行文件);研究这些。
  • 网络问题可能会导致…问题(例子);即使是正常的延迟也可能变成问题。请注意,每当PATH检查相关目录时,您都可能会遇到问题,即使调用 以外的其他内容也可能发生这种情况mycommand
  • 通常需要 root 权限才能挂载任何东西。有几种方法可以让普通用户挂载,它们需要 root 用户至少一次的帮助(例如编辑/etc/fstab、编辑/etc/sudoers、安装保险丝)。

答案2

不。

仔细想想,PATH 假定了一个文件系统。一旦你开始在其中放入其他内容,你就不再拥有文件系统,需要制定访问资源的协议,而这并不是标准的。它还会大大减慢对通过该路径查看的任何脚本/命令的访问速度,甚至可能变得无法忍受。

一个解决方法可能是将暴露的网络资源移植到文件系统中。具体如何操作取决于协议和操作系统。

相关内容