从一个工作站到另一个工作站的符号链接,无需安装

spe*_*zor 10 linux remote symlink ln

我正在尝试在一个 linux 工作站上创建一个文件到另一个 linux 工作站的符号链接,而不必“挂载”任何网络共享。这是我正在尝试做的,但无法使其正常工作。

ln -s /link/to/local/file.mov //10.0.1.103/sharedFolder/symlinkFile.mov
Run Code Online (Sandbox Code Playgroud)

gar*_*Red 15

你不能:

符号链接只是一个额外的inode(指向文件的结构),并且这个 inode 由 adeviceIdinode pointer. 在deviceId有效地指向内的设备特殊文件/dev目录和inode pointer指向设备上的块。

您的网络位置10.0.1.103没有也不能有deviceId(它不在 中/dev),因此您不可能有指向网络位置的符号链接。

另一方面,挂载的网络共享将有一个deviceId,这就是为什么您可以创建一个指向挂载位置的符号链接。


Gil*_*il' 8

Windows 有一种特殊的语法,表示位于通过SMB协议调用的机器上的文件。它内置于操作系统中,专门用于一种网络协议。\\MACHINE\DIRECTORY…\FILE\DIRECTORY…\FILE\\MACHINE

Linux 有一个基于挂载概念的灵活文件系统。文件系统附加到现有目录,管理员可以选择如何安排目录层次结构。有关更多背景信息,请阅读在 Linux 中挂载设备是什么意思?为什么Linux的文件系统被设计成一个单一的目录树?以及典型的 Linux 系统上存在哪些挂载点?. Linux 支持许多网络文件系统(即允许一台机器访问另一台机器上的文件的文件系统),包括NFS、 SMB 、SSHFS等。

NFS 可以被认为是 Linux 的原生网络文件系统,就像 SMB 是 Windows 的一样。但是 Linux 默认不导出其文件:您需要安装 NFS 服务器。NFS 服务器在所有 Linux 发行版中都可用,但需要进行一些设置(您需要在文件中注册要导出的目录/etc/exports)。此外,NFS 来自一个较温和的时代,当时本地网络上的攻击者不是问题,保护它需要一些有关防火墙的知识,这超出了本答案的范围。要使/some/where远程机器上的目录foo.example.com在该位置可用/local/dir(必须是现有目录),假设它是由远程机器导出的,请以 root 身份运行以下命令:

mount foo.example.com:/some/where /local/dir
Run Code Online (Sandbox Code Playgroud)

无需设置即可访问远程文件的简单方法是通过 SSHFS。您只需要在远程机器上安装一个 SSH 服务器,并sshfs在本地机器上安装软件包。你也应该生成一个密钥(请参阅如何使密码的登录工作),但你不要这样做,如果你不介意每次都输入密码。SSH 还可用于在远程机器上运行命令。要通过 SSHFS/some/where使远程机器上的目录foo.example.com在该位置/local/dir(必须是现有目录)可用,请运行以下命令(以您的普通用户身份):

sshfs foo.example.com:/some/where /local/dir
Run Code Online (Sandbox Code Playgroud)

Linux 可以通过Samba软件作为 SMB 协议的服务器或客户端(与 Windows 机器通信,甚至与其他 Linux 机器通信,尽管它的集成不如其他协议好)。

您可以设置自动挂载程序(例如autofs),以便访问某些目录会自动从某个远程机器挂载目录。例如,一个常见的配置安排将 autofs 文件系统挂载在目录上/net,访问会导致远程目录from在该位置通过 NFS 挂载(并且在一段时间不活动后将被卸载)。远程机器当然必须设置一个 NFS 服务器并允许该连接。/net/MACHINE/DIRECTORY/DIRECTORY/net/MACHINE

可以使用 SSHFS 设置自动挂载程序。请参阅Linux 下使用 Fuse 和 Autofs以及Autofs 和 sshfs 的完全无缝 SSHFS——快速教程的完美组合;简而言之:

  1. 安装autofssshfs.
  2. 将以下行添加到/etc/auto.master

    /mnt/sshfs /etc/auto.sshfs uid=1000,gid=1000,--timeout=30,--ghost
    
    Run Code Online (Sandbox Code Playgroud)

    用您的用户 ID 和组 ID 替换两次出现的 1000(运行id -uid -g以显示这些值)。创建目录/mnt/sshfs

  3. 创建一个/etc/auto.sshfs包含如下行的文件:

    machinename -fstype=fuse,rw,nodev,nonempty,noatime,allow_other,max_read=65536 :sshfs\#machinename.example.com\:
    
    Run Code Online (Sandbox Code Playgroud)

    其中machinename.example.com是远程机器的主机名(或 IP 地址),machinename是您希望通过路径在本地访问它的名称/mnt/sshfs/machinename

Autosshfs提供了更方便的 autofs+sshfs 设置。

最后,关于符号部分:您可以创建一个指向不存在路径的符号链接。符号链接是第二个参数,所以你需要像

ln -s /net/10.0.1.103/sharedFolder/symlinkFile.mov /link/to/local/file.mov
Run Code Online (Sandbox Code Playgroud)

您需要手动或自动安排/sharedFolderfrom10.0.1.103安装在/net/10.0.1.103/sharedFolder.