- 博客(75)
- 收藏
- 关注
原创 autohotkey小脚本集合
不知道为什么原生的win+d快捷键不好使了,chrome死活不肯最小化,写了个小脚本覆盖原生的快捷键。双显示器太伤眼,一个可以当两个用,切换为透明之后,可以看到背景窗口的内容。
2023-11-17 12:13:30
642
原创 Python3中启动简易HTTPServer
Python中的简易的HTTPServer非常实用,但原Python2中的命令在Python3不再适用了。
2022-06-23 17:08:08
3088
原创 k8s从1.21不再使用bazel的解读
0x01 背景之前有关注bazel相关的技术动态,自己也做了一些研究。最新看k8s源码时,突然发现没有了bazel相关的配置,猜测是把bazel移除了,去github上搜索了下。确认确实是移除了。最初的提案链接为:https://github.com/kubernetes/kubernetes/issues/88553,感兴趣的可以直接去看,讨论很热烈。主要是想看下顶级项目面对这种取舍(trade-off)问题时是如何决策的。0x02 移除的理由提案作者的理由:go tool chain本身支
2022-05-28 21:43:21
371
原创 Etcd特性学习5——运维操作(最后一篇)
01 make-mirror在另外一个集群构建一个镜像。同时实时将一个集群的变更同步到另外一个集群中。同时会在终端上打印同步的key个数。命令格式etcdctl make-mirror [options] <destination> [flags]其中的<destination>是镜像目的集群的endpoint列表。命令示例:etcdctl --endpoints http://127.0.0.1:12379 make-mirror http://127.0.0.1:2
2022-05-26 12:30:58
1440
原创 Etcd特性学习4——member、role、user
0x01 member成员管理用来动态调整Etcd集群中的成员。支持如下操作:add 添加list 列举promote 提升remove 移除update 更新member add--learner 允许以Raft Learner角色加入Etcd集群,该节点不参与Raft选举投票,只同步Leader的数据。--peer-urls 要加入的新节点的URL列表。member list无选项,查看集群的成员列表。member promote将指定的非投票member提升为
2022-05-20 09:25:19
938
原创 apiserver性能调优小结
apiserver设计比较复杂,直接去看源码效果较差。尝试从特性角度梳理其设计背后的考量。了解一个服务最好的入口就是看它的选项。选的版本是v1.21.5。0x01 选项选项分为如下几类:*通用标志(Generic flags)*与Etcd相关的配置安全配置审计配置特性配置认证配置授权配置云提供商配置API开关配置网络出口配置准入配置metrics配置,用于监控*日志配置*其他杂项配置加*的为影响性能的参数。为重点学习项。0x02 详细各部分配置2.1 通用配置看
2022-05-12 08:35:29
895
原创 Etcd特性学习3——lease lock elec
0x01 leaselease意思是租期,通过租期管理,可以实现一些自动操作。ZooKeeper中可以指定一个znode的TTL,TTL为Time To Live,跟租期同样的含义,超出TTL的znode会被ZooKeeper自动清除。lease包含如下子命令:grant 创建lease。 指定TTL(秒数),返回lease ID。16进制格式。keep-alive 保活lease。让lease持续有效。list 列出所有lease ID。revoke 让lease立刻失效。timetoli
2022-05-10 20:57:57
837
原创 Etcd特性学习2——数据操作
0x01 endpointendpoint即意为端点,指向客户端提供服务的一个服务入口。Etcd集群中每个节点都可以提供一个端点。严格来说,endpoint不属于数据操作范畴,但与后续defrag有关联,是理解defrag的前提,就先放这里了。提供了3个子命令。hashkv 打印出KV历史的hash值。是用来检查请求发生时各端点的记录是否一致。可以计算指定的revison版本。health 检查端点是否健康。可以用于检查端点是否健康。可以通过-w json的全局选项,返回json格式,方便使用方解
2022-04-30 23:32:09
1347
原创 Etcd特性学习1——KV操作
0x01 功能分类Etcd作为一个分布式一致性的KV存储组件,现在的功能远不止于KV存储了。详细了解下其功能特点有利用在使用它时,做出最合适的选择。通过etcdctl -h命令可以看到有如下的特性。基本的KV操作 get put txn del watch数据操作 分片defrag 压缩事件 compaction端点管理 endpoint租期管理 lease锁 lock选举 elec成员管理 member转移leader move-leader角色管理 role快照管理 snaps
2022-04-28 23:27:20
3455
原创 bash readarray探讨
§ 0x01 起源工作中有如下需求,要去解析一个文件的内容,但文件是json格式的,我不想使用jq。通过grep过滤出符合要求的行,然后在for循环中处理它们。然后发现,这样实现不行。lines=$(grep xxxx /path/to/file.json)for line in ${lines}; do echo ${line}donegrep输出的内容变成一行了。对比运行环境和ubuntu中,发现lines的内容不同。在运行环境中是一行(换行符消失了),在ubuntu是多行。换了sed之
2022-04-20 16:25:34
1469
原创 云原生模式-读书笔记1-第1章
云原生模式书名《云原生模式》,副标题:设计拥抱变化的软件。如下格式为文中原文。这是书中的原文云原生,英文为Cloud Native。直译为,云原住居民。天空中云距离我们很远,不停的变化。用“云原生”可以形象化地领会其特点。感觉这本书是“事后诸葛亮”,已经有了k8s的前提下,对k8s中设计考虑的点进行汇总拔高,形成了云原生的概念。当然还是能帮助大家理解云原生的一些理念,还是值得学习的。第一章 什么是“云原生”换一种角度去理解应用的生命周期。传统的大型服务可以长时间运行,不需要(不敢)变更。传
2022-04-19 21:53:17
445
原创 TN3399开发板折腾记录
0x01 背景需要一个能支持GICv3的设备。春节时,在安卓旧手机上折腾了一圈,买了2个旧手机(红米2、1加3T),都不行。红米2,可以通过开源的hyp固件[https://github.com/msm8916-mainline/qhypstub/issues],实现KVM。但是对应的芯片是MSM8916的,只支持GICv2。1加3T,芯片MSM8996是支持GICv3的。但是对应的hyp固件相关信息没有开源,所以无法支持虚拟机。板子是在闲鱼上买的。300块,包邮。到手后发现内核版本是4.7
2022-04-11 21:01:32
2511
原创 Go阻塞通道的一个小坑
0x01 问题阻塞类型chan就是使用make时,只指定一个类型,不指定长度,或者长度指定为0。它有如下要求:发送方和接受方都准备好时,才能工作。所以想到了如下场景:发送方和使用方都使用select非阻塞方式,会有什么现象?即如下代码:是否会有输出?package mainimport "fmt"import "time"func main() { c := make(chan int) go func() { f
2022-04-09 13:10:06
477
原创 Go非阻塞通道探究
title: Go非阻塞通道探究date: 2022-04-08 20:33:26author: linlintags:gocatergories:编程语言0x01 通道阻塞介绍了解Go的同学都清楚,无论通道是有无缓冲的,发送或者接收某些场景下都有可能阻塞。对于无缓冲:默认阻塞,直到对方也准备好接收或者发送。有缓冲:通道满了,发送阻塞。通道空了,接收阻塞。有意思的是,Go里提供了基本的非阻塞接收方式,但没有提供非阻塞的发送方式。可以使用如下方式非阻塞接收。通过判.
2022-04-08 22:00:55
632
原创 kubebuilder 上手体验
§ 0x01 kubebuilder是什么?kubebuilder以下简称kb,是k8s社区编写CRD的工具。它可以自动化生成CRD工程代码,提高编写operator的效率。官网的示例CronJob对于初学者来说太复杂了,我试了下,基本的代码可以运行起来。§ 0x02 与sdk-operator的区别是什么?应该是sdk-operator比较先出现,kubebuilder是后来者。极客时间上学习k8s时,张磊还没有提及kubebuilder。两者没有什么本质区别,不过看知乎中的说法,两者社区有融合的趋
2022-04-05 17:45:33
1954
原创 好玩的shell
§ 0x01 为什么写这个Shell是命令行中和Linux交互的主要界面,在日常开发中,和它打的交道也最多。学习shell的过程中,发现了一些有意思的地方。想记录一下,分享给也正在学习shell的同学。这里指一般Linux发行版上自带的Bash Shell。§ 0x02 alias——为什么rm时一定要提示下我?# rm 1rm: remove regular empty file `1'? 许多人不明白。为什么有的环境中rm不提示,有的环境中一下有提示。有的人为了省事,直接加了-f的参数。其实
2022-04-02 16:33:00
1481
原创 网络资产中主机发现方案分析
date: 2019-02-15 11:24:25tags:- 网络资产- 主机存活探测0x00 介绍网络资产梳理中,最重要的一项是主机发现。主机发现就是通过一些技术手段,来侦察网络中一些主机是否存活。主机发现又分为主动发现和被动发现两大类。主动发现:主动进行侦察探测,如端口探测被动发现:被动接收一些信息来进行判断,如流量监听主动发现单个主机存活的手段有ping端口扫描当然不是所有的存活主机都可以通过主动手段发现。存在一种极端情形,如果一个存活主机没有开放任务端口/服务,同时
2022-04-01 14:02:45
7423
原创 Go run permission denied的问题分析与解决方案
0x01 问题一次同事反馈在环境中,执行go run xx.go时出现如下异常提示。fork/exec /tmp/go-build104992250/b001/exe/h: permission denied有点兴趣,所以就动手查了下。查的过程比较简单,但思路有点意思。希望会有所帮助启发。0x02 分析出现这个问题,原因是go在/tmp目录下生成的可执行文件没有执行权限,当Go去执行时就会报错。为什么会没有执行权限呢?请教了同事之后,确认了开发环境中的/tmp的挂载选项中如下所示。tmpf
2022-03-30 21:51:06
3182
1
原创 PWN基础知识总结
0x00 Intro这里记录一些在CTF PWN类题目经常要考虑的技术点,是一些与C/ASM相关,比较底层的东西。总结来说有:C和汇编之间的参数传递栈的细节64位程序参数传递只有对这些细节都清楚了,那么利用时,如何构造Payload就没有想象中那么困难了。这里目前还是只限于x86-64架构。0x01 C和汇编之间的参数传递有编译器基础的都知道,GCC将C语言编译为机器语言中间有几个过程。预处理(将宏展开)汇编(将C代码转为汇编代码)编译(将汇编转为机器码)链接(将静态库,多个源文
2022-03-29 13:36:32
1613
原创 Go源码阅读3-bytes包
0x01 bytes包bytes包是用来处理byte切片的,与strings包是等同的。所以这个包基本上平时很少用到,大家用的多都是strings包。因为字符串更容易被大家理解。但源码中的一些优秀的做法,还是非常值得学习的。0x02 细节2.1 bytes比较通过源码看到,bytes的比较是转换为string后进行的。注意点是,nil和空切片比较是相等的。这一点可能很多人没注意到。可以通过如下的函数可以验证。func eq() { b1 := make([]byte, 0, 1)
2022-03-29 09:16:52
496
原创 Linux 4.xx内核+Go 1.15出core排查
Go runtime出core在使用gozero框架的开发数据库管理服务的过程中,经常出core。通过dlv查看core的位置,各个地方都有,典型的有以下两种:runtime在执行init函数时,某个空串对应的地址上其长度不对,应该是0,却是一个负值。runtime中初始化timer时,timer的某个应该为正整数的属性,变成了负值。明确是踩了内存,但一时间找不到思路。0x01 怀疑是CGO由于CGO和Go本身使用的内存模型不同,CGO比较容易出现踩内存的问题。加上出core的程序,为了使用
2022-03-28 11:55:19
838
原创 非递归的堆排序
0x01 背景多年之前写了一篇博客,实现非递归方式的堆排序,多年之后才发现写的有问题。连忙撤了下来,重新复习了《算法导论》,用Go实现了正确的非递归排序。算是填上了当年的坑。基本上是复原了书上的实现,加上自己的理解。0x02 堆与堆排序堆是一种完全二叉树。它具有如下特点:每个节点都比其他子节点的值大或者小。都大的叫大根堆,都小的叫小根堆。反过来表达,除根节点外,其他节点都比父节点小或者大。堆可以和一个数组对应起来。下标为i的元素的两个子节点分别为2i+1和2i+2。堆排序就是利用堆的构建过
2022-03-27 15:17:59
982
原创 Go源码阅读2-bufio
§ 0x01 学习语言的方法不知道某个细节该怎么写时:自己想,去推测。带着问题,去看源码。带着问题,去请教有经验的人。 导师或者周围的人。学习的点:代码布局;函数实现与抽象;通过的编程范式如何使用;其他意外的收获。§ 0x02 bufio上一篇为介绍看archive的总结:https://my.oschina.net/linhaha/blog/5120097Q1: 常量定义放在头部还是靠近使用的位置?A1:靠近使用的位置。可以看bufio.go。const minRead
2022-03-24 15:25:36
136
原创 linux下分区内部mv和跨分区mv的区别
## § 0x01 问题列表1. 为什么不同,为什么一个快一个慢?2. 为什么跨区域mv失败时,不影响原来的文件?这样的释疑过程也是自己对文件系统(filesystem)理解的加深过程。## § 0x02 原理+释疑文件系统中文件是如何保存的?1. 文件在文件系统中保存时(以linux下的ext2文件系统为例),是通过inode+block组织的。inode对应文件的元数据,block对应真实的数据;2. inode对block的管理不能跨分区,因.
2021-05-04 22:35:21
1131
原创 PPTV面试算法思考-最长对称子字符串
题目最近在微信公众号里看看到了一个PPTV的面试算法题,感觉难度适中,想试下。题目的内容为求一个字符串的最长对称子字符串。如: 输入 输出 abba 4 abad 3 acccbaa 3我的算法1自己反复思索了许多时间。一开始是觉得可以利用对称字符串的一个特点,就是反转前后两者是一样的。所以有如下的算法: 最长子串长度为max_sub_len
2017-03-02 23:19:05
801
翻译 启动关闭一个网络接口时的连带效应
翻译自linux-ip.net关闭一个网络接口时的连带效应这个接口上的所有的IP地址进入非活动状态,并且被移除掉。与这个接口上的所有的IP地址相关的已经建立的连接会中断掉。所有以这个接口为中继的路由都会从路由表中移除掉。链路层网卡进入停止状态。 下一步,激活这个接口时,就需要新的网络配置信息。在配置后检查下接口以验证配置是一个好习惯。例 1.7. 用ifconfig启动以太网卡[roo
2017-02-21 23:14:19
462
原创 TCP/IP工作流5 connect 3
继续TCP connect如下,来到252行。252 err = inet_hash_connect(&tcp_death_row, sk);253 if (err)254 goto failure;256 err = ip_route_newports(&rt, IPPROTO_TCP,257 inet->sport, ine
2017-02-06 23:26:26
442
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人