hello,小伙伴们,大家好!我是木荣。今天给大家分享一下Linux下不同主机之间如何通过网络进行文件共享,达到文件在不同主机之间进行拷贝的目的。在平时的工作中,我们需要经常在主机与开发板、同一网络下的不同主机、主机与公网中的主机、主机与云服务器等等之间拷贝文件。那么在这样的环境下如何实现文件拷贝呢,我们来说说下面的几种方式,看看你是否常用
1. 文件共享概述
平常工作中你的电脑通常不是网络上唯一的计算机,如果你在工作环境中,情况尤其如此。当我们想要将数据从一台机器传输到另一台机器时,有时连接一个U盘并手动复制它们可能更容易。但在大多数情况下,如果你使用同一网络上的机器,则传输数据的方式是通过网络文件共享来的更方便些。
下面,我们将介绍几种不同的方法来在网络上的不同机器之间复制数据。我们将讨论一些简单的文件副本,然后我们将讨论如何将整个目录挂载到你的机器上,作为一个单独的驱动器。
一个简单的文件共享工具是scp命令。scp命令代表安全复制,它的工作方式与cp命令完全相同,但是允许你从一台主机复制到同一网络上的另一台主机。它通过ssh工作,因此你的所有操作都使用与ssh相同的身份验证和安全性。
1.将文件从本地主机复制到远程主机
代码语言:javascript复制$scp myfile.txt username@remotehost.com:/remote/directory
2.将文件从远程主机复制到本地主机
代码语言:javascript复制$scp username@remotehost.com:/remote/directory/myfile.txt /local/directory
3.将目录从本地主机复制到远程主机
代码语言:javascript复制$scp -r mydir username@remotehost.com:/remote/directory
2. rsync
另一个用于从不同主机复制数据的工具是rsync(远程同步的缩写)。rsync非常类似于scp,但它确实有一个主要的区别。rsync使用一种特殊的算法,它可以提前检查是否已经有数据要复制,并且只复制差异。例如,假设您正在复制一个文件,而你的网络中断了,因此你的复制中途停止。rsync将只复制未复制的部分,而不是从头重新复制所有内容。
它还验证使用校验和复制的文件的完整性。这些小优化允许更大的文件传输灵活性,使rsync成为远程和本地目录同步、数据备份、大型数据传输等的理想选择。
一些常用的rsync选项:
- V -详细输出
- r -递归到目录
- h -人性化的可读输出
- z -压缩更容易传输,非常适合慢速连接
1.在同一主机上复制/同步文件
代码语言:javascript复制$rsync -zvr /my/local/directory/one /my/local/directory/two
2.从远程主机拷贝/同步文件到本地主机
代码语言:javascript复制$rsync /local/directory username@remotehost.com:/remote/directory
3.从本地主机复制/同步文件到远程主机
代码语言:javascript复制$rsync username@remotehost.com:/remote/directory /local/directory
3. 简易HTTP服务器
Python有一个超级有用的工具,通过HTTP服务。如果你只是想创建一个快速的网络共享,以便网络上的其他机器可以访问,那么这个功能非常棒。要做到这一点,只需进入你想要共享的目录并运行:
代码语言:javascript复制$python -m SimpleHTTPServer
这将设置一个基本的web服务器,您可以通过localhost地址访问它。因此,获取运行此程序的机器的IP地址,然后在另一台机器上使用http://IP_ADDRESS:8000
在浏览器中访问它。在你自己的机器上,你可以通过在web浏览器中键入:http://localhost:8000
来查看可用共享的文件。
4. NFS
Linux最标准的网络文件共享是NFS(网络文件系统),NFS允许服务器通过网络与一个或多个客户端共享目录和文件。NFS
也是木荣平常工作中最常用的一种文件共享的方式。
1.设置NFS客户端
代码语言:javascript复制$sudo service nfsclient start
$sudo mount server:/directory /mount_directory
2.自动挂载
假设你经常使用NFS服务器,并且希望永久挂载它,通常你会编辑/etc/fstab文件,但是你可能并不总是获得到服务器的连接,这可能会导致启动时出现问题。相反,你要做的是设置自动挂载,以便在需要时可以连接到NFS服务器。这是通过自动挂载工具或最新版本的Linux完成的。当在指定目录中访问文件时自动挂载将查找远程服务器并自动挂载它。
5. samba服务器
在计算机的早期,Windows计算机必须与Linux计算机共享文件,因此服务器消息块(SMB)协议诞生了。SMB被用于Windows操作系统之间的文件共享(Mac也有与SMB的文件共享),后来被清理和优化为通用互联网文件系统协议(CIFS)。
Samba是我们在Linux上使用CIFS的Linux实用程序。除了文件共享,还可以共享打印机等资源。
使用Samba创建网络共享
让我们通过基本步骤来创建一个Windows机器可以访问的网络共享:
安装Samba服务器
代码语言:javascript复制$sudo apt install samba
配置smb.conf
samba的配置文件位于/etc/samba/smb.conf,这个文件应该告诉系统应该共享哪些目录、它们的访问权限和更多选项。默认的smb.conf已经带有大量注释代码,您可以使用这些代码作为示例来编写自己的配置。
代码语言:javascript复制$sudo vi /etc/samba/smb.conf
为samba设置密码
代码语言:javascript复制$sudo smbpasswd -a [username]
创建共享目录
代码语言:javascript复制$mkdir /my/directory/to/share
重新启动samba服务
代码语言:javascript复制$sudo service smbd restart
通过Windows访问samba共享
在Windows中,只需在运行提示符中输入网络连接:HOSTsharename。
通过Linux访问Samba/Windows共享
代码语言:javascript复制$smbclient //HOST/directory -U user
samba安装包包含一个名为smbclient的命令行工具,你可以使用它访问任何Windows或Samba服务器。一旦你连接到共享,你就可以传输文件了。
将samba共享附加到你的系统
你可以在系统上挂载网络共享,而不是逐个传输文件。
代码语言:javascript复制$sudo mount -t cifs servername:directory mountpount -o user=username,pass=password
小结
网络中文件共享是我们工作中经常使用的,选择合适的一种方式很大程度上会提高我们的工作效率,达到事半功倍的效果。