c++网络编程实战——开发基于ftp协议的文件传输模块(二) 配置ftp服务与手动执行ftp命令

news2024/11/26 13:43:16

配置FTP服务

一.前言

博主的环境是阿里云服务器,操作系统版本为 ubuntu20.04,一下所有操作都基于以上环境下进行的操作,同时为了简化操作我将开放同一个云服务器的不同端口,让它同时充当服务端和客户端,大家如果想测试效果更好且更贴近实际情况的话,建议还是使用一台本地虚拟机+一台云服务器/两台虚拟机/两台云服务器来进行测试来保证测试效果。

二. 安装ftp软件包

  • 安装服务端
sudo apt install vsftpd
  • 安装客户端
sudo apt install ftp

三.配置ftp服务器

1.前言

在上一篇文章中我们提到过ftp的传输模式有主动/被动传输两种模式,而一般情况下我们默认是被动模式,这里我们的介绍也以被动模式为主。

2.配置ftp服务器开机自启动

systemctl enable vsftpd.service

3.启动ftp服务

systemctl start vsftpd.service

完成上述操作之后我们可以尝试执行下面的命令来查看一下ftp服务监听的端口:

netstat -antup | grep ftp

出现下面即视为成功:
在这里插入图片描述

4.为ftp服务创建用户

我们可以执行命令来为ftp服务创建一个用户,比如我们创建一个叫fengxu的用户:

adduser fengxu

如果我们想修改用户的密码:

passwd fengxu

5.创建一个用来供ftp服务使用的文件夹

 mkdir /ftp/work

这里我们还创建一个测试文件来为测试使用做准备:

touch /ftp/work/test.txt

6.更改工作文件夹的拥有者

chown -R fengxu:fengxu /ftp/work

7.修改配置文件

大家可以查看一下自己环境下etc目录下的有关的配置文件,我这里是vsftpd.conf
在这里插入图片描述

vi vsftpd.conf
#禁止匿名登录FTP服务器。
anonymous_enable=NO
#允许本地用户登录FTP服务器。
local_enable=YES
#监听IPv4 sockets。
listen=YES
 
#在行首添加#注释掉以下参数:
#关闭监听IPv6 sockets。
#listen_ipv6=YES
 
#在配置文件的末尾添加下列参数:
#设置本地用户登录后所在目录。
local_root=/var/ftp/work01
#允许用户上传文件
write_enable=YES
#全部用户被限制在主目录。
chroot_local_user=YES
#启用例外用户名单。
chroot_list_enable=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录。
chroot_list_file=/etc/chroot_list
#开启被动模式。
pasv_enable=YES
allow_writeable_chroot=YES
#本教程中为Linux实例的公网IP。
pasv_address=<FTP服务器公网IP地址>
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=1024
#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=1048

8.创建chroot_list文件

vi /etc/chroot_list

最后要重启服务

systemctl restart vsftpd.service

9.设置安全组

需要在服务器的安全组里开放20-21端口,还需要开放pasv_min_port和pasv_max_port设置的端口

10.测试

我们尝试在windows下连接ftp服务器:

ftp 云服务器ip地址

出现下面这种情况就表明已经成功了:
在这里插入图片描述

常见的ftp命令

1.切换工作目录

  • 查看服务器工作目录
pwd
  • 切换服务器工作目录
cd 目录名
  • 切换本地工作目录
lcd 目录名

2.查看服务器上的目录与文件

  • 列出目录或文件名的详细信息
ls  目录或文件名
dir 目录或文件名
  • 仅列出目录和文件名
nlist 目录或文件名 [本地文件名]

注意:

这个命令式支持通配符的。比如:

nlist /work/*.cpp

我们还可以指定输出位置,比如列出/work目录下的匹配*.cpp的文件名信息,结果输出到本地的/tmp/freecplus.list文件中。

nlist /work/*.cpp /tmp/freecplus.list

3.下载与上传文件

3.1 文件传输的模式

ftp传输文件的模式分二进制和ASCII码两种模式,二进制模式可以传输任何文件,包括压缩包、可执行程序、图片、视频、音频等,而ASCII模式只能传输.txt、.htm等ascii码文件(文本文件)。在实际开发中,不管什么文件,都用二进制方式传输。

  • 查看当前的传输模式
type
  • 设定传输模式为二进制
bin
  • 设定传输模式为ASCII
ascii

3.2 下载文件

3.2.1下载单个文件

get|recv 服务端文件名 [本地文件名]

使用说明:

  • 下载文件用get和recv都可以。
  • 文件名不允许用“*”、”?”等通配符。
  • 服务端文件名和本地文件名可以用绝对路径,如果不写路径,表示当前工作目录。
  • 如果本地文件名省略不写,表示把服务端文件下载到本地的当前工作目录,文件名与服务端文件名相同。

3.2.1 下载多个文件

mget 服务端文件1 服务端文件2 服务端文件3 …… 服务端文件n

使用说明:

  • 待下载的文件名,可以一一列出来(用空格分隔),也可以用通配符。
  • 下载的文件,存放在本地当前工作目录中。
  • 下载文件时,会一一提示,如果想关闭提示信息,先输入prompt命令:
prompt

3.3上传文件

3.3.1上传单个文件

put|send 本地文件名 [服务端文件名]
  • 上传文件用put和send都可以。
  • 文件名不允许用通配符。
  • 本地文件名和服务端文件名可以用绝对路径,如果不写路径,表示当前工作目录。
  • 如果服务端文件名省略不写,表示把本地文件上传到服务端的当前工作目录,文件名与本地文件名相同。

3.3.2 上传多个文件

mput 本地文件1 本地文件2 本地文件3 …… 本地文件n

使用说明:

  • 待上传的文件名,可以一一列出来(用空格分隔),也可以用通配符。
  • 上传的文件,存放在服务端当前工作目录中。
  • 上传文件时,会一一提示,如果想关闭都显示信息,先输入prompt命令。
    prompt

4.其他的ftp命令

  • 重命名ftp服务端的文件
rename 旧文件名 新文件名
  • 删除ftp服务端上单个文件
delete 文件名
  • 删除ftp服务端的多个文件
mdelete 文件名1 文件名2 文件名3 …… 文件名n
  • 在ftp服务端上创建目录
mkdir pathname
  • 删除ftp服务端上的目录
rmdir pathname
  • 切换传输模式
passive
  • 显示帮助信息。
help [命令名]

显示ftp命令的帮助信息,如果不输入命令名,则显示全ftp命令的帮助信息。

  • 退出ftp。
bye

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1941314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础:类与对象,递归,方法

类与对象的区别和联系 1.类是抽象的,概念的他是数据类型 2.对象是具体的实际的,代表一个具体事务 3.类是对象的模板,对象是类的个体 **对象在内存中的存在形式** 基本数据类型在堆,引用类型如String,数组在方法区 对象的属性 属性基本说明 1.成员变量or成员属性 属性的定…

双向链表<数据结构 C版>

目录 关于链表的分类 双向链表结构体 初始化 尾插 头插 打印 判断是否为空 尾删 头删 查找 指定位置之后的插入 指定位置的删除 销毁 关于链表的分类 根据链表的三大特性&#xff0c;单向or双向、带头or不带头、循环or不循环&#xff0c;可将链表分为2*2*2&#xf…

利用ascp下载SRA Explorer中转录组数据

最近在windows系统里下载了MobaXterm可以远程登入服务器&#xff0c;处理RNA的数据&#xff0c;需要从NCBI数据库上下载数据。本文提供用虚拟机ubuntu或者linux系统下载Aspera的方法和问题解决&#xff0c;以及从NCBI上批量下载数据库、最后得到一个项目里的所有fastq文件。 A…

前端:Vue学习-2

前端&#xff1a;Vue学习-2 1. vue的生命周期2. 工程化开发和脚手架Vue CLI2.1 组件化开发2.2 scoped解决样式冲突2.3 data是一个函数2.4 组件通信2.5 非父子通信- event bus事件&#xff0c;provide&inject 3.v-model原理->实现父子组件双向绑定4. sync 修饰符->实现…

谷粒商城实战笔记-42-前端基础-Vue-生命周期和钩子函数

下面是Vue官网关于生命周期及不同阶段的钩子函数的图示。 Vue 实例生命周期是指从一个组件被创建到最终被销毁的整个过程。 在这一过程中&#xff0c;Vue 提供了一系列的“钩子”函数&#xff0c;在生命周期的不同阶段执行自定义的代码。 以下是 Vue 对象生命周期的主要阶段…

C语言实现二叉树以及二叉树的详细介绍

目录 1.树概念及结构 1.1树的概念 1.2树的相关概念 1.3树的表示 2.二叉树概念及结构 2.1二叉树的概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的存储结构 3.二叉树顺序结构--特殊的二叉树--堆及其实现 3.1堆的概念及结构 3.2堆的实现 3.2.1堆的结构 3.2.2堆…

filebeat生产环境配置

配置文件属性 生产配置 filebeat.inputs: - type: logenabled: truepaths: - /tmp/logs/*.log- /var/log/system.log- /var/log/wifi.logsymlinks: truejson.keys_under_root: truejson.message_key: xxxjson.add_error_key: true# 如果想卡部分日志&#xff0c;比如用时间作…

Monaco 使用 HoverProvider

Monaco 中自定义 Hover&#xff0c;Hover 效果是指当鼠标移动文字上展示出提示效果&#xff0c;就像页面上的 Tooltip 效果。最终页面的显示效果如下&#xff1a; 通过 registerHoverProvider 注册 Hover 触发时的处理方法 接口中提供了 4 个参数&#xff0c;前两个参数比较重…

python学习之闭包与装饰器

一、闭包 闭包允许一个函数访问并操作函数外部的变量&#xff08;即父级作用域中的变量&#xff09;&#xff0c;即使在该函数外部执行。 特性&#xff1a; (1)外部函数嵌套内部函数。 (2)外部函数可以返回内部函数。 (3)内部函数可以访问外部函数的局部变量。 def out()…

【jmeter边界值提取器】

【目的】 从响应头中取token的内容 【方案】 使用后置处理器-边界值提取器 【组件路径】HTTP请求->右键添加->后置处理器->边界提取器 用途&#xff1a;边界提取器(Boundary Extractor)是放在Sample请求之后执行的&#xff0c;用于获取左右边界中间的所有字符&#xf…

Windows配置Qt+VLC

文章目录 前言下载库文件提取文件编写qmakeqtvlc测试代码 总结 前言 在Windows平台上配置Qt和VLC是开发多媒体应用程序的一个重要步骤。Qt作为一个强大的跨平台应用开发框架&#xff0c;为开发人员提供了丰富的GUI工具和库&#xff0c;而VLC则是一个开源的多媒体播放器&#x…

基于STM32的农业大棚温湿度采集控制系统的设计

目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 &#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是智能教室。 设备的详细功能见网盘中的文章《8、基…

451.根据字符出现频率排序(中等)

451.根据字符出现频率排序&#xff08;中等&#xff09; 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;451.根据字符出现频率排序&#xff08;中等&#xff09; 2.详细题解 题目&#xff1a; 347. 前 K 个高频元素&#xff08;中等&am…

2月科研——arcgis计算植被差异

ArcGIS中&#xff0c;设置高于或低于某个值的像元为 -9999&#xff0c;然后将这些地方设为空——目的&#xff1a;去除异常值和黑色背景值 Con(("T_std ano7.tif" > 2) | ("T_std ano7.tif" < - 2), - 9999,"T_std ano7.tif") SetNull(&…

数学基础【俗说矩阵】:初等矩阵和矩阵的初等行变化关系推导

初等矩阵和矩阵的初等行变换 初等矩阵 矩阵的初等行变换 对单位阵E进行一次初等行变化得到的阵叫做初等阵。 这里只能进行一次初等行变换。 置换阵 给矩阵【左乘】一个【置换阵】&#xff0c;相当与对该矩阵进行了一次【置换阵】对应的【置换】初等行变换&#xff1b; 数…

爬取百度图片,想爬谁就爬谁

前言 既然是做爬虫&#xff0c;那么肯定就会有一些小心思&#xff0c;比如去获取一些自己喜欢的资料等。 去百度图片去抓取图片吧 打开百度图片网站&#xff0c;点击搜索xxx&#xff0c;打开后&#xff0c;滚动滚动条&#xff0c;发现滚动条越来越小&#xff0c;说明图片加载…

Wordpress文章分享到微信朋友圈不带图像问题的解决

目录 一、插件选择 二、插件安装 三、获取微信公众号管理信息 1、登录微信公众平台 2、配置“JS接口安全域名” 3、至安全中心设置“IP白名单” 4、获得“开发者ID(AppID)” 5、获得“开发者密码(AppSecret)” 四、配置插件 五、验证 WordPress装配好后&#xff0c;可…

10.11和10.8那个大(各种ai的回答)

问题&#xff1a;10.11和10.8两个数哪个大 腾讯混元 ✔️ chatGPT ❎ 通义千问 ❎ 文心一言 ✔️ 智谱清言 ❎ 讯飞星火 ✔️ C知道 ❎ 豆包 ✔️

matlab 声音信号希尔伯特黄变换

1、内容简介 略 91-可以交流、咨询、答疑 2、内容说明 略 Hilbert-Huang变换&#xff08;HHT&#xff09;是一种基于经验的数据分析方法 方法。它的扩展基础是自适应的&#xff0c;因此它可以从非线性和非平稳过程中产生具有物理意义的数据表示。这个 适应性的优势是有代价…

代码随想录第二天 | 数组 | 双指针法、滑动窗口、螺旋数组

来源 代码随想录数组第二天 有序数组的平方 数组其实是有序的&#xff0c; 只不过负数平方之后可能成为最大数了。 那么数组平方的最大值就在数组的两端&#xff0c;不是最左边就是最右边&#xff0c;不可能是中间。 此时可以考虑双指针法了&#xff0c;i指向起始位置&…