管理面板Ajenti的在Windows10下Ubuntu24.04/Ubuntu22.04里的安装
Ajenti是一款基于Web的开源系统管理控制面板,可用于通过Web浏览器,管理远程系统管理性任务,这一点与 Webmin模块 非常相似。 Ajenti是一款功能非常强大的轻型工具,它提供了快速的、反应灵敏的Web界面,可用于管理小型服务器环境,还最适合虚拟专用服务器(VPS)和专门服务器。
总结:
Ubuntu22.04里安装方便快捷,管理配置一切正常
在Ubuntu24.04里安装一波三折,最后也无法登录管理
以前在Ubuntu实体机的体验:
在linux安装管理面板:
安装文档:Installing — Ajenti 2.2.4 documentation
但是安装完成之后,没有启动成功。用这条命令启动成功了:
systemctl restart ajenti
但是需要用系统的root登录,这个感觉有点安全隐患啊。
现在新版本安装,发现是普通用户登录,然后有sudo权限的账户可以再二次登录,获得root权限,安全性没问题。
textract 可以在任何文档中提取文本
Pycuda cuda封装
在Windows10下Ubuntu24.04实践
在Windows10 里的Ubuntu24.04环境里做实验,进行安装。整体一言难尽,最后跌跌撞撞安装成了,但是账户无法登录,登录上去之后是空白页面,显示:
当前无法使用此页面ERR_EMPTY_RESPONSE
一键安装(失败)
按照官网的命令,
curl https://raw.githubusercontent.com/ajenti/ajenti/master/scripts/install.sh | sudo bash -s -
结果下载失败,报错:curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 1 ms: Couldn't connect to server
用繁琐一点的方法,先拿到安装文件,再执行
安装文件在这个链接:ajenti/scripts/install.sh at master · ajenti/ajenti · GitHub
https://github.com/ajenti/ajenti/blob/master/scripts/install.sh
下载到win10,然后到Ubuntu里面去cp到Ubuntu的工作目录,比如win10下载到e:\360Download目录,目标目录是~/download,执行:
skywalk@DESKTOP-9C5AU01:/mnt/e/360Downloads$ cp install.sh ~/download/
cp到Ubuntu的目录之后执行:
chmod 755 install.sh
sudo ./install.sh
但是安装的时候python那块报错。(后来才发现手动安装的时候python也有报错,估计是Ubuntu24.04的安全性导致的)
改用官方的手动安装
官方手动安装
安装需要的库
sudo add-apt-repository universe
sudo apt-get install build-essential python3-pip python3-dev python3-lxml libssl-dev python3-dbus python3-augeas python3-apt ntpdate
配置pip加速:
sudo pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip安装的时候会碰到error: externally-managed-environment 报错,解决方法是加上参数解决:--break-system-packages
安装Ajenti2
升级库,若是报错,不升级也可以
sudo pip3 install --break-system-packages setuptools pip wheel -U
安装Ajenti2
sudo pip3 install --break-system-packages ajenti-panel ajenti.plugin.ace ajenti.plugin.augeas ajenti.plugin.auth-users ajenti.plugin.core ajenti.plugin.dashboard ajenti.plugin.datetime ajenti.plugin.filemanager ajenti.plugin.filesystem ajenti.plugin.network ajenti.plugin.notepad ajenti.plugin.packages ajenti.plugin.passwd ajenti.plugin.plugins ajenti.plugin.power ajenti.plugin.services ajenti.plugin.settings ajenti.plugin.terminal
如果报错python3-cryptography无法remove,则需要手工apt删除python3-cryptography再安装:
sudo apt remove python3-cryptography
ajenti终于安装完成:
Installing collected packages: cryptography, pyOpenSSL, aj, ajenti.plugin.core, ajenti-panel, ajenti.plugin.plugins, ajenti.plugin.passwd, ajenti.plugin.filesystem, ajenti.plugin.datetime, ajenti.plugin.augeas, ajenti.plugin.ace, ajenti.plugin.terminal, ajenti.plugin.settings, ajenti.plugin.notepad, ajenti.plugin.network, ajenti.plugin.filemanager, ajenti.plugin.packages, ajenti.plugin.dashboard, ajenti.plugin.auth-users, ajenti.plugin.services, ajenti.plugin.power
Successfully installed aj-2.2.10 ajenti-panel-2.2.10 ajenti.plugin.ace-0.32 ajenti.plugin.augeas-0.20 ajenti.plugin.auth-users-0.33 ajenti.plugin.core-0.109 ajenti.plugin.dashboard-0.42 ajenti.plugin.datetime-0.42 ajenti.plugin.filemanager-0.31 ajenti.plugin.filesystem-0.50 ajenti.plugin.network-0.30 ajenti.plugin.notepad-0.30 ajenti.plugin.packages-0.36 ajenti.plugin.passwd-0.27 ajenti.plugin.plugins-0.52 ajenti.plugin.power-0.25 ajenti.plugin.services-0.35 ajenti.plugin.settings-0.34 ajenti.plugin.terminal-0.42 cryptography-42.0.4 pyOpenSSL-24.0.0
看看安装好的库
sudo pip3 list | grep aj
非常棒:
aj 2.2.10
ajenti-panel 2.2.10
ajenti.plugin.ace 0.32
ajenti.plugin.augeas 0.20
ajenti.plugin.auth-users 0.33
ajenti.plugin.core 0.109
ajenti.plugin.dashboard 0.42
ajenti.plugin.datetime 0.42
ajenti.plugin.filemanager 0.31
ajenti.plugin.filesystem 0.50
ajenti.plugin.network 0.30
ajenti.plugin.notepad 0.30
ajenti.plugin.packages 0.36
ajenti.plugin.passwd 0.27
ajenti.plugin.plugins 0.52
ajenti.plugin.power 0.25
ajenti.plugin.services 0.35
ajenti.plugin.settings 0.34
ajenti.plugin.terminal 0.42
创建python虚拟环境安装(失败)
在实体Ubuntu下,应该可以略过这步。但是在Windows10的Ubuntu24.04下,碰到报错,所以必须要创建虚拟环境
sudo apt install python3.12-venv
python3 -m venv py312
激活环境
source py312/bin/activate
镜像加速
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
安装Ajenti2
pip3 install setuptools pip wheel -U
安装
pip3 install ajenti-panel ajenti.plugin.ace ajenti.plugin.augeas ajenti.plugin.auth-users ajenti.plugin.core ajenti.plugin.dashboard ajenti.plugin.datetime ajenti.plugin.filemanager ajenti.plugin.filesystem ajenti.plugin.network ajenti.plugin.notepad ajenti.plugin.packages ajenti.plugin.passwd ajenti.plugin.plugins ajenti.plugin.power ajenti.plugin.services ajenti.plugin.settings ajenti.plugin.terminal
最后安装的时候ajenti-panel需要sudo权限,但是sudo之后,又会报跟系统冲突,所以最终还是用了官方手动安装方法,没有使用虚拟环境。
启动服务
以前用systemctl restart ajenti 在ubuntu的低版本下启动成功过,但是这次在Win10下的Ubuntu24.04报错:Unit ajenti.service not found.
所以最终是使用命令启动:
sudo ajenti-panel -v
但是启动后,账户登录成功后,页面显示
当前无法使用此页面ERR_EMPTY_RESPONSE
这样无法对ajenti进行配置管理。
在Windows10下Ubuntu22.04实践
在Ubuntu22.04下安装和配置都比较顺利,按照官方手册进行即可。
安装依赖包:
sudo add-apt-repository universe
sudo apt-get install build-essential python3-pip python3-dev python3-lxml libssl-dev python3-dbus python3-augeas python3-apt ntpdate
安装Ajenti2
sudo pip3 install setuptools pip wheel -U
sudo pip3 install ajenti-panel ajenti.plugin.core ajenti.plugin.dashboard ajenti.plugin.settings ajenti.plugin.plugins
安装Ajenti2所有插件
sudo pip3 install ajenti-panel ajenti.plugin.ace ajenti.plugin.augeas ajenti.plugin.auth-users ajenti.plugin.core ajenti.plugin.dashboard ajenti.plugin.datetime ajenti.plugin.filemanager ajenti.plugin.filesystem ajenti.plugin.network ajenti.plugin.notepad ajenti.plugin.packages ajenti.plugin.passwd ajenti.plugin.plugins ajenti.plugin.power ajenti.plugin.services ajenti.plugin.settings ajenti.plugin.terminal
启动服务
安装好后,启动服务
sudo ajenti-panel
用浏览器连接8000端口即可管理配置。
具体管理配置见:管理面板Ajenti的在Windows10下Ubuntu24.04/Ubuntu22.04里的配置管理-CSDN博客
调试
install.sh安装的时候报错python处理失败
rm: cannot remove '/usr/lib//usr/bin/python3/dist-packages/setuptools.egg-info': No such file or directory
error: externally-managed-environment× This environment is externally managed
╰─> To install Python packages system-wide, try apt installpython3-xyz, where xyz is the package you are trying toinstall.If you wish to install a non-Debian-packaged Python package,create a virtual environment using python3 -m venv path/to/venv.Then use path/to/venv/bin/python and path/to/venv/bin/pip. Makesure you have python3-full installed.If you wish to install a non-Debian packaged Python application,it may be easiest to use pipx install xyz, which will manage avirtual environment for you. Make sure you have pipx installed.See /usr/share/doc/python3.12/README.venv for more information.
根据提示,手工先安装python环境。
sudo apt install python3-dev python3-pip python3-pil python3-augeas python3-dbus
后来发现有手工安装的民工,改用官方提供的方法。
后来发现pip安装任何库都是报错,所以这个问题还是要解决。
sudo apt install python3.12-venv
然后创建了新的虚拟环境(后来发现使用虚拟环境也不行)
再后来发现可以用这个参数解决:--break-system-packages
即安装命令:
sudo pip3 install --break-system-packages ajenti-panel ajenti.plugin.ace ajenti.plugin.augeas ajenti.plugin.auth-users ajenti.plugin.core ajenti.plugin.dashboard ajenti.plugin.datetime ajenti.plugin.filemanager ajenti.plugin.filesystem ajenti.plugin.network ajenti.plugin.notepad ajenti.plugin.packages ajenti.plugin.passwd ajenti.plugin.plugins ajenti.plugin.power ajenti.plugin.services ajenti.plugin.settings ajenti.plugin.terminal
安装ajenti2的时候报错build ajenti-panel失败
Failed to build ajenti-panel
ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (ajenti-panel)
还是要用sudo来安装,这个库需要sudo权限
安装ajenti2的时候报错cryptography
Attempting uninstall: cryptography
Found existing installation: cryptography 41.0.7
ERROR: Cannot uninstall cryptography 41.0.7, RECORD file not found. Hint: The package was installed by debian.
sudo apt search cryptography |grep 41
发现果然有python3-cryptography 41.0.7这个版本,python3-cryptography/noble-updates,noble-security,now 41.0.7-4ubuntu0.1 amd64 [installed,automatic]
删除
sudo apt remove python3-cryptography
安装ajenti2前更新pip和wheel报错
因为报错,就想着像cryptography那样顺便把wheel也一并删除
sudo apt remove python3-wheel
不行啊,删除wheel,pip也一起删除了。想自己装也不行:
sudo python3 -m ensurepip
ensurepip is disabled in Debian/Ubuntu for the system python.Python modules for the system python are usually handled by dpkg and apt-get.apt install python3-<module name>Install the python3-pip package to use pip itself. Using pip together
with the system python might have unexpected results for any system installed
module, so use it on your own risk, or make sure to only use it in virtual
environments.
这不进入死胡同了吗?
后来就决定不更新wheel 和pip这两个库了。
服务启动后登录网页报错:
2024-12-23T13:35:25Z <Greenlet at 0x7f38959a2700: _handle_and_close_when_done(<bound method StreamServer.wrap_socket_and_handle , <bound method StreamServer.do_close of <WSGIServer, (<gevent._socket3.socket [closed] at 0x7f3895f0036)> failed with SSLError
Traceback (most recent call last):
File "src/gevent/greenlet.py", line 908, in gevent._gevent_cgreenlet.Greenlet.run
File "/usr/local/lib/python3.12/dist-packages/gevent/baseserver.py", line 34, in _handle_and_close_when_done
return handle(*args_tuple)
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/dist-packages/gevent/server.py", line 209, in wrap_socket_and_handle
with _closing_socket(self.wrap_socket(client_socket, **self.ssl_args)) as ssl_socket:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/dist-packages/aj/core.py", line 224, in <lambda>
aj.server.wrap_socket = lambda socket, **args:context.wrap_socket(sock=socket, server_side=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/dist-packages/gevent/ssl.py", line 121, in wrap_socket
return self.sslsocket_class(
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/dist-packages/gevent/ssl.py", line 319, in __init__
raise x
File "/usr/local/lib/python3.12/dist-packages/gevent/ssl.py", line 315, in __init__
self.do_handshake()
File "/usr/local/lib/python3.12/dist-packages/gevent/ssl.py", line 673, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: HTTP_REQUEST] http request (_ssl.c:1000)
2024-12-23T13:35:25Z <Greenlet at 0x7f38959a2700: _handle_and_close_when_done(<bound method StreamServer.wrap_socket_and_handle , <bound method StreamServer.do_close of <WSGIServer, (<gevent._socket3.socket [closed] at 0x7f3895f0036)> failed with SSLError
这个留待以后解决。
相关文章:
管理面板Ajenti的在Windows10下Ubuntu24.04/Ubuntu22.04里的安装
Ajenti是一款基于Web的开源系统管理控制面板,可用于通过Web浏览器,管理远程系统管理性任务,这一点与 Webmin模块 非常相似。 Ajenti是一款功能非常强大的轻型工具,它提供了快速的、反应灵敏的Web界面,可用于管理小型服…...
在Python如何用Type创建类
文章目录 一,如何创建类1:创建一个简单类2:添加属性和方法3:动态继承父类4:结合元类的使用总结 二.在什么情境下适合使用Type创建类1. **运行时动态生成类**2. **避免重复代码**3. **依赖元类或高级元编程**4. **动态扩…...
Android学习19 -- NDK4--共享内存(TODO)
在安卓的NDK(Native Development Kit)中,C共享内存通常用于不同进程间的通信,或者在同一进程中多线程之间共享数据。这种方法相较于其他形式的IPC(进程间通信)来说,具有更高的性能和低延迟。共享…...

《Cocos Creator游戏实战》非固定摇杆实现原理
为什么要使用非固定摇杆 许多同学在开发摇杆功能时,会将摇杆固定在屏幕左下某一位置,不会让其随着大拇指触摸点改变,而且玩家只有按在了摇杆上才能移动人物(触摸监听事件在摇杆精灵上)。然而,不同玩家的大拇指长度不同…...

RabbitMQ工作模式(详解 工作模式:简单队列、工作队列、公平分发以及消息应答和消息持久化)
文章目录 十.RabbitMQ10.1 简单队列实现10.2 Work 模式(工作队列)10.3 公平分发10.4 RabbitMQ 消息应答与消息持久化消息应答概念配置 消息持久化概念配置 十.RabbitMQ 10.1 简单队列实现 简单队列通常指的是一个基本的消息队列,它可以用于…...

【VScode】第三方GPT编程工具-CodeMoss安装教程
一、CodeMoss是什么? CodeMoss是一款集编程、学习和办公于一体的高效工具。它兼容多种主流平台,包括VSCode、IDER、Chrome插件、Web和APP等,支持插件安装,尤其在VSCode和IDER上的表现尤为出色。无论你是编程新手还是资深开发者&a…...
在JavaScript中,let 和 const有什么不同
在JavaScript中,let 和 const 是用于声明变量的关键字,但它们有一些重要的区别 1.重新赋值: let 声明的变量可以重新赋值。const 声明的变量必须在声明时初始化,并且之后不能重新赋值 let a 10; a 20; // 有效,a 的…...
Mysq学习-Mysql查询(4)
5.子查询 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL4.1开始引入.在SELECT子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表. 子查询中常用的操作符有ANY(SOME),ALL,IN,EXISTS.子查询可以添加到SELECT,UPD…...

安装torch-geometric库
目录 1.查看 torch 和 CUDA 版本 2.依次下载和 torch 和 CUDA 对应版本的四个依赖库pyg-lib、torch-scatter、torch-sparse、torch-cluster以及torch-spline-conv 3.下载并安装torch-geometric库 1.查看 torch 和 CUDA 版本 查看CUDA版本 nvcc -V 查看pytorch版本 pip s…...
Java数组深入解析:定义、操作、常见问题与高频练习
一、数组的定义 1. 什么是数组 数组是一个容器,用来存储多个相同类型的数据。它属于引用数据类型,可以存储基本数据类型(如int、char)或者引用数据类型(如String、对象)。 2. 数组的定义方式 a. 动态初…...

Docker-构建自己的Web-Linux系统-镜像webtop:ubuntu-kde
介绍 安装自己的linux-server,可以作为学习使用,web方式访问,基于ubuntu构建开源项目 https://github.com/linuxserver/docker-webtop安装 docker run -d -p 1336:3000 -e PASSWORD123456 --name webtop lscr.io/linuxserver/webtop:ubuntu-kde登录 …...

【C语言练习(17)—输出杨辉三角形】
C语言练习(17) 文章目录 C语言练习(17)前言题目题目解析整体代码 前言 杨辉三角形的输出可以分三步,第一步构建一个三角形、第二步根据规律将三角形内容填写、第三步将三角形以等腰的形式输出 题目 请输出一个十行的…...

SpringMVC学习(二)——RESTful API、拦截器、异常处理、数据类型转换
一、RESTful (一)RESTful概述 RESTful是一种软件架构风格,用于设计网络应用程序。REST是“Representational State Transfer”的缩写,中文意思是“表现层状态转移”。它基于客户端-服务器模型和无状态操作,以及使用HTTP请求来处理数据。RES…...

React 第二十节 useRef 用途使用技巧注意事项详解
简述 useRef 用于操作不需要在视图上渲染的属性数据,用于访问真实的DOM节点,或者React组件的实例对象,允许直接操作DOM元素或者是组件; 写法 const inpRef useRef(params)参数: useRef(params),接收的 …...
VIVO Java开发面试题及参考答案
TCP 能不能两次握手? TCP 不能两次握手。 在 TCP 连接建立过程中,三次握手是必不可少的。第一次握手是客户端向服务器发送一个带有 SYN(同步序列号)标志的 TCP 报文段,这个报文段包含了客户端初始的序列号。这一步的主要目的是告诉服务器,客户端想要建立连接,并且让服务…...

C# Winfrom chart图 实例练习
代码太多了我就不展示了,贴一些比较有代表性的 成品效果展示: Excel转Chart示例 简单说一下我的思路 \ 先把Excel数据展示在dataGridView控件上 XLIST 为 X轴的数据 XLIST 为 Y轴的数据 ZLIST 为 展示的数据进行数据处理点击展示即可 // 将Excel数…...

iOS从Matter的设备认证证书中获取VID和PID
设备认证证书也叫 DAC, 相当于每个已经认证的设备的标识。包含了 VID 和 PID. VID: Vendor ID ,标识厂商 PID: Product ID, 标识设备的 根据 Matter 对于设备证书的规定,DAC证书subject应该包含VID 和 PID. 可通过解析 X509 证书读取subject…...

带着国标充电器出国怎么办? 适配器模式(Adapter Pattern)
适配器模式(Adapter Pattern) 适配器模式适配器模式(Adapter Pattern)概述talk is cheap, show you my code总结 适配器模式 适配器模式(Adapter Pattern)是面向对象软件设计中的一种结构型设计…...

破解海外业务困局:新加坡服务器托管与跨境组网策略
在当今全球化商业蓬勃发展的浪潮之下,众多企业将目光投向海外市场,力求拓展业务版图、抢占发展先机。而新加坡,凭借其卓越的地理位置、强劲的经济发展态势以及高度国际化的营商环境,已然成为企业海外布局的热门之选。此时…...

Mybatis-Plus快速入门
参考:黑马MyBatisPlus教程全套视频教程,快速精通mybatisplus框架 1.Mapper-plus配置 1.MapperScan("Mapper目录的位置") 2.Mapper层文件需要继承BaseMapper extends BaseMapper<实体类> 3.开启日志 4.配置类 Configuration public cl…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...