0X00 简单介绍
想必看到这篇博客的各位肯定会经常工作在 Terminal 中吧,而且对自己稍微好一些的人应该也都会配置一下自己的终端环境,比较常见的就是 Linux 下装个 terminator 或者 macOS 下装一个 iTerm2 这种软件,然后再用 zsh 配合不同的主题和插件完善自己的体验。而且真正用过一段时间终端的人肯定都会有那种一个窗口不够用的情况,那么你可能要用到终端模拟器(terminator/iTerm2)的 tab 功能了,每次都额外开一个新 tab 出来,或者上下左右开始分屏了。
一切都很顺利,直到你开始频繁的连接到远端的服务器上去,然后发现自己习以为常的分屏和 tab 全都没有了,每次想再开一个远端的 shell 时都需要在本地开一个分屏然后重新 ssh 重新输密码,需要 sudo 的话还可能需要再重复一下密码。一次两次还好,次数多了肯定就麻了,这时候就是 tmux 大展身手的时候了~
tmux 本身是一个终端复用器,可以做到的功能包括终端横向纵向的分屏、多 tab 切换等等。
0X01 基本用法
要用 tmux 首先要有 tmux…
0X00 基本内容
你应该听人跟你说过类似于「你看 2333 这个端口在没在监听」这句话吧,也应该听过「我可以 ping 通所以肯定不是网络的问题」这种话吧。虽然听的多了,但实际上它漏洞百出。
首先我们都知道端口号是一个数字,从 0 到 65535 其中 0~2013 叫 well-known ports 知名端口,也就是说通常某个端口就固定给某个服务使用,比如你见到 22 就第一反应该是 ssh 而非 MySQL,见到 80 就知道是 HTTP 而非 smtp。也正是如此,在 Linux 中你自己开发的程序平时监听 8080 没啥问题,但是想监听 80 的时候就要校验你的 root 权限了。
其次要知道端口是 IP 地址上的,并非电脑上的。也就是说当你电脑同时拥有 192.168.2.123 和 192.168.2.234 两个 IP 的时候,你可以启动两个 Nginx 分别监听他们的 80 端口。
最后要知道端口也是分类型的,即使是同一地址的统一端口也可以 tcp 和 udp 分开监听,也就是说你可以同时监听:
0X01 如何检查…
0X00 介绍
奖杯系统这东西是从 PlayStation 上借鉴过来的,PlayStation 上每个游戏均会设置一些奖杯,当玩家达成奖杯对应条件的时候就会解锁该奖杯,从而给玩家的游玩过程以正反馈。XBox 上也有类似的成就系统,都是用来给玩家正反馈的。
我作为一个游戏玩家就很喜欢拿到奖杯的感觉,尤其是拿到了一个金杯、白金杯(虽然我还从来没拿过白金杯)然后看到只有百分之一的玩家得到了这个奖杯的时候。既然游戏制作人可以为游戏设置将被,那我们为什么不考虑把自己的人生作为一个游戏来给它设置一些奖杯呢~
在开始之前要说明一下人生奖杯系统是什么又不是什么:
* 奖杯系统是成就系统,不是代办清单
* 奖杯系统是自我激励和正向反馈的,不是用来给自己压力的
* 奖杯系统是非常个人化的,不是有最佳实践的
0X01 我的奖杯系统
先来给大家介绍一下我自己的奖杯系统,它是用 Notion 的数据库功能制作的。细心的朋友可以看出来我整个 Notion…
~~年度总结:今年摆烂,完了。~~
0X00 开篇
不开玩笑,又到了一个年尾巴。本以今年会是轻松的一年,结果却是异常的艰辛😮💨 千算万算肯定是算不到 2022 年对生活影响最大的仍是疫情。本以为今年就彻底解决疫情了,但奈何天不遂人愿,一直到今天疫情仍然与你我密切相关。今年我核酸做了一两百次、居家办公一轮又一轮、收集了两个省的黄码、喜提了两周的铁皮围栏隔离,最后几天还是没顶住,至今仍在干咳。
接下来就简单整理一下今年发生过的值得记录下来的一些事情吧🎉
写完发现长度有点离谱,又尽力缩减了一些,有些实在是觉得写了不舍得删就继续留下了,这可能是我最长的一篇年终总结甚至是最长的一篇博客了。
0X01 生活
今年的生活过的比较普通,依旧没有发生什么惊天地泣鬼神的大事。不过人的一生又能经历几次大事呢?这些零零散散的小事情一件一件拼起来才是绝大多数人的生活吧。
智齿…
0X00 简单用法
内容比较少,主要是介绍一下 xargs ,直接开始吧~
首先假定各位能够熟练运用基础的管道操作,能够理解 ps aux | grep nginx | awk -F ' ' {print $1} 这样的命令。
我们日常使用管道的时候肯定会用到 ls | grep xxx | grep xxx | rm 这样的操作,想从一堆文件里筛选出自己需要的文件并将其删除/移动/复制等。但其实这样的操作是不行的,因为前面管道传过来的是数据流但是 rm 命令却并不能处理它。如果想实现这种效果就可以用 xargs 将其进行转换了,如下图所示使用 ls | grep bbb | grep "[3-5]" | xargs rm 就可以完成任务。
此处 xargs 的功能就是将前面的数据流逐行分解并一个个丢给 rm 去执行。不过通常的管道都是一个命令执行一次,配合 xargs 之后就是做一个循环了,将管道前面的的输出逐行取出作为参数交给下一个命令去执行。我这里画了一个简易的图,也许能够便于理解。
其实如果只是找到文件并删除的话,还有更简单的方法啦,例如 find . -regex…
0X00 虚拟化
首先虚拟化 Virtualization 它是一种技术,通过软件技术虚拟一张网卡(例如 Linux Bridge)、虚拟一个磁盘分区(例如 vmdk 文件)甚至直接虚拟一整台电脑(例如 VMware/VirtualBox)出来都是虚拟化技术的实装。
虚拟机就是通过虚拟化技术虚拟了一整套电脑所需的硬件,例如CPU、内存、磁盘、网卡等等,然后将它们拼在一起就是一台虚拟机了。
0X01 容器
区分这些的重点就在容器 Container 这里了。最早接触容器的时候很多人都说简单理解成轻量化虚拟机,不需要开关机、不需要操作系统、甚至是秒级启动的。当时我就死活不理解,明明是虚拟机为啥不需要操作系统不需要开关机的呢,其实但凡当时多解释几句,也就不会有这种困扰了。
tips: 这里说的容器仅仅指代 Linux 容器
容器的本质是进程 。在 Linux 环境下创建一个进程,如果我们将它与其它进程隔离开,让它发现不了其它进程、再分配虚拟网卡、临时的文件系统等等等等,那它其实就是一个「容器」了。所以容器的本质是进程…
0X00 Linux 的进程关系
既然想搞清楚容器的单进程模型,那自然需要先复习一下 Linux 下的基本进程关系了。你说你用的是 Windows Container?不懂,不会,打扰了😢
我们知道 Linux 下会有一个 PID=1 的进程来带动其他进程,以前 PID=1 的进程是 init 后来大家都在用 systemd ,这里就不多说了,只来回顾一下「孤儿进程」和「僵尸进程」这两个概念。
这里来模拟一个场景,默认 PID=1 的是 systemd
1. 打开运行一个新进程
2. 新进程 fork 了一个子进程出来
3. 子进程持续运行
4. 此时父进程终止了
5. 子进程成为孤儿进程 (因为他的父进程挂了)
6. 该子进程会交由 systemd 接管
7. 当子进程结束之后 systemd 会替它「收尸」,也就是释放、回收资源之类的
还有另一个场景:某菜鸡程序员(可能是我)写了个程序,现在运行起来了。该进程会 fork 新进程,每隔一会儿就会 fork 一个,但是该进程并没有 wait/waitpid…
0X00 🛡️叠buff
* 我是个 Kubernetes 纯新手,并不懂很多原理和概念,可能会有误导;
* 我只是将自己遇到过的问题列出来,如果你想找「权威」请看官方文档;
* 每个人的基础环境不同,Kubernetes 版本也不同,参考应该学会变通;
* 此处记录的仅为个人部署过程中遇到的问题记录,并非「教程」或「指南」;
0X01 正文
注意交换分区
部署 Kubernetes 的节点是不允许使用交换分区的,临时禁用可以 swapoff -a。然后在 /etc/fstab 中将交换分区的自动挂载给注释掉就可以了。
不使用 docker
Kubernetes 已经不建议使用 docker 作为容器运行时了,可以考虑使用 containerd 或者 CRI-O。注意这里提到的 Dockershim 已经移除并不意味着不能再用 Docker 了,而是说 Kubernetes 并不会原生支持 Docker 了,以后 Docker 的地位和其他运行时的地位相同了。
Containerd 的默认配置
如果使用 Containerd 作为容器运行时的话,安装好…
0X00 为嘛用 kind
作为一个纯新手想要学习 Linux、MySQL、Python... 的第一步往往都是先装一个来看看,当然 Kubernetes 也不例外。装 Linux 也许跟着教程在虚拟机里一会儿就装好了,尤其是现在很多发行版本都有图形化安装界面了,但是 Kubernetes 就不一样了,如果你去部署一套 K8S 集群的话极有可能会遇到一系列问题,包括但不限于:
* 交换分区没关,导致服务异常
* 搞不清楚 CRI-O/docker/containerd 之间的关系
* 刚装好的 kubelet 服务疯狂重启
* cni 网络插件搞不明白,导致 kubeadm init 一直不成功
* 缺少内核模块导致的集群初始化异常
* 缺少内核参数导致的集群初始化异常
* 想用 crictl 却怎么都看不到 container 状态
这些在熟手眼里可能根本不是问题,但是对于第一次接触的人来说还是挺麻烦的。所以我们需要一种简单的方式来快速部署一个 Kubernetes 来看一看试一试,而不是上来就先部署一套三四个节点的真正意义上的集群。…
0X00 这是一个描述
下面介绍几个我自己常用的小技巧,均可以在日常工作中给自己带来一些小小的便利🤪
0X01 临时 web 服务器
如果你电脑上装了 Python3 则可以使用 python3 -m http.server --bind 0.0.0.0 2333 这个命令在当前目录启动一个简单的 web 服务,监听在 0.0.0.0:2333 上。这样一来别人就可以访问你的 ip 来下载当前目录下的文件了。不过使用这个方法的时候要注意自己当前的工作目录哈,不要傻乎乎的在自己的 $HOME 下面用这个命令,小心别人下载你的隐私数据喔。
不过如果你搞不懂什么是「监听、0.0.0.0、端口」的话,还是先去搞一下计算机网络吧。
0X02 使用 pdb/ipdb 调试脚本
我们都知道用 pdb 模块可以逐行调试 Python 脚本,只需要在脚本里 import pdb 然后在需要打断点的地方加上 pdb.set_trace() 就可以了。但其实 Python 还有一个三方库叫做 ipdb 是 pdb 的升级版,应该各位也都知道吧,通过简单的 pip install 就可以装好。不论是…