1.Ansible基本概述

Ansible是一个IT自动化的配置管理工具,自动化主要体现在Ansible集成了丰富模块,丰富的功能组件,
可以通过一个命令行完成一系列的操作。进而能减少我们重复性的工作和维护成本,以提高工作的效率。

2.Ansible的功能

1)批量执行远程命令,可以对N多台主机同时进行命令的执行
2)批量配置软件服务,可以进行自动化的方式配置和管理服务。
3)实现软件开发功能,jumpserver底层使用ansble来实现的自动化管理0
4)编排高级的IT任务,Ansible的playbook是一门编程语言,可以用来描绘一套IT架构。

3.Ansible的特点

1.容易学习,无代理模式,不像saltstack既要学服务端又要学习客户端,还要学习服务端与客户端之间的通讯协议
2.操作灵活,体现在Ansible有较多的模块,提供了丰富的功能,playbook则提供了类似于编程语言的复杂功能
3.简单易用,体现在Ansible —个命令可以完成很多事情
4.安全可靠,因为Ansible使用了SSH协议进行通汛,既稳定又安全
5.可移植性高,可以将写好的playbook拷贝至任意机器进行执行

4.Ansible 基础架构

控制端 被控端 inventory ad-hoc playbook 连接协议

5.Ansible的安全配置

2.1.Ansible安装

外网地址 内网地址 角色
10.0.0.61 172.16.1.61 Ansible控制端
10.0.0.7 172.16.1.7 Ansible被控端
10.0.0.8 172.16.1.8 Ansible被控端

1.先安装epel源(提供最新的ansible)

[root@cheng ~]#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.安装Ansible

1.通过yum进行安装
[root@manager ~]# yum install ansible -y 2.查看ansible的版本
[root@manager ~]# ansible --version
ansible 2.8.5
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Jun 20 2019, 20:27:34) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

3.ansible的配置文件,配置文件可以随意放,但有查找顺序

$ANSIBLE_CONFIG
ansible.cfg #当前目录下面查找
.ansible.cfg #当前用户的家目录下查找
/etc/ansible/ansible.cfg [root@m01 ~]# cat /etc/ansible/ansible.cfg
#inventory = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#remote_tmp = ~/.ansible/tmp #临时py文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp #本机的临时执行目录
#forks = 5 #默认并发数
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True #每次执行是否询问sudo的ssh密码
#ask_pass = True #每次执行是否询问ssh密码
#remote_port = 22 #远程主机端口
host_key_checking = False #跳过检查主机指纹
log_path = /var/log/ansible.log #ansible日志 [privilege_escalation] #如果是普通用户则需要配置提权
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False

4.ansible 优先级验证

[root@manager ~]# export
ANSIBLE_CONFIG="/tmp/ansible.cfg"
[root@manager ~]# touch /tmp/ansible.cfg [root@manager ~]# mkdir /project1
[root@manager ~]# cd /project1/
[root@manager project1]# touch ansible.cfg
[root@manager project2]# ansible --version
ansible 2.8.5
config file = /project1/ansible.cfg [root@manager /]# mkdir /project2
[root@manager /]# cd /project2/
[root@manager project2]# touch ansible.cfg
[root@manager project1]# ansible --version
ansible 2.8.5
config file = /project2/ansible.cfg [root@manager tmp]# touch ~/.ansible.cfg
[root@manager tmp]# ansible --version
ansible 2.8.5
config file = /root/.ansible.cfg

6.Ansible Ineventory主机清单

1.场景一:基于ip+密码连接

[root@manager project1]# cat hosts
#方式一、主机+端口+密码
[webservers]
172.16.1.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
172.16.1.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456' #方式二、主机+端口+密码
[webservers]
web[1:2].cheng ansible_ssh_pass='123456' #方式三、主机+端口+密码
[webservers]
web[1:2].cheng
[webservers:vars]
ansible_ssh_pass='123456'

2.场景二:基于密钥连接,需要先创建公钥和私钥,并下发公钥至被控端

1.先创建公钥和私钥
[root@manager project1]# ssh-keygen -C manger@qq.com
2.下发公钥至被控端
[root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub
root@172.16.1.7
[root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub
root@172.16.1.8 #方式一、主机+端口+密钥
[root@manager ~]# cat hosts
[webservers]
172.16.1.7
172.16.1.8 #方式二、别名+主机+端口+密钥
[webservers]
web01 ansible_ssh_host=172.16.1.7 ansible_ssh_port=22
web02 ansible_ssh_host=172.16.1.8 ansible_ssh_port=22

3.场景三:主机组使用方式

[lbservers] #定义lbservers组
172.16.1.5
172.16.1.6
[webservers] #定义webserver组
172.16.1.7
172.16.1.8
[servers:children] #定义servers组包括两个子组
[lbservers,webserver]
lbservers
webserver [root@manager project1]# ansible webservers --list-hosts -i hosts
hosts (2):
172.16.1.7
172.16.1.8 PS:如果控制端和被控制端第一次通讯,需要先添加指纹信息,那如果机器特别多少的情况下怎么办?
仅需开启ansible中的 host_key_checking = False

7.Ansible Ad-Hoc

1.常用模块

command 		#执行命令  默认 不支持管道
shell #执行命令 支持管道
yum_reposity #yum仓库配置
yum #yum安装软件
get_url #和linux的wget一致
copy #拷贝配置文件
service|systemd #启动服务
user #属主
group #属组
file #创建目录 创建文件 递归授权
mount #挂载
cron #定时任务
firewalld #防火墙
selinux #selinux

2.使用过程中需要先了解ansible-doc帮助手册

[root@manager project1]# ansible-doc -l        # 查看所有模块说明
[root@manager project1]# ansible-doc copy # 表示指定模块方法
[root@manager project1]# ansible-doc -s copy # 表示指定模块参数

3.command默认执行bash命令模块,模块不支持重定向或管道

ansible webservers -a "ps axu|grep nginx" -i hosts #不支持管道(简单命令)

4.shell模块,如果需要一些管道操作,则使用shell

ansible webservers -m shell -a "ps axu|grep nginx" -i hosts #支持管道

5.yum安装软件模块

yum:
state:
present 安装
absent 卸载
latest 最新
enablerepo #指定使用按个仓库
disablerepo #排除使用哪个仓库 1.安装最新的httpd服务
[root@manager project1]# ansible webservers -m yum -a "name=httpd state=latest disablerepo=webtatic-php" -i hosts 2.移除httpd服务
[root@manager project1]# ansible webservers -m yum -a "name=httpd state=absent disablerepo=webtatic-php" -i hosts 3.安装httpd指定从按个仓库安装
- name: install the latest version of Apache from
the testing repo
[root@manager project1]# ansible webservers -m yum -a "name=httpd state=latest enablerepo=testing" -i hosts 4.通过URL方式进行安装
[root@manager project1]# ansible webservers -m yum -a "name=https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.0-1.el7.x86_64.rpm state=present disablerepo=webtatic-php" -i hosts - name: install nginx rpm from a local file (软件包必须在被控端主机)
5.在本地做软件升级操作
[root@manager project1]# ansible webservers -m yum -a "name=/root/zabbix-agent-4.0.0-2.el7.x86_64.rpm state=present disablerepo=webtatic-php" -i hosts

6.copy文件拷贝模块

copy:
src #本地路径,可以是相对,可以是绝对
dest #目标位置
owner #属主
group #属组
mode #权限
backup #备份 1.拷贝文件至被控节点【前提必须在控制端准备好对应的文件】
[root@manager project1]# ansible webservers -m copy -a "src=./file/ansible.cheng.com.conf dest=/etc/nginx/conf.d/ansible.cheng.com.conf owner=root group=root mode=644" -i hosts 2.对远端已有文件进行备份,按照时间信息备份【控制端可作修改】
[root@manager project1]# ansible webservers -m copy -a "src=./file/ansible.cheng.com.conf dest=/etc/nginx/conf.d/ansible.cheng.com.conf owner=root group=root mode=644 backup=yes" -i hosts 3.向被控端主机写入数据,并且会覆盖远端文件内原有数据信息
[root@manager project1]# ansible webservers -m copy -a "content='hello word' dest=/tmp/test.html" -i hosts

7.ansible管理服务的启动与停止,使用service、systemd

state:
started #启动
stopped #停止
restarted #重启
reloaded #重载
enabled #是否开机自启
yes #是
no #否 1.启动nginx服务并加入开机自启
[root@manager project1]# ansible webservers -m systemd -a "name=nginx state=restarted enabled=yes" -i hosts 2.停止http服务
[root@manager project1]# ansible webservers -m systemd -a "name=httpd state=stopped" -i hosts

8.file文件创建模块

1.创建 /code/ansible
path: #指定远程主机目录或文件
recurse: #递归授权 yes|no
state: #状态
directory #在远端创建目录
touch #在远端创建文件
link #创建链接文件
absent #表示删除文件或目录
mode #设置文件或目录权限
owner #设置文件或目录属主
group #设置文件或目录属组 2.准备站点
[root@manager project1]# ansible webservers -m file -a "path=/code/ansible state=directory mode=755 owner=www group=www" -i hosts 3.准备站点代码【前提在控制端准备index.html文件】
[root@manager project1]# ansible webservers -m copy -a "src=./file/index.html dest=/code/ansible/index.html owner=www group=www mode=644" -i hosts

9.group组模块、user模块

#group  整数int  小数 flot dasdsa str  真|假 bool
#user
name #名称
uid #uid
group #组名或gid
create_home #是否创建家目录
system #是否作为系统组
shell #指定登录shell
state
present
absent
remove
groups
append
password #给用户添加密码(记得单引号 1.创建gid为666的www组
[root@manager project1]# ansible webservers -m group -a "name=www gid=666 state=present" -i hosts 2.程序使用 www 666 666 /sbin/nologin 不创建家目录/home
[root@manager project1]# ansible webservers -m user -a "name=www uid=666 group=666 create_home=no shell=/sbin/nologin state=present" -i hosts 3.正常用户 xiang 1000 1000 /bin/bash /home/xiang
[root@manager project1]# ansible webservers -m user -a "name=xiang" -i hosts 4.移除用户xiang,并删除家目录所有内容
[root@manager project1]# ansible webservers -m user -a "name=xiang state=absent remove=yes" -i hosts 5.创建 other用户.有两个附加组root bin,创建家目录,指定登录shell,设定密码123
5.1将明文密码进行hash加密,然后进行用户创建
[root@manager project1]# ansible all -i localhost, -m debug -a "msg={{ '123'| password_hash('sha512', 'mysecretsalt') }}"
localhost | SUCCESS => {
"msg": "$6$mysecretsalt$gIIYs0Xgc7sSQkH.zKaz8/AfaMomYzR1QZYtccwmJcUt8VpLq4D055UCCX4MlwgePOP80ZRwhppvBF72RIAVi/"
}
5.2创建
[root@manager project1]# ansible webservers -m user -a 'name=other groups='root,bin' create_home=yes shell=/bin/bash password="$6$mysecretsalt$gIIYs0Xgc7sSQkH.zKaz8/AfaMomYzR1QZYtccwmJcUt8VpLq4D055UCCX4MlwgePOP80ZRwhppvBF72RIAVi/"' -i hosts

10.mount挂载模块

1.提前准备好nfs服务端【web进行测试】
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/zrlog 172.16.1.0/24
/data/zh 172.16.1.0/24
/data/edu 172.16.1.0/24 2.用管理端操作被控端,让被控端挂载nfs存储数据
state:
present #写入/etc/fstab【开机挂载,仅将挂载配置写入/etc/fstab】
absent #卸载/etc/fstab【卸载设备,会清理/etc/fstab写入的配置】
mounted #临时挂载【挂载设备,并将配置写入/etc/fstab】
unmounted #卸载当前挂载【卸载设备,不会清除/etc/fstab写入的配置】 3.挂载过程中,如果目录不存在,则会创建该目录
[root@manager project1]# ansible webservers -m mount -a "src=172.16.1.31:/data/word path=/test_wordpress fstype=nfs opts=defaults state=mounted" -i hosts 4.卸载当前挂载的
[root@manager project1]# ansible webservers -m mount -a "src=172.16.1.31:/data/word path=/test_wordpress fstype=nfs opts=defaults state=unmounted" -i hosts 5.卸载/etc/fstab
[root@manager project1]# ansible webservers -m mount -a "src=172.16.1.31:/data/word path=/test_wordpress fstype=nfs opts=defaults state=absent" -i hosts

11.crond定时任务模块

minute 	#分
hour #时
day #日
month #月
week #周
job #写具体执行的任务【执行+脚本路径】 1.使用ansible添加一条定时任务
[root@manager project1]# ansible webservers -m cron -a 'name=test_jop minute=00 hour=02 job="/bin/bash /server/scripts/client_data_server.sh && >/dev/null/"' -i hosts [root@web01 ~]# crontab -l
#Ansible: test_jop
00 02 * * * /bin/bash /server/scripts/client_data_server.sh && >/dev/null/ 2.使用ansible添加每分钟执行的定时任务
[root@manager project1]# ansible webservers -m cron -a 'name=test job="/bin/bash /server/scripts/test.sh &> /dev/null"' -i hosts [root@web01 ~]# crontab -l
#Ansible: test
* * * * * /bin/bash /server/scripts/test.sh &> /dev/null 3.删除test定时任务
[root@manager project1]# ansible webservers -m cron -a 'name=test job="/bin/bash /server/scripts/test.sh &> /dev/null" state=absent' -i hosts

12.Firewalld模块

firewalld:
service #指定开放或关闭的服务名称
port #指定开放或关闭的端口
masquerade #开启地址伪装
immediate #临时生效
permanent #是否添加永久生效
state #开启或是关闭 zone #指定配置某个区域
rich_rule #配置富规则
source #指定来源IP 1.启动firewalld防火墙
[root@manager project1]# ansible webservers -m systemd -a "name=firewalld state=started" -i hosts 2.开放http服务
[root@manager project1]# ansible webservers -m firewalld -a "service=http state=enabled" -i hosts 3.开放8888端口
[root@manager project1]# ansible webservers -m firewalld -a "port=8888/tcp state=enabled" -i hosts 4.只允许172.16.1.31网段
[root@manager project1]# ansible webservers -m firewalld -a "source=172.16.1.31/32 zone=trusted state=enabled permanent=no" -i hosts ansible webservers -m firewalld -a 'rich_rule="rule family=ipv4 source address=10.0.0.1/32 service name=http accept" state=enabled' -i hosts 5.使用端口方式 2222
[root@manager project1]# ansible webservers -m firewalld -a 'rich_rule="rule family=ipv4 source address=10.0.0.1/32 port port="2222" protocol=tcp accept" state=enabled' -i hosts

13.selinux模块

1.关闭selinux
[root@manager project1]# ansible webservers -m selinux -a "state=disabled" -i hosts 2.官方语法:
- name: Disable SELinux
selinux:
state: disabled

14.get_url文件下载模块

url         #文件在网络上的具体位置
dest #下载到被控端的哪个目录下
checksum #校验(md5 sha256) 1.通过get_url下载文件或者软件
[root@manager project1]# ansible webservers -m get_url -a "url=https://mirrors.tuna.tsinghua.edu.cn/centos/8.0.1905/BaseOS/x86_64/os/Packages/dejavu-serif-fonts-2.35-6.el8.noarch.rpm dest=/tmp mode=777" -i hosts 2.下载一个文件前先进行md5校验,通过则下载,不通过则失败
[root@manager project1]# wget https://mirrors.tuna.tsinghua.edu.cn/centos/8.0.1905/BaseOS/x86_64/os/Packages/ed-1.14.2-4.el8.x86_64.rpm
[root@manager project1]# md5sum ed-1.14.2-4.el8.x86_64.rpm
[root@manager project1]# ansible webservers -m get_url -a "url=https://mirrors.tuna.tsinghua.edu.cn/centos/8.0.1905/BaseOS/x86_64/os/Packages/ed-1.14.2-4.el8.x86_64.rpm dest=/tmp mode=777 checksum=md5:7f0d0501be51652645704f3f551cbdba" -i hosts

15.yum_repository模块

yum_repository模块可以管理远程主机上的yum仓库。

模块参数

参数 说明
name 必须参数,用于指定要操作的唯一的仓库ID,也就是".repo"配置文件中每个仓库对应的"中括号"内的仓库ID
baseurl 设置yum仓库的baseurl
description 设置仓库的注释信息,也就是".repo"配置文件中每个仓库对应的"name字段"对应的内容。
file 设置仓库的配置文件名称,即设置".repo"配置文件的文件名前缀,在不使用此参数的情况下,默认以name参数的仓库ID作为".repo"配置文件的文件名前缀,同一个'.repo'配置文件中可以存在多个yum源
enabled 设置是否激活对应的yum源,此参数默认值为yes,表示启用对应的yum源,设置为no表示不启用对应的yum源。
gpgcheck 设置是否开启rpm包验证功能,默认值为no,表示不启用包验证,设置为yes表示开启包验证功能。
gpgcakey 当gpgcheck参数设置为yes时,需要使用此参数指定验证包所需的公钥
state 默认值为present,当值设置为absent时,表示删除对应的yum源
1.自定义下载源并设置仓库的名称【在被控主机上设置ID为aliEpel的yum源,
仓库配置文件路径为/etc/yum.repos.d/aliEpel.repo】 [root@manager project1]# ansible webservers -m yum_repository -a 'name=aliEpel description="alibaba EPEL" baseurl=http://mirrors.aliyun.com/epel/7/$basearch' -i hosts
172.16.1.8 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"repo": "aliEpel",
"state": "present"
}
172.16.1.7 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"repo": "aliEpel",
"state": "present"
} 2.检验下载的阿里源 [root@manager project1]# ansible webservers -a "ls /etc/yum.repos.d/" -i hosts
172.16.1.8 | CHANGED | rc=0 >>
aliEpel.repo
CentOS-Base.repo
epel.repo
nginx.repo
php.repo 172.16.1.7 | CHANGED | rc=0 >>
aliEpel.repo
CentOS-Base.repo
epel.repo
nginx.repo
php.repo 3.删除/etc/yum.repos.d文件中的aliEpel源 [root@manager project1]# ansible webservers -m yum_repository -a "name=aliEpel file=aliEpel state=absent" -i hosts
172.16.1.7 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"repo": "aliEpel",
"state": "absent"
}
172.16.1.8 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"repo": "aliEpel",
"state": "absent"
}

1.Ansible自动化管理工具的更多相关文章

  1. ANSIBLE自动化管理工具

    ansible 基础 自动化运维工具 官网:https://www.ansible.com/ 官方文档:https://docs.ansible.com/ ansible 特性 1. 模块化:调用特定 ...

  2. Ansible批量自动化管理工具(二)

    Ansible批量自动化管理工具(二) 链接:https://pan.baidu.com/s/1A3Iq3gGkGS27L_Gt37_I0g 提取码:ncy2 复制这段内容后打开百度网盘手机App,操 ...

  3. Ansible批量自动化管理工具

    一,工具与环境介绍 1.1 ansible简介 批量管理服务器的工具 无需部署agent,通过ssh进行管理 流行的自动化运维工具:https://github.com/ansible/ansible ...

  4. Ansible批量自动化管理工具 roles标准化

    批量管理服务器的工具,无需部署代理,通过ssh进行管理,是python写的 ansible 常用模块 : (1)shell命令模块执行命令 (2)copy模块批量下发文件或文件夹 (3)script模 ...

  5. Linux系统——Ansible批量管理工具

    批量管理工具: (1)ansible 操作简单(适用于500台以下服务器) (2)saltstack 比较复杂(一般适用于1000-4w台服务器) (3)puppet超级复杂 systemctl(统一 ...

  6. ansible 自动化管理

    1 什么样的情形需要批量部署 1.操作系统的安装 常见的有collber,red hat satelite(redhat)系统专用. 2.操作系统的配置 常见的有cfengine,puppet,che ...

  7. ansible批量管理工具的搭建与简单的操作

    ansible的安装 # [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@localhost ...

  8. Chocolatey 简介(软件自动化管理工具)

    一.Chocolatey 管理Windows软件的明智方法 1.建立在技术的无人值守安装和PowerShell.建立在技术的无人值守安装和PowerShell. 2.轻松管理Windows软件的所有方 ...

  9. Python之开发自动化管理工具paramiko

    一.paramiko模块使用 1)远程执行主机命令获取结果 方法一 import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_ ...

随机推荐

  1. 鲲鹏云实验-.NET Core 3.0-开始使用

    [摘要] 介绍Ubuntu 18.04环境下.NET Core 3.0的安装配置.初始项目的生成和运行 1. 基础环境 2vCPUs | 4GB | kc1.large.2 Ubuntu 18.04 ...

  2. Snack3 一个新的微型JSON框架

    Snack3 一个新的微型JSON框架 一个作品,一般表达作者的一个想法.因为大家想法不同,所有作品会有区别.就做技术而言,因为有很多有区别的框架,所以大家可以选择的框架很丰富. snack3.基于j ...

  3. wait notify notifyAll await signal signalAll 的理解及示例

    从常见的一道面试题开始,题目的描述是这样子的: 有三个线程分别打印A.B.C,请用多线程编程实现,在屏幕上循环打印10次ABCABC- 网上大都教了你怎么去实现,其实我也写过一篇 https://bl ...

  4. luogu P2343 宝石管理系统 |分块+堆

    题目描述 GY君购买了一批宝石放进了仓库.有一天GY君心血来潮,想要清点他的宝石,于是把m个宝石都取出来放进了宝石管理系统.每个宝石i都有一个珍贵值vi,他希望你能编写程序查找到从大到小第n珍贵的宝石 ...

  5. TortoiseGit 设置ssh方式

    TortoiseGit使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥. 也就是说使用 ssh-keygen  -t rsa  -C "576953565@qq.com& ...

  6. axios报错: Cannot read property 'protocol' of undefined ....

    错误: Uncaught (in promise) TypeError: **Cannot read property 'protocol' of undefined ... 源码: 完整错误: im ...

  7. USB3.0之高速视频传输测试 双目相机(mt9p031、mt9m001)带宽高达300M测试 配合isensor测试 500万像素15fps

    最近完善了下USB3.0的视频开发测试,主要优化了FPGA程序和固件,及其同步方式.对带宽和图像效果进行了仔细的测试 开发板架构(2CMOS+FPGA+2DDR2+USB3.0) 评估板底板配合2个M ...

  8. 模拟摄像头解码模块最新测试 TVP5150模块 FPGA+SDRAM+TVP5150+VGA 实现PAL AV输入 VGA视频输出

    模拟摄像头解码模块最新测试  TVP5150模块  FPGA+SDRAM+TVP5150+VGA  实现PAL AV输入 VGA视频输出 测试使用电视机顶盒的AV模拟信号输入,VGA显示器输出测试,效 ...

  9. linux—netstat

    netstat--option -a: 列出所有端口,监听的没有监听的     -t: 显示tcp相关的选项 -u: 显示udp相关的选项 -l: 仅仅显示监听选项 -p:  显示与连接有关的程序名和 ...

  10. 【MobX】390- MobX 入门教程(上)

    点击上方"前端自习课"关注,学习起来~ 本文考虑到篇幅问题,将<MobX 入门教程>分成上.下两篇文章,方便阅读.分配安排: 一.MobX 介绍 首先看下官网介绍: ★ ...