Linux【2】-管理文件12-Centos与Windows之间ftp传输文件(ftp/ncftp/lftp)

一、ftp

Linux作为服务器,windows作为客户端

1、安装

服务器上安装:

yum install vsftpd

设置开机启动:

systemctl enable vsftpd.service

启动vsftpd服务

systemctl start  vsftpd.service

2、使用

步骤 1: 建立 FTP 连接

想要连接 FTP 服务器,在命令上中先输入ftp然后空格跟上 FTP 服务器的域名 ‘domain.com’ 或者 IP 地址

例如:

ftp domain.com
ftp 192.168.0.1
ftp user@ftpdomain.com

注意: 本例中使用匿名服务器。

替换下面例子中 IP 或域名为你的服务器地址。

步骤 2: 使用用户名密码登录

绝大多数的 FTP 服务器是使用密码保护的,因此这些 FTP 服务器会询问’username’和’password’.

如果你连接到被称作匿名 FTP 服务器(LCTT 译注:即,并不需要你有真实的用户信息即可使用的 FTP 服务器称之为匿名 FTP 服务器),可以尝试anonymous作为用户名以及使用空密码:

Name: anonymous
Password:

之后,终端会返回如下的信息:

230Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

登录成功。

步骤 3: 目录操作

FTP 命令可以列出、移动和创建文件夹,如同我们在本地使用我们的电脑一样。ls可以打印目录列表,cd可以改变目录,mkdir可以创建文件夹。

使用安全设置列出目录

ftp>ls

服务器将返回:

200 PORT command successful.Considerusing PASV.
150Here comes the directory listing.
directory list
....
....
226Directory send OK.

改变目录:

改变目录可以输入:

ftp>cd directory

服务器将会返回:

250Directory succesfully changed.

步骤 4: 使用 FTP 下载文件

在下载一个文件之前,我们首先需要使用lcd命令设定本地接受目录位置。

lcd /home/user/yourdirectoryname

如果你不指定下载目录,文件将会下载到你登录 FTP 时候的工作目录。

现在,我们可以使用命令 get 来下载文件,比如:

get 文件名

文件会保存在使用lcd命令设置的目录位置。

服务器返回消息:

local:file remote:file
200 PORT command successful.Considerusing PASV.
150Opening BINARY mode data connection forfile(xxx bytes).
226File send OK.
XXX bytes received in x.xx secs (x.xxx MB/s).

步骤 5: 使用 FTP 上传文件

完成 FTP 连接后,FTP 同样可以上传文件

使用 put命令上传文件:

put 文件名

当文件不再当前本地目录下的时候,可以使用绝对路径:

put /path/file

同样,可以上传多个文件:

mput *.xls

步骤 6: 关闭 FTP 连接

完成FTP工作后,为了安全起见需要关闭连接。有三个命令可以关闭连接:

bye
exit
quit

任意一个命令可以断开FTP服务器连接并返回:

221Goodbye

需要更多帮助,在使用 ftp 命令连接到服务器后,可以使用help获得更多帮助。

3.讨论

3.1. 解决root用户 ftp登陆的问题

ftp是不让root用户远程登陆,在服务器上,修改下面的文件就可以登陆了,一般不建议这么做额

去掉或注释掉 /etc/vsftpd/ftpusers 中的root 去掉或注释掉 /etc/vsftpd/user_list中的root

3.2 多文件下载(对目录无效)

如:下载目录下的所有文件(子目录是无法下载下来的)

>mget * 
这样操作,下载每个文件都会提问,每次都要输入一个y
要去掉提问,就要先输入
>prompt off

3.3 解决:ftp命令行不支持目录下载,通过wget得到解决

wget ftp://IP:PORT/* --ftp-user=xxx --ftp-password=xxx -r

wget -r -nH -P /webapp/ ftp://172.31.1.1:21/* --ftp-user=ftpuser --ftp-password=ftpuser

注:

星号*必须有,否则下载下来的就一个文件index.html
-r参数就是用来目录下载的,递归下载
-nH不包含主机文件夹
-P 下载到指定目录

更多关于wget命令的资料请参考:

http://www.hnlyyk.icoc.cc/nd.jsp?id=20&_np=0_350_8 http://blog.csdn.net/zyc_reg/article/details/42778707

3.4.下面是一段ftp多文件下载上传的shell脚本

ftp server: 192.168.0.100:2121
User/PWD  :  test/ 2009

到OUTBOX下下载所有的文件(不包括文件夹),并将test.txt上传到INBOX 内容如下

#!/bin/bash
#cd /home/ftptmp/
ftp -v -n 192.168.0.100 2121 <<EOF
user  test  2009
binary
cd OUTBOX
prompt
mget *
cd ..
cd INBOX
put test.txt
close
bye
EOF

3.5bftp自动登录上传单个文件。

####把本地/home/databachup/a.sh up ftp /home/databackup 下####
#!/bin/bash
ftp -n<<!
open 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
put a.sh a.sh 
close
bye
!

小结:把以上脚本另存为文件加入到crontab中即可实现ftp自动上传、下载文件。 注解: 1. -n 不受.netrc文件的影响。(ftp默认为读取.netrc文件中的设定) 2. << 是使用即时文件重定向输入。 3. !是即时文件的标志它必须成对出现,以标识即时文件的开始和结尾。

3.6 CentOS7部署vsftpd服务

https://www.centos.bz/2017/12/centos7%E9%83%A8%E7%BD%B2vsftpd%E6%9C%8D%E5%8A%A1/

https://www.linuxidc.com/Linux/2017-12/149909.htm

因为ftp只能传文件,不能传文件夹中的文件夹,所以需要借助另外连个工具,ncftp和Lftp。

我用的是lftp

二、ncftp(可上传文件夹)

brew install ncftp

ncftpput -R -v -u "ftp-username" ftp.website.com ftp-upload-path local-path/*

三、lftp(可上传文件夹)

我用的该方法,但是上次速度有些慢额

lftp -d -u bizhat,mypassword 174.36.192.112
set ftp:ssl-allow no
mirror -R /var/flashwebhost/vshare2.7/ public_html

参考资料:

个人公众号,比较懒,很少更新,可以在上面提问题:

更多精彩,请移步公众号阅读:

Sam avatar
About Sam
专注生物信息 专注转化医学