ftp
需要两个端口:
数据端口
命令端口
ftp
有两种模式:
被动模式:建立命令连接之后,服务器等待客户端发起请求。
主动模式:建立命令连接之后,服务器主动向客户端发起数据连接,因为客户端可能有防火墙,或者在内网中,客户端无法发送数据请求,一般不使用。
当前的主机名是Sea1
,主机ip
是172.31.0.180
。
Sea1
上执行yum install -y vsftpd ftp
安装vsftpd
和ftp
。
systemctl start vsftpd.service
打开vsftpd
服务,systemctl status vsftpd.service
可以看到状态是active (running)
。
再打开同一个内网里边的服务器作为客户端,主机名为Sea2
,ip
为172.31.0.150
。
Sea2
也需要yum install -y ftp
安装ftp
。
Sea2
使用cd /shelllearn/
转到 /shelllearn
目录下。
Sea2
执行ftp 172.31.0.180
连接ftp
然后使用匿名用户ftp
登录,不用输入密码。
客户端ftp
匿名用户登录到远程ftp服务器上之后能够进入的目录是/var/ftp
。
先在服务器Sea1
上使用seq 1 5 >> /var/ftp/testFtp
在/var/ftp/
目录下创建一个文件为testFtp
(用于测试ftp从服务器下载文件),这个文件里边的内容如下:
1
2
3
4
5
要是不太理解seq
命令的使用,可以看我以前的《Linux学习之sed删除、追加、插入、更改、读写文件、下一行、打印、退出和seq命令》中seq
命令使用方法。
若是在客户端Sea2
上ftp连接中执行pwd
的话,可以看到当前工作目录是/
,ls -l
可以看一下服务器上当前目录里边有什么文件,而上边在服务器上新建的testFtp
就在文件列表里边。
ftp连接中客户端在命令之前加上!
就表明在本地执行命令,不是在服务器端执行命令。
Sea2
在ftp连接中使用!ls -l
看到的就是Sea2
的/shelllearn
目录下文件列表信息,!pwd
看到的就是Sea2
的当前工作目录。
Sea2
在ftp连接中使用get testFtp
就可以把Sea1
中的/var/ftp/testFtp
文件下载下来,!ls -l
就可以验证Sea2
已经成功下载到testFtp
文件。
Sea2
在ftp连接中使用!cat catRedirectSh.sh
看一下Sea2
中catRedirectSh.sh
的内容为:
#!/bin/bash
echo "I am learning!"
Sea2
在ftp连接中使用put catRedirectSh.sh
想要上传文件到服务器Sea1
,结果报错Permission denied
,quit
可以退出来ftp连接。
此文章为8月Day 21学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。