iterm 个性化的改动记录

更改前景色和背景色 如图

colors.png
效果:
result.png

更改 Key Mappings

Profiles -> Keys -> Key Mappings -> Natural Text Editing. 这样做的好处是 FN + 左右箭头. Option + 箭头
key.png

光标闪烁

blind.png

VI 快捷键

虽然 vi/vim 编辑器有很多快捷键, 但是常用的并不多. 把我认为需要常用的记录在这:

命令模式

i – 光标处插入(进入插入模式)
a – 光标后插入(进入插入模式)
A – 行尾插入(进入插入模式)
o – 新建一行(进入插入模式)
u – 撤销前面的改动
U – 撤销当前行的所有改动
D – 删除当前行光标后所有字符
x – 删除当前光标处字符
R – 当前行从光标处开始替换
r – 仅替换当前光标处字符, 之后还是命令模式
s – 替换当前光标处字符并且进入插入模式
S – 删除当前行所有字符, 回到当前行行首, 进入插入模式
~ – 当前字符大小写替换
dd – 删除当前行(还是命令模式)
3dd – 删除3行
dw – 删除一个字符
4dw – 删除4个字符
Shift+zz 保存并关闭

插入模式

ESC – 退出插入模式

导航(各种跳)

行跳跃

l - 向右
h - 向左
j - 向下
k - 向上

0 - (零字符)行首
^ - (正则表达式行开始字符) 行首第一个非空字符
$ - (正则表达式行结束字符) 行尾

屏幕跳跃

H – 屏幕第一行
M – 屏幕中间行
L – 屏幕最后一行

单词跳跃

WORD – 非空字符隔开的.
word – 字母,数字,下划线组成的串.
例如:
192.168.1.1 – single WORD
192.168.1.1 – seven words.

e – go to the end of the current word.
E – go to the end of the current WORD.
b – go to the previous (before) word.
B – go to the previous (before) WORD.
w – go to the next word.
W – go to the next WORD.

段落跳跃

{ - 段落开始处
} - 段落结尾处

ubuntu 20.04.4 安装 eBPF bcc

按理讲, 装个 bcc 有啥可记录的? 官方都有详细的安装说明, 直接一步步来不就好了. 其实我一开始也是这么想的. 然而现实很残酷, 花了我至少30分钟.

环境

supra@suprabox:~$ cat /etc/issue
Ubuntu 20.04.4 LTS \n \l

supra@suprabox:~$ uname -a
Linux suprabox 5.4.0-117-generic #132-Ubuntu SMP Thu Jun 2 00:39:06 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

官方安装文档

链接: https://github.com/iovisor/bcc/blob/master/INSTALL.md
关于 kernel 的配置, 由于 Ubuntu 20.04.4 的 kernel 已经是5.4.0, 所以默认已经全配置了.
由于官方说使用 package binary 的2种方式的 package 已经 outdated. 所以选用 source 编译安装.
自己编译需要 LLVM, Clang, cmake, gcc 根据不同的 Ubuntu 版本有不同的安装包, 复制命令执行就好

到真正安装和编译 BCC 的部分的时候, 出问题了:

git clone https://github.com/iovisor/bcc.git
mkdir bcc/build; cd bcc/build
cmake ..
make
sudo make install
cmake -DPYTHON_CMD=python3 .. # build python3 binding
pushd src/python/
make
sudo make install
popd

首先, git clone 在这个国家 clone 不下来, 于是设置代理:

git config --global http.proxy http://proxy.mycompany:80
//如果代理需要用户名密码:
git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080/

好的, clone 成功, 然后一步一步安装编译, 编译的时候, 有出错了, 错误消息大概是这样:

/tmp/bcc/src/cc/bpf_module.cc:108:46: error: no matching function for call to ‘llvm::object::SectionRef::getName() const’
       auto sec_name = section.get()->getName();

这个帖子一样的问题, 还给出了解决方案. 我采用的是使用 v0.24.0 版本. 所以只要切换到这个 tag 就好了:

git checkout v0.24.0

安装完成之后, 直接执行测试命令:

supra@suprabox:/usr/lib/python3/dist-packages/bcc$ sudo ~/bpf/bcc/examples/hello_world.py
Traceback (most recent call last):
  File "/home/supra/bpf/bcc/examples/hello_world.py", line 9, in <module>
    from bcc import BPF
ImportError: No module named bcc

看到之前编译的时候, 使用的是 Python3, 所以看了一些, 系统默认的 python 是2.7:

supra@suprabox:~$ $(which python) --version
Python 2.7.18

于是改用 python3, 就好了:

sudo python3  ~/bpf/bcc/examples/hello_world.py
[sudo] password for supra:
b'         splunkd-5799    [005] .... 47245.389935: 0: Hello, World!'
b'         splunkd-5799    [005] .... 47245.393749: 0: Hello, World!'

supra@suprabox:~$ sudo python3 ~/bpf/bcc/examples/tracing/tcpv4connect.py
PID    COMM         SADDR            DADDR            DPORT
158736 python3.7    127.0.0.1        127.0.0.1        8089
838    qualys-cloud 10.249.64.103    64.39.104.103    443
159247 curl         127.0.0.1        127.0.0.1        8089
158736 python3.7    127.0.0.1        127.0.0.1        8089
159329 curl         127.0.0.1        127.0.0.1        8089

至此, 安装成功.

ftrace

  1. Ftrace 官方是首字母大写 Ftrace;
  2. Ftrace 的 Kernel 文档: https://www.kernel.org/doc/html/latest/trace/ftrace.html
  3. Ftrace 不是一个简单的工具/命令, 而是一个观测内核的框架. 它可以用来 debug/分析延迟/profiling 内核;
  4. 它的延迟分析能够分析在 interrupt 关闭/打开, 抢占关闭/打开的情况下的延迟;
  5. 内核提供了上百个事件(event)的观测, 通过配置 tracefs, 可以通过 Ftrace 看到这些 event 的情况;
  6. Ftrace 使用 tracefs 配置和产生输出;
  7. kernel 支持的 tracer 以及配置 tracer

    pi@raspberrypi:~/tmp $ sudo cat /sys/kernel/tracing/available_tracers
    blk function_graph wakeup_dl wakeup_rt wakeup irqsoff function nop
    sudo echo function_graph > /sys/kernel/tracing/current_tracer

以下都是材料, 还没整理:

  1. 这应该是比较早的关于 ftrace 的邮件: https://lwn.net/Articles/264029/
  2. 关于 ftrace 的一个配置的说明: https://cateee.net/lkddb/web-lkddb/FTRACE.html

Enable the kernel to trace every kernel function. This is done by
using a compiler feature to insert a small, 5-byte No-Operation
instruction to the beginning of every kernel function, which NOP
sequence is then dynamically patched into a tracer call when tracing
is enabled by the administrator. If it's runtime disabled (the bootup
default), then the overhead of the instructions is very small and not
measurable even in micro-benchmarks.

3.https://alex.dzyoba.com/blog/ftrace/#:~:text=Ftrace%20is%20a%20framework%20for,Tracepoints%20support

关于 ftrace 的一些关键字:
框架, NOP, -pg, gcc, gprof, trace-cmd, kernelShark, tracefs, 文件接口, mcount, 所有 kernel 函数, function, function_graph.