摘要: 装饰器(decorator)用于为函数方法或类动态增加功能,在不改动原对象的基础上额外增加一些功能。 说起装饰器,很多文章都会说到闭包和函数作用域,这里就不绕了,只说一下装饰器的使用。 大多数装饰器会在内部定义一个函数,然后将其返回。装饰器本质上是一个高阶函数,调用原函数作为参数,返回一个函数对象。 阅读全文
posted @ 2017-11-05 21:45 KeithTt 阅读(231) 评论(0) 推荐(0) 编辑
摘要: psutil是一个非常强大的第三方库,用法简单,这里主要是做一下梳理。 先看看官方说明: psutil是一个跨平台库,可以获取系统硬件利用率(包括CPU, memory, disks, network, sensors)和正在运行的进程的信息。主要用于系统资源监控和进程管理。 安装psutil: 用 阅读全文
posted @ 2017-10-28 21:51 KeithTt 阅读(1232) 评论(0) 推荐(0) 编辑
摘要: 由于生成器的其中一种创建方式与列表推导式很相似,这里先说一下列表推导式。 列表推导式 列表推导式又叫列表生成式,官方叫做 list comprehension。顾名思义,这个是用来生成列表的。 用法: 一般情况下,可以用list()函数将序列转换成列表,比如: 上面的情况比较单一,如果复杂一点,比如 阅读全文
posted @ 2017-10-28 17:49 KeithTt 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 接受函数作为参数,或者把函数作为结果返回的函数是高阶函数,官方叫做 Higher-order functions。 map()和filter()是内置函数。在python3中,reduce()已不再是内置函数,被放到了functools模块里面,这个函数最常用于求和。 另外,列表推导式和生成器表达式 阅读全文
posted @ 2017-10-25 01:14 KeithTt 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 顾名思义,logging模块是用来管理日志的。 logging模块包含四个部分: Loggers expose the interface that application code directly uses. 记录器,暴露应用程序代码能直接使用的接口。 Handlers send the log 阅读全文
posted @ 2017-10-22 14:44 KeithTt 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 作为一门脚本语言,写脚本时执行系统命令可以说很常见了,python提供了相关的模块和方法。 os模块提供了访问操作系统服务的功能,由于涉及到操作系统,它包含的内容比较多,这里只说system和popen方法。 >>> import os >>> dir(os) ['DirEntry', 'F_OK' 阅读全文
posted @ 2017-10-22 13:34 KeithTt 阅读(39954) 评论(0) 推荐(1) 编辑
摘要: list 的 sort 方法是对原列表进行操作,而内置函数 sorted 会返回一个新的 list。 >>> help(sorted) Help on built-in function sorted in module builtins: sorted(iterable, key=None, re 阅读全文
posted @ 2017-10-16 02:06 KeithTt 阅读(749) 评论(0) 推荐(0) 编辑
摘要: 函数的数学定义:y=f(x) ,y是x的函数,x是自变量。y=f(x0, x1, ..., xn) python中的函数: 由函数名称、参数列表、和若干语句组成的语句块构成,完成一定的功能,是组织代码的最小单元。 函数的作用 结构化编程对代码的最基本的封装,一般按照功能组织一段代码 封装的目的为了复 阅读全文
posted @ 2017-10-09 00:26 KeithTt 阅读(710) 评论(0) 推荐(0) 编辑
摘要: zip有拉链的意思,zip函数像拉链一样将0个或多个可迭代对象按相同位置组合成一个zip对象,该zip对象的每个元素是由每个可迭代对象的相同位置的元素组成的元祖。 如果zip中有多个序列,而各序列的长度不同,那么返回的对象的长度以最短为准,超出的部分不返回。 如果zip中只有一个序列,则返回对象的每 阅读全文
posted @ 2017-10-08 23:33 KeithTt 阅读(394) 评论(0) 推荐(0) 编辑
摘要: enumerate是枚举的意思,顾名思义,enumerate()函数用来将一个可迭代序列生成一个enumerate对象,该enumerate对象的每个元素是由可迭代对象的索引编号和对应的元素组成的元祖。 看看官方说明: 用法: 看看示例一下就明白了: 当需要遍历一个对象并为每个元素指定一个编号时,用 阅读全文
posted @ 2017-10-08 23:01 KeithTt 阅读(4427) 评论(0) 推荐(1) 编辑
摘要: 这里使用的是requests库和pyquery库,传说中的爬虫神器。 Requests 是python的一个简单优雅的HTTP库,基于urllib3。 直接贴一下逗逼的官方说明: 相比urllib,确实简单好用,更多详情请自行查询官网。 Pyquery ,a jquery like library 阅读全文
posted @ 2017-10-07 18:39 KeithTt 阅读(231) 评论(0) 推荐(0) 编辑
摘要: JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。 基于ECMAScript(w3c制定的js规范)的一种实现,采用完全独立于编程语言的文本格式来存储和表示数据 json跟javascript没有必然关系 json有自己的数据类型,虽然跟JS的数据类型非 阅读全文
posted @ 2017-10-07 01:29 KeithTt 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 字典(dict)是一个kv即键值存储库,是python中唯一的映射类型,官方叫做 Mapping Type。 字典是可变数据类型,即可以对元素重新赋值。字典不是序列,它是无序的。 字典通过key获取元素值,而不是索引编号。在访问或删除key时,如果key不存在,会抛出 KeyError 异常。 字典 阅读全文
posted @ 2017-10-06 02:24 KeithTt 阅读(543) 评论(0) 推荐(0) 编辑
摘要: 列表(list)是一种可变序列,官方叫做 Mutable Sequence Types。 列表用方括号表示,不同的元素之间用逗号隔开,可包含任意数据类型。 列表中的元素可以被修改,可以重新赋值,这是list月tuple的主要区别。 索引编号: 0,1,2 ... n-1 -n ... -3,-2,- 阅读全文
posted @ 2017-10-05 05:01 KeithTt 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 元祖(tuple)是一种特殊的序列类型,官方叫做 Immutable Sequence Types,不可变序列。 元祖用圆括号表示,元素之间用逗号隔开,可包含任意数据类型。 空元祖 >>> a=() >>> a () >>> type(a) <class 'tuple'> 只有一个元素的元祖,这里比 阅读全文
posted @ 2017-10-05 04:12 KeithTt 阅读(711) 评论(0) 推荐(0) 编辑
摘要: 字符串(string)是由零个或多个字符组成的有限序列,官方叫做Text Sequence Type,即文本序列。 字符串通常以串的整体作为操作对象,字符串跟元祖一样也是不可变序列。 字符串用引号包含标识,python中双引号和单引号的意义相同,都可用于表示字符串。 字符串作为最重要的常用数据类型之 阅读全文
posted @ 2017-10-05 00:31 KeithTt 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 在Python中,所有的异常都必须继承自 BaseException 类。 **Exception hierarchy** ``` The class hierarchy for built-in exceptions is: BaseException +-- SystemExit +-- Key 阅读全文
posted @ 2017-10-04 01:41 KeithTt 阅读(283) 评论(0) 推荐(0) 编辑
摘要: HTTP,Hyper Text Transfer Protocol,即超文本传输协议。是Internet上最主要的web应用层标准。B/S架构的应用程序使用HTTP在客户端与服务器之间传送数据。HTTP可以传送任何格式的数据,从文本到图像甚至视频都可以传输。HTP基于TCP/IP通信协议来传送数据。 阅读全文
posted @ 2017-10-03 14:42 KeithTt 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 先看看官方说明: The default mode is 'r' (open for reading text, synonym of 'rt'). For binary read-write access, the mode 'w+b' opens and truncates the file t 阅读全文
posted @ 2017-10-03 00:55 KeithTt 阅读(590) 评论(0) 推荐(0) 编辑
摘要: Python中使用lambda关键字创建匿名函数。所谓匿名,即不再使用def语句这样标准的形式定义一个函数。 匿名函数有个限制,就是只能有一个表达式,只做简单运算,没有复杂的函数体,不用写return,返回值就是该表达式的结果。 用匿名函数有个好处,由于函数没有名字,不必担心函数名冲突。 此外,匿名 阅读全文
posted @ 2017-10-02 22:53 KeithTt 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 就harbor本身部署来说是非常简单的,之前写过详细步骤,这里不再重复。 这里主要是总结一下部署当中遇到的问题,以及如何开启ldap验证。 harbor默认是通过http通信的,当然也支持https,但是需要配置,不太方便。docker默认是通过https通信的。所以在默认情况下,docker跟ha 阅读全文
posted @ 2017-09-26 13:26 KeithTt 阅读(2382) 评论(0) 推荐(0) 编辑
摘要: 默认情况下,镜像和容器存放的路径是/var/lib/docker。 要修改这个设置很简单,把指定的目录软链到这个目录,或者将一个单独的分区挂载到这个目录,或者直接修改docker启动参数。 查看使用帮助 修改docker配置文件 重启服务 查看信息 默认情况下,Root Dir为/var/lib/d 阅读全文
posted @ 2017-09-25 14:06 KeithTt 阅读(2752) 评论(0) 推荐(0) 编辑
摘要: 找到指定容器的所有进程的PID可以更方便的对容器进程进行管理,特别是在某些容器卡住无法连接的场景。 1、找出容器ID 2、进入相应目录 3、进程号就存在一个文件里面 4、查看所有进程,找出对应的进程树分支 还有一种更有效的获取容器进程的方法,这种方法依赖docker程序,要是程序卡住就无法使用了。 阅读全文
posted @ 2017-09-25 11:32 KeithTt 阅读(22462) 评论(0) 推荐(0) 编辑
摘要: 需求:将一台docker虚拟机的内存从6G扩展到8G。 关于资源限制,docker使用的是cgroup,这里就不细说原理了,只记录一下操作方法。 1、先找到容器ID 2、进入对应的cgroup目录 3、修改相应的值即可 阅读全文
posted @ 2017-09-25 10:49 KeithTt 阅读(2010) 评论(0) 推荐(0) 编辑
摘要: 同步公网 yum 源,上游 yum 源必须要支持 rsync 协议,否则不能使用 rsync 进行同步。 CentOS源:rsync://rsync.mirrors.ustc.edu.cn/centos/ EPEL源:rsync://rsync.mirrors.ustc.edu.cn/epel/ 同 阅读全文
posted @ 2017-09-24 17:50 KeithTt 阅读(7106) 评论(0) 推荐(0) 编辑
摘要: 用包管理工具安装smokeping没有自带日志输出,为了定位问题开启日志就成为第一需求。 1、修改smokeping的配置 2、修改rsyslog的配置 3、创建日志文件,并修改权限 4、重启服务 5、然后就可以看到日志了 阅读全文
posted @ 2017-09-24 16:31 KeithTt 阅读(1196) 评论(1) 推荐(1) 编辑
摘要: 一个python文件有两种使用方法: 作为脚本直接运行 import到其它文件中被调用(模块重用) if __name__ == '__main__':就是用来控制这两种情况下代码执行的过程。在if __name__ == '__main__':下的代码只有在第一种情况下(即文件作为脚本直接执行)才 阅读全文
posted @ 2017-09-19 17:32 KeithTt 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 这里主要是玩一下http协议,查看http的header。 1、输入命令telnet访问百度 2、输入请求头,这里有时间限制,很快会自动断开,所以提前写好粘贴进去 3、两次回车,返回响应头 阅读全文
posted @ 2017-09-17 18:07 KeithTt 阅读(7952) 评论(2) 推荐(2) 编辑
摘要: 需求:用RRDtool绘制lvs的连接数图形 RRDtool是一个强大的绘图工具,作者是Tobias Oetiker。 RRD全称Round Robin Database,轮转数据库,也是一个时间序列数据库。数据库文件以rrd结尾,RRD在创建好后大小是固定的,超过容量之后旧数据会被新采集的数据覆盖 阅读全文
posted @ 2017-09-11 15:09 KeithTt 阅读(637) 评论(0) 推荐(0) 编辑
摘要: HTML中的表格有两种作用: 显示真实的表结构及数据 控制页面布局 4个标签: 表格常用的属性: 示例 上面代码的显示效果如下: 阅读全文
posted @ 2017-09-09 23:16 KeithTt 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 虚拟化网络都是基于netns实现,不管是昨日的openstack,还是今日的docker。 ip netns 用法 ip link 用到netns,就不得不说到ip link 用法 显示设备属性 添加虚拟设备 删除虚拟设备 设置设备属性 这里单独说一下veth设备 veth设备是成对出现的,一端连接 阅读全文
posted @ 2017-09-09 16:44 KeithTt 阅读(3100) 评论(0) 推荐(0) 编辑
摘要: 需求:将redis内存从1G扩展到3G,不中断服务 1、打开客户端 2、查看当前值 3、设置内存为3G 4、查看修改后的值 5、修改配置文件,让配置重启有效 阅读全文
posted @ 2017-09-09 00:22 KeithTt 阅读(4076) 评论(0) 推荐(0) 编辑
摘要: 路由条目类型 主机路由:目标地址为单个IP。 网络路由:目标地址为IP网络。 默认路由:目标为任意主机,0.0.0.0/0.0.0.0。 用法,查看帮助 添加路由 删除路由 查看路由表 各字段含义 另外,路由表是有顺序的,从上到下匹配。如果在eth0和eth1上分别添加一条一样的路由,比如这样: 这 阅读全文
posted @ 2017-09-06 01:47 KeithTt 阅读(378) 评论(0) 推荐(0) 编辑
摘要: 需求:设置nginx每天凌晨12点轮转,系统版本为debian7,nginx版本为tengine2.2.0 1、修改logrotate主配置文件,打开压缩和以时间为后缀命名 2、添加一条nginx的logrotate配置(正常配置到这里就可以了) vim /etc/logrotate.d/nginx 阅读全文
posted @ 2017-09-04 02:57 KeithTt 阅读(4017) 评论(0) 推荐(1) 编辑
摘要: 1、安装bridge-utils # aptitude install -y bridge-utils 2、配置网桥 # vim /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet manu 阅读全文
posted @ 2017-09-04 01:45 KeithTt 阅读(2149) 评论(0) 推荐(0) 编辑
摘要: 需求:从117.119.33.99迁移到122.14.206.125,lvs为dr模式,系统版本为debian7 1、安装lvs和keepalived # aptitude install -y ipvsadm keepalived # /etc/init.d/ipvsadm start # upd 阅读全文
posted @ 2017-09-04 01:12 KeithTt 阅读(442) 评论(0) 推荐(0) 编辑
摘要: keepalived支持的健康检测方式有:HTTP_GET|SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK。 由于keepalived自身并不支持udp检测,有TCP_CHECK但是没有UDP_CHECK,所以这里只能使用MISC_CHECK混合检测方式调用外部脚本来 阅读全文
posted @ 2017-08-28 03:04 KeithTt 阅读(5197) 评论(0) 推荐(0) 编辑
摘要: Keepalived 是lvs的扩展项目,因此它们之间具备良好的兼容性。 通过对服务器池对象的健康检查,实现对失效机器/服务的故障隔离; 负载均衡器之间的失败切换failover,通过VRRPv2 stack实现; LVS结合keepalived,实现了3层、4层、5/7层交换的功能; Keepal 阅读全文
posted @ 2017-08-27 16:22 KeithTt 阅读(247) 评论(0) 推荐(0) 编辑
摘要: apt-mirror能够将官方镜像下载到本地,并保证目录结构与其一致,但是不能对镜像仓库进行修改。如果想要修改镜像仓库,需要使用reprepro。 1、安装apt-mirror # aptitude update # aptitude install -y apt-mirror # dpkg -L 阅读全文
posted @ 2017-08-22 11:44 KeithTt 阅读(3978) 评论(0) 推荐(1) 编辑
摘要: yum install 安装一个包,提示 Segmentation fault ,可以确定的是这个源肯定是可用的。 经查询,是 libz 这个库存在多个版本,导致冲突。 解决办法: 将/usr/lib下的libz文件链接到/usr/local/lib下即可 再次安装就正常了。 阅读全文
posted @ 2017-08-14 15:46 KeithTt 阅读(1278) 评论(0) 推荐(0) 编辑