刚刚说了scp命令,再来一篇sftp命令,因为他们之间比较相似,我写了scp就想起这个sftp来了,我是个比较随意的人,兴之所至,笔自然不能停辍了,根本停不下来。先来看看sftp命令怎么使用,再来总结一下sftp和scp命令的区别。

        sftp的作用:说过了,和scp命令类似,都是用来跨机器拷贝和下载文件或者目录的。

        问:如何在一台机器上通过sftp命令连接另一台机器呢?

        答:sftp的格式是这个样子的:sftp -oPort=端口   远程机器用户名@远程机器ip[:需要进入的远程机器的目录],[]表示可选的意思

        问:sftp和ftp命令的区别是什么?

        sftp命令使用的协议是sftp,即Secure File Transfer Protocol,sftp协议本质上属于ssh协议的一部分,只要服务端开启了sshd服务,在客户端就可以通过sftp协议连接上服务端,比如使用winscp、FileZilla Client等连接,端口号是22。ftp命令使用的协议是ftp,服务端需要安装vsftpd服务,才可以使用ftp连接,端口号是21。

        还是老样子,为了方便,现在假使有两台机器,ip分别是10.139.57.168(以下简称168)、10.253.3.34(以下简称34),我们来看例子:

        例子:从34的“/biproject/task_file/zhao”目录下载文件db.tar.gz到本机168的当前目录:

在本机168上执行如下命令:


-bash-4.2$ sftp -oPort=22 data_webApp@10.253.3.34:/biproject/task_file/zhao  #连接到远程机器34
data_webApp@10.253.3.34's password: 
Connected to 10.253.3.34.
Changing to: /biproject/task_file/zhao
sftp> lpwd    #显示本机168的当前目录                                 
Local working directory: /alidata1/admin/WebTest/zhao
sftp> lls    #列出本机168的当前目录下的文件
reset.sh
sftp> get db.tar.gz   #从远程机器34上下载文件db.tar.gz
Fetching /biproject/task_file/zhao/db.tar.gz to db.tar.gz
/biproject/task_file/zhao/db.tar.gz                                                                                                                          100%   31     0.0KB/s   00:00    
sftp> lls   #再次列出,可以看到已经下载成功了
db.tar.gz  reset.sh
sftp> put reset.sh   #上传文件到远程机器34上
Uploading reset.sh to /biproject/task_file/zhao/reset.sh
reset.sh                                                                                                                                                     100%    0     0.0KB/s   00:00    
sftp>


为了验证是否在34上收到了刚才上传的文件“reset.sh”,跟我到34上去看下吧:


[data_webApp@GYB-T-XXX-ZATECH-DATABUSI-01 zhao]$ ls
db.tar.gz  testdir
[data_webApp@GYB-T-XXX-ZATECH-DATABUSI-01 zhao]$ ls
db.tar.gz  reset.sh  testdir


ok,通过上边的例子我们已经完成了上传和下载的功能,那么我上边的各种命令你是不是现在还有点犯迷糊,不着急,怎么看在sftp这种模式下有哪些可用的命令呢?


sftp> help
Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp grp path                     Change group of file 'path' to 'grp'
chmod mode path                    Change permissions of file 'path' to 'mode'
chown own path                     Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
                                   filesystem containing 'path'
exit                               Quit sftp
get [-Ppr] remote [local]          Download file
reget remote [local]		Resume download file
help                               Display this help text
lcd path                           Change local directory to 'path'
lls [ls-options [path]]            Display local directory listing
lmkdir path                        Create local directory
ln [-s] oldpath newpath            Link remote file (-s for symlink)
lpwd                               Print local working directory
ls [-1afhlnrSt] [path]             Display remote directory listing
lumask umask                       Set local umask to 'umask'
mkdir path                         Create remote directory
progress                           Toggle display of progress meter
put [-Ppr] local [remote]          Upload file
pwd                                Display remote working directory
quit                               Quit sftp
rename oldpath newpath             Rename remote file
rm path                            Delete remote file
rmdir path                         Remove remote directory
symlink oldpath newpath            Symlink remote file
version                            Show SFTP version
!command                           Execute 'command' in local shell
!                                  Escape to local shell
?                                  Synonym for help
sftp>


输入help命令就可以告诉你所有的可用命令,不过令人头大,都是英文,我翻译几个常用的吧,其他几个你想学就自己去查,我只能帮你帮到这里了,朋友:

help

        建立连接后, linux shell命令提示符就变成了sftp>,这代表已经进入了sftp的交互模式,   输入help, 可以列出sftp支持哪些命令。

pwd和lpwd

        pwd是看远端服务器的目录。  lpwd是看linux本地目录。

ls和lls

        ls是远端服务器当前目录下的内容, lls是看linux当前目录下的内容。

put a.txt

        这个是把本机168当前目录下的a.txt文件上传到远程服务器34的当前目录下。

get b.txt

        这个是把远程机器34当前目录下的b.txt文件下载到本机168目录下。

!command

        这个是指在本机168上执行command这个命令, 比如!ls是列举本机168当前目录下的内容, !rm a.txt是删除本机168当前目录下的a.txt文件。默认的在sftp>交互模式后输入命令, 是针对sftp服务器的, 所以执行rm a.txt删除的是远程机器34上的a.txt文件, 而非本机168上的a.txt文件,这点要切记,不然有可能误操作。

exit和quit和bye

        退出sftp交互模式。

总结:sftp和scp有什么区别?

    不同之处:

        1.sftp是功能更多,scp只能跨机器拷贝文件或目录,而sftp还可以执行命令等

        2.sftp是交互式的,而scp不是交互式的

        3.因为各种原因,当操作的文件比较大时,可能发生不可预知的网络中断,sftp是可以断点续传的

    相同之处:

         sftp和scp都是基于ssh协议的安全加密传输方式。