virtualbox 网络设置

参考

简介 virtual有四种网络模式

1.NAT Network Address Translation 网络地址转换

NAT模式是最简单的实现虚拟机上网的方式

Guest访问网络的所有数据都是由主机提供的,Guest并不真实存在于网络中,主机与网络中的任何机器都不能查看和访问到Guest的存在。

Guest可以访问主机能访问到的所有网络,但是对于主机以及主机网络上的其他机器,Guest又是不可见的,甚至主机也访问不到Guest。

  • 虚拟机与主机的关系:只能单向访问,虚拟机可以通过网络访问到主机,主机无法通过网络访问到虚拟机。
  • 虚拟机与网络中其他主机的关系:只能单向访问,虚拟机可以访问到网络中其他主机,其他主机不能通过网络访问到虚拟机。
  • 虚拟机与虚拟机的关系:相互不能访问,虚拟机与虚拟机各自完全独立,相互间无法通过网络访问彼此。

2.Bridged Adapter 网桥模式

使用桥接模式的虚拟机真实存在于网络中相当于一天独立的电脑

它是通过主机网卡,架设了一条桥,直接连入到网络中了。因此,它使得虚拟机能被分配到一个网络中独立的IP,所有网络功能完全和在网络中的真实机器一样。

网桥模式下的虚拟机,相当于真实存在于网络环境中的电脑.

  • 虚拟机与主机的关系:可以相互访问,因为虚拟机在真实网络段中有独立IP,主机与虚拟机处于同一网络段中,彼此可以通过各自IP相互访问。
  • 虚拟机于网络中其他主机的关系:可以相互访问,同样因为虚拟机在真实网络段中有独立IP,虚拟机与所有网络其他主机处于同一网络段中,彼此可以通过各自IP相互访问。
  • 虚拟机与虚拟机的关系:可以相互访问,原因同上。

3.Internal 内网模式

虚拟机与外网完全断开,只实现虚拟机于虚拟机之间的内部网络模式。

  • 虚拟机与主机的关系:不能相互访问,彼此不属于同一个网络,无法相互访问。
  • 虚拟机与网络中其他主机的关系:不能相互访问,理由同上。
  • 虚拟机与虚拟机的关系:可以相互访问,前提是在设置网络时,两台虚拟机设置同一网络名称.

4.Host-only Adapter 主机模式

主机模式,这是一种比较复杂的模式,需要有比较扎实的网络基础知识才能玩转。可以说前面几种模式所实现的功能,在这种模式下,通过虚拟机及网卡的设置都可以被实现。

我们可以理解为Guest在主机中模拟出一张专供虚拟机使用的网卡,所有虚拟机都是连接到该网卡上的,我们可以通过设置这张网卡来实现上网及其他很多功能,比如(网卡共享、网卡桥接等)。

  • 虚拟机与主机的关系:默认不能相互访问,双方不属于同一IP段,host-only网卡默认IP段为192.168.56.X 子网掩码为255.255.255.0,后面的虚拟机被分配到的也都是这个网段。通过网卡共享、网卡桥接等,可以实现虚拟机于主机相互访问。
  • 虚拟机与网络主机的关系:默认不能相互访问,原因同上,通过设置,可以实现相互访问。
  • 虚拟机与虚拟机的关系:默认可以相互访问,都是同处于一个网段

对比表格

NATBridged AdapterInternalHost-only Adapter
虚拟机-主机 O O X 默认不能需设置
主机-虚拟机 X O X 默认不能需设置
虚拟机-其它主机 O O X 默认不能需设置
其 它主机-虚拟机 X O X 默认不能需设置
虚拟机之间 X O 同网络O O

配置需求

需要模拟集群环境配置宿主机可以访问虚拟机,虚拟机之间可以相互访问

方案一

使用桥接模式,什么问题都能解决.缺点使用DHCP获取的动态ip,更换网络环境,需要修改应用配置,如mysql,redis连接.如果使用静态id,更换网络环境时可能造成ip冲突

方案二

Mysql 开启远程访问 给指定数据库创建用户并授权

Mysql 8.0

#创建用户 db_user 换成root表示root用户
MySQL [(none)]> create user db_user@'%' identified by 'db_pass';

#授权  db_name 用*替代表示访问所有数据库
MySQL [(none)]> grant all privileges on db_name.* to db_user@'%' with grant option; 

#退出数据库控制台,特别注意有分号
MySQL [(none)]> exit;

Mysql 8.0以下

MySQL [(none)]> grant all privileges on db_name.* to db_user@'%' identified by 'db_pass';
 
#授权语句,特别注意有分号
MySQL [(none)]> flush privileges;

#退出数据库控制台,特别注意有分号
MySQL [(none)]> exit;

创建用户

create user 'username'@'%' identified by 'password';
username 用户名 %所有ip password 密码

授权

grant all privileges on dbname.* to 'username'@'%';

flush privileges;

10x程序员工作法总结

本文为极客时间专栏总结

以终为始

概述:确定好最终目标(要看到真正的目标).不要把别人交代的工作当成最终目标.what are we going?

发现和规划

人类创造事物都需要经过两次,第一次是在头脑中的创造,也就是智力(想象)创造(Mental/First Creation),第二次才是付诸实践,也就是实际(物理)构建(Physical/Second Creation)

软件开发流程

软件开发中的终,做一个对用户有价值的软件,梳理完整的开发发布流程,提前预演发现潜在问题

DoD完成的定义(Definition)

任务分解

概述:将复杂的(庞大的)任务,拆解成一个个可执行任务,工作分解得越细致,越容易掌控工作,软件开发中的模块化,组件化就是利用了分解的思想.How can we get there?

沟通反馈

概述:保证与他人沟通,保证各方信息及时交互.减少因为理解偏差造成的工作疏漏.同时保证我们能够准确接受外部信息,及时修正自己的错误.

自动化

概述:将繁琐重复的工作,交给程序以自动化的方式执行,提升执行效率和成功率.

Linux 软件管理常用命令

yum 和 rpm 软件管理

rpm命令 yum命令

yum下载软件包方法,应用场景,大型国企生产环境不允许开放外网

通过yum命令只下载rpm包不安装

yum 下载全量依赖 rpm 包及离线安装(终极解决方案

dnf软件管理

dnf命令

APT工具(新立得)

apt的全称是Advanced Packaging Tool是Linux系统下的一款安装包管理工具

保持依赖不更新

sudo apt-mark hold libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5qml5 libqt5qmlmodels5 libqt5quick5 libqt5widgets5

取消依赖不更新

sudo apt-mark unhold libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5qml5 libqt5qmlmodels5 libqt5quick5 libqt5widgets5

PPA管理

apt-key命令

sudo apt-key list
会出现这样:
pub   1024R/B455BEF0 2010-07-29
uid                  Launchpad clicompanion-nightlies
删除想删除的
sudo apt-key del B455BEF0

添加PPA源的命令为:
sudo add-apt-repository ppa:user/ppa-name
添加好更新一下: sudo apt-get update
删除命令格式则为:
sudo add-apt-repository -r ppa:user/ppa-name

或者
到源的目录:cd  /etc/apt/sources.list.d/ 可以看到关于源的文件,删除即可 

DPKG

dpkg 是Debian package的简写,为”Debian“ 操作系统 专门开发的套件管理系统,用于软件的安装,更新和移除。

所有源自”Debian”的Linux的发行版都使用 dpkg,   例如”Ubuntu”。

dpkg本身是一个底层的工具。上层的工具,如APT,被用于从远程获取软件包以及处理复杂的软件包关系。 

安装指定软件包

dpkg -i|--install <.deb file name> ... | -R|--recursive <directory> ...
ex:dpkg -i -R /dirname 安装目录下的所有deb包

解压软件包

dpkg --unpack <.deb file name> ... | -R|--recursive <directory> ...
ex:dpkg --unpack -R /dirname 解压目录下的deb包

重新配置和释放软件包

dpkg --configure <package> ... | -a|--pending
-a 将配置所有没有配置的软件包 

dpkg  --triggers-only <package> ... | -a|--pending

移除软件包

dpkg -r|--remove <package> ... | -a|--pending

移除软件包和配置

dpkg -P|--purge  <package> ... | -a|--pending

-V|–verify <软件包名> … 检查包的完整性

–get-selections [<表达式> …] 把已选中的软件包列表打印到标准输出

–set-selections 从标准输入里读出要选择的软件

–clear-selections 取消选中所有不必要的软件包

–update-avail <软件包文件> 替换现有可安装的软件包信息

–merge-avail <软件包文件> 把文件中的信息合并到系统中

–clear-avail 清除现有的软件包信息

–forget-old-unavail 忘却已被卸载的不可安装的软件包

-s|–status <软件包名> … 显示指定软件包的详细状态

-p|–print-avail <软件包名> … 显示可供安装的软件版本

-L|–listfiles <软件包名> … 列出属于指定软件包的文件 查看已安装文件的路径

dpkg -L libwebp-dev
/usr
/usr/include
/usr/include/webp
/usr/include/webp/decode.h
...

-l|–list [<表达式> …] 简明地列出软件包的状态

-S|–search <表达式> … 搜索含有指定文件的软件包

-C|–audit [<表达式> …] 检查是否有软件包残损

–yet-to-unpack 列出标记为待解压的软件包

–predep-package 列出待解压的预依赖

–add-architecture <体系结构> 添加 <体系结构> 到体系结构列表

–remove-architecture <体系结构> 从架构列表中移除 <体系结构>

–print-architecture 显示 dpkg 体系结构 指的是cpu的体系架构 例amd64

–print-foreign-architectures 显示已启用的异质体系结构

–assert-<特性> 对指定特性启用断言支持

–validate-<属性> <字符串> 验证一个 <属性>的 <字符串>

–compare-vesions <a> <关系> <b> 比较版本号 – 见下

–force-help 显示本强制选项的帮助信息

-Dh|–debug=help 显示有关出错调试的帮助信息
-?, –help 显示本帮助信息

–version 显示版本信息
Assert 特性: support-predepends, working-epoch, long-filenames, multi-conrep, multi-arch, versioned-provides.
可验证的属性:pkgname, archname, trigname, version.
调用 dpkg 并带参数 -b, –build, -c, –contents, -e, –control, -I, –info, -f, –field, -x, –extract, -X, –vextract, –ctrl-tarfile, –fsys-tarfile是针对归档文件的 (输入 dpkg-deb –help 获取帮助)
选项:

–admindir=<目录> 使用 <目录> 而非 /var/lib/dpkg

–root=<目录> 安装到另一个根目录下

–instdir=<目录> 改变安装目录的同时保持管理目录不变

–path-exclude=<表达式> 不要安装符合Shell表达式的路径

–path-include=<表达式> 在排除模式后再包含一个模式

-O|–selected-only 忽略没有被选中安装或升级的软件包

-E|–skip-same-version 忽略版本与已安装软件版本相同的软件包

-G|–refuse-downgrade 忽略版本早于已安装软件版本的的软件包

-B|–auto-deconfigure 就算会影响其他软件包,也要安装

–[no-]triggers 跳过或强制随之发生的触发器处理

–verify-format=<格式> 检查输出格式(‘rpm’被支持)

–no-debsig 不去尝试验证软件包的签名

–no-act|–dry-run|–simulate 仅报告要执行的操作 – 但是不执行

-D|–debug=<八进制数> 开启调试(参见 -Dhelp 或者 –debug=help)

–status-fd <n> 发送状态更新到文件描述符<n>

–status-logger=<命令> 发送状态更新到 <命令> 的标准输入

–log=<文件名> 将状态更新和操作信息到 <文件名>

–ignore-depends=<软件包>,… 忽略关于 <软件包> 的所有依赖关系

–force-… 忽视遇到的问题(参见 –force-help)

–no-force-…|–refuse-… 当遇到问题时中止运行

–abort-after <n> 累计遇到 <n> 个错误后中止


可供–compare-version 使用的比较运算符有:

lt le eq ne ge gt (如果版本号为空,那么就认为它先于任意版本号);

lt-nl le-nl ge-nl gt-nl (如果版本号为空,那么就认为它后于任意版本号);

< << <= = >= >> > (仅仅是为了与主控文件的语法兼容)

Snap 官方文档

Snap是Canonical推出的一种新的软件打包格式,彻底解决linux依赖性的问题,Snap 软件包拥有更加稳定和安全的特性。snap也就是安装snap软件包的命令。

安装snap

sudo apt install snap 

列出计算机上所有snap安装情况:

sudo snap list

在应用商店中查找snap:

sudo snap find <软件包名>

安装Snap软件:

sudo snap install <snap软件包名>


更新Snap软件:

sudo snap refresh <snap软件包名>

更新所有的snap软件包:

sudo snap refresh

要将Snap还原到以前安装的版本:

sudo snap revert <snap软件包名>

卸载snap软件:

sudo snap remove <snap软件包名>

参考