linux文本三剑客
sed课堂总结
-p -n同时使用:=相应的匹配显示出来
-g :全局替换
-e:多次替换
“1,2p"=1-2行
”2s/b“=第二行
”2d“=删除第二行
“3c 12\n4”=替换第三行的内容,换成 12 (换行) 4
awk变量
效率比shell高十倍 内置的脚本
awk -v Fs=":”
‘{print $1,$3}'/etc/password
$1:第一列
$NF:文件列的末尾
awk -F=‘{print ARGC}’ /etc/password
可以写成ARGC【0】 ARGC【1】
这是打印出来的参数
两种方式书写
awk -F= {print $1}’ /etc/password
awk -v Fs=":” {print $1}’ /etc/password
%s:显示字符串
%u:无符号整数
%20s:表示20个字符串的格子,保证文本的书写好看(不够的空格补齐)
df -h (查看磁盘使用情况)
df -h | awk ’ /^\ /dev/ ’ =找dev开头的 ^ ( ^的转义)
df -h | awk ’ /^\ /dev/ ’ ‘{print $(NF-1}’=找dev开头的倒数第二列
awk 可以支持while 循环
awk -F=‘{i=1;while(i<=NF }
{ if
(length $i)>=6 {print $i,length( $i)};
i++}’ /etc/password
i的范围从1到列的结尾,当i>=6时候,打印i的长度,while一直循环
去重 awk
awk ’ ! arr[ $0]++’ demo
$0 放在数组arr里取反,又进行自增
原理:0取反 从假的变真的,自增
举例:文本 aa bb aa 123 123
去重后:aa bb 123
过程 :arr数组需要有值,aa无值(现在为空值)。0为假,取反后为1,aa存上了。
++往后走,bb也为空值,0为假,取反后为1,bb存上了。
++往后走,aa之前有值了 为1,取反为0,这个aa取不上值,++往后走。
123无值(现在为空值)。0为假,取反后为1,123存上了。
++往后走,123之前有值了 为1,取反为0,这个aa取不上值,
++往后走,没有了结束。
统计日志
查看日志格式:ls-al
cat access_log | awk ‘{print $1}’ | sort | uniq -c | sort -nr
打印最近访问的IP uniq -c 去重 sort -nr 从大到小排序
$4=时间 $5=访问的网址
平台被入侵 进行日志分析溯源
查看TCP状态也很重要
某个IP在某个时间段内多次的访问的。有很多注入语句。打印了这个网址的参数。
注意:月份!要么把数字换成字母,要么把字母换数字。时间一定要统一。
python 总结
包是文件夹,包里的模块是文件名
if__name__ ==“__name __”
1.当作包引用,这条if语句不执行。name=具体包名字
2.当入口文件执行时候,这条if语句执行。name=main
用类调用 用对象调用
python 定义类用class
比如 class Student (object)
默认object,要是有父类,就填父类
构造函数 init(self):
类实列化的一瞬间,构造函数就运行了
构造函数赋予属性(可以干什么。重量大学尺寸长相颜色 哪个班 可以区分不同人)=类定义不同对象
不要轻易显示调用,会变成普通函数
arr=Array1() 进行实例化
a=arr.init()进行构造函数
print(a)
print(type(a))
显示调用构造函数没有返回值,没有return ,默认返回None
data=‘rang02’
size=2
def__init__(self,data,size):实列化把属性传给对象,要在对象里保存
self.data=data
self.size=size这两个self是保存属性的
print(self.data)
print(self.size)
sum是自己带的函数,print(sum)打印的是自己的函数
定义类方法 装饰器
1.classmethod 用def class_arr(cls)
可以自由调用类的属性
2.staticmethod 静态方法 def static.func1()
脱离类和对象,自己单独一个
self.class.sum_total
实例化可以操作类变量,对象中可以调用类的属性,最好用类方法调用类变量
python没有这三个修饰符(php java有)
protected:被子类调用 提供get set接口
private:私有,只给get set这俩接口修改。调用方法getsize
public
python有__(俩下划线)=私有属性
原本 Array. 访问私有变量 _Array6__price
添加了_和类名
dict 可赋值可访问(错)
其实不是赋值和访问,是重新创建的
子类传父类:直接调用父类方法 init(self, )
调用父类构造函数 super( ).init(a,b)
用super关键字
闭包了,把此时的环境变量状态记录了ab自己的属性
js闭包:不能引用if循环变量
python闭包:定义函数+环境变量(在函数外部)
def demo1();
a=3 环境变量
def demo2(x):
return a *x
return demo2
a=10(全局变量。上面闭包,不生效)
d=demo1() -----(其实等于demo)
print(d.closure)
print(d.closure[0].cell_contents)
cell_contents:环境变量的值
closure:停闭
全局变量可以记录上一次的状态global total
列表生成式
[ i for i in range(1,20)]
[i * i for i in range(1,20)]
生成器generator(惰性) :将列表[ ]改成()。每次调用next,next(g)==计算出g的下一个值。
也经常用for循环
ll=[i * i for i in range(10)]
for i in ll:
print(i)
输出 0,1,4,9
迭代器和可迭代对象
被for循环的数据都为可迭代对象
可以被next调用,都为迭代器
1.字符串‘ ’
2.list
3.tuple(元组)
4.dict(字典)a={‘name’:‘ G’}= a={‘key’:‘ value’}
5.set(去重) a=set([0,1,2,3])里面要放数组
把可迭代对象变为迭代器用itre next
函数编程
list(rang 100) 生成1-99
map可以接受一个函数做为参数 ll=map(lambda x:x*x,list(rang 100) )
lambda :传入的参数值
reduce:上一次的结算结果作为下一次的参数值。比如1+2+3+…100用reduce
filter过滤函数:把if值取出了
strip()可以把空去掉
eval.
$_POST [‘1’]
1=aaa
输出:aaa
$_POST[’1’] ( $_POST[‘2’])
name=1 value=eval
$_POST[’1’]换成eval,会利用失败
eval不能被可变函数调用,是php自带函数
eval(只能字符串)
assert(只能表达式或者函数)