使用 sftp 同步远程文件

以前从服务端同步文件到本地,我很喜欢用 scp。不过,scp 有个不好的点就是你必须输入远程的路径,这就要求你得想办法记住你要同步的文件路径名。当然,你可以使用两个终端协同合作:一个终端负责执行 scp 命令,另一个则负责登录服务器,通过 cdpwd 等来检索路径。今天发现了一个更好用的远程文件同步工具,叫做 sftp。如果对 sftp 不了解,那么你至少应该听过 ftp 吧。ftp 的全称是 File Transfer Protocol,是 OSI 模型中的一个应用层协议,用于两个远端主机间的文件传输。而 sftp 的全称则是 Secure File Transfer Protocol,是基于 ftp 却使用 ssh 来进行加密传输的协议。对 sftp 工具有这一层的认识也就够了,接下来我们就来动手看看如何使用它。

一般来说,使用 ssh 连接远程服务器,只需指定下面的命令即可:

$ ssh -p 1234 -o ServerAliveInterval=30 user@remote-server-ip

在这个命令中,-p 参数指定远程 ssh 端口号,-o 则指定一系列参数,比如这里的 ServerAliveInterval=30user 是远程服务器的用户名,而 remote-server-ip 是远程服务器的 ip 地址,例如:120.23.3.16

sftp 的使用类似,例如

$ sftp -P 1234 -o ServerAliveInterval=30 user@remote-server-ip

需要注意的是,这里指定端口号的参数变成了大写的 -P 了。当输入完远程登录的密码后,就会跳出一行

sftp> 

表明我们已经成功地通过 sftp 连上了远程主机。接下来可以输入 cdpwdls 等命令在远程主机上进行目录导航,这个和一般的目录导航命令没有两样。如果要导航本地主机,只需要在这几个命令中加上前缀 l 即可,例如 lcdlpwdlls 等。

当然了,目录导航可不是我们的主要目的,我们需要在两台主机间传输文件。这在 sftp 眼中再简单不过了,只需要一行短短的命令就够了:

sftp> get filename

或者

sftp> put filename

get 是从远程同步到本地的命令,而 put 则是从本地同步到远程的命令,而 filename 是当前目录下的一个文件名。如果想重命名传输下来的文件,只需要在后面加上新的文件名即可,和平常我们执行 cp 命令是一样的。例如

sftp> get filename filename1

若要拷贝整个目录,也只需要指定递归参数 -r 即可,这也和我们平常执行 cp 命令是一样的。例如

sftp> get -r directory

怎么样,比起 scp 是不是简单多了?

除此之外,另一个命令也是我们常用的,就是 df,用于显示当前的硬盘使用情况

sftp> df
        Size         Used        Avail       (root)    %Capacity
    41151808      8708644     30329732     32443164          21%

df 还可以配合 -h 参数

sftp> df -h
    Size     Used    Avail   (root)    %Capacity
  39.2GB    8.3GB   28.9GB   30.9GB          21%

好了,以上介绍的只是 sftp 的简单用法。有需求的话,今后还可以往深层次继续探索下去。

留下评论