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 讲》。