Other

Dockerfile 拉取ubuntu:20.04镜像并配置python3.8的环境

一. 配置Dockerfile文件 FROM ubuntu:20.04 # 获取 ubuntu:20.04镜像 ENV DEBIAN_FRONTEND=noninteractive # 环境变量 ENV LANG C.UTF-8 # 环境变量 RUN sed -i 's@http://archive.ubuntu.com/ubuntu/@http://mirrors.aliyun.com/ubuntu/@g' /etc/apt/sources.list # 更换源 RUN apt-get update -qq # apt-get update && install operation RUN mkdir -p /root/directory # 创建文件目录 WORKDIR /root/directory # 指定为工作目录 COPY requirements.txt requirements.txt # 拷贝 requirements.txt COPY . /root/directory # 拷贝当前目录下的所有文件到 /root/directory 目录 RUN apt-get clean && \ apt-get update && \ apt-get install -y libmysqlclient-dev tzdata \ python3 python3-dev python3-pip libpcre3 libpcre3-dev uwsgi-plugin-python3\ && apt-get clean \ && apt-get autoclean \ && ln -sf /usr/bin/pip3 /usr/bin/pip && ln -sf /usr/bin/python3 /usr/bin/python \ && pip install -r requirements.

windows防火墙如何允许特定的出站

windows防火墙默认阻止优先级高于允许,所以想拒绝所有,仅仅允许个别就很难设置到位  可以按如下操作进行,首先要按防火墙的公用配置文件里设置,把出站设置为阻止    这个时间再在出站规则里放通你想放通的个别策略就可以了, 但是如果你如果在出站规则里禁止所有联网,那就所有都会被禁止,因为规则里禁止优先级最高  

usbip:(二)从linux内核了解usb

一、前言  1、首先了解一下EHCI、UHCI和OHCI。  从硬件上来说,usb 设备要想工作,除了外设本身,必须依赖于 usb host controller.一般来说,一个电脑里有一个 usb host controller就可以了,她就可以控制很多个设备了,比如 u 盘,比如 usb 键盘,比如 usb 鼠标.所 有 的外设都把自己的请求提交给usb host controller.然后让 usb host controller 统一来调度. 现在一般的USB桥接器模块有两种类型,UHCI和OHCI。在决定插入那一个桥接器模块时,可以察看/proc/pci文件来决定。一般而言,UHCI类型的桥接器它的插入模块是uhci或usb-uhci(由内核版本决定);而对于OHCI类型的桥接器它的插入模块是ohci或usb-ohci。  uhci(universal host controller interface): Intel用在自家芯片组上的usb 1.1主控制器(host controller)的硬件实例 ehci(enhanced host controller interface): usb 2.0的主控制器标准接口。 ohci(open host controller inferface):一个不仅仅是usb用的主控制器接口标准。主要是遵循csr (configuration space register)标准。是其他厂商在设计usb host controller时遵循的标准,如via, nec, ali, 包括nvidia等等。 ehci是满足usb 2.0 specification里面对usb host controller (high speed)的要求的硬件设计。   就是主机控制器的接口。从硬件上来说,USB 设备要想工作,除了外设本身,必须还有一个 USB 主机控制器。一般来说,一个电脑里有一个 USB 主机控制器就可以了,它就可以控制很多个设备了,比如 U 盘,USB 键盘,USB 鼠标。所有的外设都把自己的请求提交给 USB主机控制器。然后让 USB 主机控制器统一来调度。而设备怎么连到主机控制器上?哎,这就是我们故事的主角,Hub,“乳名”叫做集线器。

内存池技术讲解

内存池化 1、池化技术 池化技术是一种常见的提高资源利用率的优化技巧。池化技术先向系统申请程序经常需要使用的核心资源,将这些资源置于“池”中。常见的池化技术包括内存池、线程池、连接池等。 内存池 (1)未使用内存池情况下,频繁通过new/delete、malloc/free 向系统申请/释放内存,必然会导致大量的外碎片出现,增加系统开销,降低程序和操作系统的性能。【内碎片无法避免,只能尽可能地降低】 (2)内存池原理:先向系统申请分配一大块内存作为内存池留作备用,若申请内存,则从池中取出一块;若释放内存,将内存放回内存池,并且尽量与周边的空闲内存块合并。若内存池不够时,则向操作系统申请更大的内存池。

C语言结构体的内存分配

一、结构体内存分配原则 原则一:结构体中元素按照定义顺序存放到内存中,但并不是紧密排列。从结构体存储的首地址开始 ,每一个元素存入内存中时,它都会认为内存是以自己的宽度来划分空间的,因此元素存放的位置一定会在自己大小的整数倍上开始。 原则二: 在原则一的基础上,检查计算出的存储单元是否为所有元素中最宽的元素长度的整数倍。若是,则结束;否则,将其补齐为它的整数倍。 注意:如果有充分的理由决定不对结构的成员进行重排,以减少因对齐带来的空间损失。列如,为了提高程序的可维护性和可读性,将相关的结构成员存储在一起。应该根据结构成员的边界需要进行重排,减少因边界对齐而造成的内存损失。 二、结构体长度 sizeof操作能够得出一个结构的整体长度,包括因边界对齐而跳过的那些字节。 offsetof能查找指定成员的实际位置offsetof(type, member); // type 结构体类型 // member 结构体成员 三、测试程序 #include <stdio.h> #include <stddef.h> int main(int argc, char *argv[]) { struct struct_test1 { char a; int b; char c; }; struct struct_test2 { int a; char b; char c; }; printf(The length of structure test1 is: %ld \r\n, sizeof(struct struct_test1) ); printf(Location of parameter B: %ld \r\n, offsetof(struct struct_test1, c) ); printf(The length of structure test1 is: %ld \r\n, sizeof(struct struct_test2) ); printf(Location of parameter B: %ld \r\n, offsetof(struct struct_test2, c) ); return 0; } 运行结果: 从运行结果可以得出 结构成员排序会影响内存的大小。

window10 powershell ssh登录提示Bad owner or permissions

问题描述 Windows Terminal 连接 ssh 提示 Bad owner or permissions on C:\\Users\\username/.ssh/config 问题本因:之前电脑是用域登录,后来切换到本地账户登录,导致权限继承出现了问题。 问题解决 右击config,属性→安全→高级→更改->高级->立即查找->选择当前登录的账户->确定即可 ssh登录建议修改如下文件: ~/.ssh config id_rsa known_hosts link https://www.icode9.com/content-4-1290528.html

Cipher 加解密window正常linux下报错

Exception in thread main javax.crypto.BadPaddingException: Given final block not properly padded at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) at com.sun.crypto.provider.AESCipher.engineDoFinal(DashoA13*..) at javax.crypto.Cipher.doFinal(DashoA13*.. 解决: SecureRandom 实现完全随操作系统本身的內部状态,除非调用方在调用 getInstance 方法之后又调用了 setSeed 方法;该实现在 windows 上每次生成的 key 都相同,但是在 solaris 或部分 linux 系统上则不同。  //防止linux下 随机生成key SecureRandom secureRandom = SecureRandom.getInstance(SHA1PRNG ); secureRandom.setSeed(keycontent.getBytes()); // 根据密钥初始化密钥生成器 kgen.init(keyNum, secureRandom); 参考:https://blog.csdn.net/zhangyucen/article/details/44807559

ubuntu+nginx+php环境搭建

ubuntu+nginx+php环境搭建 就这么简单个事,百度出来的乱七八糟,各种方法混在一起。其实就几个命令的事,改个配置的事 apt install nginx apt install php-fpm 安装完成后,编辑nginx配置文件 /etc/nginx/sites-available/default location ~ \.php$ { # include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; include fastcgi_params; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; }  编辑/etc/nginx/fastcgi_params 最后两行加入  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name;  启动服务 service php7.4-fpm start servicer nginx start 完事

nginxWebUI可视化配置,nginx 网页配置工具

功能说明 nginxWebUI 是一款图形化管理 nginx 配置得工具,可以使用网页来快速配置 nginx 的各项功能,包括 http 协议转发,tcp 协议转发,反向代理,负载均衡,静态 html 服务器,ssl 证书自动申请、续签、配置等,配置好后可一建生成 nginx.conf 文件,同时可控制 nginx 使用此文件进行启动与重载,完成对 nginx 的图形化控制闭环. nginxWebUI 也可管理多个 nginx 服务器集群,随时一键切换到对应服务器上进行 nginx 配置,也可以一键将某台服务器配置同步到其他服务器,方便集群管理. nginx 本身功能复杂,nginxWebUI 并不能涵盖 nginx 所有功能,但能覆盖 nginx 日常 90% 的功能使用配置,平台没有涵盖到的 nginx 配置项,可以使用自定义参数模板,在 conf 文件中生成配置独特的参数。 部署此项目后,配置 nginx 再也不用上网各种搜索配置代码,再也不用手动申请和配置 ssl 证书,只需要在本项目中进行增删改查就可方便的配置和启动 nginx。 技术说明 本项目是基于 solon 的 web 系统,数据库使用 h2, 因此服务器上不需要安装任何数据库 本系统通过 Let's encrypt 申请证书,使用 acme.sh 脚本进行自动化申请和续签,开启续签的证书将在每天凌晨 2 点进行续签,只有超过 50 天的证书才会进行续签。只支持在 linux 下签发证书. 添加 tcp/ip 转发配置支持时,一些低版本的 nginx 可能需要重新编译,通过添加–with-stream 参数指定安装 stream 模块才能使用,但在 ubuntu 18.

内存分配

kmalloc() 除非被阻塞,函数运行的很快; 不会对所申请的内存空间清零,也就是说仍然保持原有数据; 分配的区域在物理内存是连续的; void *kmalloc(size_t size, int flag); flag有很多可选符合,常用的有GFP_KERENL,GFP_ATOMIC GFP_KERNEL:用于内核内存的通常分配方法,可能会睡眠; GFP_ATOMIC:用于中断处理例程或其他运行于进程上下文之外的代码中分配内存,不会休眠; 后备高速缓存 linux内核的高速缓存管理有时候称为“slab分配器”。slab分配器实现的高速缓存具有kmem_cache_t类型, 可通过调用kmem_cache_creat创建:  keme_cache_t *kmem_cache_creat(const char *name, size_t size, size_t offset, unsigned long flags,  void (*constructor)(), void (*destructor)());