Linux 是一种开源的操作系统,它可以运行在多种设备上,包括服务器、个人电脑、手机等。Linux 有很多优点,比如稳定、安全、灵活、免费等。Linux 也有很多不同的发行版,比如 Ubuntu、CentOS、Debian 等,它们都有自己的特色和优势。
如果你有两台 Linux 服务器,你可能会遇到这样的需求:你想要在两台服务器之间传输文件或文件夹。这样可以方便地备份数据、同步配置、迁移项目等。那么,你应该怎么做呢?有哪些方法可以实现这个功能呢?
本文将介绍三种常用的 Linux 两台服务器之间传输文件和文件夹的方法,分别是:
• 使用 scp 命令
• 使用 rsync 命令
• 使用 sftp 命令
使用 scp 命令
scp 是 secure copy 的缩写,它是一个基于 SSH 的命令行工具,可以在两台 Linux 服务器之间安全地复制文件或文件夹。scp 的语法如下:
scp [options] source destination
其中,source 和 destination 都可以是本地或远程的路径,格式如下:
user@host:path
其中,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 [email protected]:~
这个命令会将本地服务器上的 test 文件夹复制到远程服务器上的 root 用户的家目录下,并且保留源文件夹的属性,并且使用 2222 端口号进行 SSH 连接。如果你想要反向复制,则只需要交换 source 和 destination 的位置即可。
scp 命令的优点是简单易用,只需要一条命令就可以完成复制任务。但是 scp 命令也有一些缺点,比如:
• scp 命令每次都会重新建立 SSH 连接,这会消耗一定的时间和资源
• scp 命令不会检查源文件和目标文件是否有差异,每次都会完整地复制所有内容,这会浪费一定的带宽和空间
• scp 命令不支持断点续传,如果中途出现网络故障或其他原因导致复制中断,则需要重新开始复制
使用 rsync 命令
rsync 是 remote sync 的缩写,它是一个强大的命令行工具,可以在两台 Linux 服务器之间高效地同步文件或文件夹。rsync 的语法如下:
rsync [options] source destination
其中,source 和 destination 都可以是本地或远程的路径,格式如下:
user@host:path
其中,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 [email protected]:~
这个命令会将本地服务器上的 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]
其中,[username]是远程服务器上的用户名,[remote hostname or IP address]是远程服务器的主机名或IP地址。例如:
sftp [email protected]
如果远程服务器使用的不是默认的SSH端口22,可以使用-P选项指定端口号:
sftp -P [port] [username]@[remote hostname or IP address]
例如:
sftp -P 2222 [email protected]
如果远程服务器需要密码验证,会提示输入密码。如果使用了SSH公钥验证,会自动验证。连接成功后,会进入sftp交互模式,显示一个类似于这样的提示符:
sftp>
传输文件
在sftp交互模式下,可以使用put和get子命令来传输文件。put子命令用来把本地系统上的文件上传到远程服务器上,get子命令用来把远程服务器上的文件下载到本地系统上。它们的语法如下:
put [local path] [remote path]
get [remote path] [local path]
其中,[local path]是本地系统上的文件路径,[remote path]是远程服务器上的文件路径。例如:
put /home/alice/test.txt /tmp/test.txt
get /tmp/test.txt /home/alice/test.txt
这两条命令分别把本地系统上的/home/alice/test.txt文件上传到远程服务器上的/tmp/test.txt位置,和把远程服务器上的/tmp/test.txt文件下载到本地系统上的/home/alice/test.txt位置。
如果不指定目标路径,那么默认使用当前工作目录。例如:
put /home/alice/test.txt
get test.txt
这两条命令分别把本地系统上的/home/alice/test.txt文件上传到远程服务器上的当前工作目录下,并命名为test.txt,和把远程服务器上当前工作目录下的test.txt文件下载到本地系统上的当前工作目录下。
如果要传输多个文件,可以使用通配符(*)来匹配多个文件名。例如:
put /home/alice/*.txt /tmp/
get /tmp/*.txt /home/alice/
这两条命令分别把本地系统上的所有以.txt结尾的文件上传到远程服务器上的/tmp/目录下,并保持原来的文件名,和把远程服务器上的/tmp/目录下所有以.txt结尾的文件下载到本地系统上的/home/alice/目录下,并保持原来的文件名。
传输文件夹
要传输整个文件夹及其内容,需要使用-r选项来递归传输所有子目录和子文件。例如:
put -r /home/alice/test /tmp/test
get -r /tmp/test /home/alice/test
这两条命令分别把本地系统上的/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 两台服务器之间传输文件和文件夹的方法,希望对你有帮助。