Python自动化运维工具,自学半月遇到了瓶颈怎么办?

Python简介
  python是吉多&范罗苏姆发明的一种面向对象的脚本语言,可能有些人不知道面向对象和脚本具体是什么意思,但是对于一个初学者来说,现在并不需要明白。大家都知道,当下全栈工程师的概念很火,而Python是一种全栈的开发语言,所以你如果能学好Python,那么前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
为什么选择Python
  关于语言的选择,有各种各样的讨论,在这里我不多说,就引用Python里面的一个彩蛋来说明为什么要选择Python,在Python解释器里输入import this 就可以看到。
&&& import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
上面的话简单的总结来说就是&优雅&、&明确&、&简单&,或许你还是有些不明白,举个简单的例子,若果同样的功能你用C/C++写可能要写100行代码,而如果用Python写你可能只要20行代码就搞定,同样的如果一个问题有好几种解决方案,但是Python会用一种最简单的方法来实现。所以Python是用最简单最优雅最明确的方法来解决问题。
Python入门 
一、Python 2.x vs 3.x区别
1.print在python2.x是语句,在python3.x是print()函数
Old: print "The answer is", 2*2
New: print("The answer is", 2*2)
Old: print x, # Trailing comma suppresses newline
New: print(x, end=" ") # Appends a space instead of a newline
Old: print # Prints a newline
New: print() # You must call the function!
Old: print &&sys.stderr, "fatal error"
New: print("fatal error", file=sys.stderr)
Old: print (x, y) # prints repr((x, y))
New: print((x, y)) # Not the same as print(x, y)!
2.python3.x全部字符集都是unicode,而在python2.x中是ascii编码,需要设置#-*- coding:utf-8 -*-,中文才不会乱码
3.python2.x一些库名在python3.x的更改
ConfigParser
SocketServer
markupbase
test.test_support
configparser
socketserver
_markupbase
test.support
4.python3.x有一些第三方模块支持不了,当然还有其他的模块,后续慢慢添加....
Twisted &urllib2 &scrapy MySQLdb
5.python2.x与python3.x库方法的不同,在后续慢慢体现....
二、安装Python
  在这里我我推荐安装Python3,因为随着时间的推移Python3,必定是未来的趋势,我们要顺应潮流。在Python的官网可以下载相应的版本,网址是,安装上面的提示安装好即可,就不在多说了,此外后面的操作都是基于Ubuntu 15.10下Python3.5.1操作,默认是Python2.7.10版本
& & & 建议使用pyenv(Python版本控制2.7和3.5之间随意切换)、virtualenv(Python虚拟环境)、pycharm(Python的IDE工具)、pip(Python包管理工具)。
1、下载安装包
https://www.python.org/downloads/
2、安装python2.7.11
默认安装路径:C:\python27
3、配置环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --& 【Python安装目录追加到变值值中,用 ; 分割】
如:原来的值;C:\python27,切记前面有分号
4、安装python3.5.1
默认安装路径: C:\python35
5、将python3.5中的执行程序python.exe重命名成python3
6、配置环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --& 【Python安装目录追加到变值值中,用 ; 分割】
如:原来的值;C:\python35,切记前面有分号
7、这样就实现python2.7和python3.5多版本
三、编写Hello,World
  两种方式输出Hello World,第一种我们用解释器交互式环境,打开shell输入python。
tomcat@node:~$ python
Python 3.5.1 (default, Jul 27 :46)
[GCC 5.2.1 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
&&& print("Hello World!")
Hello World!
  第二种将代码保存在 .py文件中,命令行下执行 python1.py 就可以打印出来Hello World。
tomcat@node:~$ vim python1.py
#!/usr/bin/env python
# coding:utf-8
print("Hello World!")
tomcat@node:~$ chmod +x python1.py
tomcat@node:~$ python python1.py
Hello World!
在Linux下执行的时候,第一行指出文件由python解释器来执行,第二行是告诉解释器在加载文件时,采用何种编码,不加上这句的话,在python2中显示中文会出现乱码,在python3中则不会,所以你如果用的是windows而且用的是python3,其实可以不用加这两句,不过实际中还是建议加上这两句。到这里我们就用了两种方式输Hello World。
四、变量&字符编码
常量我们约定俗成都为大写
1、变量声明:
Python将所有数据存为内存对象
Python中,变量事实上是指向内存对象的引用
动态类型:在任何时刻,只要需要,某个对象引用都可以重新引用一个不同的对象(可以是不同的数据类型)内建函数type()用于返回给定数据项的数据类型
"="用于将变量名与内存中的某个对象绑定:如果对象实现存在,就直接进行绑定;否则,则由"="创建引用的对象,变量名也是对象存在内存,比如:name='jerry',name这个指针指向jerry,name='tom'的时候,name是指针指向tom,但是jerry仍在内存中存放着,只是没有被变量名指向,到一定时候会被垃圾收集器回收,和java有点像。其中当test='jerry'时,test和name这两个变量名指向内存的地址是一样的。id(test),id(name),变量名是内存引用的标识或符号。
2、变量定义的规则:
变量名只能是 字母、数字或下划线的任意组合
变量名的第一个字符不能是数字
以下关键字不能声明为变量名
   ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise','return', 'try', 'while', 'with', & & & & & & 'yield']
3、变量最佳命名方式:
使用下划线'_'作为连接,如 name_variables
使用大小写,称为驼峰法,如 NameVariables,nameVariables
  注意:两种命名方式不要混用,只要你喜欢的一种即可
4、变量命名惯例:
以单一下划线开头的变量名(_x)不会被from module import * 语句导入
以两个下划线开头但结尾没有下划线的变量名(__x)是类的本地变量
前后有双下划线的变量名(__x__)是系统定义的变量名,对python解释器有特殊意义
交互式模式下,变量名"_"用于保存最后表达式的结果
  ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号,python2.x解释器默认是ASCII编码。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
二进制和数字转换:128 64 32 16 8 4 2 1 & &比如:2表示二进制
字符和数字转换 : 查看ASCII码表 & &比如: A字母 表示数字是65,二进制是
2、Unicode
  Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定所有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 =&65536,注:此处说的的是最少2个字节,可能更多,比如汉字就需要3个字节,python3.x解释器默认是Unicode编码。
& & &是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行动态分类:ASCII码中的内容用1个字节保存、欧洲的字符用2个字节保存,汉字用3个字节保存...
所以,python2.x解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ASCII),如果是如下代码的话:
报错:ascii码无法表示中文
tomcat@node:~$ vim a.py
#!/usr/bin/env python
print "你好!世界"
tomcat@node:~$ python a.py
File "a.py", line 2
SyntaxError: Non-ASCII character '\xe4' in file a.py on line 2, but
see http://python.org/dev/peps/pep-0263/ for details
改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:
tomcat@node:~$ vi a.py
#!/usr/bin/env python
# coding:utf-8
print "你好!世界"
tomcat@node:~$ python a.py
你好!世界
注意:python3.x中字符集默认为UTF-8,python2.x还是ASCII所以需要设置#coding:utf-8
五、输入、输出、注释
Python输入:
1、Python3.x提供了一个input(),可以让用户输入字符串。比如输入用户的名字:
python3中格式化输出默认接收的都视为字符串,如果你获取的是要数字类型则需要另外强制转换为int()转换为数字类型才能获得数字
&&& name = input("please input your name:")
please input your name:tomcatxiao
&&& print("Hello " + name)
Hello tomcatxiao
&&& age = input("please enter your age:")
please enter your age:21
&&& type(age)
&class 'str'&
&&& age1 = input("please enter your age:")
&&& age1 = int(age1)
&&& type(age1)
&class 'int'&
输入密码时,如果想要不可见,需要利用 getpass 模块中的 getpass 方法,即:
tomcat@node:~$ vi b.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import getpass
# 将用户输入的内容赋值给 pwd变量
pwd = getpass.getpass("请输入密码:")
# 打印输入的内容
print(pwd)
tomcat@node:~$ python b.py
请输入密码:
注意:在pycharm IDE工具中这段代码是行不通的,在Linux命令行或者Windows cmd中是可以的
2、Python2.x提供了一个raw_input()和input(),input()在python2中基本不用忘了吧,当然我这里会演示他们的区别
raw_input()在字符串和数值型都没有问题
&&& name = raw_input("please enter your name:")
please enter your name:tomcatxiao
&&& print name
tomcatxiao
&&& age = raw_input("your age is:")
your age is:21
&&& print age
input()在输入字符串的时候报错,变量未定义,数值型则没有报错,如果是字符串则需要引号'' or "",或者事先定义变量赋值
&&& name = input("please input your name:")
please input your name:tomcatxiao
Traceback (most recent call last):
File "&stdin&", line 1, in &module&
File "&string&", line 1, in &module&
NameError: name 'tomcatxiao' is not defined
&&& age = input("your age is:")
your age is:21
对于上面的代码进行修改下,将字符串事先赋值给一个变量,然后从input中输入则没有报错
&&& myname = "tomcatxiao"
&&& name = input("please input your name:")
please input your name:myname
&&& print name
tomcatxiao
Python输出:
Python中输出是用print,Python2.x中print是语句,Python3.x中则是print()函数  
1.Python2.x
print "String %format1 %format2 ..." %(variable1,variable2)
2.Python3.x
print("String %format1 %format2 ...." %(variable1,variable2))
3.拼接效率比较低
+ variable1
print("String"
+ variable1)
input()和格式化输出时要特别要注意input()输入是个数字需要int()转换,格式化输出的时候使用%d才不会报错
tomcat@node:~$ vi c.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
name = input("input your name:")
age = input("input your age:")
job = input("input your job:")
Information of %s
-------------
''' %(name,name,age,job)
print(msg)
tomcat@node:~$ python c.py
注意:python3中格式化输出默认接收的都视为字符串,如果是数字则需要另外强制转换为int()转换为数字类型
#!/usr/bin/env python
# -*- coding:utf-8 -*-
name = input("input your name:")
age = input("input your age:")
job = input("input your job:")
Information of %s
-------------
''' %(name,name,age,job)
print(msg)
这里的Age用%d进行格式化如果没有强制转换为数字则会报错,执行上面的代码则会报错,int()转换了则不会报错
input your name:tomcatxiao
input your age:21
input your job:IT
Traceback (most recent call last):
File "/home/tomcat/PycharmProjects/s13/day01/dsfg.py", line 15, in &module&
''' %(name,name,age,job)
TypeError: %d format: a number is required, not str
#号可以从一行的任何地方开始
'''''',"""""",三引号用于多行注释
\,表示续行符&
&注意:如果''''''三引号是在一个def 函数或者class 定义类的下方则是对这个函数或者类的说明,可以通过__doc__动态获得文档子串
六、模块初识  
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的。
tomcat@node:~$ vi d.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print(sys.argv)
tomcat@node:~$ python d.py helo world
['test.py', 'helo', 'world']
#把执行脚本时传递的参数获取到了
&&& import os
&&& os.system("df -h") #调用系统命令
注意:os.system()执行系统命令,如果有变量存储该执行的结果,该变量只会存储该命令执行成功或者失败返回值,不会存储命令执行的结果,os.system("df -h")会有返回值
&&& result = os.system("df -h")
df: &/mnt/hgfs&: Protocol error
Filesystem
Used Avail Use% Mounted on
1% /dev/shm
1% /run/lock
0% /sys/fs/cgroup
0% /run/cgmanager/fs
1% /run/user/1000
&&& print(result)
如果需要保存命令执行的结果需哟使用os.popen("系统命令").read(),然后使用变量赋值输出即可
&&& result = os.popen("df -h").read()
&&& print(result)
Filesystem
Used Avail Use% Mounted on
1% /dev/shm
1% /run/lock
0% /sys/fs/cgroup
0% /run/cgmanager/fs
1% /run/user/1000
sys与os结合使用
tomcat@node:~$ vi e.py
#!/usr/bin/env python
import os,sys
os.system(''.join(sys.argv[1:]))
tomcat@node:~$ python e.py df
df: &/mnt/hgfs&: Protocol error
Filesystem
Used Available Use% Mounted on
1% /dev/shm
1% /run/lock
0% /sys/fs/cgroup
0% /run/cgmanager/fs
1% /run/user/1000
自己写个补全模块tab.py适合python2.x,python3.5都有自带补全功能
#!/usr/bin/env python
# python startup file
import sys
import readline
import rlcompleter
import atexit
# tab completion
readline.parse_and_bind('tab: complete')
# history file
histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
readline.read_history_file(histfile)
except IOError:
atexit.register(readline.write_history_file, histfile)
del os, histfile, readline, rlcompleter
写完后保存,导入就可以使用
tomcat@node:~$ python
Python 2.7.11 (default, Jul 27 :58)
[GCC 5.2.1 ] on linux2
Type "help", "copyright", "credits" or "license" for more information.
&&& import tab
&&& import os
Display all 238 possibilities? (y or n)
os.EX_CANTCREAT
os.fchdir(
os.EX_CONFIG
os.fchmod(
os.EX_DATAERR
os.fchown(
os.EX_IOERR
os.fdatasync(
os.EX_NOHOST
os.fdopen(
你会发现,上面自己写的tab.py模块只能在当前目录下导入,如果想在系统的何何一个地方都使用怎么办呢? 此时你就要把这个tab.py放到python全局环境变量目录里啦,用sys.path可以查看,ubuntu是在/usr/lib/python2.7/dist-packages/,centos是在/usr/lib/python2.7/site-packages/
&&& import sys
&&& sys.path
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-kylin-sso-client', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
七、If语句与流程控制
python的比较操作:
所有的Python对象都支持比较操作:
可用于测试值相等、相对大小等
如果是复合对象,python会检查其所有部分,包括自动遍历各级嵌套对象,知道可以得出最终结果
测试操作符:
"==" 操作符测试值的相等性
"is" 表达式测试对象的一致性
"in" 成员关系测试
如何实现比较操作:
python中不同类型的比较方法:
(1)数字:通过相对大小进行比较
(2)字符串:按照字典次序逐次进行比较
(3)列表和元组:自左至右比较各部分内容
(4)字典:对排序之后的(键、值)列表进行比较
python中真和假的含义:
(1)非0数字为真,否则为假
(2)非空对象为真,否则为假
(3)None则始终为假
比较和相等测试会递归地应用于数据结构中 返回值为True或False
组合条件测试:
X and Y: 与运算
if测试的语法结构:
if boolean_expression1:
elif boolean_expression2:
else_suite
elif语句是可选的
仅用与占位,而后在填充相关语句时,可以使用pass
if/else三元表达式:
通常在为某变量设定默认值时通常用到如下表达式
A = X if Y else Z
其通用条件表达式语法格式为:
expression1 if boolean_express else expression2
如果boolean_express的值为True,则条件表达式的结果为express1,否则为express2
八、循环for,while
循环机制及应用场景 while循环:
(1)用于编写通用迭代结构
(2)顶端测试为真即会执行循环体,并会重复多次测试知道为假后执行循环后的其他语句
(1)一个通用的序列迭代器,用于遍历任何有序的序列对象内的元素
(2)可用于字符串、元组、列表和其他的内置可迭代对象,以及通过类所创建的新对象
python也提供了一些能够进行隐性迭代的工具:
(1)in成员关系测试
(2)列表解析
(3)map、reduce和filter函数
break: 跳出最内层的循环 continue: 跳出所处的最近层循环的开始处 pass: 占位语句
外层变量,可以被内层代码使用
内层变量,不应被外层代码使用
while循环:
while True: 死循环
语法格式:
while boolean_express:
while_suite
else_suite
else分支为可选部分
只要boolean_express的结果为True,循环就会执行
boolean_express的结果为False时终止循环,此时如果有else分支,则会执行
&&& url = ''
&&& while url:
print(url)
url = url[1:]
&&& x = 0;y = 100
&&& while x & y:
&&& url = ''
&&& while url:
print(url)
url = url[:-1]
print('game over')
while大量练习:
练习1:逐一显示指定列表中的所有元素
&&& l1 = [1,2,3,4,5,6]
&&& count = 0
&&& while l1:
print(l1[0])
&&& l1 = [1,2,3,4,5,6]
&&& while l1:
print(l1[-1])
&&& l1 = [1,2,3,4,5,6]
&&& count = 0
&&& while l1 & len(l1):
print(l1[count])
count += 1
练习2:求100以内所有偶数之和
练习3:逐一显示指定字典的所有键;并于显示结束后说明总键数;
&&& d1 = {'x':1,'y':23,'z':78}
&&& keylists = d1.keys()
&&& while keylists:
print(keylists[0])
keylists.pop[0]
print(len(d1))
练习4:创建一个包含了100以内所有奇数的列表
&&& l1 = []
&&& while x & 100:
l1.append(x)
练习5:逆序逐一显示一个列表的所有元素
练习6:列表l1 = [0,1,2,3,4,5,6],列表l2 = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],以第一个列表中的元素为键,以第二个列表中的元素为值生成字典d1
&&& l1 = [0,1,2,3,4,5,6]
&&& l2 = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
&&& d1 = {}
&&& count = 0
&&& if len(l1) == len(l2):
while count & len(l1):
d1[l1[count]] = l2[count]
count += 1
&&& print(d1)
语法格式:
for expression1 in iterable:
else_suite
通常,expression或是一个单独的变量,或是一个变量序列,一般以元组的形式给出 如果以元组或列表用于expression,则其中的每个数据项都会拆分到表达式的项
T = [(1,2),(3,4),(5,6),(7,8)]
for (a,b) in T:
  print(a,b)
编写循环的技巧:(1)for循环比while循环执行速度快(2)python提供了两个内置函数,用于在for循环中定制特殊的循环python3.x 只有range,python2.x有(range,xrange)
range: 一次性地返回连续的整数列表
xrange: 一次产生一个数据元素,相较于range更节约空间
zip:返回并行的元素元组的列表,常用于在for循环中遍历数个序列
range()函数:非完备遍历用于每隔一定的个数元素挑选一个元素
&&& S = 'How are you these days?'
&&& range(0,len(S),2)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]
&&& for i in range(0,len(S),2):
print(S[i])
&&& L = [1,2,3,4,5]
&&& for i in range(len(L)):
zip()函数:并行遍历取得一个或多个序列为参数,将给定序列中的并排的元素配成元组,返回这些元组的列表 当参数长度不同时,zip会以最短序列的长度为准 1.可在for循环中用于实现并行迭代
&&& L1 = [1,2,3,4,5,6,7]
&&& L2 = ['a','b','c','d','e','f','g']
&&& zip(L1,L2)
2.zip也常用于动态构造字典
&&& keys = [1,2,3,4,5,6,7]
&&& vaules = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
&&& D = {}
&&& for (k,v) in zip(keys,values)
for大量练习:
for循环练习:
练习1:逐一分开显示指定字典d1中的所有元素,类似如下;
&&& d1 = {'x':123,'y':321,'z':734}
&&& for (k,v) in d1.items():
print(k,v)
练习2:逐一显示列表中l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']中索引为奇数的元素;
&&& l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
&&& for i in range(1,len(l1),2):
print(l1[i])
练习3:将属于列表l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],但不属于列表l2=['Sun','Mon','Tue','Thu','Sat']的所有元素定义为一个新列表l3;
&&& l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
&&& l2=['Sun','Mon','Tue','Thu','Sat']
&&& l3 = []
&&& for i in l1:
if i not in l2:
l3.append(i)
练习4:将属于列表namelist=['stu1','stu2','stu3','stu4','stu5','stu6','stu7'],删除列表removelist=['stu3','stu7','stu9'];请将属于removelist列表中的每个元素从namelist中移除(属于removelist,但不属于namelist的忽略即可)
&&& namelist=['stu1','stu2','stu3','stu4','stu5','stu6','stu7']
&&& removelist=['stu3','stu7','stu9']
&&& for i in removelist:
if i in namelist:
namelist.remove(i)
&&& print(namelist)
场景一、用户登陆验证
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import getpass
name = 'tom'
pwd = 123456
while True:
if count & 3:
print("Please enter your name and password !")
username = input("username:")
password = getpass.getpass("password:")
if username == name and password == pwd:
print("恭喜你登陆成功!")
print("登陆失败!用户名或者密码错误")
print("你已经输错3次,正在退出....")
count += 1
场景二、猜年龄游戏
#!/usr/bin/env python
# -*- coding:utf-8 -*-
for i in range(10):
if count & 3:
a = int(input("please input num:"))
if a == age:
print("恭喜你,答对了")
elif a & age:
print("你猜的数字大了")
print("你猜的数字小了")
b = input("你太笨了,这都猜不对,你继续玩吗?(yes or not):")
if b == 'yes':
print("Bye!下次再玩")
count += 1
阅读(...) 评论(){"debug":false,"apiRoot":"","paySDK":"/api/js","wechatConfigAPI":"/api/wechat/jssdkconfig","name":"production","instance":"column","tokens":{"X-XSRF-TOKEN":null,"X-UDID":null,"Authorization":"oauth c3cef7c66aa9e6a1e3160e20"}}
{"database":{"Post":{"":{"contributes":[{"sourceColumn":{"lastUpdated":,"description":"","permission":"COLUMN_PUBLIC","memberId":7841278,"contributePermission":"COLUMN_PUBLIC","translatedCommentPermission":"all","canManage":true,"intro":"面向工资学习","urlToken":"c_","id":44813,"imagePath":"4b70deef7.jpg","slug":"c_","applyReason":"0","name":"Python高薪训练营","title":"Python高薪训练营","url":"/c_","commentPermission":"COLUMN_ALL_CAN_COMMENT","canPost":true,"created":,"state":"COLUMN_NORMAL","followers":3263,"avatar":{"id":"4b70deef7","template":"/{id}_{size}.jpg"},"activateAuthorRequested":false,"following":false,"imageUrl":"/4b70deef7_l.jpg","articlesCount":44},"state":"accepted","targetPost":{"titleImage":"/v2-0dfc56a1abec4b765b388d_r.jpg","lastUpdated":,"imagePath":"v2-0dfc56a1abec4b765b388d.jpg","permission":"ARTICLE_PUBLIC","topics":[52,872],"summary":"运维工种对于自动化的强烈需求已经显漏无疑——作为一个古老的技术工种,在几台、几十台服务器时尚可人肉维护,面对云计算时代动辄上百上千的服务器,单凭人肉维护显然束手无策。想像一下诸如谷歌、阿里云的上万台服务器,如果单凭人工维护恐怕运维就会成为…","copyPermission":"ARTICLE_COPYABLE","translatedCommentPermission":"all","likes":0,"origAuthorId":0,"publishedTime":"T17:31:48+08:00","sourceUrl":"","urlToken":,"id":3533217,"withContent":false,"slug":,"bigTitleImage":false,"title":"Python自动化运维学习资源汇总","url":"/p/","commentPermission":"ARTICLE_ALL_CAN_COMMENT","snapshotUrl":"","created":,"comments":0,"columnId":0,"content":"","parentId":0,"state":"ARTICLE_PUBLISHED","imageUrl":"/v2-0dfc56a1abec4b765b388d_r.jpg","author":{"bio":"马哥Python助理研发人,IT全栈市场狗,微信:itxiujiang","isFollowing":false,"hash":"c535cddbdc2f811d7e67dc6b72d25f35","uid":12,"isOrg":false,"slug":"diqiuyo","isFollowed":false,"description":"","name":"地球的外星人君","profileUrl":"/people/diqiuyo","avatar":{"id":"2cc31be3c2dd34d","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},"memberId":7841278,"excerptTitle":"","voteType":"ARTICLE_VOTE_CLEAR"},"id":755709}],"title":"Python自动化运维学习资源汇总","author":"diqiuyo","content":"运维工种对于自动化的强烈需求已经显漏无疑——作为一个古老的技术工种,在几台、几十台服务器时尚可人肉维护,面对云计算时代动辄上百上千的服务器,单凭人肉维护显然束手无策。想像一下诸如谷歌、阿里云的上万台服务器,如果单凭人工维护恐怕运维就会成为人员需求量最高的工种,没有之一。在Devops备受推崇的时代,即使开发也难免要接触到一些运维工作。所以今天为大家整理了一些自动化运维的学习资源,希望能够给大家提供一些帮助。作为一名运维工程师,这些只是可能是你的必备,作为一名非运维技术人员,不妨记录下来,有需求之后再行查找也不迟。书籍推荐技术学习必然无法绕开书籍资料。此处整理10册书籍,对于读者而言不必全部阅读,只需要挑选符合自己技能方向的内容即可。大部分书籍都可以在网络上发现电子版的资料。《Puppet实战》《puppet实战》详细讲解了puppet的功能和使用方法,深入剖析了puppet的工作原理,系统总结了puppet的使用技巧,包含大量来自一线的实战案例和最佳实践。全书一共20章,共分为四部分:准备篇(第1~4章)介绍了puppet用途、组织结构、工作原理、核心配置文件、各种平台下的安装与配置,以及它的运行环境,是使用puppet前必须做好的准备工作;基础篇(第5~10章)详细讲解了puppet的理论知识和功能使用,puppet的语法与命令、资源、模块、类、模板、节点管理,以及facter、数组、函数、变量和标签;实战篇(第11~13章)通过几个经典案例,包括大规模nginx集群的部署方案、分布式监控系统部署方案、openstack快速部署方案等,使读者能快速将puppet运用到实践中;进阶篇(第14~20章)综合讲解了puppet的扩展模式、版本控制、报告系统、控制台、扩展工具及mcollective,让读者了解一个完整的puppet生产流程。《nagios系统监控实践》《nagios系统监控实践(原书第2版)》从实际出发,在开篇就系统运维中的监控提出一系列需求,从而展开对nagios系统的初步介绍(第1~2章),随后从实用的角度,全面、详细地讲解了nagios安装、配置的相关内容(第3~4章)。通过简化配置、实施监控等工作(第5~6章),用大量的示例展示nagios的实际能力。然后,在扩展方面介绍了一些常用的方案(第7章),并从原理、案例到最后的diy,一步步带领读者进入数据可视化的世界(第8章)。此外,还介绍了nagios商业版本——nagios xi的功能特色(第9章)。最后,介绍nagios事件代理(neb),并用c语言实现完整neb插件(第10章),使读者进一步掌握neb的工作机制。《Zabbix监控系统深度实践》《Zabbix监控系统深度实践(第2版)》由浅入深,全面讲解Zabbix应用与原理,是作者多年实战经验的总结和浓缩。在概念篇,从一个简单但完整的入门案例讲起,案例中有最基本的概念介绍,通过案例帮助那些只需将服务器加入监控,就能看到监控数据的读者;然后逐步深入,在进阶篇介绍Zabbix的各方面的配置;在设计篇中对Zabbix的内部原理进行深入剖析,包括Zabbix与数据库的交互、Zabbix数据库表的设计等,并分享作者在Zabbix上踩过的坑以及解决问题的思路;最后会在开源部分介绍58同城开源的Zatree和Chrome的插件、手机客户端等工具。《Zabbix监控系统深度实践(第2版)》适合想使用Zabbix构建监控系统的技术人员阅读,也适合有一定基础、对于Zabbix有更高的要求的读者。《Linux系统命令及shell脚本实践指南》全书共计18章,从知识结构上分为三部分。第一部分为前8章,全面介绍了linux的基础知识和常用命令;第二部分为第9章和第10章,主要是linux下交互和非交互编辑器的使用;第三部分为第11~18章,主要是shell脚本开发。这三部分内容各有偏重,读者可以根据实际需要选择阅读。《Linux命令行与shell脚本编程大全》本书是一本关于Linux 命令行与shell 脚本编程的全面教程。全书分为四部分:第一部分介绍Linuxshell 命令行;第二部分介绍shell 脚本编程基础;第三部分深入探讨shell 脚本编程的高级内容;第四部分介绍如何在现实环境中使用shell 脚本。本书不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料。《Linux软件管理平台设计及实践》全书共8章,在逻辑上分为三个部分:第一部分(第1~4章)为基础技术篇,详细介绍了rpm的概念、组织方式和制作方法,另外对yum服务进行了深入的分析,目的是为对软件开发感兴趣的读者在rpm和yum领域提供导引,为运维和系统管理人员提供指导,帮助读者在rpm/yum的使用和理解方面扫清障碍。第二部分(第5~6章)为问题分析和系统设计篇,结合企业中软件管理的现状,提出问题,然后从基本的系统开始,逐步解决问题,优化方案,最终形成一套软件管理平台的设计方案,适合在企业中负责软件平台优化和系统服务管理的人员阅读。第三部分(第7~8章)为实现篇,如果读者想将本书中设计的软件管理平台应用到自己所在企业的环境中,可以参考这部分的内容进行详细设计和编码实现。附录列举了rpm和yum在日常使用中经常会遇到的问题以及对应的解决方法。《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》全书共14章,分为四个部分:安全运维篇(1-3章)主要讲解了服务器安全运维、网络安全运维和数据安全运维的关键技术和方法;运维故障排查篇(4-5章)从服务器系统和应用软件两个维度讲解了运维故障的排查思路,以及常见的和经典的运维故障的解决方案;自动化运维篇(6-9章)主要讲解了海量主机的自动化部署和配置、自动化监控、分布式监控等大规模集群运维所需的各种工具(pssh、pdsh、mussh、Ganglia、nagios、Centreon等)和方法;集群架构篇(10-14)讲解了如何构建和优化基于Web和MySQL数据库的高性能集群和高可用的负载均衡集群。《构建高可用Linux服务器》《构建高可用Linux服务器(第3版)》最大的特点就是与实践紧密结合,所有理论知识、方法、技巧和案例都来自实际生产环境,涵盖Linux服务器构建与优化、服务器故障诊断与排除、Shell脚本、高可用Linux集群构建、MySQL性能调优及高可用、自动化运维(Puppet)、安全运维等主题,所有内容都围绕“如何构建高可用的Linux服务器”这个主题深度展开。《Python自动化运维:技术与最佳实践》全书一共16章:基础篇(1-4章)详细介绍了系统基础信息、业务服务监控、定制业务质量报表、系统安全等基础和常用模块;高级篇(5-12章)深入讲解了批量运维管理器pexpect、paramiko、Fabric,集中化管理平台Ansible、Saltstack,统一网络控制器Func等高级功能,涵盖自动化操作、系统管理、配置管理、集群管理及大数据应用等主题;案例篇(13-16章)详细介绍了4个来自不同平台的运维案例,如何从零开始打造一个B/S自动化运维平台、如何打造Linux系统安全审计功能、如何构建分布式质量监控平台、如何构建桌面版C/S自动化运维平台,这4个案例均来自实际生产环境。《Python for UNIX and Linux System Administration》《Python UNIX和Linux系统管理指南》介绍了Python语言如何为管理uNIx和Linux服务器提供各种更加有效的任务处理方式。书中各章都提出了具体的管理问题,如并发或数据备份,然后通过Python示例提供了解决方案。通过《Python UNIX和Linux系统管理指南》,读者可以学习如何用Python开发自己的一套命令行工具来解决诸多问题。工具文档无论是看书还是实战,只要使用工具,文档总是无法躲避的一环。(汇总了一下才发现工具实在太多了...我就不妄想把所有东西列出来了,大家看自己日常需求然后Google吧,毕竟找个文档根本算不上什么问题)资讯源专门提供自动化运维资讯的网站还不多,大多数资讯都在运维、语言等技术社区出现。运维资讯聚合站点,看名字就知道运维技术内容占据大多数地位。不过虽然内容较多,但是原创性存疑。掘金社区内容质量相对较高,不过内容的数量相对其他站点要少很多。不过精品路线本就代表着拒绝大多数地址文章,所以还是值得推荐的。这个不用过多介绍,不过自从商业化之后社区的质量一直在下降,注意甄别吧~更上一个差不多,不过运维的气氛要更浓一些。这个不用怎么介绍吧?————————————————————————今天就先整理这些吧,有时间再给大家推荐一些博客和公众号~为了方便大家学习,我建立了一个Python交流群,目前群内已经有1207个小伙伴,学习寂寞的小伙伴不妨一起来玩~群号:","updated":"T09:31:48.000Z","canComment":false,"commentPermission":"anyone","commentCount":3,"collapsedCount":0,"likeCount":43,"state":"published","isLiked":false,"slug":"","isTitleImageFullScreen":false,"rating":"none","titleImage":"/v2-0dfc56a1abec4b765b388d_r.jpg","links":{"comments":"/api/posts//comments"},"reviewers":[],"topics":[{"url":"/topic/","id":"","name":"python自动化运维"},{"url":"/topic/","id":"","name":"运维自动化"},{"url":"/topic/","id":"","name":"Python"}],"adminClosedComment":false,"titleImageSize":{"width":651,"height":434},"href":"/api/posts/","excerptTitle":"","tipjarState":"inactivated","annotationAction":[],"sourceUrl":"","pageCommentsCount":3,"hasPublishingDraft":false,"snapshotUrl":"","publishedTime":"T17:31:48+08:00","url":"/p/","lastestLikers":[{"bio":"大学生","isFollowing":false,"hash":"bf34c7eb3d2e6c197f834bbca3ddae7b","uid":988500,"isOrg":false,"slug":"guo-zi-li-24-56","isFollowed":false,"description":"","name":"果子狸","profileUrl":"/people/guo-zi-li-24-56","avatar":{"id":"v2-5acec0e8bfdbe1a","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":null,"isFollowing":false,"hash":"9abbcdd9a58924ebb21c","uid":32,"isOrg":false,"slug":"Chris_Ariel","isFollowed":false,"description":"","name":"Ariel Chris","profileUrl":"/people/Chris_Ariel","avatar":{"id":"da8e974dc","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"学Linux和Python的低能孩儿。","isFollowing":false,"hash":"dcf4e4a8cf8df","uid":173400,"isOrg":false,"slug":"linux-2-49","isFollowed":false,"description":"低能孩子。","name":"Beechoing","profileUrl":"/people/linux-2-49","avatar":{"id":"v2-aa6c40ad34","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":null,"isFollowing":false,"hash":"b09b418b565c8fef2a057","uid":591400,"isOrg":false,"slug":"ywncmt","isFollowed":false,"description":"","name":"ywncmt","profileUrl":"/people/ywncmt","avatar":{"id":"da8e974dc","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":null,"isFollowing":false,"hash":"5bee5c4b6adc2c29617a2a","uid":72,"isOrg":false,"slug":"li-zhen-hao-86","isFollowed":false,"description":"","name":"李珍豪","profileUrl":"/people/li-zhen-hao-86","avatar":{"id":"b0113f5ceccc99f083dd20f7","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false}],"summary":"运维工种对于自动化的强烈需求已经显漏无疑——作为一个古老的技术工种,在几台、几十台服务器时尚可人肉维护,面对云计算时代动辄上百上千的服务器,单凭人肉维护显然束手无策。想像一下诸如谷歌、阿里云的上万台服务器,如果单凭人工维护恐怕运维就会成为…","reviewingCommentsCount":0,"meta":{"previous":null,"next":null},"annotationDetail":null,"commentsCount":3,"likesCount":43,"FULLINFO":true}},"User":{"diqiuyo":{"isFollowed":false,"name":"地球的外星人君","headline":"","avatarUrl":"/2cc31be3c2dd34d_s.jpg","isFollowing":false,"type":"people","slug":"diqiuyo","bio":"马哥Python助理研发人,IT全栈市场狗,微信:itxiujiang","hash":"c535cddbdc2f811d7e67dc6b72d25f35","uid":12,"isOrg":false,"description":"","profileUrl":"/people/diqiuyo","avatar":{"id":"2cc31be3c2dd34d","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false,"badge":{"identity":null,"bestAnswerer":null}}},"Comment":{},"favlists":{}},"me":{},"global":{},"columns":{"next":{}},"columnPosts":{},"columnSettings":{"colomnAuthor":[],"uploadAvatarDetails":"","contributeRequests":[],"contributeRequestsTotalCount":0,"inviteAuthor":""},"postComments":{},"postReviewComments":{"comments":[],"newComments":[],"hasMore":true},"favlistsByUser":{},"favlistRelations":{},"promotions":{},"switches":{"couldAddVideo":false},"draft":{"titleImage":"","titleImageSize":{},"isTitleImageFullScreen":false,"canTitleImageFullScreen":false,"title":"","titleImageUploading":false,"error":"","content":"","draftLoading":false,"globalLoading":false,"pendingVideo":{"resource":null,"error":null}},"drafts":{"draftsList":[],"next":{}},"config":{"userNotBindPhoneTipString":{}},"recommendPosts":{"articleRecommendations":[],"columnRecommendations":[]},"env":{"isAppView":false,"appViewConfig":{"content_padding_top":128,"content_padding_bottom":56,"content_padding_left":16,"content_padding_right":16,"title_font_size":22,"body_font_size":16,"is_dark_theme":false,"can_auto_load_image":true,"app_info":"OS=iOS"},"isApp":false},"sys":{}}}

我要回帖

更多关于 自动化运维平台哪个好 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信