LVS工作模式:

传输层

会话保持:负载均衡
(1) session sticky:同一用户调度固定服务器
Source IP:LVS sh算法(对某一特定服务而言)
Cookie
(2) session replication:每台服务器拥有全部session
session multicast cluster
(3) session server:专门的session服务器
Memcached,Redis

路由表:
接口:本路由器出口
网关:
直接相连:0.0.0.0
间接相连:下一个路由器邻近本路由器的接口的IP

DHCP:
第一步:discover(发现)
第二步:offer
第三步:request
第四步:ack

锁:
with 上下文管理锁
__enter__,__exit__魔术方法
非阻塞锁:用if语句,获取锁则返回True
cond=threading.Condition()
with cond:
   cond.notify_all()
with cond:
cond.wait() 基础知识补充:
__slots__属性
模块化:
import语句:
加载和初始化它,生成模块对象,在自己的作用域内关联模块对象名称加入名词空间并绑定其模块对象,让后引用它。
sys.modules----查看作用域中加载的模块
dir()----------查看当前作用域名词空间
字典----不重复导入
__name__设置为__main__-----顶层代码
异常与错误:
def foo2():
try:#捕获异常
foo1()
except Exception as e:#异常处理
print('foo2 deal')
open('abcde')
finally:#清理工作
print('foo2 fin')
 
class MyException(Exception):
pass try:
raise MyException('My Error')
except MyException as e:#e =MyException('My Error')
    print(e)
魔术方法:
描述器:
自己写一个@classmethod函数------partial函数
class ClassMethod:
def __init__(self,fn):
print(fn)
self.fn = fn def __get__(self, instance, cls):
print(self,instance,cls)
# return self.fn(owner)
return partial(self.fn,cls)
__get__()、__set__()、__delete__()
一个类的类属性是一个描述器,并且是一个数据描述器,对它实例同名属性的操作,相当于类属性。
class A:
def __init__(self):
print('A.init')
self.a1 = 22 def __get__(self, instance, owner):
print('__get__',self.__class__,instance,owner)
return self def __set__(self, instance, value):
print('__set__',self,instance,value) class B:
x = A()
def __init__(self):
print('B.init')
self.x = 100
运行时动态添加属性----反射
编译期已固定-----装饰器,mixin继承
内建函数:getattr,setattr,hasattr
反射魔术方法:__getattr__()、__setattr__()、__delattr__()
def timeit(fn):
@wraps(fn) # a = wraps(fn)(wrapper)----拿到源函数属性
def wrapper(*args,**kwargs):
start = datetime.datetime.now()
ret = fn(*args,**kwargs)
delta = (datetime.datetime.now() - start).total_seconds()
print('{} took {}s'.format(fn.__name__,delta))
return ret
return wrapper
class TimeIt:
"""This is a class"""
def __init__(self,fn):
print('init')
self._fn = fn
# self.__doc__ = self._fn.__doc__
# self.__name__ = self._fn.__name__
wraps(self._fn)(self)----拿到源函数属性,_fn为源,self目标
class Point:
def __init__(self):
print('init') def __enter__(self):
print("enter")
return self
with p as f:-----f为return返回值
set集合先调is 再调==
hash值相同和值是否相等---》去重
hash:
hash冲突
def hash(x):
return x % 3
hash(4)和hash(7)冲突。 python3实现方法链:
class Person:
def name(self, value):
self.name = value
return self def age(self, value):
self.age = value
return self def introduce(self):
print "Hello, my name is", self.name, "and I am", self.age, "years old." person = Person()
person.name("EarlGrey").age(21).introduce()
# => Hello, my name is EarlGrey and I am 21 years old.

那么return self返回的结果是什么呢?

class Foo(object):

def __init__(self):
              self.myattr = 0

def bar(self):
             self.myattr += 1
             return self

f = Foo()
print(type(f.bar()))
输出结果为:

<class '__main__.Foo'>

链表用列表实现的原因:
借有序的列表存放无序的node,无序的node间关系用类的next连接一起实现
在栈上与内建关键字冲突,没关系,加载即消失。但是函数名称与内建函数冲突会产生递归调用。
class Shape:
@property
def area(self):
raise NotImplementedError('基类未实现')------------基类为模板,子类必须实现,不然抛异常。
实例的__dict__字典序列化。类属性不用序列化(每个实例属性不同,变量),类属性一般为常量,可以直接拿到。
书籍推荐:UML,算法导论
实例属性:个性化,多份,每个实例都不同,放在每个实例自己的__dict___中
类属性:抽象,一份,共用,通用(方法), class Pair:
def __init__(self, x, y):
self.x = x
self.y = y def __repr__(self):
return 'Pair({0.x!r}, {0.y!r})'.format(self) def __str__(self):
return '({0.x!s}, {0.y!s})'.format(self)
import  random

class RandomGenerator:
'''
1 解决随机数边界问题
2 随机数生成
3
'''
# @classmethod
def __init__(self,count=10,start=1,stop=100):
self.count = count
self.start = start
self.stop = stop
self.gen = self._generate() def _generate(self):
while True:
yield [random.randint(self.start,self.stop) for _ in range(self.count)] def generate(self,count):
self.count = count
return next(self.gen) rg = RandomGenerator()
gen = rg.generate(3)
print(gen)
面向对象----猴子补丁
大数据领域采集日志(Flume,Scribe)
https://www.cnblogs.com/liujiacai/tag/-----RD文档
https://pythoncaff.com/docs/pymotw----Python 3 标准库实例教程,python开发者中文网
多使用内建函数:过滤:filter,排序:sort,映射:map,dic

names = os.listdir(src)
if ignore is not None:
ignored_names = ignore(src, names)
else:
ignored_names = set()

zip和lambda用法技巧思路:

def wordcount(file='sample.txt'):
      chars='''~!@#$%^&*()_+{}[]|\\/""'=;:.-<>'''
      with opoen(file,encoding='utf-8') as f:
              word_count={}
              for line in f:
                    words line.split()
                   for k,v in zip(words,(1,)*len(words)):
                        k=k.strip(chars)
                        k=k.lower()
                       word_count[k] = word_count.get(k,0)+1
lst= sorted(word_count.items(),key=lambda x:x )

4.SHELL脚本基础

格式要求:首行shebang机制
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl

脚本调试
检测脚本中的语法错误
bash -n /path/to/some_script
调试执行
bash -x /path/to/some_script

bash中变量的种类
根据变量的生效范围等标准划分下面变量类型:
局部变量:生效范围为当前shell进程;对当前shell之外的
其它shell进程,包括当前shell的子shell进程均无效
环境(全局)变量:生效范围为当前shell进程及其子进程
本地变量:生效范围为当前shell进程中某代码片断,通常
指函数
位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调
用通过命令行传递给它的参数
特殊变量:$?, $0, $*, $@, $#,$$

$1, $2, ...:对应第1、第2等参数,shift [n]换位置

测试命令:
• test EXPRESSION
• [ EXPRESSION ]
• [[ EXPRESSION ]]
注意:EXPRESSION前后必须有空白字符

$(seq [start [step]] end)

引用数组中的元素:
数组切片:${ARRAY[@]:offset:number}
offset: 要跳过的元素个数
number: 要取出的元素个数
取偏移量之后的所有元素
${ARRAY[@]:offset}

3.包管理

rpm

yum

yum repository: yum repo,存储了众多rpm包,以及包的相关的元数据
文件(放置于特定目录repodata下)
文件服务器:
http://
https://
ftp://
file://

repo文件格式

yum仓库

程序包编译:

2.Linux基础

判断内外部命令;tpye

查看内部命令:enable

PS1="\[\e[1;33m\][\u@\h \W]\\$\[\e[0m\]"

PATH环境变量设置,外部命令查找机制,搜索路径为PATH

which查看命令路径

whereis hostname:查看外部命令位置,帮助文档路径,相关文件

外部命令第一次在磁盘找,根据PATH变量,放到hash表。第二次执行时,从hash表调出

hash查看哈希表

alias别名:设置常用路径,存放.bashrc,

unalias取消别名,-a取消所有别名

tty显示终端类型命令

lsb_release -a

uname -r

clock -w与系统时间同步,clock -s系统时间与硬件时间同步

/etc/localtime时区文件二进制

修改网卡名称为eth0样式

http://blog.51cto.com/oldboy/1722101

gedit /boot/grub2/grub.cfg

修改行:linux16 后加 net.ifnames=0

reboot

ntpdate IP 同步时间

https://www.cnblogs.com/freeweb/p/5390552.html

vim /etc/ntp.conf

server IP iburst

systemctl restart ntpd.service

/etc/localtime ------时区文件

localectl list-locales---------列出所有语言

localectl  ---所有参数> list-keymaps  set-keymap   set-x11-keymap    list-locales set-locale status

cal -y  日历

timedatectl----时区命令参数>list-timezones  set-ntp set-timezone  set-local-rtc set-time status

shutdown---关机参数>A,B两台机连同一台电脑主机

w命令:显示用户主机,显示正在执行操作命令。

screen命令:远程协助,共享桌面给别人操作,同步桌面。

A:screen -S  help 开启回话,回话名称help

B:screen -ls 查看回话

B:screen -x help  加入回话help

A:Ctrl +a,d----->临时退出

screen -r  help 恢复回话

B:exit 退出回话

echo命令

echo -e '\033[43;31;5mmagedu\033[0m'

引号,括号的用法

https://www.cnblogs.com/liujiacai/p/7828620.html-----引号用法总结

https://www.cnblogs.com/liujiacai/p/7841246.html------括号用法总结

结论:

反引号`` 等于$(),反向单引号,命令调用另一个命令的执行结果时使用

echo {1..10..2}

echo {A..a}

history--命令>存放文件,家目录的.bash_history,这是重启机器后history还有记录的原因

!1026(序号)执行1026序号命令

!-3执行倒数第三条命令

!s执行以s开头最近的一条命令

!?it包含it结尾的最近一条命令

默认系统保留1000个命令,可以修改/etc/profile文件HISTSIZE=1000------这条参数

帮助命令:

whatis----显示命令的简短描述,man –f同样

内部命令:type command

help COMMAND

man bash
外部命令: (1) COMMAND --help
                COMMAND -h
                (2) 使用手册(manual)
                 man COMMAND
                  (3) 信息页
                info COMMAND
               (4) 程序自身的帮助文档
              README
              INSTALL
              ChangeLog
            (5) 程序官方文档
           官方站点:Documentation
          (6) 发行版的官方文档
             (7) Google

umask

特殊权限:

passwd:普通用户能改密码的原理

suid权限:通过拥有suid权限的文件以主用户权限访问任务文件,二进制文件。

sgid权限:一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组

用途解决痛点:通常用于创建一个协作目录,同组人新建文件统一为父目录属组。

粘制位权限Sticky 位:

解决痛点:具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权

在目录设置Sticky 位,只有文件的所有者或root可以删除该文件

sticky 设置在文件上无意义

chmod o+t DIR...

chmod 1644 /DIR

例如:/tmp目录

访问控制列表:

cat -A 查看特殊字符

-E: 显示行结束符$
-n: 对显示出的每一行进行编号
-A:显示所有控制符
-b:非空行编号
-s:压缩连续的空行成一行

tac命令:倒着显示结果

rev命令:倒着显示结果

more

less

cut

paste

head

tail

用上诉所学命令写取IP脚本

文本处理工具:

tr压缩:http://blog.csdn.net/sunnyyoona/article/details/52986893

pate粘贴,横向、纵向合并文件:http://www.xfcodes.com/linuxcmd/mulu/10211.htm

sort

wc

diff

uniq

last:每个用户登入过记录情况

seq

grep

/dev/null----->垃圾回收站

正则表达式

扩展正则表达式

vi

vim

处理文本的工具sed:

行编辑器原理,模式空间

用法:
sed [option]... 'script' inputfile...
常用选项:
-n:不输出模式空间内容到屏幕,即不自动打印
-e: 多点编辑
-f:/ PATH/SCRIPT_FILE : 从指定文件中读取编辑脚本
-r: 支持使用扩展正则表达式
-i.bak: 备份文件并原处编辑
script:
'地址命令'

sed 's/BASH/'''$USER'''/' /etc/passwd

awk介绍

awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出
 有多种版本:New awk(nawk),GNU awk( gawk)
 gawk:模式扫描和处理语言
 基本用法:
awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…
awk [options] 'BEGIN{ action;… } pattern{ action;… } END{ action;… }' file ...
awk 程序通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块,共3部
分组成
program通常是被单引号或双引号中
 选项:
-F 指明输入时用到的字段分隔符
-v var=value: 自定义变量
awk语言
基本格式:awk [options] 'program' file…
program:pattern{action statements;..}
pattern和action:
• pattern部分决定动作语句何时触发及触发事件
BEGIN,END
• action statements对数据进行处理,放在{}内指明
print, printf
分割符、域和记录
• awk执行时,由分隔符分隔的字段(域)标记$1,$2..$n称为
域标识。$0为所有域,注意:和shell中变量$符含义不同
• 文件的每一行称为记录
• 省略action,则默认执行 print $0 的操作
awk工作原理
 第一步:执行BEGIN{action;… }语句块中的语句
 第二步:从文件或标准输入(stdin)读取一行,然后执行
pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一
行重复这个过程,直到文件全部被读取完毕。
 第三步:当读至输入流末尾时,执行END{action;…}语句块
 BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个
可选的语句块,比如变量初始化、打印输出表格的表头等语句通常
可以写在BEGIN语句块中
 END语句块在awk从输入流中读取完所有的行之后即被执行,比如
打印所有行的分析结果这类信息汇总都是在END语句块中完成,它
也是一个可选语句块
 pattern语句块中的通用命令是最重要的部分,也是可选的。如果没
有提供pattern语句块,则默认执行{ print } ,即打印每一个读取到的
行,awk读取的每一行都会执行该语句块
awk
 print格式: print item1, item2, ...
 要点:
• (1) 逗号分隔符
• (2) 输出的各item可以字符串,也可以是数值;当前记录的字段、变量或awk的表达式
• (3) 如省略item,相当于print $0
 示例:
awk '{print "hello,awk"}'
awk –F: '{print}' /etc/passwd
awk –F: ‘{print “wang”}’ /etc/passwd
awk –F: ‘{print $1}’ /etc/passwd
awk –F: ‘{print $0}’ /etc/passwd
awk –F: ‘{print $1”\t”$3}’ /etc/passwd
tail –3 /etc/fstab |awk ‘{print $2,$4}’

begin----相当于表头,与文件没关系,在读取文件之前操作

pattern-----处理文件,一行一行

end-------汇总,

if,for,while语句

break:结束本次循环

continue:跳过这一循环进入下一循环

next:提前结束对本行处理而直接进入下一行处理(awk自身循环)

Linux基础一:

Python全能自动化开发环境软件之pyenv的安装说明

http://www.magedu.com/73921.html

1.分区

MBR分区

主分区:一块硬盘最多四个主分区,一个或多个,可以格式化ntfs,存数据

扩展分区:一块硬盘最多1个扩展分区,可以没有,划分为更小的单元,即逻辑分区

逻辑分区:可以格式化ntfs,存数据

lscpu

lsmem

lsblk

free -h

马哥Python 开发9期的更多相关文章

  1. 入门迅速、应用广泛、月薪两万,马哥Python前景为什么这么好?

    随着Python的技术的流行,Python在为人们带来工作与生活上带来了很多的便捷,因为Python简单,学起来快,也是不少新手程序员入门的首选语言.新手们比较关心的就是Python的发展前景与方向. ...

  2. 马哥Python视频

    链接:https://pan.baidu.com/s/1KMXqdXlaIjZ3OaZ-PUwE9A 密码私聊我

  3. 【可视化大屏教程】用Python开发智慧城市数据分析大屏!

    目录 一.开发背景 二.讲解代码 2.1 大标题+背景图 2.2 各区县交通事故统计图-系列柱形图 2.3 图书馆建设率-水球图 2.4 当年城市空气质量aqi指数-面积图 2.5 近7年人均生产总值 ...

  4. 【疫情动态条形图】用Python开发全球疫情排名动态条形图bar_chart_race

    一.开发背景 你好,我是 @马哥python说 ,这是我用Python开发的全球疫情动态条形图,演示效果: https://www.zhihu.com/zvideo/15603276220259696 ...

  5. 马哥教育python网络班19期 学习目标

    马哥教育python网络班19期 学习目标: (1)按群里的学习进度表,来自行学习,学完时间6个月. (2)学完后,薪资能达到20K+每月.

  6. 学不好Python?我们分析看看正确的学习方法是什么-马哥教育

    提起对Python的印象,除了全能之外恐怕就是简单易学了.很多人都在推荐新手学Python入门,毕竟语法简单.语句简洁,所谓“人生苦短我用Python”绝不是一句空话.不过也不能忽视一点:Python ...

  7. 北京Python开发培训怎么选?

    北京的地理优势和经济优势基本无需多言,作为全国机会最多的地方,吸引了无数的北漂前赴后继.作为中国互联网中心之一,北京有海量Python岗位正在等待大家淘金. 近几年中,Python一直是市场上最受欢迎 ...

  8. visual studio 2015 搭建python开发环境,python入门到精通[三]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo, ...

  9. Windows搭建python开发环境,python入门到精通[一]

    从大学开始玩python到现在参加工作,已经有5年了,现在的公司是一家.net的公司用到python的比较少,最近公司有新项目需要用到python,领导希望我来跟其他同事training,就有了这篇博 ...

随机推荐

  1. day15(mysql之零碎知识)

    数据完整性 实体完整性 实体: 表中一行(一行记录)代替一个实体 实体完整性的作用: 标识每一行数据不重复. 约束类型: 主键约束, 唯一约束,自动增长列. 主键约束: 标识该列唯一,非空. 注:   ...

  2. Activity生命流程

    做Android的同学说起 Activity,那绝对是熟悉的不能再熟悉了,但是越熟悉的东西往往越陌生.我们真的了解她吗?她是我们所认识的那样吗?或许是,或许不是!了解与否, 让我们往下看.首先借And ...

  3. SPFA穿越虫洞——负权回路得判断

    poj3259 题目大意:穿越虫洞可以回到过去(时间--)所以能不能让时间倒流呢,就是判断有没有负权回路这次尝试用SPFA算法,也可以复习一下链式前向星 准备工作,队列q,spfa算法得有点就在于这个 ...

  4. 重复 桂林电子科技大学第三届ACM程序设计竞赛

    题目链接:https://ac.nowcoder.com/acm/contest/558/B import java.util.HashSet; import java.util.Scanner; p ...

  5. 同一台服务器配置多个tomcat服务的方法

    要在同一台服务器上配置多个tomcat服务,需要解决以下几个问题 (1) 不同的tomcat启动和关闭监听不同的端口 (2) 不同的tomcat的启动文件startup.sh 中要指定各自的CATAL ...

  6. Android-Java-Thread start run的区别

    Thread start(Thread子类.start(); 这样属于开启新的线程,不属于方法调用) Thread.currentThread().getName(); 获取当前正在运行的线程执行路径 ...

  7. Configure Pi as simulation hardware for Simulink

    1. Only version not older than R2013 supports Raspberry Pi. First, download support package in Matla ...

  8. oracle 11g Enterprise Manager配置失败

    Enterprise Manager以下简称em,Database Configuration Assistant简称DBCA. 病症 监听程序未启动或数据库服务未注册到该监听程序.启动该监听程序并注 ...

  9. LinkServer--在Job中使用Linkserver注意事项

    如果要使用job来调用link server的话,不能使用作业步骤属性高级选项中”作为以下用户运行“来以本地登录用户模拟远程用户访问远程服务器.会报”无法建立安全上下文“的错误. 将Job中代码封装到 ...

  10. day 59 pymysql

    PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. PYmysql安装 pip install pymys ...