目标:把一台虚拟机设置成网络服务器+啥都能干的电脑

目录

虚拟机的安装

虚拟机的基本配置

一、换源

二、安装vmtool(仅限于在上一步不听话取消更新的同学)

三、安装nginx(听话的同学)

四、安装MySQL,php,wordpress

五、python常用库安装与ide环境设置

六、c/c++常用库安装与ide环境设置

虚拟机的形而上学

一、electron-ssr


最近想用虚拟机搭个网络服务器,原以为两三天就会搞定,但我却估计错了它的复杂程度。光是重装就已经四五遍了,更别提配置很多东西,为了避 坑,也为了之后的安装之路顺遂平安,我写了这篇帖子,帮助新入坑的萌 新 避 坑!!!!!!!!!!

虚拟机的安装

安装之前的小tips:

如果电脑内存不够,千万别安装在本机上,你会非常后悔,建议自己买个固态硬盘,再来个好点的硬盘盒,所有虚拟机的设置全安在固态硬盘上

在这之后,噩梦才刚刚开始

首先你需要

VMware Workstation Pro

ubuntu-20.04.3-desktop-amd64.iso

在virtualbox和vmware之间,请你一定要选择vmware,它会比virtualbox好用的多

强烈建议安装vmware的专业版,不然复杂程度可能会超乎想象,特别是你某一步安错的时候

这两个都建议用迅雷安装,会很快

接下来就是配置安装

自己设置在哪个盘就安装在哪里

这里,请设成100G,不要吝惜你的内存,否则扩容是个大问题

然后点一下新CD适配器这里,把光盘烧进去

好的,请开始下一场表演:虚拟机的烧录

请在界面里开启你的虚拟机,就是那个绿色的箭头

有如下界面是正确的:

下一个界面会问你怎么安装

这里一定要选普通安装(nomal),我忘截图了,如果不清醒的话多去看看别人的博客,百度谷歌都没问题

像展示的这样选,弹出的这个窗口选continue

好的,接下来,请耐心等待,它让你重启,你就重启,不要犹豫

你会看到黑屏,还有一句话,大意是如果确定删除安装包你就按下Enter键,此时果断摁下

然后你会看到让你登录账号的选项,你有谷歌账户就登录谷歌,有其他就登录其他,这里不再赘述

最好是登录成功,不然会有更多东西让你头疼,没有请注册一个,有加速器的也赶快打开

假设你已经设置完成,这个时候会有一个安装包弹出来,问你要不要安

这个一定要安装,因为它包括很多底层的依赖库,vmtool等等都包含在内

这期间时间会很漫长,你可以做一些别的东西,看书看电视剧,听音乐,吃饭都可以,唯独不要点下cancel

它可能会因为网络问题失败很多次,但请你以最宽广的胸怀包容它的过失,不要放弃,多下载几遍,反复下载,相信功夫一定不负有心人

更新完毕之后,请保留快照,这样可以在配置失败的时候进行回滚,而不是重装系统

虚拟机的基本配置

一、换源

点击一下software&update那个图标,

去选择一下other

然后选择清华源,下载东西会快一些

命令行方式可以参考别的博客,小白看我这个就没问题

之后让你干啥你干啥,别取消别跳过,reload之后reboot

不reboot也可以,你看看自己是否可以用清华源下载东西,可以的话就不用重新登录了

二、安装vmtool(仅限于在上一步不听话取消更新的同学)

这样复制文件就可以直接从本机拖到虚拟机

不要用老式的光盘烧录方法,对我们亲爱的Ubuntu 20.04系统是完全不管用的,你要是头铁也可以试试,总会在最后一步让你崩溃

进入终端,输入三行命令

sudo apt upgrade
sudo apt install open-vm-tools-desktop -y
sudo reboot

耐心等待执行

三、安装nginx(听话的同学)

进入命令行

sudo su
apt-get update
apt-get upgrade
apt-get install nginx

打开localhost

不听话的同学,请出门左转,或回滚快照,或重装系统,或点击updata图标,争取重新安装

不要被没用且繁杂的安装方式浪费时间和资源

四、安装MySQL,php,wordpress

apt-get install mysql-server
mysql_secure_installation

之后可以这样设置

不要跳步,一步一步来,否则你一定后悔

具体设置可以参见这篇博客,写的很详细

ubuntu搭建lnmp+wordpress_mobius0816的博客-CSDN博客

最后效果是这样的

五、python常用库安装与ide环境设置

先安装一下常用的库和依赖库

sudo apt install python3-pip
sudo apt-get install python3.8-dev python3.8-tk tk-dev
sudo apt-get install libfreetype6-dev g++
pip3 install matplotlib
pip3 install pygal
pip3 install pygal_maps_world
pip3 install requests

然后可以输入python3,并在命令行内进行测试

考虑了很久,最后ide还是想着用pycharm,简单易用,设置也方便

官网链接:Thank you for downloading PyCharm!

#将安装包拷到桌面,然后执行如下命令(将解压后的包放在downloads目录)
tar -zxvf /home/****/Desktop/pycharm-community-2021.3.1.tar.gz -C /home/****/Downloads
#****为用户名
cd /home/****/Downloads/pycharm-community-2021.3.1/bin
./pycharm.sh

之后就可以照着提示设置了

如果想要改变环境变量什么的,可以看官方文档

六、c/c++常用库安装与ide环境设置

c/c++我还是选择vim,不是说vscode不好,只是觉得在Linux系统上至少要保留一点个性

sudo apt-get install vim vim-scripts vim-doc
#网页版中文帮助文档网址http://vimcdoc.sourceforge.net/doc/help.html
cd ~
gedit .vimrc

然后在这个文档中复制如下内容:

" This line should not be removed as it ensures that various options are
" properly set to work with the Vim-related packages available in Debian.
debian.vim" Uncomment the next line to make Vim more Vi-compatible
" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
" options, so any other options should be set AFTER setting 'compatible'.
set nocompatible" Vim5 and later versions support syntax highlighting. Uncommenting the
" following enables syntax highlighting by default.
if has("syntax")
syntax on
colorscheme ron " elflord ron peachpuff default " detect file type
filetype on
filetype plugin on" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
set background=dark" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
"have Vim load indentation rules and plugins according to the detected filetype
filetype plugin indent on
endif" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though."set ignorecase
"set smartcase
set autowrite " 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
set autoindent " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置
"set smartindent " 智能对齐方式
set tabstop=4 " 设置制表符(tab键)的宽度
set softtabstop=4 " 设置软制表符的宽度
set shiftwidth=4 " (自动) 缩进使用的4个空格
set cindent " 使用 C/C++ 语言的自动缩进方式
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s "设置C/C++语言的具体缩进方式
"set backspace=2 " 设置退格键可用
set showmatch " 设置匹配模式,显示匹配的括号
set linebreak " 整词换行
set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
"set hidden " Hide buffers when they are abandoned
set mouse=a " Enable mouse usage (all modes) "使用鼠标
set number " Enable line number "显示行号
"set previewwindow " 标识预览窗口
set history=50 " set command history to 50 "历史记录50条"--状态行设置--
set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
set ruler " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。"--命令行设置--
set showcmd " 命令行显示输入的命令
set showmode " 命令行显示vim当前模式"--find setting--
set incsearch " 输入字符串就显示匹配点
set hlsearch

之后的界面中,就有语法高亮,段落空格等功能了

开始安装vim连带的一些库

#查看系统中已有的vim-scripts中包含的插件及其状态
vim-addons status
#因为ctags太老已经安不上了,所以这里用exuberant-ctags代替
sudo apt-get install exuberant-ctags
mkdir .vim
cd .vim
mkdir plugin
mkdir doc
vim-addons install omnicppcomplete
sudo vim /home/****/.vimrc

然后把这些内容复制进去

"-- omnicppcomplete setting --
" 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码
imap <F3> <C-X><C-O>
" 按下F2根据头文件内关键字补全
imap <F2> <C-X><C-I>
set completeopt=menu,menuone " 关掉智能补全时的预览窗口
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
"let OmniCpp_DefaultNamespaces=["std"]
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1

然后是其他的几个库:taglist库

vim-addons install taglist
sudo vim /home/****/.vimrc

把这些内容复制进去:

"-- Taglist setting --
let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行
let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边
let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表
let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏
let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim
"是否一直处理tags.1:处理;0:不处理
let Tlist_Process_File_Always=1 "实时更新tags
let Tlist_Inc_Winwidth=0
文件浏览器和缓冲区管理器WinManager:
vim-addons install winmanager
sudo vim /home/****/.vimrc

把这些内容复制进去:

"-- WinManager setting --
let g:winManagerWindowLayout='FileExplorer|TagList' " 设置我们要管理的插件
"let g:persistentBehaviour=0 " 如果所有编辑文件都关闭了,退出vim
nmap wm :WMToggle<cr>
buffer管理器MiniBufferExplorer:
vim-addons install minibufexplorer
sudo vim /home/****/.vimrc

把这些内容复制进去:

" -- MiniBufferExplorer --
let g:miniBufExplMapWindowNavVim = 1 " 按下Ctrl+h/j/k/l,可以切换到当前窗口的上下左右窗口
let g:miniBufExplMapWindowNavArrows = 1 " 按下Ctrl+箭头,可以切换到当前窗口的上下左右窗口
let g:miniBufExplMapCTabSwitchBufs = 1 " 启用以下两个功能:Ctrl+tab移到下一个buffer并在当前窗口打开;Ctrl+Shift+tab移到上一个buffer并在当前窗口打开;ubuntu好像不支持
"let g:miniBufExplMapCTabSwitchWindows = 1 " 启用以下两个功能:Ctrl+tab移到下一个窗口;Ctrl+Shift+tab移到上一个窗口;ubuntu好像不支持
let g:miniBufExplModSelTarget = 1 " 不要在不可编辑内容的窗口(如TagList窗口)中打开选中的buffer"--fold setting--
set foldmethod=syntax " 用语法高亮来定义折叠
set foldlevel=100 " 启动vim时不要自动折叠代码
set foldcolumn=5 " 设置折叠栏宽度"-- QuickFix setting --
" 按下F6,执行make clean
map <F6> :make clean<CR><CR><CR>
" 按下F7,执行make编译程序,并打开quickfix窗口,显示编译信息
map <F7> :make<CR><CR><CR> :copen<CR><CR>
" 按下F8,光标移到上一个错误所在的行
map <F8> :cp<CR>
" 按下F9,光标移到下一个错误所在的行
map <F9> :cn<CR>
" 以上的映射是使上面的快捷键在插入模式下也能用
imap <F6> <ESC>:make clean<CR><CR><CR>
imap <F7> <ESC>:make<CR><CR><CR> :copen<CR><CR>
imap <F8> <ESC>:cp<CR>
imap <F9> <ESC>:cn<CR>

cscope:

在你需要浏览源码的根目录下使用下面命令:$cscope -Rbkq

sudo apt-get install cscope
sudo vim /home/****/.vimrc

把这些内容复制进去:

"-- Cscope setting --
if has("cscope")
set csprg=/usr/bin/cscope " 指定用来执行cscope的命令
set csto=0 " 设置cstag命令查找次序:0先找cscope数据库再找标签文件;1先找标签文件再找cscope数据库
set cst " 同时搜索cscope数据库和标签文件
set cscopequickfix=s-,c-,d-,i-,t-,e- " 使用QuickFix窗口来显示cscope查找结果
set nocsverb
if filereadable("cscope.out") " 若当前目录下存在cscope数据库,添加该数据库到vim
cs add cscope.out
elseif $CSCOPE_DB != "" " 否则只要环境变量CSCOPE_DB不为空,则添加其指定的数据库到vim
cs add $CSCOPE_DB
endif
set csverb
endif
map <F4> :cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
imap <F4> <ESC>:cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
" 将:cs find c等Cscope查找命令映射为<C-_>c等快捷键(按法是先按Ctrl+Shift+-, 然后很快再按下c)
nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR> :copen<CR><CR>

使用时:

为源码建立一个cscope数据库

在根目录下

cscope -Rbq
ls cscope.*
#cscope.in.out  cscope.out  cscope.po.out
:cs add cscope.out
#末行模式下输入
#cscope数据库到vim

大概就是这种显示页面:

之后就可以快乐使用vim了

相关命令帮助

进入vim后用命令":Tlist"打开/关闭taglist窗口
帮助文档
:help taglist.txt:WMToggle 打开/关闭WinManage,不过我们在配置文件.vimrc中做了快捷键映射,所以直接按wm就可以打开/关闭WinManage
文件浏览器命令(在文件浏览器窗口中使用)
<enter>或双击  如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件
<tab>   如果光标下是目录, 则进入该目录; 如果光标下文件, 则在新窗口打开该文件
<F5> 刷新列表
-  返回上一层目录
c  使浏览目录成为vim当前工作目录
d  创建目录
D  删除当前光标下的目录或文件
i  切换显示方式
R  文件或目录重命名
s  选择排序方式
r  反向排序列表
x  定制浏览方式, 使用你指定的程序打开该文件
winmanager帮助文档
:help winmanager
netrw帮助文档
:help netrw<Tab>  移到上一个buffer
<Shift-Tab> 移到下一个buffer
<Enter>  打开光标所在的buffer
d   删除光标所在的buffer折叠方式foldmethod
vim提供以下6种方法来选定折叠方式:
manual 手工定义折叠
indent 更多的缩进表示更高级别的折叠
expr 用表达式来定义折叠
syntax 用语法高亮来定义折叠
diff 对没有更改的文本进行折叠
marker 对文中的标志折叠
折叠级别foldlevel
'foldlevel' 是个数值选项:数字越大则打开的折叠更多。
当 'foldlevel' 为 0 时,所有的折叠关闭。
当 'foldlevel' 为正数时,一些折叠关闭。
当 'foldlevel' 很大时,所有的折叠打开。
折叠栏foldcolumn
'foldcolumn' 是个数字,它设定了在窗口的边上表示折叠的栏的宽度。当为0时,没有折叠栏。最大是12。
一个打开的折叠由一栏来表示,顶端是 '-',其下方是 '|'。这栏在折叠结束的地方结束。当折叠嵌套时,嵌套的折叠出现在被包含的折叠右方一个字符位置。
一个关闭的折叠由 '+' 表示。
当折叠栏太窄而不能显示所有折叠时,显示一数字来表示嵌套的级别。
在折叠栏点击鼠标,可以打开和关闭折叠:
- 点击 '+' 打开在这行的关闭折叠
- 在任何其他非空字符上点击,关闭这行上的打开折叠za  打开/关闭在光标下的折叠
zA  循环地打开/关闭光标下的折叠
zo  打开 (open) 在光标下的折叠
zO  循环打开 (Open) 光标下的折叠
zc  关闭 (close) 在光标下的折叠
zC  循环关闭 (Close) 在光标下的所有折叠
zM  关闭所有折叠
zR  打开所有的折叠
帮助文档
:help usr_28.txt
:help fold.txt:help usr_30
:help quickfix
下面的命令运行 "make" (包括你所给出的参数) 程序并捕捉其运行结果: >:make {arguments}
如果编译时出现错误,按 <Enter>,回到vim界面,看不到出错信息了!这时,可以运行以下命令
:cw[indow]
打开quickfix窗口来查看出错信息,它会自动跳到第一处出错的地方。然后,你可以双击出错某一条出错信息,vim就会自动跳转到相应的出错位置
:cn[ext]  光标移到下一个错误所在的行
:cp[revious] 光标移到上一个错误所在的行
:cfirst  到第一处错误
:clast  到最后一处错误
:cc   空间不够时,Vim 会缩短出错信息。如果你想查看详细信息,可以使用此命令
:cl[ist] 列出所有出错信息的概览(只有那些含有文件名或行数的错误信息会被显示,需要查看那些并不含文件名或行数的信息可用“:cl[ist]!”命令)帮助文档
:help if_cscop
注意:帮助文档if_cscop中,快捷键映射nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>是有误的!
比如光标“header.h”上按下<C-_>i,也就是查找包含“header.h“的文件。但是按照这个映射规则,则是将<C-_>i映射为cs find i ^header.h$,也就是查找包含“^header.h$“的文件,这显然不是我们想要的结果。该映射规则应该改成nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>

再就是vim自带的一些常用命令也需要记忆

虚拟机的形而上学

一、electron-ssr

Ubuntu 20.04从安装到配置全套避坑指南相关推荐

  1. ubuntu使用fail2ban_如何在Ubuntu 20.04上安装和配置Fail2ban

    暴露给Internet的任何服务都有遭受恶意软件攻击的风险. 例如,如果您在可公开访问的网络上运行服务,则攻击者可以使用暴力手段尝试登录您的帐户. Fail2ban是一种工具,可通过监视服务日志中的恶 ...

  2. ar.drone2.0_如何在Ubuntu 20.04上安装和配置Drone

    ar.drone2.0 介绍 (Introduction) Drone is an open-source container-native CI/CD platform written in Go. ...

  3. Ubuntu 20.04上安装Git方法

    Git是世界上最受欢迎的分布式版本控制系统,被许多开源和商业项目使用.它使您可以与其他开发人员在项目上进行协作,跟踪代码更改,还原到上一阶段,创建分支等. Git最初是由Linux内核的创建者Linu ...

  4. ubuntu19 安装git_如何在Ubuntu 20.04上安装Git

    Git是世界上最受欢迎的分布式版本控制系统,被许多开源和商业项目使用.它使您可以与其他开发人员在项目上进行协作,跟踪代码更改,还原到上一阶段,创建分支等. Git最初是由Linux内核的创建者Linu ...

  5. 如何在Ubuntu 20.04 上安装 Xrdp 服务器(远程桌面)

    本文最先发布在: https://www.itcoder.tech/posts/how-to-install-xrdp-on-ubuntu-20-04/ Xrdp 是一个微软远程桌面协议(RDP)的开 ...

  6. 如何在 Ubuntu 20.04 上安装 Tomcat 9

    本文最先发布在:https://www.itcoder.tech/posts/how-to-install-tomcat-9-on-ubuntu-20-04/ 这篇指南描述如何在 Ubuntu 20. ...

  7. linux xrdp 远程桌面,详解如何在Ubuntu 20.04上安装Xrdp服务器(远程桌面)

    Xrdp 是一个微软远程桌面协议(RDP)的开源实现,它允许你通过图形界面控制远程系统.通过 RDP,你可以登录远程机器,并且创建一个真实的桌面会话,就像你登录本地机器一样. 这篇指南讲解如何在 Ub ...

  8. linux :YOLO5配置(ubuntu 20.04 下安装运行yolov5)

    ubuntu 20.04 下安装运行yolov5 新建文件夹,安装python 安装 python-pip: 克隆YOLOv5Git code 配置YOLO环境 安装yolov5: ubuntu 20 ...

  9. ubuntu系统samba服务器安装,Ubuntu 20.04.1安装Samba服务器及配置

    Ubuntu 20.04.1安装Samba服务器及配置 1查看Ubuntu的版本 agold@ubuntu:~$ cat /etc/issue 2更新软件 agold@ubuntu:~$ sudo a ...

最新文章

  1. (2)神经网络编程基础
  2. Effective C++ -- 零散知识点整理
  3. 解决 web.xml is missing and failOnMissingWebXml is set to true 报错
  4. CSS3之Transform
  5. leetcode580. 统计各专业学生人数(SQL)
  6. 工作5年,别人成了架构师,你却还在基层打滚
  7. Windows中安装Electron说明
  8. Zookeeper - zookeeper安装与配置
  9. 微服务框架Jersey:快速入门
  10. 接口解读:你的姓名+身份证号撑起了超11亿元市场规模,你造吗?
  11. Halcon教程-HALCON19.05Progress将于2019年5月31日正式发布
  12. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
  13. java字符串与数值型相互转换
  14. K_A07_003 基于 STM32等单片机驱动DRV8825模块按键控制步进电机正反转
  15. 程控电源CANoe上位机面板(CAN\ETH测试、RS232串口通信、编写设计思路)
  16. JAVA_Android开发官网
  17. 面对电磁辐射干扰,如何轻松进行电子线路设计布局?
  18. crash:overview
  19. Elasticsearch-32.生产环境常用配置与上线清单 he 集群写性能优化 he 集群读性能优化
  20. 解读科学计算助力行业高质量发展|2023 开放原子全球开源峰会科学智能分论坛即将启幕

热门文章

  1. 官方最新版teamview15.5.3.exe
  2. nmap扫描、信息收集(网安全实训第一天)
  3. 迅为RK3588开发板国产瑞芯微适用于ARM PC边缘计算NVR等服务器级板卡
  4. 微信jsapi获取用户地理位置接口开发(第八课)
  5. 更改他人微信密码违法计算机程序,怎么修改微信密码-如何快速更改windows帐户密码?|命令提示符更新密码的用法...
  6. 使用高德地图微信小程序SDK开发案例-输入提示(附源码)
  7. 智能家居-基于香橙派zreo2——手把手搭建、继电器控制灯(一)
  8. TMC4671+TMC6200---Trinamic直流无刷(BLDC)硬件FOC解决方案
  9. Pycharm使用anaconda环境 (原环境 base)
  10. 深度神经网络的主要模型有哪几种类型