服务器版本信息:

Centos6.9

[root@db02 ~]# uname -a
Linux db02 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

ansible软件介绍

ansible是一个基于Python开发的自动化运维工具!

其功能实现基于SSH远程连接服务!

ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能

ansible官方资料

官网:http://www.ansible.com/home

官网文档:http://docs.ansible.com/ansible/index.html

ansible软件特点

  • 不需要单独安装客户端,基于系统自带的sshd服务,sshd就相当于ansible的客户端
  • 不需要服务端
  • 依靠大量的模块实现批量管理
  • 配置文件/etc/snsible/ansible.cfg,不用配置

ansible输出结果的颜色

  • 输出内容显示绿色:表示执行成功,当没有任何改变
  • 输出内容显示黄色:表示执行成功,但对被管理主机进行了改变
  • 输出内容显示红色:表示执行失败

ansible参数

命令参数

参数说明

-m   MODULE_NAME

--module-name=MODULE_NAME

module name to execute (default=command)

相应名称的模块被执行(默认模块为 command );

-m后边是模块的名字

-a   MODULE_ARGS

--args=MODULE_ARGS

module arguments

模块参数信息;

-a后面是要执行的命令;也可以写一个 ip ,针对一台机器来执行命令

-C,--check

don’t make any changes; instead, try to predict some of the changes that may occur

不做任何改变;反而,只是尝试预言一些可能出现的改变

--syntax-check

perform a syntax check on the playbook, but do not execute it 执行语法检查在剧本上,但是并不执行剧本

ansible部署

第一步、首先部署ssh+key免密码登陆方式

ssh+key部署:

http://www.cnblogs.com/2lianzhang/p/8058661.html

第二步、被管理端安装libselinux

yum install libselinux-python -y

第三步、服务端安装ansible,配置文件编写

yum install ansible -y

ansible的重要目录

/etc/ansible/hosts                  --- 定义anisble软件可以管理的主机信息

/usr/bin/ansible                     --- ansible执行命令

/usr/bin/ansible-playboot      --- ansible执行剧本命令

/etc/ansible/hosts                 配置文件编写举例

在配置文件中添加被管理主机的ip模块

[name]
172.16.1.21
172.16.1.11
172.16.1.1
在/etc/ansible/host文件最后添加[]下面接想要管理的主机ip,[]中起任意名字

测试控制这三台主机

命令语法:

ansible  name -m shell -a "hostname"
ansible ---- 命令
name ---- 主机模块名称
-m ---- 指定模块的参数
shell --- 模块名称(不同模块不同名称)
-a --- 指定利用模块执行的动作参数
"hostname" ---- 在被控主机上批量执行的操作

命令格式

执行结果

[root@m01 scripts]# ansible name -m shell -a "hostname"

172.16.1.21 | SUCCESS | rc= >>

backup

172.16.1.11 | SUCCESS | rc= >>

nfs01

172.16.1.1 | SUCCESS | rc= >>

web01

这样就已经可以批量控制多台主机了,主要配置中需要注意的是ssh+key的配置。

如果没有配置ssh+key密钥分发的话,可以在/etc/ansible/host文件配置管理主机的时候 在ip后面空格接:ansible_ssh_user=用户 ansible_ssh_pass=密码,这样也可以管理

ansible几个常用模块

ansible帮助:

ansible-doc -l         ---列出所有模块信息
ansible-doc -s 模块名 ---看执行模块信息

常用模块

模块说明

command  (重要模块)

执行命令模块,ansible命令执行默认模块

shell  (重要模块)

执行shell脚本模块

script  (重要模块)

把脚本发到客户端,然后执行;执行脚本命令在远端服务器上

copy   (重要模块)

把本地文件发送到远端

file

设定文件属性模块

service

系统服务管理模块

cron

计划任务管理模块

yum

yum软件包安装管理模块

mount

挂载模块

synchronize

使用rsync同步文件模块

command模块

ansible中的远程执行命令模块

  • 命令模块中的多个参数设置用空格进行分隔
  • 命令模块中不能出现"<" ">" "|" ";" "&"

参数

说明

chdir

在执行命令之前,通过cd命令进入到指定目录中
# ansible oldboy -m command -a "chdir=/tmp ls"

creates

定义一个文件是否存在,如果不存在运行相应命令;如果存在跳过此步骤
- name: Run the command if the specified file does not exist.
command: /usr/bin/make_database.sh arg1 arg2 creates=/path/to/database

executable

改变shell使用command进行执行,并且执行时要使用绝对路径

free_form

free_form

命令模块采用自由形式命令运行;即可以输入任意linux命令

removes

定义一个文件是否存在,如果存在运行相应命令;如果不存在跳过此步骤

warn
(added in 1.8)

如果ansible配置文件中定义了命令警告,如果参数设置了no/false,将不会警告此行命令

实例:

chdir参数:在执行命令之前,通过cd命令进入到指定目录

[root@m01 scripts]# ansible oldboy -m command -a "chdir=/tmp pwd"

172.16.1.21 | SUCCESS | rc= >>

/tmp

172.16.1.11 | SUCCESS | rc= >>

/tmp

172.16.1.1 | SUCCESS | rc= >>

/tmp

chdir参数

creates参数:定义一个文件是否存在,如果不存在运行相应命令;如果存在跳过此步骤

[root@m01 scripts]# ansible name -m command -a "pwd creates=/tmp/oldboy.txt"

172.16.1.21 | SUCCESS | rc= >>

/root

172.16.1.11 | SUCCESS | rc= >>

/root

172.16.1.1 | SUCCESS | rc= >>

/root

command模块creates参数

shell模块

参数

说明

chdir

在执行命令之前,通过cd命令进入到指定目录中
# ansible oldboy -m command -a "chdir=/tmp ls"

creates

定义一个文件是否存在,如果不存在运行相应命令;如果存在跳过此步骤
- name: Run the command if the specified file does not exist.
  command: /usr/bin/make_database.sh arg1 arg2 creates=/path/to/database

executable

改变shell使用command进行执行,并且执行时要使用绝对路径

free_form

free_form

命令模块采用自由形式命令运行;即可以输入任意linux命令

removes

定义一个文件是否存在,如果存在运行相应命令;如果不存在跳过此步骤

warn
(added in 1.8)

如果ansible配置文件中定义了命令警告,如果参数设置了no/false,将不会警告此行命令

shell模块类似于command模块,最大区别是shell模块可以执行脚本

[root@m01 scripts]# ansible name -m shell -a "sh /server/scripts/name.sh"
172.16.1.21 | SUCCESS | rc= >>
nfs01 172.16.1.11 | SUCCESS | rc= >>
backup
说明:shell模块在远程执行脚本时,远程主机上一定要有相应脚本

shell脚本执行

script模块

在本地执行脚本时,将脚本中的内容传输到远程节点上运行

creates
(added in 1.5)

定义一个文件是否存在,如果不存在运行相应命令;如果存在跳过此步骤
- name: Run the command if the specified file does not exist.

command: /usr/bin/make_database.sh arg1 arg2 creates=/path/to/database

free_form

命令模块采用自由形式命令运行;即可以输入任意linux命令

removes
(added in 1.5)

定义一个文件是否存在,如果存在运行相应命令;如果不存在跳过此步骤

实例:

[root@m01 scripts]# ansible name -m script -a "/tmp/name.sh"
172.16.1.21 | SUCCESS => {
"changed": true,
"rc": ,
"stderr": "Shared connection to 172.16.1.21 closed.\r\n",
"stdout": "nfs01\r\n",
"stdout_lines": [
"nfs01"
]
}
172.16.1.11 | SUCCESS => {
"changed": true,
"rc": ,
"stderr": "Shared connection to 172.16.1.11 closed.\r\n",
"stdout": "backup\r\n",
"stdout_lines": [
"backup"
]
}
说明:不需要将脚本传输到远程节点上,脚本本身不用进行授权,即可利用script模块批量执行脚本

远程执行脚本

copy模块

将本地数据传输到远端,或者将远程节点上的数据进行移动

选项参数

选项说明

backup (重要参数)

创建备份文件包含时间戳信息,以便能够还原回原文件,在某种情况原文件被覆盖错误时。

content

当使用代替src参数时,将文件的内容直接设置为指定值。远端创建有指定内容文这是只是简单值,对于任何复杂或者有格式化的内容,请切换到template模块

dest

文件应该被拷贝到的远程绝对路径信息。如果src是一个目录,dest也必须是目录

directory_mode
(added in 1.5)

当递归复制设置目录权限时,如果没有设置权限,将使用系统默认这个权限值设置在目录上只对于最近创建的,并且对于已经存在的没有效果

force

默认为yes,当远程文件内容和源文件内容不同时,将覆盖目标文件如果为no,文件将只被传输,在目标主机不存在此文件时

别名:thirsty

group

定义所拥有文件/目录的所属组名称,类似交由chown命令进行处理

mode

定义文件或目录的权限信息;就像使用/usr/bin/chmod 设定八进制数(如0644)取消掉前导零可能会有意想不到的结果。作为1,8版本,可以指定为符号模式(如 u+rwx or u=rw,g=r,o=r)

owner

定义所拥有文件/目录的所属用户名称,类似交由chown命令进行处理

src

本地路径文件复制到远程服务器;可以是绝对路径也可以是相对路径如果路径是一个目录,将会递归复制。在这种情况下,如果路径以“/”结束,只将在该目录的内容复制到目的地否则,如果它不以“/”结束,目录和目录下所有内容都会被复制以上这种复制方式类似于rsync

remote_src

如果这个值设置为True,将到远程目标主机的机器上搜索

validate

在文件复制到相应目录位置之前,运行验证命令要验证的文件的路径通过%s传递,并且要在下面的例子中显示

实例:

[root@m01 scripts]# ansible name -m copy -a "src=/etc/hosts dest=/tmp/ mode=0777"
172.16.1.21 | SUCCESS => {
"changed": true,
"checksum": "da5234fc498b2c3bf8b98f6b08fe1d6d96e653c2",
"dest": "/tmp/hosts",
"gid": ,
"group": "root",
"md5sum": "2253445a36ed3910d50887a6eb1e4b79",
"mode": "",
"owner": "root",
"size": ,
"src": "/root/.ansible/tmp/ansible-tmp-1508394462.54-228657061248374/source",
"state": "file",
"uid":
}
172.16.1.11 | SUCCESS => {
"changed": true,
"checksum": "da5234fc498b2c3bf8b98f6b08fe1d6d96e653c2",
"dest": "/tmp/hosts",
"gid": ,
"group": "root",
"md5sum": "2253445a36ed3910d50887a6eb1e4b79",
"mode": "",
"owner": "root",
"size": ,
"src": "/root/.ansible/tmp/ansible-tmp-1508394462.62-205181338927486/source",
"state": "file",
"uid":
}

拷贝文件

说明:

1. 如果指定的目标目录不存在,系统会自动创建,否则源目录会放到目标目录下面去

2. 如果copy的是文件,dest指定的名字和源如果不同,并且它不是已经存在的目录,相当于copy过去后在重命名;

3. 如果dest是目标机器上已经存在的目录,则会直接把文件copy到该目录下面。

4. 设定的用户和组oldboy在所有客户端必须存在

给文件加内容:

[root@m01 scripts]# ansible name -m copy -a "content=lyq.com\n dest=/tmp/1"
172.16.1.11 | SUCCESS => {
"changed": true,
"checksum": "31f9b45eca1a36069a4517868a948b369228aa75",
"dest": "/tmp/1",
"gid": ,
"group": "root",
"md5sum": "ae41cc8f2c5a90e7e94b1d9f6616a916",
"mode": "",
"owner": "root",
"size": ,
"src": "/root/.ansible/tmp/ansible-tmp-1508465641.79-151255543511039/source",
"state": "file",
"uid":
}
172.16.1.21 | SUCCESS => {
"changed": true,
"checksum": "31f9b45eca1a36069a4517868a948b369228aa75",
"dest": "/tmp/1",
"gid": ,
"group": "root",
"md5sum": "ae41cc8f2c5a90e7e94b1d9f6616a916",
"mode": "",
"owner": "root",
"size": ,
"src": "/root/.ansible/tmp/ansible-tmp-1508465641.82-210493742853029/source",
"state": "file",
"uid":
}

加内容

file模块

设置文件属性

参数

说明

force

强行创建符号链接的两种情况:

源文件不存在(但是日后会出现)

目标存在并且是一个文件(因此,我们需要将“路径”文件取消,并创建“src”文件的符号链接)

group

定义所拥有文件/目录的所属组名称,类似交由chown命令进行处理

mode

定义文件或目录的权限信息;就像使用/usr/bin/chmod 设定八进制数(如0644)取消掉前导零可能会有意想不到的结果。作为1,8版本,可以指定为符号模式(如 u+rwx or u=rw,g=r,o=r)

owner

定义所拥有文件/目录的所属用户名称,类似交由chown命令进行处理

path

文件路径管理:

别名方式:dest,name

recurse

递归设置指定文件属性(这个参数值应用对于state=directory)

src

要链接的文件路径(只能应用 state=link),接受绝对 相对以及不存在的路径相对路径不能扩展

state

(重要参数)

如果指定参数为directory
# 所有不存在的子目录将会被创建,并且从1.7开始支持设置目录权限
如果指定参数为file
# 如果文件不存在将不能被创建,如果想创建可以参考copy和template模块
如果指定参数为link
# 符号链接将被创建或更改。
如果指定参数为hard
# 便会创建出硬链接
如果指定参数为absent
# 目录将被递归删除以及文件,而链接将被取消链接。
# 请注意,定义文件不存在不会失败,只是输出没有发生任何改变的结果
如果指定参数为touch
# 如果路径不存在将创建一个空文件,如果文件或目录存在将接收更新的文件访问和修改时间(类似于“touch”从命令行工作的方式)。

实例:

创建目录/删除目录

[root@m01 scripts]# ansible name -m file -a "dest=/tmp/lyq_dir state=directory"
172.16.1.11 | SUCCESS => {
"changed": true,
"gid": ,
"group": "root",
"mode": "",
"owner": "root",
"path": "/tmp/oldboy_dir",
"size": ,
"state": "directory",
"uid":
}
172.16.1.21 | SUCCESS => {
"changed": true,
"gid": ,
"group": "root",
"mode": "",
"owner": "root",
"path": "/tmp/oldboy_dir",
"size": ,
"state": "directory",
"uid":
}
[root@m01 scripts]# ansible name -m file -a "dest=/tmp/lyq_dir state=absent"
172.16.1.11 | SUCCESS => {
"changed": true,
"path": "/tmp/oldboy_dir",
"state": "absent"
}
172.16.1.21 | SUCCESS => {
"changed": true,
"path": "/tmp/oldboy_dir",
"state": "absent"
}

创建/删除目录

创建文件/删除文件

[root@m01 scripts]# ansible name -m file -a "dest=/tmp/lyq_file state=touch"
172.16.1.11 | SUCCESS => {
"changed": true,
"dest": "/tmp/oldboy_file",
"gid": ,
"group": "root",
"mode": "",
"owner": "root",
"size": ,
"state": "file",
"uid":
}
172.16.1.21 | SUCCESS => {
"changed": true,
"dest": "/tmp/oldboy_file",
"gid": ,
"group": "root",
"mode": "",
"owner": "root",
"size": ,
"state": "file",
"uid":
}
[root@m01 scripts]# ansible name -m file -a "dest=/tmp/lyq_file state=absent"
172.16.1.11 | SUCCESS => {
"changed": true,
"path": "/tmp/oldboy_file",
"state": "absent"
}
172.16.1.21 | SUCCESS => {
"changed": true,
"path": "/tmp/oldboy_file",
"state": "absent"
}

创建/删除文件

创建软连接/删除软连接

[root@m01 scripts]# ansible name -m file -a "src=/tmp/lyq_file dest=/tmp/lyq_file_link state=link"
172.16.1.11 | SUCCESS => {
"changed": true,
"dest": "/tmp/oldboy_file_link",
"gid": ,
"group": "root",
"mode": "",
"owner": "root",
"size": ,
"src": "/tmp/oldboy_file",
"state": "link",
"uid":
}
172.16.1.21 | SUCCESS => {
"changed": true,
"dest": "/tmp/oldboy_file_link",
"gid": ,
"group": "root",
"mode": "",
"owner": "root",
"size": ,
"src": "/tmp/oldboy_file",
"state": "link",
"uid":
}
[root@m01 scripts]# ansible name -m file -a "dest=/tmp/lyq_file_link state=absent"
172.16.1.21 | SUCCESS => {
"changed": true,
"path": "/tmp/oldboy_file_link",
"state": "absent"
}
172.16.1.11 | SUCCESS => {
"changed": true,
"path": "/tmp/oldboy_file_link",
"state": "absent"
}

创建/删除软连接

fetch模块

将远程主机上的文件,拉取到本地

参数

说明

dest

定义一个保存文件的目录(将远程主机拉去过来的文件保存在本地的路径信息)

src

指定从远程主机要拉取的文件信息

flat

默认设置为no,如果设置为yes,将不显示路径信息

实例:

从远程主机拉取文件

[root@m01 scripts]# ansible name -m fetch -a "dest=/tmp src=/tmp/1"
172.16.1.11 | SUCCESS => {
"changed": true,
"checksum": "31f9b45eca1a36069a4517868a948b369228aa75",
"dest": "/tmp/172.16.1.11/tmp/1",
"md5sum": "ae41cc8f2c5a90e7e94b1d9f6616a916",
"remote_checksum": "31f9b45eca1a36069a4517868a948b369228aa75",
"remote_md5sum": null
}
172.16.1.21 | SUCCESS => {
"changed": true,
"checksum": "31f9b45eca1a36069a4517868a948b369228aa75",
"dest": "/tmp/172.16.1.21/tmp/1",
"md5sum": "ae41cc8f2c5a90e7e94b1d9f6616a916",
"remote_checksum": "31f9b45eca1a36069a4517868a948b369228aa75",
"remote_md5sum": null
}

远程拉取

flat  默认设置为no,如果设置为yes,将不显示路径信息

[root@m01 scripts]# ansible name -m fetch -a "dest=/tmp/ src=/tmp/1 flat=yes"
172.16.1.21 | SUCCESS => {
"changed": true,
"checksum": "31f9b45eca1a36069a4517868a948b369228aa75",
"dest": "/tmp/1",
"md5sum": "ae41cc8f2c5a90e7e94b1d9f6616a916",
"remote_checksum": "31f9b45eca1a36069a4517868a948b369228aa75",
"remote_md5sum": null
}
172.16.1.11 | SUCCESS => {
"changed": true,
"checksum": "31f9b45eca1a36069a4517868a948b369228aa75",
"dest": "/tmp/1",
"md5sum": "ae41cc8f2c5a90e7e94b1d9f6616a916",
"remote_checksum": "31f9b45eca1a36069a4517868a948b369228aa75",
"remote_md5sum": null
}

mount模块

控制激活和配置挂载点模块

参数

说明

fstype

指定挂载文件类型

path

指定挂载点

opts

设定挂载的参数选项信息

src

要被挂载的目录设备信息(共享目录)

boot
(added in 2.2)

确定是否在启动时文件系统被挂载
只应用在solaris系统上

dump

Dump(参见 fstab5)。注意如果设置为null或状态设置为present,它将停止工作,并将在随后的运行中复制条目
对solaris系统没有效果

state

如果为mounted在fstab文件中的设备将被激活挂载和适当配置

# 如果为unmounted设备将被卸载并不会改变fstab文件信息bsent和present只处理fstab,但不影响目前的挂载

cron模块

定时任务模块

参数

说明

minute

hour

day

month

weekday

job

定时任务中要执行的操作

name

定义定时任务的描述信息

state=absent

删除定时任务

disabled

注释定时任务

实例:

创建定时任务

[root@m01 ~]# ansible name -m cron -a "minute=0 hour=0 job='/bin/sh /tmp/name.sh >/dev/null'"
172.16.1.21 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": [
"None"
]
}
172.16.1.11 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": [
"None"
]
}

创建定时任务

删除定时任务

[root@m01 ~]# ansible name -m cron -a "minute=0 hour=0 job='/bin/sh /tmp/name.sh >/dev/null' state=absent"

删除定时任务

注释定时任务

[root@m01 ~]# ansible name -m cron -a "minute=0 hour=0 job='/bin/sh /tmp/name.sh >/dev/null' state=disabled"

注释定时任务

user模块

管理用户账户

参数

说明

append

如果为yes,将只添加组,而不是将它们设置为组中的列表

name

要操作的用户名称

shell

指定用户的使用命令路径(如:/bin/bash)

comment

可选设置用户账号描述信息(又称为 GECOS)

createhome

除非设置为no,否则当创建账户或不存在主目录时,将为用户创建一个主目录

user

创建,移除或修改的用户名称信息
别名:user

uid

可选设置用户UID信息

实例:

[root@m01 ansible-playbook]# ansible 172.16.1.1 -m user -a "user=lyq uid=2222"
172.16.1.1 | SUCCESS => {
"append": false,
"changed": true,
"comment": "",
"group": ,
"home": "/home/lyq",
"move_home": false,
"name": "lyq",
"shell": "/bin/bash",
"state": "present",
"uid":
}

创建用户

ansible剧本

检查剧本:

ansible-playbook --syntax-check 剧本名    ----进行剧本配置信息语法检查

ansible-playbook -C 剧本名                ----模拟剧本执行

ansible核心功能

  • pyYAML  -----用于ansible编写剧本所使用的语言格式
  • paramiko ---远程连接与数据传输
  • Jinja2        -----用于编写ansible的模块信息

ansible剧本编写规则

pyYAML语法规则

一:缩进

yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组成。一定不能使用tab键(tab在vim编辑中是8个空格)

二:冒号

每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)

三:短横线

  • 想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分。
  • 核心规则:有效的利用空格进行剧本的编写,剧本编写是不支持tab的。

ansible-playbook编写格式

剧本开头,可以不写

这两项必须要写:

- hosts:(空格)all   处理所有服务器,找到所有服务器
tasks: 剧本要干的事

检查剧本命令

ansible-playbook --syntax-check 剧本   ----进行剧本配置信息语法检查
ansible-playbook -C 剧本 ----模拟剧本执行

剧本实例

rsync一键部署剧本:

- name: 后面是可以加入提示信息的

[root@m01 ansible-playbook]# vim rsync.yml
- hosts: 172.16.1.21
tasks:
- name:
yum: name=rsync state=installed
- name:
copy: src=/tmp/rsyncd.conf dest=/etc/
- name:
shell: userdel -r rsync && useradd rsync -M -s /sbin/nologin
- name:
shell: mkdir -p /backup/ && chown rsync.rsync /backup
- name:
copy: src=/tmp/rsync.password dest=/etc/
- name:
shell: rsync --daemon creates=/var/run/rsyncd.pid
- hosts: 172.16.1.11
tasks:
- name:
copy: content=lyq123 dest=/etc/rsync.password

写的不好的地方,请大家多多包涵

Linux中ansible批量管理软件部署及剧本编写的更多相关文章

  1. ansible批量管理软件部署及剧本

    服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 -.el6.x86_64 # SMP Tue Mar :: UTC x86_64 x86_6 ...

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

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

  3. Linux(11):期中架构(3)--- SSH远程管理服务 & ansible 批量管理服务

    SSH远程管理服务 1. 远程管理服务知识介绍 # 1.1 SSH远程登录服务介绍说明 SSH是Secure Shell Protocol的简写,由 IETF 网络工作小组(Network Worki ...

  4. 六.ansible批量管理服务

    期中集群架构-第六章-ansible批量管理服务介绍====================================================================== 01. ...

  5. ansible批量管理服务 上

    1 ansible简介 1.1 ansible批量管理服务概述 (1)是基于python语言开发的自动化软件工具(2)是基于SSH远程管理服务实现远程主机批量管理(3)并行管理,部署简单,应用也简单方 ...

  6. Ansible 批量管理Windows Server服务器

    Ansible批量管理Windows Server         Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具,  它用Python写成,类似于saltstack和Puppe ...

  7. 使用ansible批量管理远程服务器

    使用ansible批量管理远程服务器 背景 本地需要管理远程的一批服务器,主要执行以下任务: 1) 将本地的文件复制到远端所有服务器: 2) 需要在远程服务器中执行一个个命令: 远端服务器路径并非完全 ...

  8. Linux基础知识第九讲,linux中的解压缩,以及软件安装命令

    目录 Linux基础知识第九讲,linux中的解压缩,以及软件安装命令 一丶Linux Mac Windows下的压缩格式简介 2.压缩以及解压缩 3.linux中的软件安装以及卸载 1.apt进行安 ...

  9. [GUI] Linux中的图形管理

    转:http://www.cnblogs.com/yongpenghan/p/4555619.html 做了一段时间linux下与QT事件相关的工作,经常会遇到X11,总是苦于无法完全理解其与linu ...

随机推荐

  1. centos中单进程监控

    [root@k8s6 proc]# ps aux|grep -v PID|sort -rn -k +|head - root ? Ssl : : /usr/bin/dockerd root ? Ssl ...

  2. The current state of generics in Delphi( 转载)

    The current state of generics in Delphi   To avoid duplication of generated code, the compiler build ...

  3. 归并排序(递归排序and外排排序)

    分析: /** * 归并排序 (先将数组利用归并排序排成 有序的左边数组和右边数组,再比较左边数组和右边数组的数值大小进行排序) * */ public class MergeSort { publi ...

  4. 【repost】jQuery笔记总结

    第一节 jQuery初步认知 jQuery概述 JQuery概念 javascript概念 基于Js语言的API和语法组织逻辑,通过内置window和document对象,来操作内存中的DOM元素 J ...

  5. Django URLConf 进阶

    Django处理一个请求 项目启动后根据 settings  ROOT_URLCONF 决定项目根URLconf urlpatterns是django.conf.urls.url()实例的一个Pyth ...

  6. bash编程-执行流程

    1.顺序执行 shell脚本按从上到下的顺序依次执行,除非使用了选择.循环等执行流程. 2.选择执行 2.1 if # 格式一 if 条件; then # 语句 fi # 格式二 if 条件; the ...

  7. redis之一初识redis

    本文主要围绕以下几点进行阐述: 1.什么是redis? 2.为什么要使用redis呢? 3.redis的一些基本配置 4.redis的缺点? 正文: 1.什么是redis? Redis是一款内存高速缓 ...

  8. 开源播放器 ijkplayer (二) :ijkplayer倍速变调问题解决方案

    转载注明出处:http://www.cnblogs.com/renhui/p/6510872.html 之前使用IjkPlayer做播放器的使用的时候,在做倍速播放的时候,发现播放的声音音调明显变高了 ...

  9. ubuntu 16.04 下更换boost版本

    如果是新机器,没装过boost,那么直接一条命令 sudo apt-get install libboost-all-dev 头文件一般安装在 /usr/include 下面有一个目录boost,里面 ...

  10. C语言中volatile的作用和使用方法

    在程序设计中,尤其是在C语言.C++.C#和Java语言中,使用volatile关键字声明的变量或对象通常具有与优化.多线程相关的特殊属性. 通常,volatile关键字用来阻止(伪)编译器认为的无法 ...