问题描述
工作中需要从Linux服务器端去拿windows端的文件,linux服务器之间底层互传文件可以用scp很容易实现,但是
不同的操作系统之间实现文件传输,如,windows 和linux之间,又如何实现呢?
子问题1
- 描述:ftp ip 需要手动输入win ftpserver所在的win用户名密码后才可以执行抓取等操作,怎么能跳过手动的验证?
1
2
3
4
5
6
7
8
9
10[root@localhost AuthServer]# ftp 10.192.44.183
Connected to 10.192.44.183 (10.192.44.183).
220 Microsoft FTP Service
Name (10.192.44.183:root): linhongxun
331 Password required
Password:
230 User logged in.
Remote system type is Windows_NT.
解决方案:
1
2
3
4
5
6
7
8
9
10
11
12
13
14!/bin/sh
ftp -n <<- EOF
win 端IP
open ip
win 端用户名密码
user username password
传输格式
ascii(or bin)
操作
put *(or get)
退出
bye
EOF
子问题2:
解决方案
ftp:需要在windows端搭建ftpserver服务,在linux端安装ftp工具
scp
工作中使用了ftp的方案,本文着重讲解ftp实现从Linux服务器获取windows文件
实现
windows 端搭建ftpserver
问一下度娘,很简单,在这不耽误时间,推荐
Linux 端安装ftp工具
- rpm包方式安装
- yum 安装
- yum list |grep ftp #查看可安装版本ftp
- yum install ftp…
ftp实现抓取windows端的文件到指定路径
example:实现将win端的路径下文件cp 到linux端同一路径下:downloadjson.sh
1 |
|
go语言执行脚本
项目中,上层应用是http 协议,目的是请求到含有文件路径报文的同时,将文件下载到Linux服务器端,故在http协议绑定的接口函数里面实现了执行该脚本,逻辑如下
1 | command := "./downloadjson.sh " + documentPath |
常见问题FAQ
ftp ip 时连接超时
1
2
3
4[root@localhost AuthServer]# ftp 10.192.44.183
ftp: connect: Connection timed out
解决方案:关闭win端的防火墙
ftp常用指令
连接ftp服务器
格式:1
ftp [hostname| ip-address]
a)在linux命令行下输入:
1
ftp 192.168.26.66
b)服务器询问你用户名和口令,分别输入用户名和相应密码,待认证通过即可。
2. 下载文件
下载文件通常用get和mget这两条命令。
a) get
格式:
1 | get [remote-file] [local-file] |
将文件从远端主机中传送至本地主机中.
如要获取服务器上e:\rose\1.bmp,则
1 | get /rose/1.bmp 1.bmp (回车) |
b) mget
格式:
1 | mget [remote-files] |
从远端主机接收一批文件至本地主机.
如要获取服务器上e:\rose\下的所有文件,则
1 | cd /rose |
注意:文件都下载到了linux主机的当前目录下。比如,在 /root/yint下运行的ftp命令,则文件都下载到了/root/yint 下。
3.上传文件
a) put
1 | 格式:put local-file [remote-file] |
将本地一个文件传送至远端主机中.
如要把本地的1.bmp传送到远端主机e:\rose,并改名为333.bmp
1 | put 1.bmp /rose/333.bmp (回车) |
b) mput
1 | 格式:mput local-files |
将本地主机中一批文件传送至远端主机.
如要把本地当前目录下所有bmp文件上传到服务器e:\rose 下
1 | cd /rose (回车) |
注意:上传文件都来自于主机的当前目录下。比如,在 /root/test下运行的ftp命令,则只有在/root/test下的文件linux才会 上传到服务器e:\rose 下。
4. 断开连接
bye:中断与服务器的连接。
1 | bye (回车) |
scp常用
scp是安全的文件拷贝,基于ssh的登录
假定你想把本地计算机/home下的一个名为a.tar.tz的文件拷贝到远程服务器192.168.0.2上的/home/tmp。而且你在远程服务器 上的帐号名为root。可以用这个命令:
1 | scp /home/a.tar.tz root@192.168.0.2:/home/tmp/ |
如果把文件从远程机器拷贝到本机当前目录用这个命令:
1 | scp root@192.168.0.2:/home/a.tar.tz |
拷贝远程机器的整个目录下的文件
1 | scp -r root@192.168.0.2:/home/* ./ |