• Linux 两台服务器之间传输文件和文件夹的方法


    Linux 两台服务器之间传输文件和文件夹的方法

    Linux 是一种开源的操作系统,它可以运行在多种设备上,包括服务器、个人电脑、手机等。Linux 有很多优点,比如稳定、安全、灵活、免费等。Linux 也有很多不同的发行版,比如 Ubuntu、CentOS、Debian 等,它们都有自己的特色和优势。

    如果你有两台 Linux 服务器,你可能会遇到这样的需求:你想要在两台服务器之间传输文件或文件夹。这样可以方便地备份数据、同步配置、迁移项目等。那么,你应该怎么做呢?有哪些方法可以实现这个功能呢?

    本文将介绍三种常用的 Linux 两台服务器之间传输文件和文件夹的方法,分别是:

    • 使用 scp 命令

    • 使用 rsync 命令

    • 使用 sftp 命令

    使用 scp 命令
    scp 是 secure copy 的缩写,它是一个基于 SSH 的命令行工具,可以在两台 Linux 服务器之间安全地复制文件或文件夹。scp 的语法如下:

    scp [options] source destination
    
    • 1

    其中,source 和 destination 都可以是本地或远程的路径,格式如下:

    user@host:path
    
    • 1

    其中,user 是登录远程服务器的用户名,host 是远程服务器的 IP 地址或域名,path 是远程服务器上的文件或文件夹的路径。如果 source 或 destination 是本地的路径,则不需要 user@host: 前缀。

    options 是可选的参数,可以用来控制 scp 的行为,比如:

    • -r:递归地复制整个目录及其子目录和文件

    • -p:保留源文件或目录的属性(如修改时间、访问权限等)

    • -P:指定 SSH 连接的端口号(默认为 22)

    • -v:显示详细的输出信息

    例如,如果你想要从本地服务器(IP 地址为 192.168.1.100)复制一个名为 test 的文件夹到远程服务器(IP 地址为 192.168.1.200),并且使用 root 用户登录,并且保留源文件夹的属性,并且使用 2222 端口号,则你可以使用以下命令:

    scp -r -p -P 2222 test root@192.168.1.200:~
    
    • 1

    这个命令会将本地服务器上的 test 文件夹复制到远程服务器上的 root 用户的家目录下,并且保留源文件夹的属性,并且使用 2222 端口号进行 SSH 连接。如果你想要反向复制,则只需要交换 source 和 destination 的位置即可。

    scp 命令的优点是简单易用,只需要一条命令就可以完成复制任务。但是 scp 命令也有一些缺点,比如:

    • scp 命令每次都会重新建立 SSH 连接,这会消耗一定的时间和资源

    • scp 命令不会检查源文件和目标文件是否有差异,每次都会完整地复制所有内容,这会浪费一定的带宽和空间

    • scp 命令不支持断点续传,如果中途出现网络故障或其他原因导致复制中断,则需要重新开始复制


    使用 rsync 命令
    rsync 是 remote sync 的缩写,它是一个强大的命令行工具,可以在两台 Linux 服务器之间高效地同步文件或文件夹。rsync 的语法如下:

    rsync [options] source destination
    
    • 1

    其中,source 和 destination 都可以是本地或远程的路径,格式如下:

    user@host:path
    
    • 1

    其中,user 是登录远程服务器的用户名,host 是远程服务器的 IP 地址或域名,path 是远程服务器上的文件或文件夹的路径。如果 source 或 destination 是本地的路径,则不需要 user@host: 前缀。

    options 是可选的参数,可以用来控制 rsync 的行为,比如:

    • -a:归档模式,相当于 -rlptgoD,即递归地同步整个目录及其子目录和文件,并且保留源文件或目录的属性(如修改时间、访问权限等)

    • -z:压缩模式,可以减少传输的数据量

    • -v:显示详细的输出信息

    • -e:指定 SSH 连接的参数,比如端口号、密钥文件等

    • -P:显示进度信息,并且支持断点续传

    例如,如果你想要从本地服务器(IP 地址为 192.168.1.100)同步一个名为 test 的文件夹到远程服务器(IP 地址为 192.168.1.200),并且使用 root 用户登录,并且使用 2222 端口号,并且使用压缩模式,并且显示进度信息,则你可以使用以下命令:

    rsync -azv -e "ssh -p 2222" test root@192.168.1.200:~
    
    • 1

    这个命令会将本地服务器上的 test 文件夹同步到远程服务器上的 root 用户的家目录下,并且使用压缩模式,并且显示进度信息,并且使用 2222 端口号进行 SSH 连接。如果你想要反向同步,则只需要交换 source 和 destination 的位置即可。

    rsync 命令的优点是高效灵活,它会根据源文件和目标文件之间的差异,只传输变化的部分,从而节省带宽和空间。它也支持断点续传,如果中途出现网络故障或其他原因导致同步中断,则可以从上次中断的位置继续同步。但是 rsync 命令也有一些缺点,比如:

    • rsync 命令需要在两台服务器上都安装 rsync 软件包,否则无法使用

    • rsync 命令有很多参数,需要花一些时间学习和熟悉


    使用 sftp 命令
    sftp(SSH File Transfer Protocol)是一种安全的文件传输协议,它基于SSH协议,可以在两台服务器之间加密传输文件和文件夹。sftp命令可以在Linux系统中使用,它提供了一些类似于Linux shell命令的子命令,可以用来浏览、管理和修改远程服务器上的文件和文件夹。本文将介绍如何在Linux中使用sftp命令传输文件和文件夹。

    连接到远程服务器
    要使用sftp命令,首先需要连接到远程服务器。连接的语法与使用SSH连接相同:

    sftp [username]@[remote hostname or IP address]
    
    • 1

    其中,[username]是远程服务器上的用户名,[remote hostname or IP address]是远程服务器的主机名或IP地址。例如:

    sftp alice@192.168.1.100
    
    • 1

    如果远程服务器使用的不是默认的SSH端口22,可以使用-P选项指定端口号:

    sftp -P [port] [username]@[remote hostname or IP address]
    
    • 1

    例如:

    sftp -P 2222 alice@192.168.1.100
    
    • 1

    如果远程服务器需要密码验证,会提示输入密码。如果使用了SSH公钥验证,会自动验证。连接成功后,会进入sftp交互模式,显示一个类似于这样的提示符:

    sftp>

    传输文件
    在sftp交互模式下,可以使用put和get子命令来传输文件。put子命令用来把本地系统上的文件上传到远程服务器上,get子命令用来把远程服务器上的文件下载到本地系统上。它们的语法如下:

    put [local path] [remote path]
    
    • 1
    get [remote path] [local path]
    
    • 1

    其中,[local path]是本地系统上的文件路径,[remote path]是远程服务器上的文件路径。例如:

    put /home/alice/test.txt /tmp/test.txt
    
    • 1
    get /tmp/test.txt /home/alice/test.txt
    
    • 1

    这两条命令分别把本地系统上的/home/alice/test.txt文件上传到远程服务器上的/tmp/test.txt位置,和把远程服务器上的/tmp/test.txt文件下载到本地系统上的/home/alice/test.txt位置。

    如果不指定目标路径,那么默认使用当前工作目录。例如:

    put /home/alice/test.txt
    
    • 1
    get test.txt
    
    • 1

    这两条命令分别把本地系统上的/home/alice/test.txt文件上传到远程服务器上的当前工作目录下,并命名为test.txt,和把远程服务器上当前工作目录下的test.txt文件下载到本地系统上的当前工作目录下。

    如果要传输多个文件,可以使用通配符(*)来匹配多个文件名。例如:

    put /home/alice/*.txt /tmp/
    
    • 1
    get /tmp/*.txt /home/alice/
    
    • 1

    这两条命令分别把本地系统上的所有以.txt结尾的文件上传到远程服务器上的/tmp/目录下,并保持原来的文件名,和把远程服务器上的/tmp/目录下所有以.txt结尾的文件下载到本地系统上的/home/alice/目录下,并保持原来的文件名。

    传输文件夹
    要传输整个文件夹及其内容,需要使用-r选项来递归传输所有子目录和子文件。例如:

    put -r /home/alice/test /tmp/test
    
    • 1
    get -r /tmp/test /home/alice/test
    
    • 1

    这两条命令分别把本地系统上的/home/alice/test文件夹及其内容上传到远程服务器上的/tmp/test位置,和把远程服务器上的/tmp/test文件夹及其内容下载到本地系统上的/home/alice/test位置。

    浏览和管理文件和文件夹
    除了传输文件和文件夹,sftp命令还提供了一些其他的子命令,可以用来浏览和管理远程服务器上的文件和文件夹。这些子命令有些与Linux shell命令相同,有些与Linux shell命令类似,但是有一些区别。下面列出了一些常用的子命令:

    • cd [path]:切换到远程服务器上的[path]目录。

    • lcd [path]:切换到本地系统上的[path]目录。

    • pwd:显示远程服务器上的当前工作目录。

    • lpwd:显示本地系统上的当前工作目录。

    • ls [options] [path]:列出远程服务器上的[path]目录下的文件和文件夹。可以使用与Linux shell命令相同的选项,如-a,-l等。

    • lls [options] [path]:列出本地系统上的[path]目录下的文件和文件夹。可以使用与Linux shell命令相同的选项,如-a,-l等。

    • mkdir [path]:在远程服务器上创建一个新的目录,路径为[path]。

    • lmkdir [path]:在本地系统上创建一个新的目录,路径为[path]。

    • rmdir [path]:删除远程服务器上的一个空目录,路径为[path]。

    • rm [path]:删除远程服务器上的一个文件,路径为[path]。

    • rename [old path] [new path]: 重命名远程服务器上的一个文件或目录,从旧路径 [old path] 到新路径 [new path] 。

    • symlink [old path] [new path]: 在远程服务器上创建一个符号链接,从旧路径 [old path] 到新路径 [new path] 。

    退出sftp交互模式
    要退出sftp交互模式,可以使用以下任意一种方法:

    • 输入子命令 exit

    • 输入子命令 quit

    • 按下组合键 Ctrl+D

    退出后,会返回到本地系统的shell提示符。

    以上就是Linux 两台服务器之间传输文件和文件夹的方法,希望对你有帮助。

  • 相关阅读:
    操作系统—内核态和用户态
    六零导航页SQL注入漏洞复现(CVE-2023-45951)
    Bean的作用域和生命周期
    Topology-le5le智慧光伏能源可视化方案
    Linux 开放端口与监控进程
    leetcode周赛 2859. 计算 K 置位下标对应元素的和
    【第2天】SQL快速入门-条件查询(SQL 小虚竹)
    pytho你-opencv划痕检测
    RabbitMQ-08 不公平分发与预取值
    Promise的链式调用
  • 原文地址:https://blog.csdn.net/qq_41886200/article/details/132837841