3月30日课后总结

Posted juzixiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3月30日课后总结相关的知识,希望对你有一定的参考价值。

3/30课后总结

线程理论

"""
	进程只是一个过程,不会实际做事,做事的是线程。我们需要开启一个进程在进程里面开启线程,进程里至少有一个线程,可以有多个线程
"""
# 进程是资源分配的基本单位,线程是CPU执行的最小单位
# 当进程中只有一个线程的时候,这个线程叫主线程这个线程可以开启多个子线程
# 操作系统来调度进程和线程,程序员级别是不能调度他们的,程序员能调度的是协程(用户态)
# 资源占用:进程   >>> 线程  >>> 协程
# 在python中,我们一般开多进程,而不开多线程,在其他语言中,都是选择开多线程

如何开启线程(线程类)

from threading import Thread

def test():
    print(1)
# 与进程用法差不多
if __name__ == \'__main__\':
    t = Thread(target=test)
    t.start()  # 开线程,在Windows中可以不写main但是尽量写一下

守护线程

from threading import Thread
import time

def test():
    time.sleep(3)
    print(1)

if __name__ == \'__main__\':
    t = Thread(target=test)
    t.daemon = True  # 当daemon为True时,主进程结束子进程就结束
    t.start()
    print(123)

如何开启多线程

from threading import Thread  # 与开启多进程类似,只是消耗资源更少

def test(i):
    print(f\'这是第i次\')

if __name__ == \'__main__\':
    l = []
    for i in range(10):
        t = Thread(target=test,args=(i,))
        t.start()
        l.append(t)
    for j in l:
        j.join()
    print(\'end\')

threading提供的方法

import threading
from threading import Thread
import time

def test():
    # time.sleep(3)
    print(threading.currentThread())  # 获取当前线程的对象
    print(threading.currentThread().getName())  # 获取当前线程的名字
    print(1)

if __name__ == \'__main__\':
    t = Thread(target=test)
    # t.daemon = True
    t.start()
    # t.join()  # 在子线程运行完毕后执行主线程
    # print(t.is_alive())  # 查看线程是否存活
    # print(t.name)  # 查看子线程名
    # t.setName(\'123\')  # 给子线程改名
    # print(t.getName())  # 查看子线程名
    print(threading.currentThread())  # 获取当前线程的对象
    print(threading.currentThread().getName())  # 获取当前线程的名字
    print(123)

进程和线程的比较

1. 进程的开销要远远大于线程的开销
2. 线程之间的数据是相互通信的,严格的来说:同一个进程下的所有线程数据共享
3. 不同进程下的线程之间数据是不共享的---->如何让不同进程下的线程之间数据共享--->其实就是进程间通信

GIL全局解释器锁

Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行
# 虽然 Python 解释器中可以“运行”多个线程,但在任意时刻只有一个线程在解释器中运行。
\'\'\'
	对Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。
\'\'\'

1. python代码运行在解释器之上,有解释器来翻译执行
2. python解释器的种类有哪些?
	CPython  IPython PyPy Jython
3. GIL锁存在于CPython解释器中
4. 市面上目前绝大多数(95%)都使用的是CPython解释器
5. 起一个垃圾回收线程,在起一个正常执行代码的线程,当垃圾回收线程还没回收完毕,其他线程有可能会抢夺资源,这种情况在python设计之初就不允许的
6. python在设计之处,就在python解释器之上加了一把锁(GIL锁),加这个锁的目的是:同一时刻只能有一个线程执行,不能同时有多个线程执行,如果开了多个线程,那么,线程要想有执行权限,必须先拿到这把锁(GIL锁)
"""只需要记住:同一时刻多个线程只能有一个线程在运行,其他线程都处于等待状态"""


#########################理解记忆部分########################################
1. python有GIL锁的原因,同一个进程下多个线程实际上同一时刻,只有一个线程在执行
2. 只有在python上开进程用的多,其他语言一般不开多进程,只开多线程就够了
3. cpython解释器开多线程不能利用多核优势,只有开多进程才能利用多核优势,其他语言不存在这个问题
4. 8核cpu电脑,充分利用起我这个8核,至少起8个线程,8条线程全是计算--->计算机cpu使用率是100%,
5. 如果不存在GIL锁,一个进程下,开启8个线程,它就能够充分利用cpu资源,跑满cpu
6. cpython解释器中好多代码,模块都是基于GIL锁机制写起来的,改不了了---》我们不能用8个核,但我现在只能用1核,----》开启多进程---》每个进程下开启的线程,可以被多个cpu调度执行
7. cpython解释器:io密集型使用多线程,计算密集型使用多进程
	# -io密集型,遇到io操作会切换cpu,假设你开了8个线程,8个线程都有io操作---》io操作不消耗cpu---》一段时间内看上去,其实8个线程都执行了, 选多线程好一些
   
# -计算密集型,消耗cpu,如果开了8个线程,第一个线程会一直占着cpu,而不会调度到其他线程执行,其他7个线程根本没执行,所以我们开8个进程,每个进程有一个线程,8个进程下的线程会被8个cpu执行,从而效率高
\'\'\'计算密集型选多进程好一些,在其他语言中,都是选择多线程,而不选择多进程.\'\'\'

互斥锁

from threading import Thread,Lock
import time

n = 10

def test(lock):
    lock.acquire()
    global n
    temp = n
    time.sleep(1)
    n=temp-1
    lock.release()

if __name__ == \'__main__\':
    l = []
    lock = Lock()
    for i in range(10):
        t = Thread(target=test,args=(lock,))
        t.start()
        l.append(t)
    for j in l:
        j.join()
    print(n)

1211日课后shell总结

 

1211shell

 

作者:高波

归档:学习笔记

2017年12月11日13:10:56

快捷键:

Ctrl + 1 标题1

Ctrl + 2 标题2

Ctrl + 3 标题3

Ctrl + 4 实例

Ctrl + 5 程序代码

Ctrl + 6 正文

格式说明:

蓝色字体:注释

黄色背景:重要

绿色背景:注意

 

1.1     I

第一章    1

1.1.1 namp -sP 10.0.0.0/24    1

1.1.2 time -c 1 -W 10.0.0.6    1

1.1.3 shell的并发    1

1.1.4 一个小例子,仿web容器.    2

1.1.5 nc 命令总结    2

1.1.6 while循环1加到100.    3

1.1.7 iptables 参数-F 清除规则 -L 列出所有规则.    3

1.1.8 网站入侵检测.    3

1.1.9 查看进程所在的文件的目录. netstat找到进程 ll /proc/进程号/exe    3

1.1.10 防止脚本中断的办法.screen的介绍.    4

1.1.11 while 循环之读取文件    4

1.1.12 获取文章的每行 每个单词 每个字符    5

1.1.13 DOS攻击耗光宽带或者web连接数等拼资源.    6

1.1.14 ELK    6

1.1.15 WAF    6

1.1.16 IDS是英文"Intrusion Detection Systems"的缩写,中文意思是"入侵检测系统"。    6

 

 

 

 

 

 

第一章

  1. namp -sP 10.0.0.0/24

入侵者使用Nmap扫描整个网络寻找目标。通过使用" -sP"命令,进行ping扫描。缺省情况下,Nmap给每个扫描到的主机发送一个ICMP echo和一个TCP ACK, 主机对任何一种的响应都会被Nmap得到。 
举例:扫描192.168.7.0网络: 
# nmap -sP 192.168.7.0/24 

 

Sp " 选项告诉Nmap仅仅进行ping扫描。 当你有一组IP地址来扫描时,而且你不知道哪一个是可达的,这时这个选项会很有用。

有一系列和安全扫描相关的命令参数

  1. time -c 1 -W 10.0.0.6

-W timeout

-c 次数

  1. shell的并发

在shell中一般的并发思路是让执行的程序在后台原型,然后你只需要获取结果就可以.

技术分享图片

 

缺点是会打开很多进程.进程多系统会卡死.没有线程级别.不容易实现.

 

 

并行后台,控制不了顺序结果输出.

消耗资源过多.

同时开254个进程

没有底部控制并发.

shell文件描述符,控制并发.

开的进程多,线程级别.

 

 

  1. 一个小例子,仿web容器.

[[email protected] server]# cat web.sh

#!/bin/bash

while true

do

nc -l 80 < aa.html

done

 

nc 10.0.0.17 80

ok

 

  1. nc 命令总结

常用功能:

  1. 端口扫描


				nc -v -w 2
							192.168.2.34 -z 21-24
														

 

  1. 简单聊天工具

 

  1. 操作memcache

 

  1. 拷贝文件

192.168.2.33拷贝文件到192.168.2.34

192.168.2.34上: nc -l 1234 > test.txt

192.168.2.33上: nc 192.168.2.34 < test.txt

 

 

  1. while循环1加到100.

  1. awk ‘BEGIN{for (i=0;i<100;i++) sum+=i;print sum}‘

1加到100

技术分享图片

  1. iptables 参数-F 清除规则 -L 列出所有规则.

 

 

  1. 网站入侵检测.

  1. inotify检查网站的目录下面的修改删除事件
  2. MD5检查. md5sum -C

    被入侵的原因有:

    权限没有设置好777的问题

    root密码过于简单

    web服务等的启动没有使用专门的用户使用了高权限的root用户.

 

  1. 查看进程所在的文件的目录. netstat找到进程 ll /proc/进程号/exe

[[email protected] ~]# netstat -tlnp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1228/sshd

tcp6 0 0 :::8080 :::* LISTEN 1272/java

tcp6 0 0 :::22 :::* LISTEN 1228/sshd

[[email protected] 1272]# ll /proc/1272/exe

lrwxrwxrwx 1 jenkins jenkins 0 Dec 11 08:38 /proc/1272/exe -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre/bin/java

 

[[email protected] 1272]# ll /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre/bin/java

-rwxr-xr-x 1 root root 7304 Oct 20 22:27 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre/bin/java

[[email protected] 1272]# ll /usr/bin/java

lrwxrwxrwx 1 root root 22 Dec 1 08:59 /usr/bin/java -> /etc/alternatives/java

 

 

  1. 防止脚本中断的办法.screen的介绍.

技术分享图片

  1. 第一步下载screen. yum insatll screen -y
  2. 第二步输入命令screen
  3. 第三步执行自己的命令
  4. 第四步ctrl+a+d 后台执行后完毕.
  5. 查看screen -ls 看见一个进程号的文件. screen -r 进程号 进入进程到前台.

 

  1. while 循环之读取文件

[[email protected] ~]# while read i;do echo "$i ===";done <aa.txt

fjhjnkjfdjkkjf ===

fjhjn43kjfdj343454kkjf ===

fjhjnkj76fdjkkjf ===

技术分享图片

中文在shell是16进制数字解析.

windows是GBK编码

  1. 获取文章的每行 每个单词 每个字符

技术分享图片

 

[[email protected] scripts]# cat 技术分享图片技术分享图片readline.sh 
#!/bin/bash
n=1
while read i
  do
   echo "
${n} $i"
   m=1
   for x in $i
     do
       echo "
${m}个单词 $x"
       echo $x|grep -o . 
       ((m++))
   done
   ((n++))
done< $1

 

 

  1. DOS攻击耗光宽带或者web连接数等拼资源.

故意攻击网络协议实现的缺陷或者消耗目标对象的宽带资源.攻击对象包括宽带,文件系统容量或者开放的进程或者允许的连接.

DDOS攻击.分布式平资源.CC代理服务器分布式拼资源.

  1. ELK

 

 

  1. WAF

 

  1. IDS是英文"Intrusion Detection Systems"的缩写,中文意思是"入侵检测系统"。

入侵检测系统

linux的杀毒软件

 

 

 

 

 

 

 

 

 

 

 

    



以上是关于3月30日课后总结的主要内容,如果未能解决你的问题,请参考以下文章

2021春季班招生-未来之光STEAM教育

shell课后总结

3月7日信息系统集成第一课的课后作业

10月3日总结

2月29日课后作业

2017年3月16日2组班会总结