目标:把一台虚拟机设置成网络服务器+啥都能干的电脑
目录
虚拟机的安装
虚拟机的基本配置
一、换源
二、安装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也可以,你看看自己是否可以用清华源下载东西,可以的话就不用重新登录了
这样复制文件就可以直接从本机拖到虚拟机
不要用老式的光盘烧录方法,对我们亲爱的Ubuntu 20.04系统是完全不管用的,你要是头铁也可以试试,总会在最后一步让你崩溃
进入终端,输入三行命令
sudo apt upgrade
sudo apt install open-vm-tools-desktop -y
sudo reboot
耐心等待执行
进入命令行
sudo su
apt-get update
apt-get upgrade
apt-get install nginx
打开localhost
不听话的同学,请出门左转,或回滚快照,或重装系统,或点击updata图标,争取重新安装
不要被没用且繁杂的安装方式浪费时间和资源
apt-get install mysql-server
mysql_secure_installation
不要跳步,一步一步来,否则你一定后悔
具体设置可以参见这篇博客,写的很详细
ubuntu搭建lnmp+wordpress_mobius0816的博客-CSDN博客
最后效果是这样的
先安装一下常用的库和依赖库
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++我还是选择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
" 按下F2根据头文件内关键字补全
imap
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
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 :make clean
" 按下F7,执行make编译程序,并打开quickfix窗口,显示编译信息
map :make :copen
" 按下F8,光标移到上一个错误所在的行
map :cp
" 按下F9,光标移到下一个错误所在的行
map :cn
" 以上的映射是使上面的快捷键在插入模式下也能用
imap :make clean
imap :make :copen
imap :cp
imap :cn
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 :cs add ./cscope.out . :cs reset
imap :cs add ./cscope.out . :cs reset
" 将:cs find c等Cscope查找命令映射为c等快捷键(按法是先按Ctrl+Shift+-, 然后很快再按下c)
nmap s :cs find s =expand("") :copen
nmap g :cs find g =expand("")
nmap d :cs find d =expand("") :copen
nmap c :cs find c =expand("") :copen
nmap t :cs find t =expand("") :copen
nmap e :cs find e =expand("") :copen
nmap f :cs find f =expand("")
nmap i :cs find i =expand("") :copen
使用时:
为源码建立一个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
文件浏览器命令(在文件浏览器窗口中使用)
或双击 如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件
如果光标下是目录, 则进入该目录; 如果光标下文件, 则在新窗口打开该文件
刷新列表
- 返回上一层目录
c 使浏览目录成为vim当前工作目录
d 创建目录
D 删除当前光标下的目录或文件
i 切换显示方式
R 文件或目录重命名
s 选择排序方式
r 反向排序列表
x 定制浏览方式, 使用你指定的程序打开该文件
winmanager帮助文档
:help winmanager
netrw帮助文档
:help netrw
移到上一个buffer
移到下一个buffer
打开光标所在的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}
如果编译时出现错误,按 ,回到vim界面,看不到出错信息了!这时,可以运行以下命令
:cw[indow]
打开quickfix窗口来查看出错信息,它会自动跳到第一处出错的地方。然后,你可以双击出错某一条出错信息,vim就会自动跳转到相应的出错位置
:cn[ext] 光标移到下一个错误所在的行
:cp[revious] 光标移到上一个错误所在的行
:cfirst 到第一处错误
:clast 到最后一处错误
:cc 空间不够时,Vim 会缩短出错信息。如果你想查看详细信息,可以使用此命令
:cl[ist] 列出所有出错信息的概览(只有那些含有文件名或行数的错误信息会被显示,需要查看那些并不含文件名或行数的信息可用“:cl[ist]!”命令)
帮助文档
:help if_cscop
注意:帮助文档if_cscop中,快捷键映射nmap i :cs find i ^=expand("")$是有误的!
比如光标“header.h”上按下i,也就是查找包含“header.h“的文件。但是按照这个映射规则,则是将i映射为cs find i ^header.h$,也就是查找包含“^header.h$“的文件,这显然不是我们想要的结果。该映射规则应该改成nmap i :cs find i =expand("")
再就是vim自带的一些常用命令也需要记忆