ch5 虚拟内存

Objective 覆盖技术 交换技术 虚拟内存 目标 程序局部性原理 基本概念 基本特征 虚拟页式内存管理 覆盖技术 overlay 在固定分区中的主要遇到的问题是进程的大小受到分区的最大大小的限制,这将意味着一个进程将不能跨越另一个进程。为了解决这个问题,早期使用了称为覆盖(overlay) 的解决方案,覆盖技术是为了在较小的可用内存中运行较大的程序。常用于多道程序系统,与分区存储管理配合使用。这样并非所有模块都需要同时存在于内存中,实现了运行大于物理内存大小的程序的技术。 覆盖技术的原理: 将程序按照执行逻辑拆分为多个功能上相对独立的部分(overlays), 那些不会同时执行的模块共享同一块内存区域, 按时间先后来运行(分时)。 必要部分,常驻内存的代码和数据,负责管理,在某个时间片将相应的程序和数据导入或导出内存。 可选部分,在其他程序模块中实现, 平时存放在外存中, 在需要用到时才装入内存; 不存在调用关系的模块不必同时装入到内存, 从而可以相互覆盖, 即这些模块共用一个分区. 覆盖技术实例 覆盖技术说明: 有一个程序,分位A B C D E F G 六个模块,每一个模块占用了一定空间,程序的覆盖树如图所示。 问:当满足加载(和运行)该程序所需物理内存中的大小是多少? 使用覆盖技术,实际上不需要将整个程序放在主内存中。只需要在对应时间片时所需要的部分即可,其逻辑调用关系树可以分为:Root-A-D或者 Root-A-E ; Root-B-F 或 Root-C-G 部分。 Root是常驻内存,因为其需要调用A B C D E F G 六个模块,占用2KB 如图:加载与运行改程序所需的物理内存大小是多少? ​ (a) 12 KB ​ (b) 14 KB ​ (c) 10 KB ​ (d) 8 KB 答:由公式可得,最大运行层所需的物理内存为14KB,即拥有 14KB 大小的分区就可以运行上图任意一个分区...

ch4 操作内存管理 - 非连续内存分配

overview Q1: 为什么需要非连续内存分配 连续内存管理 (contiguous memory allocation), 即 : 操作系统加载到内存以及程序加载到内存中时, 分配一块连续的内存块. 但这种方式会出现碎片问题,而非连续内存分配(Non-contiguous memory allocation )可以有效的减少碎片(Fragmentation)的出现。 Q2: 主要的非连续内存分配的管理方法 分段(Segmentation) 分页(Paging) 页表 (Page Table) 1.非连续内存分配的必要性 连续内存管理的缺陷: 内存利用率较低(memory wastage),在程序运行时分配的内存是增长的,但在进程使用为达到分配大小时,分配的块并未使用,并且也不能给其他进程使用,造成了内存的浪费。 分配给一个程序的物理内存必须是连续的。 碎片化问题 不灵活(inflexibility),当进程或文件使用的内存超出预期时(即:超出分配的内存块大小),将停止并抛出异常,例如:No disk space。 非连续内存分配的优点: 一个程序的物理地址空间是非连续的 更好的内存利用和管理,(减少了内存浪费) 允许共享代码与数据(共享库等…) 支持动态加载和动态链接 非连续内存分配的缺点: 建立虚拟地址和物理地址的转换难度大 软件方案 硬件方案(采用硬件方案) : 分段 / 分页 分段(segmentation) 首先 segmentation mechanism需要考虑的问题: 程序的分段地址空间 分段寻址方案 什么是segmentation 段(segmentation)是一个逻辑单元 (logical unit),例如: 主程序 main program 程序(主要是指功能的代码,如一段函数) procedure 函数 function 方法 method 对象 object 局部变量和全局变量 local variables, global variables 公共块 common block 堆 stack 符号表 symbol table 数组 arrays [segmentation的逻辑视图] 可以看到左边是逻辑地址,右边是不连续的物理地址,中间有一个映射机制将两边建立了一个关联关系(ST Segment Table)。通过映射机制将不同的块(如stack,function....

ch3 操作内存管理 - 连续内存分配

一 计算机体系结构及内存分层体系 1.计算机硬件体系结构大致分为 CPU,完成程序的执行控制 主存 (main memory),放置程序代码和数据 I/O(外)设备,配合程序工作。 2.内存分层体系(金字塔结构) 什么是内存结构:CPU所访问的指令和数据在什么地方。 第一类:位于CPU内部,操作操作系统无法直接进行管理的,寄存器,cache;特点,速度快,容量小 第二类:主存或物理内存,主要用来放置操作系统本身及要运行的代码;其特点是,容量比cache要大很多,单速度交于cache要慢一些。 第三类:磁盘,永久保存的数据及代码,当对于主存要慢,容量比主存大很多。 操作系统的作用可以将数据访问的速度(cache与内存)与存储的大小(硬盘)很好的融合在一起 3.OS管理内存时需要完成的目标 ① 抽象:逻辑地址空间(将物理内存,外设等抽象成逻辑地址空间,只需要访问对应地址空间) ② 保护(独立):操作系统完成隔离机制实现,独立地址空间(每段程序执行时,不受其他程序的影响) ③ 共享:进程间安全,可靠,有效,进行数据传递,访问相同的内存。 ④ 虚拟化:更多的地址空间(利用磁盘的空间) 4.需要完成在操作系统中管理内存的不同方法 操作系统层面 程序重定位 分段 分页 虚拟内存 按需分页虚拟内存 硬件层面 必须知道内存架构 MMU(内存管理单元):处理CPU的内存访问请求 二 地址空间&地址生成 地址空间的定义 地址生成器 地址安全检查 1.内存地址的定义 ① 物理内存地址:硬件支持的地址空间,如主存(内存)和硬盘,由硬件完成管理和控制 ② 逻辑内存地址:一个程序运行时所需要的内存范围。 两者间的关系:逻辑地址空间最终是一个存在的物理地址空间,两者间的映射关系是由操作系统来管理的 2.逻辑地址生成过程(把代码转化为计算机能理解语言) 一段代码运行→编译→汇编语言→机器语言→产生链接文件→将硬盘中程序载入到内存当中运行(完成逻辑地址的分配) 如C中变量的名字,函数的位置,为逻辑地址。 3.物理地址生成(逻辑地址对应的物理地址的过程) CPU方面 MMU表示映射关系 ① CPU ALU Arithmetic logic unit 发出请求,为逻辑地址 ② CPU MMU Memory management unit 查找逻辑地址映射表,不存在会去内存中找 ③ 控制器提出内存请求(需要的内容,内容即指令) 内存方面 ④ 内存通过bus发送物理内存地址的内容给CPU OS方面 建立逻辑地址和物理地址之间的映射关系(需在前四部前将映射管理建立好)...

Windows Terminal无法加载WSL [process exited with code 4294967295 (0xffffffff)]

在Windows Terminal中WSL无法打开错误代码是 process exited with code 4294967295 (0xffffffff),但在命令行中 通过 "C:\Windows\System32\wsl.exe" -d ubuntu18 是正常的 解决方法是:通过修改启动的命令为 wsl.exe ~ -d Ubuntu 中间加一个 ~ 可以很好的解决掉 这种方法存在一个问题,打开的wsl终端将为根目录而不是当前windows目录 Reference Unable to launch WSL Ubuntu

Go每日一库 - gocolly

Introduction 本文对colly如何使用,整个代码架构设计,以及一些使用实例的收集。 Colly是Go语言开发的Crawler Framework,并不是一个完整的产品,Colly提供了类似于Python的同类产品(BeautifulSoup 或 Scrapy)相似的表现力和灵活性。 Colly这个名称源自 Collector 的简写,而Collector 也是 Colly的核心。 Colly Official Docs,内容不是很多,最新的消息也很就远了,仅仅是活跃在Github Concepts Architecture 从理解上来说,Colly的设计分为两层,核心层和解析层, Collector :是Colly实现,该组件负责网络通信,并负责在Collector 作业运行时执行对应事件的回调。 Parser :这个其实是抽象的,官网并未对此说明,goquery和一些htmlquery,通过这些就可以将访问的结果解析成类Jquery对象,使html拥有了,XPath选择器和CSS选择器 通常情况下Crawler的工作流生命周期大致为 构建客户端 发送请求 获取响应的数据 将相应的数据解析 对所需数据处理 持久化 而Colly则是将这些概念进行封装,通过将事件注册到每个步骤中,通过事件的方式对数据进行清理,抽象来说,Colly面向的是过程而不是对象。大概的工作架构如图 event 通过上述的概念,可以大概了解到 Colly 是一个基于事件的Crawler,通过开发者自行注册事件函数来触发整个流水线的工作 Colly 具有以下事件处理程序: OnRequest:在请求之前调用 OnError :在请求期间发生错误时调用 OnResponseHeaders :在收到响应头后调用 OnResponse: 在收到响应后调用 OnHTML:如果接收到的内容是 HTML,则在 OnResponse 之后立即调用 OnXML :如果接收到的内容是 HTML 或 XML,则在 OnHTML 之后立即调用 OnScraped:在 OnXML 回调之后调用 OnHTMLDetach:取消注册一个OnHTML事件函数,取消后,如未执行过得事件将不会再被执行 OnXMLDetach:取消注册一个OnXML事件函数,取消后,如未执行过得事件将不会再被执行 Reference goquery htmlquery Utilities 简单使用 go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 package main import ( "fmt" "github....

grafana v8.0+ 隐藏表格字段

Select panel title → Inspect → Panel JSON Set “type” to “table-old” Apply The visualization should now appear as Table (old) and in the right side will appear Column Styles Column Styles → Options → Name pattern set the name of the column to hide Type → Hidden Reference:Hide column in table in v8.0

理解kubernetes listwatch机制原理

overview kubernetes的设计里面大致上分为3部分: API驱动型的特点 (API-driven) 控制循环(control loops)与 条件触发 (Level Trigger) API的可延伸性 而正因为这些设计特性,才使得kubernetes工作非常稳定。 什么是Level Trigger与 Edge trigger 看到网上有资料是这么解释两个属于的: 条件触发(level-trigger,也被称为水平触发)LT指: 只要满足条件,就触发一个事件(只要有数据没有被获取,就不断通知)。 边缘触发(edge-trigger)ET: 每当状态变化时,触发一个事件。 通过查询了一些资料,实际上也不明白这些究竟属于哪门科学中的理论,但是具体解释起来看的很明白。 LEVEL TRIGGERING:当电流有两个级别,VH 和 VL。代表了两个触发事件的级别。如果将VH 设置为LED在正时钟。当电压为VH时,LED可以在该时间线任何时刻点亮。这称为LEVEL TRIGGERING,每当遇到VH 时间线就会触发事件。事件是在时间内的任何时刻开始,直到满足条件。 Edge TRIGGERING: 如图所示,会看到上升线与下降线,当事件在上升/下降边缘触发时(两个状态的交点),称为边缘触发(Edge TRIGGERING:)。 如果需要打开LED灯,则当时钟从VL转换到VH时才会亮起,而不是一家处在对应的时钟线上,仅仅是在过渡时亮起。 为什么kubernetes使用Level Trigger而不使用Edge trigger 如图所述,两种不同的设计模式,随着时间形状进行相应,当系统在由高转低,或由低转高时,系统处在关闭或者不可控的异常状态下,应如何触发对应的事件呢。 换一种方式来来解释,比如说通过 加法运算,如下,i=3,当给I+4作为一个操作触发事件。 text 1 2 3 4 5 # let i=3 # let i+=4 # let i # echo $i 7 当为Edge trigger时操作的情况下,将看到 i+4 ,而在 level trigger 时看到的是 i=7。这里将会从``i+4` 一直到下一个信号的触发。 信号的干扰 通常情况下,两者是没有区别的,但在大规模分布式网络环境中,有很多因素的影响下,任何都是不可靠的,在这种情况下会改变了我们对事件信号的感知。 如图所示,图为Level Trigger与Edge trigger 的信号发生模拟,在理想情况下,两者间并没有什么不同。...

理解kubernetes schema

什么是schema schema一词起源于希腊语中的form或figure,但具体应该如何定义schema取决于应用环境的上下文。schema有不同的类型,其含义与数据科学、教育、营销和SEO以及心理学等领域密切相关。 在维基百科中将schema解释为,图式,在心里学中主要描述一种思维或行为类型,用来组织资讯的类别,以及资讯之间的关系。它也可以被描述为先入为主思想的心理结构,表示世界某些观点的框架,或是用于组织和感知新资讯的系统。 但在计算机科学中,从很多地方都可以看到 schema 这个名词,例如 database,openldap,programing language等的。这里可以简单的吧schema 理解为 元数据集合 (metadata component)数据模型,主要包含元素及属性的声明,与其他数据结构组成。 数据库中的schema 在数据库中,schema 就像一个骨架结构,代表整个数据库的逻辑视图。它设计了应用于特定数据库中数据的所有约束。当在数据建模时,就会产生一个schema。在谈到关系数据库]和面向对象数据库时经常使用schema。有时也指将结构或文本的描述。 数据库中schema描述数据的形状以及它与其他模型、表和库之间的关系。在这种情况下,数据库条目是schema的一个实例,包含schema中描述的所有属性。 数据库schema通常分为两类:定义数据文件实际存储方式的**物理数据库schema ;和逻辑数据库schema **,它描述了应用于存储数据的所有逻辑约束,包括完整性、表和视图。常见包括 星型模式(star schema) 雪花模式(snowflake schema) 事实星座模型(fact constellation schema 或 galaxy schema) 星型模式是类似于一个简单的数据仓库图,包括一对多的事实表和维度表。它使用非规范化数据。 雪花模式是更为复杂的一种流行的数据库模式,在该模式下,维度表是规范化的,可以节省存储空间并最大限度地减少数据冗余。 事实星座模式远比星型模式和雪花模式复杂得多。它拥有多个共享多个维度表的事实表。 Kubernetes中的schema 通过上面的阐述,大概上可以明白 schema究竟是什么东西了,在Kubernetes中也有schema的概念,通过对kubernetes中资源(GVK)的规范定义、相互关系间的映射等,schema即k8s资源对象元数据。 而kubernetes中资源对象即 Group Version Kind 这些被定义在 staging/src/k8s.io/api/type.go中,即平时所操作的yaml文件,例如 yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 apiVersion: apps/v1 kind: Deployment metadata: name: ngx namespace: default spec: selector: matchLabels: app: ngx template: metadata: labels: app: nginx spec: containers: - name: ngx-schema image: nginx ports: - containerPort: 80 而对应的的即为TypeMeta 、ObjectMeta 和 DeploymentSpec,...

k8s开发环境准备 - 如何配置开发环境

下载源码 根据kubernetes github 方式可以 text 1 2 3 4 5 mkdir -p $GOPATH/src/k8s.io cd $GOPATH/src/k8s.io git clone https://github.com/kubernetes/kubernetes cd kubernetes make 如果有需要可以切换到对应的版本进行学习或者修改,一般kubernetes版本为对应tag text 1 2 3 git fetch origin [远程tag名] git checkout [远程tag名] git branch 配置goland kubernetes本身是支持 go mod 的,但源码这里提供了所有的依赖在 staging/src/k8s.io/ 目录下,可以将此目录内的文件复制到 vendor下。 bash 1 cp -a staging/src/k8s.io/* vendor/k8s.io/ 对于 k8s.io/kubernetes/pkg/ 发红的(找不到依赖的),可以将手动创建一个目录在 vendor/k8s.io/ 将克隆下来的根目录 pkg 复制到刚才的目录下。 goland中,此时不推荐使用go mod模式了,这里goland一定要配置GOPATH的模式。对应的GOPATH加入 {project}/vender即可。 这里可以添加到 goland中 project GOPATH里。

通俗易懂的dbus数据结构

DBus中也是类似于静态语言,使用了“强类型”数据格式。在DBus上传递的所有数据都需要声明其对应的类型,下面整理了下,DBus中的数据类型,以及在DBus中声明的数据类型是什么意思。 dbus类型 说明 s string 字符串类型,可以声明 s: a array 数组,可以声明为 a: v variant,variant:: () 结构体,声明时为双括号中间的为类型,可以是多个,例如(ss) 即这个结构体内包含两个字符串属性 b 布尔值 SIGNATURE signature类型 y BYTE d DOUBLE t UINT64 x INT64 u UINT32 i INT32 q uint16 n INT16 {} 词典,这里声明为两个括号,中间为其对应的 key value,例如 {sv} 即 key是字符串类型,value是variant类型。 o OBJECT_PATH 对象路径 a{sv} : 是一个数组,为 一个键值对的词典,里面仅有一个 (ssssa{ss}as) 为一个结构体, 里面属性有7个 两个词典(数组),五个字符串类型 (sssbsasa(ss)asba(ssss)asasasasa(ss)b) 这个类型拆开为下:共16个属性 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ( s string s string s string b bool s string as array only one string a(ss) two string type in the array as array only one string b bool a(ssss) four string type in the array as array only one string as array only one string as array only one string as array only one string a(ss) two string type in the array b bool ) 对上述类型,python中就可以很灵活的声明...

使用firewalld dbus接口配置iptables

firewalld,一个基于动态区的iptables/nftables守护程序,自2009年左右开始开发,CentOS7基于 firewalld-0.6.3 , 发布于2018年10月11日。主要的开发人员是托马斯·沃纳,他目前为红帽公司工作。这是因为为Federal 18 的默认防火墙机制, 随后在 Rhel7 和 Centos 7 中使用。 firewalld比旧的 iptable 机制有许多优势。值得注意的是,它解决了 iptable 要求每次更改时重新启动防火墙的问题,从而中断了任何状态连接。它还提供了丰富的 D-Bus 方法、信号和属性。 这里并不是从firewalld操作使用方式来介绍firewalld的改名,想反,是介绍firewalld D-Bus API来检索信息或更改设置。 firewalld被配置为系统 D-Bus 服务,注意看 systemd file中的" Type=dbus “参数。 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 $ cat /usr/lib/systemd/system/firewalld.service [Unit] Description=firewalld - dynamic firewall daemon Before=network-pre.target Wants=network-pre.target After=dbus.service After=polkit.service Conflicts=iptables.service ip6tables.service ebtables.service ipset....

Linux高级IPC - DBus

What is IPC IPC [Inter-Process Communication] 进程间通信,指至少两个进程或线程间传送数据或信号的一些技术或方法。在Linux/Unix中,提供了许多IPC。Unix七大IPC: Pipe:无名管道,最基本的IPC,单向通信,仅在父/子进程之间,也就是将一个程序的输出直接交给另一个程序的输入。常见使用为 ps -ef|grep xxx FIFO [(First in, First out)] 或 有名管道(named pipe):与Pipe不同,FIFO可以让两个不相关的进程可以使用FIFO。单向。 Socket 和 Unix Domain Socket:socket和Unix套接字,双向。适用于网络通信,但也可以在本地使用。适用于不同的协议。 消息队列 Message Queue: SysV 消息队列、POSIX 消息队列。 Signal: 信号,是发送到正在运行的进程通知以触发其事件的特定行为,是IPC的一种有限形式。 Semaphore:信号量,通常用于IPC或同一进程内的线程间通信。他们之间使用队列进行消息传递、控制或内容的传递。(常见SysV 信号量、POSIX 信号量) Shared memory:(常见SysV 共享内存、POSIX 共享内存)。共享内存,是在进程(程序)之间传递数据的有效方式,目的是在其之间提供通信。 每种IPC都有不通的特点,每种方式对资源的使用及性能都是不通的 管道 I/O是最快的,但为单向通信,需要工作在 父/子 进程关系之间。 UNIX 套接字可以在本地连接不同的进程,并且具有更高的带宽,并且没有固有的消息边界。 TCP/IP套接字可以连接任何进程。并且可以通过网络连接,但是对资源会有更多的开销,同样的没有固定的消息边界。 Reference comparsion Unix/Linux IPC What is D-Bus 提到,D-Bus就不能不提一下freedesktop,而 D-Bus 仅仅作为freedesktop.org的一部分。 D-Bus 桌面总线 (Desktop Bus),的简写,也是Linux- IPC机制,不同于Unix 7大基础IPC的是,D-Bus是在这些IPC类型之上实现的中间件IPC,D-Bus使用了基础IPC中一种过多种,其设计的目的是在Linux桌面环境,提供服务的标准化。但目前并没有合入主线内核中。 作为中间件IPC,D-Bus的性能较低与其他IPC模式,因为在通信过程中会进行很多上下文切换,如果通过Dbus来发送消息,会先将其发送到内核,然后将其送回D-Bus。AF_BUS 补丁是新的套接字类型,用来减少D-Bus上下文的切换。 更多可参考:https://en.wikipedia.org/wiki/D-Bus D-Bus组成 D-Bus是 一个IPC的实现方式,在架构上分位三层。 Layer 1 libdbus:freedesktop机构提供的一个免费开源的一个由C语言编写的 low-level API 。是提供dbus功能的库。是高级API绑定的低级API。 Layer 2 dbus daemon:dbus实现的IPC守护进行,随Linux启动,通过不通进程对其的连接,实现了多进程间消息的路由(包含内核、网络、桌面等) Layer 3 Wapper libraries (high-level API): 对 low-level API libdbus的封装 ,例如 libdbus-qt libdbus-python github....

elasticsearch mapping

索引管理 创建索引 直接创建索引 PUT newindex1,创建索引可以通过 number_of_shares 和 number_of_replicas 数量来修饰分片和副本的数量。 text 1 2 3 4 5 6 7 8 9 PUT newindex { "settings": { "index" : { "number_of_shares" : 2, "number_of_replicas": 1 } } } number_of_shares 分片数在创建索引后不能修改 number_of_replicas 副本数可以随时完成修改 删除索引 DEL index_name 打开/关闭索引 POST {index_name}/_close POST {index_name}/_open 关闭的索引无法进行【增删改查】操作 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 { "error" : { "root_cause" : [ { "type" : "index_closed_exception", "reason" : "closed", "index_uuid" : "3eCslZZ3Q9amlUyDtqTXWA", "index" : "newindex" } ], "type" : "index_closed_exception", "reason" : "closed", "index_uuid" : "3eCslZZ3Q9amlUyDtqTXWA", "index" : "newindex" }, "status" : 400 } 索引的映射 mapping mapping是定义文档及包含字段的存储与索引方式。可以理解为是elasticsearch的表结构,定义mapping,即在创建index时,自行判断每个字段的类型,而不是有ES自动自动判断每个纬度的类型。这种更贴合业务场景,如分词、存储。...

C程序编译错误记录

Question1: Similar to pause command in linux text 1 read -n 1 Question2 read : Illegal option -n 原因为ubuntu 默认的是dash 不是 bash Reference Question3: How to Compile C programing Language text 1 gcc hello.c -o hello Question4: Segmentation fault (core dumped) 编译正常执行错误,在linux中使用 strace 查看具体报错。 Reference

Go每日一库 - deepcopier

question: How use golang Copy one struct to another where structs have same members and different types 此时需要的库 github.com/ulule/deepcopier github.com/jinzhu/copier E.g. go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 package main import ( "fmt" "github....

bash shell常用示例

工具命令集合 长期总结 - Linux日志查询命令 长期总结 - Linux网络命令合集 长期总结 - Linux性能分析命令 awk常用案例 bash shell常用示例 探索kubectl - 巧用jsonpath提取有用数据 探索kubectl - kubectl诊断命令集合 该文整理一些常用的shell用法,及语法,并非介绍如何使用 变量 变量可分为两类:环境变量ENV(全局)和局部变量。 bash环境变量 变量名 含义 _= 上一条命令的最后一个参数 BASH_VERSION=“4.1.2(1)-release” 当前bash实例的版本号 COLORS="/etc/DIR_COLORS" COLUMNS=80 设置该变量就给shell编辑模式和选择命令定义了编辑窗口的宽度 CVS_RSH=“ssh” DIRSTACK 代表目录栈当前的内容 EUID=0 为在shell启动时被初始化的当前用户的有效ID G_BROKEN_FILENAMES=1 GROUPS=() 当前用户所属组 HISTFILE=/root/.bash_history 历史记录文件的全路径 HISTFILESIZE=50 历史文件能包含的最大行数 HISTSIZE=50 记录在命令行历史文件中的命令行数 HOME=/root 当前用户家目录 HOSTNAME= 当前主机机器名称 HOSTTYPE=x86_64 IFS=$’\t\n' 内容字段分隔符,一般是空格符、制表符、和换行符,用于由命令替换,循环结构中的表和读取的输入产生的词的字段划分。 INPUTRC=/etc/inputrc readline启动文件的文件名。取代默认的~/.inputrc JAVA_HOME=/app/jdk1.6 KDENIR=/usr KDE IS PRELINKED=1 LANG=zh_CN.GB18030 LESSONPEN LINES=36 LONGNAME=root 登陆的用户名 LS_COLORS=xx MACHTYPE=x86_64-redhat-linux-gnu 包含一个描述正在运行bash的系统串 MAILCHECK=60 这个参数定义shell将隔多长时间(以秒为单位检查一次由参数MAILPATH或MAILFILE)指定的文件,看看是否有邮件到达。默认600秒 MAIL=/var/spool/mail/root 邮件全路径 OLDPWD=/root 前一个当前工作目录 OPTERR=1 如果设置为1,秒年十时毫,来自getopts内置命令的错误信息。 OPTIND=1 下一个有getopts内置命令处理的参数序号 OSTYPE=linux-gnu 自动设置称一个串,该串标书正在运行bash的操作系统,默认值有系统决定 PATH 全局PATH路径。命令搜索路径。一个有冒号分隔的目录列表,shell用它来搜索命令。默认路径有系统决定,并且由安装bash的管理员设置。 PIPESTATUS=([0]=0 [1]=1) 一个数组,包含一列最进在管道执行的前台作业的进程退出状态值。 PPID=1112 父进程的进程ID PS1=[\u@\h \W]$ 主提示符串,默认值是$ PS2= > 次提示符串,默认值是> PS4=+ 当开启追踪时使用的调试提示符串,默认值是+,追踪可用set-x开启。 PWD 当前用户家目录。 SHELL=/bin/bash SHLVL=1 每启动一个bash实例就将其加1 TMOUT=3600 退出前等待超时的秒数。 UID=0 当前用户的UID,在shell启动时初始化。 USER=root 当前用户的用户名,在shell启动时初始化。 自定义环境变量 export...

Account locked due to 10 failed logins

进入后,找到linux16 开头的一行!将ro改为 rw init=/sysroot/bin/sh 查看passwd和 shadow 发现用户并没有锁,于是想到,应该是pam的设置。 text 1 pam_tally2.so deny=6 onerr=fail unlock_time=120 默认log在: /var/log/tallylog text 1 2 3 4 chroot /sysroot # 使用pam_tally2命令解锁 pam_tally2 --user=root --reset rw init=/sysroot/bin/sh Reference Centos7.x破解密码 pam_tally2锁用户

goland设置import规范

import 规范 引入了三种类型的包,标准库包,第三方包,程序内部包,建议采用如下方式进行组织你的包: 有顺序的引入包,不同的类型采用空格分离, 第一种标准库 第二是第三方包 第三是项目包。 在项目中不要使用相对路径引入包,在goland中可以使用如下设置自动格式化为引入标准 打开设置:Editor > Code Style > Go,选择import标签,将排序改为goimports, 剩下的按照自己喜好进行修改即可 Reference goimports-group

Linux dbus命令行套件

D-Bus是Linux使用的进程间通信机制,允许各个进程互相访问,而不需要为每个其他组件实现自定义代码。即使对于系统管理员来说,这也是一个相当深奥的主题,但它确实有助于解释linux的另一部分是如何工作的。 这里主要介绍 dbus-send 与 GDbus cli工具,其他的还有QtDbus , d-feet… 命令行工具dbus-send ,是freedesktoop提供的dbus包配套的命令客户端工具,可用于发送dbus消息。 GDbus GLib实现的dbus工具。较与 dbus-send,拥有更完整的功能。 d-feet: 可以处理所有D-Bus服务的GUI应用程序。 dbus-send dbus有两种消息总线 (message bus):system bus 和 session bus,通过使用 --system和 --session 选项来通过dbus-send 向系统总线或会话总线发送消息。如果两者都未指定,默认为**session bus*. 借此,顺道聊下 system bus 和 session bus: System Bus: 在桌面上,为所有用户提供一条总线. 专用于系统服务。 有关于低级时间,例如 网络连接,USB设备。 在嵌入式Linux系统中,system bus是唯一D-Bus类型。 Session Bus: 每个用户会话一个实例 为用户应用提供那个桌面服务。 连接到 X-session 参数选项 参数 说明 --dest=NAME 这个是必选的参数,指定要接收消息的接口名称。例如 org.freedesktop.ExampleName --print-reply 打印回复消息 --print-reply=literal 如选项一样,打印回复正文。如有特殊字符,如对象或 object 则按字面打印,没有标点符号、转义字符等。 --reply-timeout= 可选参数,等待回复的超时时长,单位为 毫秒。 --system --session --type=method_call signal 必须始终指定要发送的消息的对象路径和名称。以下参数(如果有)是消息内容(消息参数)。这些值作为类型指定的值给出,可能包括如下所述的容器(数组、dict和变体)。 支持参数 dbus-send 发送的消息,在调用方法需要传参数时,必须将这些值给出。dbus-send 支持传入的参数的类型,并不为D-Bus支持的所有的数据类型,仅为一些简单的类型:如...

python drf之viewset

What is Views drf提供了两个基类,五个视图扩展类,9个视图集 drf提供了一个Django中view的子类APIView ,主要变动大概为以下: 重新封装了Request 与 Response实例。 使用了独有的Request与Response对象,并且提供了专有的解析器 Parser 可以根据HTTP Content-Type 指明的请求数据进行解析。 增加了自有的鉴权/节流 在django中dispatch() 分发前,会对请求进行身份认证、权限检查、流量控制。 异常捕获 APIException。 APIView implement python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @classmethod def as_view(cls, **initkwargs): .... # 调用父类的方法,Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx view = super(APIView, cls).as_view(**initkwargs) view.cls = cls # 并且生成一个新的request view.initkwargs = initkwargs # Note: session based authentication is explicitly CSRF validated, # all other authentication is CSRF exempt....