嵌入式Linux:环境搭建之TFTP、NFS、SSH和FTP的安装和使用

news2024/9/20 16:55:20

在我们做嵌入式Linux开发的时候,需要安装一些环境以方便我们的开发,本篇文章就来介绍一下TFTP、NFS、SSH和FTP的作用和环境搭建(以Ubuntu为例)。

文章目录

  • 1 TFTP
    • 1.1 服务端
    • 1.2 客户端
  • 2 NFS
    • 2.1 介绍
    • 2.2 安装过程
      • 2.2.1 安装nfs
      • 2.2.2 在服务端创建共享目录
      • 2.2.3 配置服务端的NFS
      • 2.2.4 设置服务端防火墙
      • 2.2.5 设置客户端的挂载点和挂载目录
  • 3 SSH
  • 4 FTP

1 TFTP

TFTP(Trivial File Transfer Protocol) 是一个简化的的文件传输协议(FTP),它可以用来在两个通过网络相连的主机之间传输文件。

它是一个轻量级的协议,所以没有提供像FTPSFTP的一些高级特性,但它广泛用于网络设备的配置、固件更新等场景。

  • TFTP协议缺乏身份验证和安全功能。因此,建议服务器根据需求实现访问控制措施或防火墙。

1.1 服务端

1、安装TFTP服务器

打开终端,输入apt指令来更新本地软件包列表,然后安装TFTP服务器:

sudo apt update
sudo apt install tftpd-hpa

如下图所示:

在这里插入图片描述

安装完成后,输入下面的指令来确定TFTP服务器是否成功安装和运行。

sudo systemctl enable tftpd-hpa

在这里插入图片描述

我们可以配置TFTP服务器在每次系统启动的时候就自动运行:

sudo systemctl enable tftpd-hpa

在这里插入图片描述

在安装完成后,TFTP服务器将监听UDP端口69,为了能将文件通过TFTP服务器传输到其它的系统,需要保证:

  • 拷贝待传输的文件到TFTP的工作目录
  • 设置文件的权限对所有用户可见

2、配置TFTP服务器

TFTP的配置文件在/etc/default/tftpd-hpa,打开这个文件:

sudo nano /etc/default/tftpd-hpa

文件的内容如下所示:

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

我们修改为:

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"
  • TFTP_USERNAME:表示TFTP执行时使用的用户
  • TFTP_DIRECTORY:TFTP的工作目录
    • 需要保证当前的用户有权限访问这个目录:sudo chown -R $USER TFTP_DIRECTORY
  • TFTP_ADDRESS:默认是:69,这里设置为0.0.0.0:69,表示服务器接受来自端口69上任何客户端的连接。
  • TFTP_OPTIONS:允许为TFTP服务器指定特定参数(-c,-s)

TFTP_OPTIONS可以设置TFTP服务器的各种行为,包括超时、安全设置、块大小、传输大小限制以及与文件传输操作相关的其他参数。这里使用了-s(--secure)标志,其他可能的标志包括-c(--create)、-a(--address)、-u(--user)等。不指定-c标志将禁止任何已连接的客户端向服务器上传新文件。

3、创建TFTP工作目录

配置完上面的文件后,创建一个共享的目录并设置相应的权限以允许不同的用户(客户端)访问它。

sudo mkdir -p /var/lib/tftpboot
sudo chown -R nobody:nogroup /var/lib/tftpboot
sudo chmod -R 777 /var/lib/tftpboot
  • nobody:nogroup:在Ubuntu中,/etc/passwd中有个nobody用户,/etc/group中有个nogroup组,在客户端访问TFTP的时候,服务端就会转化为这个用户组的用户权限来访问,这里设置一下所有者以让客户端能够正常访问。

最后,重启TFTP服务器来让配置生效:

sudo systemctl restart tftpd-hpa

1.2 客户端

为了测试TFTP服务端,我们可以安装最常用的TFTP客户端:tftp-hpa在另一台电脑中:

sudo apt install tftp-hpa

下载服务端TFTP工作目录下的文件到客户端

tftp -g -r 文件名 IP地址

假设目录下有一个1.txt,且服务端(Ubuntu)的IP为192.168.31.120
在这里插入图片描述
我们可以输入

tftp -g -r 1.txt 192.168.31.120

这样服务端的1.txt就下载到客户端了:
在这里插入图片描述
上传客户端文件到服务端

tftp -p -l 文件名 IP地址

如下图所示,客户端传输2.txt到服务端:
在这里插入图片描述
服务端收到文件:
在这里插入图片描述

2 NFS

2.1 介绍

NFS(网络文件系统,Network File System)是一种分布式文件系统协议,允许我们挂载远程的目录。这让我们能够管理不同位置的存储空间,多个客户端也可以更改这个空间。

我们在开发的过程中,如果我们更改了Linux内核或者设备树,就需要重新将镜像烧写到NAND/SD/EMMC等设备中,然后由UBoot拷贝到RAM。这样就很麻烦,我们就可以在UBoot中利用NFS来从远程的主机(如Ubuntu)中加载内核和设备树到开发板的RAM中。

2.2 安装过程

2.2.1 安装nfs

(1)服务端

服务端需要安装nfs-kernel-server

sudo apt update
sudo apt install nfs-kernel-server

(2)客户端

客户端需要安装nfs-common

sudo apt update
sudo apt install nfs-common

2.2.2 在服务端创建共享目录

创建目录

sudo mkdir /var/nfs/general -p

作为安全措施,NFS会把所有来自客户端的root操作转化到nobody:nogroup用户组。所以我们需要改变目录的属性来让客户端有访问权限。

sudo chown nobody:nogroup /var/nfs/general

2.2.3 配置服务端的NFS

/etc/exports是NFS服务器配置文件,用于定义需要分享的目录以及访问这些目录的权限。打开这个文件:

sudo nano /etc/exports

这个文件中的每一行表示一个配置,语法如下:

directory_to_share    client(share_option1,...,share_optionN)
  • client可以是IP地址、主机名或网络范围

我们需要为每个待共享的目录创建一行配置。其中,client_ip需要更改为实际的IP,设置为*表示允许所有IP。

/var/nfs/general    client_ip(rw,sync,no_subtree_check)
  • rw:使客户端具有读写权限
  • sync:强制NFS在回复之前将更改写入磁盘。这能保证文件的一致性,但降低了文件操作速度
  • async:数据先写到缓存区,再写到磁盘里中。这样有更好的性能,但可能会导致数据丢失或损坏。
  • no_subtree_check:默认情况下,NFS会检查用户访问的文件所在的子目录是否在/etc/exports中,即每个子目录都要在这个exports声明,否则禁止访问。该选项把这个特性关闭。
  • nohide:与no_subtree_check类似,所有子目录都要在exports中声明了才显示。该选项则设置显示所有的子目录。
  • no_root_squash:默认情况下,假设客户端处于root状态,它对于NFS的访问的权限会被映射为非特权。该选项则允许映射root特权。
  • insecure:默认情况下,NFS客户端必须使用保留端口(端口号大于1024)进行连接。

我常用的NFS配置为:(rw,nohide,insecure,no_subtree_check,async,no_root_squash)。如下图所示:
在这里插入图片描述

  • 设置完后重启NFS:sudo /etc/init.d/nfs-kernel-server restart

2.2.4 设置服务端防火墙

首先看一下防火墙是否启用,如果启用,看一下当前禁用的规则:

sudo ufw status

我这里没有打开:
在这里插入图片描述
如果打开了,我们要确保客户端的IP允许访问我们的NFS服务端

sudo ufw allow from client_ip to any port nfs
  • 替换client_ip为客户端的IP

2.2.5 设置客户端的挂载点和挂载目录

首先创建一个挂载的目录

sudo mkdir -p /nfs/general

假设服务端IP为192.168.31.120,挂载服务端的NFS目录:

mount -t nfs -o nolock,nfsvers=3,vers=3 192.168.31.120:/var/nfs/general /nfs/general

我们可以使用df -h查看挂载结果:
在这里插入图片描述
此时服务端的/var/nfs/general目录就和客户端的挂载目录/nfs/general中的内容同步了。
在这里插入图片描述

3 SSH

SSH服务允许用户通过远程终端连接到Ubuntu服务器,进行各种管理操作。这使得管理员可以在任何地方进行系统管理和维护,而无需直接访问服务器。这里我们的用途实际就是在Windows中通过SSH软件来访问Ubuntu的终端。

输入以下指令安装:

sudo apt-get install openssh-server
  • SSH服务默认运行在端口22。

这里的SSH软件我使用MobaXterm,设置服务端的IP和用户名端口:
在这里插入图片描述
点击连接后会提示输入密码,然后就进入终端了:
在这里插入图片描述

4 FTP

Ubuntu和Windows之间的文件互传,我们可以使用FTP协议来实现。当然虚拟机有VMTOOLS,只是使用FTP的话,在同一个局域网内就都可以传输。

1、安装FTP服务

sudo apt-get install vsftpd

2、更改配置

sudo vi /etc/vsftpd.conf

将这两个配置前面的#删掉:
在这里插入图片描述

  • write_enable=YES:开启FTP的写权限,即允许FTP用户上传文件或者修改服务器上的文件
  • local_umask=022:控制新创建的文件和目录的默认权限的。022表示不设置特殊权限,用户有rwx权限,组有rx权限,其他人有rx权限。

3、重启vsftp服务

sudo /etc/init.d/vsftpd restart

4、使用FTP客户端连接
这里以FileZilla为例进行连接:
在这里插入图片描述
主机设为Ubuntu的IP,端口为FTP默认端口21,用户名和密码就是Ubuntu登陆时的用户名和密码。连接成功后我们就可以看到Ubuntu中的文件:
在这里插入图片描述
我们就可以将WIndows中的文件传入Ubuntu了。

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

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

相关文章

C++CLI——4数组、泛型、集合与属性

CCLI——4数组、泛型、集合与属性 C数组 在c中,数组的大小必须在编译时确定,并且将数组传递给函数时,传递的只是数组起始地址,所以要想办法连同数组大小一同传递给函数。 int arr[4] { 1,2,3,4 }; int arr1[] { 1,2,3,4 }; i…

Vue-4、单向数据绑定与双向数据绑定

1、单向数据绑定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>数据绑定</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/…

进阶分布式链路追踪

另外我的新书RocketMQ消息中间件实战派上下册&#xff0c;在京东已经上架啦&#xff0c;目前都是5折&#xff0c;非常的实惠。 https://item.jd.com/14337086.html​编辑https://item.jd.com/14337086.html “RocketMQ消息中间件实战派上下册”是我既“Spring Cloud Alibaba微…

C++面试宝典第16题:盛最多水的容器

题目 给定n个非负整数a1、a2、…、an,每个数代表坐标中的一个点(i, ai)。画n条垂直线,使得第i条垂直线的两个端点分别为(i, ai)和(i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:不能倾斜容器,且n的取值至少为2。 在下图中,垂直线代表的输…

时序预测 | Matlab实现GJO-VMD-LSTM金豺-变分模态分解-长短期记忆网络时间序列预测

时序预测 | Matlab实现GJO-VMD-LSTM金豺-变分模态分解-长短期记忆网络时间序列预测 目录 时序预测 | Matlab实现GJO-VMD-LSTM金豺-变分模态分解-长短期记忆网络时间序列预测预测效果基本介绍模型设计程序设计参考资料 预测效果 基本介绍 Matlab实现GJO-VMD-LSTM金豺-变分模态分…

【uniapp】调用阿里云OCR图片识别文字:

文章目录 一、效果&#xff1a;二、实现&#xff1a; 一、效果&#xff1a; 二、实现&#xff1a; 【阿里官方】高精版OCR文字识别【最新版】-云市场-阿里云 <template><view class"container"><!-- 选择图片 --><button click"imageO…

“单项突出”的赢双科技IPO加速,比亚迪是最强助力?

近日&#xff0c;新能源汽车核心部件供应商赢双科技首次递表科创板&#xff0c;其凭借旋转变压器产品就坐稳了新能源车企主要供应商的地位&#xff0c;从核心业务及业绩情况来看&#xff0c;赢双科技不愧为“单项冠军”。 据悉&#xff0c;赢双科技本次IPO拟募资8.47亿元&…

YOLOv5改进 | 2023Neck篇 | 利用Gold-YOLO针对小目标进行检测(附完整修改教程 + 代码)

一、本文介绍 本文给大家带来的改进机制是Gold-YOLO利用其Neck改进v8的Neck,GoLd-YOLO引入了一种新的机制——信息聚集-分发(Gather-and-Distribute, GD)。这个机制通过全局融合不同层次的特征并将融合后的全局信息注入到各个层级中,从而实现更高效的信息交互和融合。这种…

【MIT 6.S081】2020, 实验记录(2),Lab: System calls

目录 TaskTask 1: System call tracing1.1 task 说明1.2 实现过程1.3 测试 这个实验尝试自己在 OS kernel 中添加 system call。 Task Task 1: System call tracing 1.1 task 说明 这个 task 实现在 kernel 中添加一个 trace 的系统调用&#xff0c;当用户调用这个系统调用…

Python语法进阶学习--模块和包

在学习python进阶知识中的面向对象之前,还要了解一下当中几个概念:包、模块、类和函数。 一.模块和包 模块和包:用来组织Python代码的。 包 > 含有 __init__.py文件的文件夹模块 > py文件类 > class 【面向对象学习】函数&#xff08;方法&#xff09;> def 以上均…

陀螺仪LSM6DSV16X与AI集成(5)----6D方向检测功能

陀螺仪LSM6DSV16X与AI集成.5--6D方向检测功能 概述视频教学样品申请源码下载生成STM32CUBEMX串口配置IIC配置CS和SA0设置串口重定向参考程序初始换管脚获取ID复位操作BDU设置6D方向检测功能配置选择滤波和角度阈值设置量程和速率获取所有中断源的状态发送相应信息演示 概述 陀…

计算机基础面试题 |18.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

大数据StarRocks(六) :Catalog

StarRocks 自 2.3 版本起支持 Catalog&#xff08;数据目录&#xff09;功能&#xff0c;实现在一套系统内同时维护内、外部数据&#xff0c;方便您轻松访问并查询存储在各类外部源的数据。 1. 基本概念 内部数据&#xff1a;指保存在 StarRocks 中的数据。 外部数据&#xf…

【QML COOK】- 003-处理鼠标事件

1. 编辑main.qml import QtQuickWindow {width: 800height: 800visible: truetitle: qsTr("Hello World")Image {id: backgroudanchors.fill: parentsource: "qrc:/Resources/Images/arrow.png"}MouseArea {anchors.fill: parentonClicked: backgroud.rot…

Python(30):非对称加密算法RSA的使用(openssl生成RSA公私钥对)

Python(30)&#xff1a;非对称加密算法RSA的使用(openssl生成RSA公私钥对) 1、openssl生成RSA公私钥对 1.1、生成RSA公私钥对命令 [rootloaclhost ~]# openssl OpenSSL> genrsa -out rsa_private_key.pem 1024 Generating RSA private key, 1024 bit long modulus .. ...…

微服务概述之单体架构

微服务概述 互联网始于 1969年美国的阿帕网&#xff08;ARPA&#xff09;&#xff0c;最开始的阿帕网只在美国军方使用。随着时间的推移&#xff0c;一些大学也开始加入建设&#xff0c;慢慢演化成了现在的因特网 &#xff08;Internet&#xff09;。随着计算机网络的普及&…

图像融合论文阅读:CrossFuse: 一种基于交叉注意机制的红外与可见光图像融合方法

article{li2024crossfuse, title{CrossFuse: A novel cross attention mechanism based infrared and visible image fusion approach}, author{Li, Hui and Wu, Xiao-Jun}, journal{Information Fusion}, volume{103}, pages{102147}, year{2024}, publisher{Elsevier} } 论文…

1.1map

unordered_map和map的使用几乎是一致的&#xff0c;只是头文件和定义不同 #include<iostream> #include<map>//使用map需要的头文件 #include<unordered_map>//使用unordered_map需要的头文件 #include<set>//使用set需要的头文件 #include<uno…

用通俗易懂的方式讲解:如何提升大模型 Agent 的能力?

大型语言模型&#xff08;LLM&#xff09;的出现带火了Agent。利用LLM理解人类意图、生成复杂计划并且能够自主行动的能力。Agent具有无与伦比的能力&#xff0c;能够做出类似于人类复杂性的决策和完成一些复杂的工作。 目前市面上已经出现非常多得Agent框架&#xff1a;XAgen…

如何使用PR制作抖音视频?抖音短视频创作素材剪辑模板PR项目工程文件

如何使用PR软件制作抖音视频作品&#xff1f;Premiere Pro 抖音短视频创作素材剪辑模板PR项目工程文件。 3种分辨率&#xff1a;10801920、10801350、10801080。 来自PR模板网&#xff1a;https://prmuban.com/37058.html