一、ansible概述

Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。它使用SSH来和节点进行通信。Ansible基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令执行操作。

二、ansible的特点

1、部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;

2、默认使用SSH协议对设备进行管理;

3、主从集中化管理;

4、配置简单、功能强大、扩展性强;

5、支持API及自定义模块,可通过Python轻松扩展;

6、通过Playbooks来定制强大的配置、状态管理

7、对云计算平台、大数据都有很好的支持

三、ansible的工作机制

Ansible 在管理节点将 Ansible 模块通过 SSH 协议推送到被管理端执行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排。

由上面的图可以看到 Ansible 的组成由 5 个部分组成:

Ansible      ansible核心

Modules     包括 Ansible 自带的核心模块及自定义模块

Plugins       完成模块功能的补充,包括连接插件、邮件插件等

Playbooks    剧本;定义 Ansible 多任务配置文件,由Ansible自动执行**

Inventory     定义 Ansible 管理主机的清单  [ˈɪnvəntri]清单

四、ansible安装与配置

1、安装并配置ansible

1.1 实验环境如下
1.2 安装ansible
  1. yum install -y epel-release
  2. yum install -y ansible
1.3 ansible语法参数
1.3.1 ansible的命令语法
  1. ansible [-i 主机文件] [-f 批次] [组名] [-m 模块名称] [-a 模块参数]
1.3.2 ansible的详细参数
  1. -v,--verbose # 详细模式,如果命令执行成功,输出详细的结果(-v,-vv,-vvv)
  2. -i PATH,--inventory=PATH # 指定host文件路径,默认是/etc/ansible/hosts
  3. -f NUM,--forks=NUM # NUM是整数,默认是5,指定fork开启同步进程的个数
  4. -m NAME,--module-name=NAME # 指定module名称,默认使用command模块
  5. -a,MODULE_ARGS # 指定module模块的参数
  6. -k,--ask-pass # 提示输入ssh密码,而不是使用基于ssh的密钥认证
  7. -sudo # 指定使用sudo获取root权限
  8. -K,--ask-sudo-pass # 提示输入sudo密码,和-sudo一起使用
  9. -u USERNAME,--user=USERNAME # 指定移动端的执行用户
  10. -C,--check # 测试此命令执行会产生什么效果,不会真的执行
1.3.3 ansible-doc的详细参数
  1. -l # 列出所有模块列表
  2. -s MODULE-NAME # 查看指定模块参数
1.4 ansible的主机清单
1.4.1 基于端口,用户,密码定义的主机清单

ansible基于ssh连接,-i(--inventory)参数后面指定远程主机时,也可以写端口,用户,密码。

其格式参数如下:

  1. ansible_ssh_port # 指定ssh端口
  2. ansible_ssh_user # 指定ssh用户
  3. ansible_ssh_pass # 指定ssh用户的认证密码(明文,不安全)
  4. ansible_sudo_pass # 指定sudo时候的认证密码(明文,不安全)

例子(配置文件默认在/etc/ansible/hosts里):

  1. [web-server]
  2. 172.16.2.101 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=P@ssW0rd

测试:

  1. ansible -i /etc/ansible/hosts web-server -m ping
  2. # 报下面错误
  3. 172.16.2.101 | FAILED! => {
  4. "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
  5. }
  6. # 解决办法1:手动连接一下客户端,ssh root@172.16.2.101
  7. # 解决办法2:在/etc/ansible/ansible.cfg下,将host_key_checking=false启用
  8. # 再运行上面命令测试
  9. 172.16.2.101 | SUCCESS => {
  10. "changed": false,
  11. "ping": "pong"
  12. }
1.4.2 基于ssh密钥来访问主机清单

一般来说,通过明文密码访问是不安全的,所以一般使用密钥的形式进行访问。

(1)、生产密钥

  1. [root@ansible-server ansible]# ssh-keygen
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key (/root/.ssh/id_rsa):
  4. Enter passphrase (empty for no passphrase):
  5. Enter same passphrase again:
  6. Your identification has been saved in /root/.ssh/id_rsa.
  7. Your public key has been saved in /root/.ssh/id_rsa.pub.
  8. The key fingerprint is:
  9. SHA256:Hs3bs9rMZ5gW67WEdO7DpKJv1FzcZZkAj7G3iDm1XAI root@ansible-server
  10. The key's randomart image is:
  11. +---[RSA 2048]----+
  12. | E o... o|
  13. | . = oo|
  14. | = = o.|
  15. | o= * + .|
  16. | S+o*.o. |
  17. | . .o+++. |
  18. | ... +O+ |
  19. | o+**=. |
  20. | .+o=*oo. |
  21. +----[SHA256]-----+

(2)、分发密钥

  1. # 配置ansible的hosts文件
  2. [dev]
  3. 172.16.2.185
  4. 172.16.2.186
  5. 172.16.2.187
  6. 172.16.2.188
  7. [dev:vars]
  8. # 上面定义的几台服务器的用户,端口,密码都一样,所以就单独提出来写
  9. ansible_ssh_user=root
  10. ansible_ssh_port=22
  11. ansible_ssh_pass=HJKJ123456hjkj
  12. # 分发密码
  13. ansible dev -m authorized_key -a "user=root key='{{lookup('file','/root/.ssh/id_rsa.pub')}}'"
  14. # 删除hosts配置文件中的密码配置
  15. # 测试
  16. [root@ansible-server ansible]# ansible dev -m ping
  17. 172.16.2.186 | SUCCESS => {
  18. "changed": false,
  19. "ping": "pong"
  20. }
  21. 172.16.2.185 | SUCCESS => {
  22. "changed": false,
  23. "ping": "pong"
  24. }
  25. 172.16.2.187 | SUCCESS => {
  26. "changed": false,
  27. "ping": "pong"
  28. }
  29. 172.16.2.188 | SUCCESS => {
  30. "changed": false,
  31. "ping": "pong"
  32. }

五、模块

1.5.1 command模块

command模块为ansible默认模块,不指定-m参数时,使用的就是command模块。command模块比较简单,常用的命令都可以使用,但其命令的执行不是通过shell脚本,所以,像 "<", ">", "|", and "&"操作都不可以。不支持管道,不能批量执行命令。

相关选项如下:

  1. creates # 一个文件名,当该文件存在,则该命令不执行
  2. free_from # 要执行的linux命令
  3. chdir # 在执行命令前,先切换到改目录
  4. removes # 一个文件名,当该文件不存在时,则该选项不执行
  5. executable # 切换shell来执行命令, 该命令的路径是一个绝对值

例子:

  1. ansible dev -m command -a "uptime"

1.5.2 shell模块

使用shell模块,在远程通过/bin/bash来执行,所以在终端使用Linux下各种命令都是可以的。

例子:

  1. ansible dev -m shell -a "free -m | grep Swap"

但是我们在/.bash_profile中的环境变量shell由于没有加载,所以无法识别。如果需要使用自定义的环境变量,需要在执行的开始加载环境变量。

例子:

  1. ansible dev -m shell -a "source ~/.bash_profile && free -m | grep Swap"

对shell模块使用可以分为两类:

(1)、执行语句少,可以直接写在一句话中,如上。

(2)、如果语句较多,可以写成一个脚本,通过copy模块将脚本拷贝到远端,再用shell模块去执行脚本

例子:

  1. vim /tmp/joker_test.sh
  2. #!/bin/bash
  3. date +%F_%H:%M:%S
  4. chmod +x /tmp/joker_test.sh
  5. ansible dev -m copy -a "src=/tmp/joker_test.sh dest=/tmp/joker_test.sh owner=root group=root mode=0755"
  6. ansible dev -m shell -a "/tmp/joker_test.sh"

1.5.3 script模块

使用script模块,在本地写一个脚本,在远端执行,刚好解决shell远端执行脚本的问题。

例子:

  1. vim /root/joker/test.sh
  2. #!/bin/bash
  3. date +F%
  4. chmod +x /root/joker/test.sh
  5. ansible dev -m script -a "/root/joker/test.sh"

1.5.4 copy模块

copy模块的主要作用就是实现主控端向目标主机拷贝文件,类似scp的功能。

相关的选项如下:

  1. backup # 在覆盖之前,将源文件备份,备份文件包含事件信息,选项有(yes|no)
  2. content # 用于替代src,可以直接设定指定文件的值
  3. dest # 必选项,远程主机的绝对路径,如果源文件是目录,那么该路径也必须是一个目录
  4. directory_mode # 递归设置目录的权限,默认为系统默认的权限
  5. force # 如果是yes,强制覆盖;如果是no,只有当目标位置不存在时才复制
  6. others # 所有file模块里的选项都可以在这里使用
  7. src # 本地目录,可以是相对路径,也可以是绝对路径,'/'结尾赋值里的内容,不然包括目录在内

例子:

  1. ansible dev -m copy -a "src=/root/joker/test.sh dest=/tmp/ owner=root group=root mode=755"
  2. ansible dev -a "ls /tmp/test.sh"

1.5.5 file模块

file模块是用来设置文件的属性。

相关选项如下:

  1. force # 会在两种情况下创建软连接:1、源文件不存在,但之后会建立。2、目标软连接已经存在,先取消再创建
  2. group # 定义文件/目录的属组
  3. owner # 定义文件/目录的属主
  4. mode # 定义文件/目录的q权限
  5. path # 必选项,定义文件/目录的路径
  6. recurse # 递归设置属性,只对目录有效
  7. src # 被软链接的源文件路径,只应用在state=link的情况下
  8. dest # 被软链接的目标文件路径,只应用在state=link的情况下
  9. stat
  10. directory # 如果目录不存在,就创建目录
  11. file # 即使文件不存在,也不会被创建
  12. link # 创建软链接
  13. hard # 创建硬链接
  14. touch # 如果文件不存在,就创建文件,如果文件存在,更新修改时间
  15. absent # 删除目录、文件或取消l链接文件

例子:

  1. # 远程创建符号链接
  2. ansible dev -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"
  3. # 查看
  4. ansible dev -a "ls -l /tmp/resolv.conf"
  5. 172.16.2.187 | SUCCESS | rc=0 >>
  6. lrwxrwxrwx 1 root root 16 Jan 29 16:16 /tmp/resolv.conf -> /etc/resolv.conf
  7. # 删除符号链接
  8. ansible dev -m file -a "path=/tmp/resolv.conf state=absent"
  9. # 查看
  10. ansible dev -a "ls -l /tmp/resolv.conf"
  11. 172.16.2.187 | FAILED | rc=2 >>
  12. ls: cannot access /tmp/resolv.conf: No such file or directorynon-zero return code

1.5.6 stat模块

stat模块的作用是获取远程文件的信息,包括atime,ctime等等。

例子:

  1. ansible dev -m stat -a "path=/etc/resolv.conf"

1.5.7 get_url模块

get_url模块实现从远程主机下载指定的url到本地,支持sha256sum文件校验。

force=yes 强制覆盖;force=no,目标文件不存在时才下载。

例子:

  1. # 下载
  2. ansible dev -m get_url -a "url=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm dest=/tmp/ mode=0440"
  3. # 查看
  4. ansible dev -a "ls -l /tmp/"

1.5.8 yum模块

yum模块可提供status状态,status状态有:latest,present,installed(这三个代表安装),removed,absent(这两个代表卸载)

其选项如下:

  1. name # 用于指定软件包的名字,比如nginx
  2. stat # 用于指定软件包的状态status,其状态如上说明。

例子:

  1. ansible dev -m yum -a "name=nginx stat=latest"

1.5.9 cron模块

cron模块应用于配置远程主机crontab。

其选项参数如下:

  1. name # 为crontab设置一个名字环境变量
  2. minute # 分
  3. hour # 时
  4. day # 天
  5. weekday # 周
  6. month # 月
  7. job # 执行的命令

例子:

  1. ansible dev -m cron -a "name='list dir' minute='*/30 job='ls /tmp'"

1.5.10 service模块

service模块应用远程主机系统服务的管理。想要使用这个模块启动服务,被启动的服务可以使用service启动或关闭服务。

常用的选项参数如下:

  1. name # 指定需要操作的服务名称,比如nginx,httpd
  2. stat # 指定服务的状态,started,restarted,stoped,reloaded
  3. enable # 如果设置为yes表示开机启动,如果是no表示开机不启动

例子:

  1. ansible dev -a "name=httpd stat=restarted enable=yes"

1.5.11 sysctl模块

sysctl模块应用在远程主机sysctl配置。

常用选项参数如下:

  1. name # 需要设置的内核参数名
  2. value # 参数值
  3. reload # 如果是yes,相当于执行了sysctl -p命令,是no表示不重新加载

例子:

  1. # 为系统添加路由转发功能
  2. ansible dev -m sysctl -a "name=net.ipv4.ip_forward value=1 reload=yes"

1.5.12 user模块

user模块应用于远程主机用户管理。

例子:

  1. # 添加用户
  2. ansible dev -m user -a "name=joker state=present"
  3. # 删除用户
  4. ansible dev -m user -a "name=joker state=absent remove=yes"

1.5.13 mount模块

mount模块应用于被控端分区挂载。

例子:

  1. ansible dev -m mount -a "name=/mnt/data src=/dev/sd1 fstype=nfs opts=ro state=present"

1.5.14 local_action

用于在本地主机执行命令。
local_action: Module [命令]

  1. - name: an example playbook
  2. hosts: webservers
  3. tasks:
  4. - name: check out a git repository
  5. local_action: git repo=git://foosball.example.org/path/to/repo.git dest=/local/path

1.6 playbook

1.6.1 用法示例
  1. ---
  2. - hosts: webserver
  3. remote_user: root
  4. vars:
  5. app_package: httpd
  6. service_name: httpd
  7. tasks:
  8. - name: Install {{ app_package }} package
  9. yum: name={{ app_package }}
  10. - name: copy conf
  11. copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
  12. notify: restart {{ service_name }}
  13. - name: start {{ service_name }} services
  14. service: name={{ service_name }} state=started
  15. handers:
  16. - name: restart {{ service_name }}
  17. service: name={{ service_name }} state=restarted

说明:

  1. hosts: 主机列表
  2. remote_user: 远程执行用户
  3. vars: 变量定义
  4. tasks: 具体执行任务
  5. name: 任务名字
  6. notify: 如果该task改变,则会触发notify执行handers任务
  7. handers: notify通知执行的任务
1.6.2 playbook中的变量

1、变量的定义方式

(1)、通过命令指定

  1. ansible-playbook -e "app_package=httpd" app.yml

(2)、在playbook中定义,通过vars参数,见上面的示例

(3)、在/etc/ansible/hosts中定义

  1. [webserver]
  2. 10.1.11.11 httpd_port=80
  3. 10.1.11.12
  4. [webserver:vars]
  5. httpd_post=81

(4)、内置变量,可以通过setup模块查看

  1. ansible 10.1.11.12 -m setup

2、变量的优先级

直接通过命令传入的变量的优先级最高,其次是在playbook中定义的变量,再次是在/etc/ansible/hosts中的主机清单中定义的变量(主机清单的局部变量的优先级大于它全局变量的优先级),最后是内置变量。

3、变量的统一管理

在很多时候我们希望将变量放在一个文件里统一管理,这时候可以单独定义一个yml文件存放变量,然后在主playbook中导入即可。比如

  1. variable.yml
  2. ---
  3. - app_package: httpd
  4. - app_port: 80
  5. app.yml
  6. ---
  7. - hosts: webserver
  8. remote_user: root
  9. include_vars:
  10. file: variable.yml
  11. name: variable
1.6.3 template

模板的功能就是可以创建一个模板文件,模板文件必须以.j2结尾,而且模板里面支持变量,比如以nginx.conf为例:

  1. // 根据机器的CPU不同,配置不同的work_process
  2. vim templates/nginx.conf.j2
  3. ....
  4. work_process {{ ansible_processor_vcpus * 2 }}
  5. ....
  6. vim nginx.yml
  7. ---
  8. - hosts: web
  9. remote_user: root
  10. tasks:
  11. - name: copy conf
  12. template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf

template里还支持for,if等语法,比如:

  1. vim test.yml
  2. ---
  3. - hosts: web
  4. remote_user: root
  5. vars:
  6. ports:
  7. - web1:
  8. port: 81
  9. server_name: web1.joker.com
  10. - web2:
  11. port: 82
  12. server_name: web2.joker.com
  13. - web3:
  14. port: 83
  15. tasks:
  16. - name: copy file
  17. template: src=test.j2 dest=/data/test.conf
  18. vim tempates/test.j2
  19. {% for p in ports%}
  20. server {
  21. listen {{ p.port }};
  22. {% if p.server_name if defined %}
  23. server_name p.server_name;
  24. {% endif %}
  25. }
  26. {% endfor %}
1.6.4 with_items

很多时候需要同事进行多次操作,这时候with_items就很有帮助,例如:

  1. // 创建多个用户组,并将用户加入组
  2. ---
  3. - hosts: web
  4. remote_user: root
  5. tasks:
  6. - name: create some group
  7. group: name={{ item }}
  8. with_items:
  9. - group1
  10. - group2
  11. - group3
  12. - name: create some user
  13. user: name={{ item.user }} group={{ item.group }}
  14. with_items:
  15. - {user: "user1", group: "group1"}
  16. - {user: "user2", group: "group2"}
  17. - {user: "user3", group: "group3"}

1.7 roles

1.7.1 roles目录规范
  1. ansible_playbooks/
  2. └── roles 必须叫roles
  3. ├── dbsrvs -------------role1名称
  4. ├── defaults ---------必须存在的目录,存放默认的变量,模板文件中的变量就是引用自这里。defaults中的变量优先级最低,通常我们可以临时指定变量来进行覆盖
  5. └── main.yml
  6. ├── files -------------ansibleunarchivecopy等模块会自动来这里找文件,从而我们不必写绝对路径,只需写文件名
  7. ├── mysql.tar.gz
  8. └── nginx.tar.gz
  9. ├── handlers -----------存放tasks中的notify指定的内容
  10. └── main.yml
  11. ├── meta
  12. ├── tasks --------------存放playbook的目录,其中main.yml是主入口文件,在main.yml中导入其他yml文件,要采用import_tasks关键字,include要弃用了
  13. ├── install.yml
  14. └── main.yml -------主入口文件
  15. ├── templates 存放模板文件。template模块会将模板文件中的变量替换为实际值,然后覆盖到客户机指定路径上
  16. └── nginx.conf.j2
  17. └── vars
  18. └── websrvs -------------role2名称
  19. ├── defaults
  20. └── main.yml
  21. ├── files
  22. ├── mysql.tar.gz
  23. └── nginx.tar.gz
  24. ├── handlers
  25. └── main.yml
  26. ├── meta
  27. ├── tasks
  28. ├── install.yml
  29. └── main.yml
  30. ├── templates
  31. └── nginx.conf.j2
  32. └── vars
1.7.2 简要说明
  1. roles的好处就是将咱们以前一个Playbook干的很多活细分化,这样方便管理,特别是对于复杂的任务。
1.7.3 基本用法示例
  1. // 安装nginx
  2. // 目录结构
  3. ansible_playbook/
  4. ├── nginx_role.yml
  5. └── roles
  6. └── app
  7. ├── defaults --- 存放变量
  8.    └── main.yml
  9. ├── files --- 存放需要拷贝得文件
  10.    └── python3.tar.gz
  11. ├── handlers --- 存放handler触发文件
  12.    └── main.yml
  13. ├── tasks --- 存放具体得剧本
  14.    ├── copyfile.yml --- 拷贝文件
  15.    ├── groupAdd.yml --- 添加用户
  16.    ├── main.yml --- 主配置文件
  17.    ├── start.yml --- 启动服务
  18.    ├── template.yml --- 拷贝模板
  19.    ├── userAdd.yml --- 添加用户
  20.    └── yum.yml --- 安装软件
  21. └── templates --- 存放模板文件
  22. └── nginx.conf.j2
  23. //具体配置
  24. /*nginx_role.yml*/
  25. - hosts: web
  26. remote_user: root
  27. roles:
  28. - app
  29. /*defultes/main.yml*/
  30. username: app
  31. usergroup: app
  32. uid: 520
  33. gid: 520
  34. /*handlers/main.yml*/
  35. - name: restart nginx
  36. service: name=nginx state=reload
  37. /*tasks/copyfile.yml*/
  38. - name: copy file
  39. copy: src=python3.tar.gz dest=/data/ owner=app group=app
  40. /*tasks/groupAdd.yml*/
  41. - name: create group
  42. group: name={{ usergroup }} gid={{ gid }} system=yes
  43. /*tasks/userAdd.yml*/
  44. - name: create user
  45. user: name={{ username }} uid={{ uid }} group={{ usergroup }} system=yes shell=/sbin/nologin
  46. /*tasks/yum.yml*/
  47. - name: install package
  48. yum: name=nginx
  49. /*tasks/template.yml*/
  50. - name: copy template
  51. template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
  52. notify: restart nginx
  53. /*tasks/start.yml*/
  54. - name: start nginx
  55. service: name=nginx state=started
  56. /*tasks/main.yml*/
  57. - include: groupAdd.yml
  58. - include: userAdd.yml
  59. - include: yum.yml
  60. - include: template.yml
  61. - include: copyfile.yml
  62. - include: start.yml
1.7.4 调用多个roles
  1. //调用多个roles,只需要在主配置文件里指定就可以了,比如
  2. /*nginx_role.yml*/
  3. - hosts: web
  4. remote_user: root
  5. roles:
  6. - app
  7. - mysql
  8. - php
1.7.5 role之间相互调用
  1. //比如如下结构
  2. .
  3. ├── nginx_role.yml
  4. └── roles
  5. ├── app
  6.    ├── defaults
  7.       └── main.yml
  8.    ├── files
  9.       └── python3.tar.gz
  10.    ├── handlers
  11.       └── main.yml
  12.    ├── tasks
  13.       ├── copyfile.yml
  14.       ├── groupAdd.yml
  15.       ├── main.yml
  16.       ├── start.yml
  17.       ├── template.yml
  18.       ├── userAdd.yml
  19.       └── yum.yml
  20.    └── templates
  21.    └── nginx.conf.j2
  22. └── mysql
  23. └── tasks
  24. └── test.yml
  25. // app要调用MySQL中的test.yml,只需要在app的tasks中的main.yml中引用就可以了,如下:
  26. vim main.yml
  27. - include: groupAdd.yml
  28. - include: userAdd.yml
  29. - include: yum.yml
  30. - include: template.yml
  31. - include: copyfile.yml
  32. - include: start.yml
  33. - include: roles/mysql/tasks/test.yml

Ansible入门知识的更多相关文章

  1. [Linux]Ansible自动化运维① - 入门知识

    目录 一.Ansible 概述 1.1 Ansible 是什么 1.2 Ansible 优势 1.3 Ansible 特性 二.Ansible 入门 2.1 Ansible 架构 2.2 Ansibl ...

  2. [置顶] Mysql存储过程入门知识

    Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...

  3. 移动H5开发入门知识,CSS的单位汇总与用法

    说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...

  4. H5移动端开发入门知识以及CSS的单位汇总与用法

    说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...

  5. Java web 入门知识 及HTTP协议详解

     Java  web  入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...

  6. Java基础入门知识

    Java编程入门知识   知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...

  7. zabbix入门知识

    zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...

  8. React的入门知识与概念【1】

    回顾在以往的项目开发中,从最初的使用的原生html+js+css+jquery开发,到后来随着项目功能的增加,也渐渐学习了Vue.js框架的开发,以及Vue.js的全家桶Axios,Vue-route ...

  9. 我的Python笔记补充:入门知识拾遗

    声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...

随机推荐

  1. Erlang语言之简述及安装

    1. 简述 Erlang在1991年由爱立信公司向用户推出了第一个版本,经过不断的改进完善和发展,在1996年爱立信又为所有的Erlang用户提供了一个非常实用且稳定的OTP软件库并在1998年发布了 ...

  2. cmd批处理转义字符%的详细解释

    cmd批处理转义字符%的详细解释 在命令行中使用for时不需要双%,这源于命令解释器对命令行与批处理的处理方式不同. 1.%是个ESCAPE字符,通常将之译为转义字符,但也有更形象的译名脱逸字符.逃逸 ...

  3. lambda表达式,及lambda简化过程

    lambda表达式(jdk8特性) 1.为什么要用lambda表达式 原因:因为我们有时候需要用到很多类,但是,这些类我们只用一次或者两次,所以我们用匿名内部类,但是匿名内部类多了还是很麻烦,所以用l ...

  4. 【three.js第五课】光线的添加和感光材料

    材料分类: MeshBasicMaterial:基础网孔材料,一个以简单着色(平面或线框)方式来绘制几何形状的材料.MeshLambertMaterial:兰伯特网孔材料,一种非发光材料(兰伯特)的表 ...

  5. 二分例题 51nod

    例题1 1010 只包含因子2 3 5的数 http://www.51nod.com/Challenge/Problem.html#problemId=1010 K的因子中只包含2 3 5.满足条件的 ...

  6. 漫谈LiteOS-Huawei_IoT_Link_SDK_OTA 开发指导

    1概述 在应用升级过程中,无线下载更新(OTA)是一种常用,且方便的升级方式.Liteos采用的OTA升级方案基于LwM2M协议,实现了固件升级(FOTA)和软件升级(SOTA)两种升级方案.用户可根 ...

  7. Spring Cloud 系列之 Gateway 服务网关(三)

    本篇文章为系列文章,未读第一集的同学请猛戳这里: Spring Cloud 系列之 Gateway 服务网关(一) Spring Cloud 系列之 Gateway 服务网关(二) 本篇文章讲解 Ga ...

  8. [linux] linux的top命令参数详解

    简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...

  9. js 一个或多个一维数组,算出元素之间相互组合的所有情况

    // 数据源 var target = { state1: ['1', '2'], state2: ['01', '02', '03'], state3: ['001','002'] } stackS ...

  10. swoole--服务平滑重启

    参考来源:https://wiki.swoole.com/wiki/page/p-server/reload.html shell代码: echo "loading..." pid ...