find命令
find -name 是按照名字全匹配的去找文件的,不是模糊匹配。
vim 复制、剪切、粘贴
https://cloud.tencent.com/developer/article/1626821
命令y是复制yanking

命令d是剪切deleting

命令p是粘贴paste

按v进入可视化状态,选择需要删除、复制的内容。但是这些都只是在同一个文件下的vim操作,不能跨文件复制粘贴。
将vim的内容复制到系统别的程序上
https://harttle.land/2020/09/04/vim-clipboard.html
https://www.cnblogs.com/gmpy/p/11177719.html
首先要看vim是否支持
vim --version | grep clipboard

可以看到前面都是减号
另一方面也可以在vim中执行:reg查看寄存器,如果没有下面两个寄存器,也可以判断没有办法复制到系统剪切板

Linux 命令行快捷键
涉及在linux命令行下进行快速移动光标、命令编辑、编辑后执行历史命令、Bang(!)命令、控制命令等。让basher更有效率。
- 常用
-
ctrl+左右键 : 在单词之间跳转
-
ctrl+a : 跳到本行的行首
-
ctrl+e : 跳到页尾
-
Ctrl+u :删除当前光标前面的文字 (还有剪切功能)
-
ctrl+k :删除当前光标后面的文字(还有剪切功能)
-
Ctrl+L:进行清屏操作
-
Ctrl+y : 粘贴Ctrl+u或ctrl+k剪切的内容
-
Ctrl+w : 删除光标前面的单词的字符(以空格隔开的字符串)
-
Alt – d :由光标位置开始,往右删除单词,往行尾删
-
Ctrl+r : 搜索执行过的命令
-
! + 最近执行过的命令中的某个字符 :可快速执行最近执行过的命令
-
fs -l :显示部分历史命令
说明
-
Ctrl – k: 先按住 Ctrl 键,然后再按 k 键;
-
Alt – k: 先按住 Alt 键,然后再按 k 键;
-
M – k:先单击 Esc 键,然后再按 k 键。
移动光标
-
Ctrl – a :移到行首
-
Ctrl – e :移到行尾
-
Ctrl – b :往回(左)移动一个字符
-
Ctrl – f :往后(右)移动一个字符
-
Alt – b :往回(左)移动一个单词
-
Alt – f :往后(右)移动一个单词
-
Ctrl – xx :在命令行尾和光标之间移动
-
M-b :往回(左)移动一个单词
-
M-f :往后(右)移动一个单词
编辑命令
-
Ctrl – h :删除光标左方位置的字符
-
Ctrl – d :删除光标右方位置的字符(注意:当前命令行没有任何字符时,会注销系统或结束终端)
-
Ctrl – w :由光标位置开始,往左删除单词。往行首删
-
Alt – d :由光标位置开始,往右删除单词。往行尾删
-
M – d :由光标位置开始,删除单词,直到该单词结束。
-
Ctrl – k :由光标所在位置开始,删除右方所有的字符,直到该行结束。
-
Ctrl – u :由光标所在位置开始,删除左方所有的字符,直到该行开始。
-
Ctrl – y :粘贴之前删除的内容到光标后。
-
ctrl – t :交换光标处和之前两个字符的位置。
-
Alt + . :使用上一条命令的最后一个参数。
-
Ctrl – _ :回复之前的状态。撤销操作。
Ctrl -a + Ctrl -k 或 Ctrl -e + Ctrl -u 或 Ctrl -k + Ctrl -u 组合可删除整行。
Bang(!)命令
-
!! :执行上一条命令。
-
foo
-
bar :把上一条命令里的foo替换为bar,并执行。
-
!wget :执行最近的以wget开头的命令。
-
!wget:p :仅打印最近的以wget开头的命令,不执行。
-
!
-
_` 相同。
-
!* :上一条命令的所有参数
-
!*:p :打印上一条命令是所有参数,也即
-
!*
-
的内容。
-
^abc :删除上一条命令中的abc。
-
foo
-
bar :将上一条命令中的 foo 替换为 bar
-
foo
-
bar^ :将上一条命令中的 foo 替换为 bar
-
!-n :执行前n条命令,执行上一条命令:
-
!-1
-
, 执行前5条命令的格式是:
-
!-5
查找历史命令
-
Ctrl – p :显示当前命令的上一条历史命令
-
Ctrl – n :显示当前命令的下一条历史命令
-
Ctrl – r :搜索历史命令,随着输入会显示历史命令中的一条匹配命令,Enter键执行匹配命令;ESC键在命令行显示而不执行匹配命令。
-
Ctrl – g :从历史搜索模式(Ctrl – r)退出。
控制命令
-
Ctrl – l :清除屏幕,然后,在最上面重新显示目前光标所在的这一行的内容。
-
Ctrl – o :执行当前命令,并选择上一条命令。
-
Ctrl – s :阻止屏幕输出
-
Ctrl – q :允许屏幕输出
-
Ctrl – c :终止命令
-
Ctrl – z :挂起命令
重复执行操作动作
- M – 操作次数 操作动作 : 指定操作次数,重复执行指定的操作。
mac下操作shell终端的快捷键

vim快捷键

vim高亮多处 搜索多个内容
/content1\|content2\|content3
WSGI 服务器网关接口
wsgi web server gateway interface
是为python语言定义的服务器与应用程序之间的简单而通用的接口,WSGI区分为两个部分:一为“服务器”或“网关”,另一为“应用程序”或“应用框架”。在处理一个WSGI请求时,服务器会为应用程序提供环境信息及一个回调函数(Callback Function)。当应用程序完成处理请求后,透过前述的回调函数,将结果回传给服务器。
https://zhuanlan.zhihu.com/p/95942024


简单来说,django和tornado是实现了wsgi的框架,整体逻辑就是接受一个请求对象(例如HttpRequest),然后执行函数,通过回调函数,将结果(例如HttpResponse)回给用户。
WSGI接口定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求。
像tornado中定义的Class中的get、post成员函数,django中views.py中定义的函数。是一种框架层面的设计,开发者只需要关注业务函数。
vscode c++ 自动补全
安装好C/C++插件后即可,但如果这样还是没有办法正确补全代码,例如不知道成员函数的情况,可以在settings中搜索IntelliSense,将IntelliSenseEngine选项修改为default,网上有人说修改成Tag-Parse,自己原本是Tag-Parser,改成default之后就正常了。
打开语法检查
https://www.cxyzjd.com/article/weixin_43901865/112604436
删除符号链接
unlink symbol_file
rm -i symbol_file
查看系统可用的端口范围
cat cat /proc/sys/net/ipv4/ip_local_port_range
vim删除空行和注释(搭配正则使用)
https://www.cnblogs.com/carbon3/p/5915282.html
1、删除空行
:g/^$/d
2、删除空行或只有空格的行
:g/^\s*$/g
3、删除以#、空格#、tab#开头的行
:g/^\s*#/d
4、使用正则匹配删除行
:/bbs/d 如果当前行有bbs字样 则删除该行
vim跨行搜索匹配
-
\ n换行符(行尾)
-
\ _s是一个空格(空格或制表符)或换行符
-
\ _ ^开始一行(零宽度)
-
\ _ $一行的结束(零宽度)
-
\ _. 任何字符,包括换行符
举例:
/transLang\nug 搜索行尾为transLang,下一行开头为ug的
vim的所有搜索都可以搭配正则表达式使用
删除文件中的非unix控制字符 例如^M
最简单的使用dos2unix程序
dos2unix filename
std::stol stoll stoi stoull c++11
https://en.cppreference.com/w/cpp/string/basic_string/stol

这一系列函数都是将字符串转为对应的整数类型,但是如果字符串首字符不是数字,则会抛invalid argument异常,可能导致程序core
如果字符串是“12345helloworld”,那么只会转换到第一个非数字之前,结果为12345
没有stoul,这个转换成uint32的函数是c库函数提供了,名为strtoul
函数默认是十进制转换
tcpdump
https://juejin.cn/post/6844904084168769549
tcpdump host noahes.isec.oa.com -ieth1 -A
tcpdump dst port 9620 -A -i eth1 | egrep -i "POST /|GET /|Host:"
抓http包是可以直接看内容的,如果是json的话,可以直接看出传输的内容
curl常用用法
https://itbilu.com/linux/man/4yZ9qH_7X.html
vim粘贴时缩进乱了的处理方法
在粘贴之前,先执行
:set paste 进入粘贴模式,这样就不会有缩进问题了
:set nopaste 取消粘贴模式
elasticsearch 的scroll
es查询回包中,有hits.totals字段,这个值表明了我们需要匹配的条件总共查到了有多少个文档记录,这个值不是我们指定的size大小,size是确切要es这次返回的结果数量,是hits.hits数组的最大值
scroll是像卷轴一样,每次返回多少个结果,假如scroll的大小是10000,那么每次最多返回10000个数据,像卷轴一样慢慢滚动返回,使用之前的查询参数再次请求es。类似于让es做分页了一样。python的ElasticSearch库就有scroll这个函数,就是实现这个功能的。
find 查找 指定排除查找路径
find . ( -path ./venv -o -path ./appfront -o -path ./log -o -path ./install_jaeger ) -prune -o -type f
-prune 使用该选项,表示不在指定的路径下查找
-path 就是指定了相关路径,小括号里的-o是一个二元运算符,表示逻辑或,外层的-o表示取并集,所以达成的效果是不在多个指定的目录下搜索,要注意小括号内的内容要和小括号有空格隔开。
pathname 命令所查找的目录路径
options 模块
-depth 从指定目录下最深层的子目录开始查找
-maxdepth levels 查找的最大目录级数,levels为自然数
-regextype type 改变正则表达式的模式,默认为emacs
tests 模块
-mtime [-n|n|+n] 按照文件的修改时间来查找文件(-n 文件更改距离现在n天以内,+n表示文件更改时间距离现在n天以前,n是距离现在第n天)
-atime [-n|n|+n] 按照文件的访问时间来查找文件
-ctime [-n|n|+n] 按照文件的状态改变时间来查找文件
-amin 按照文件的访问时间来查文件,单位为分钟
-cmin 按照文件的状态时间改变来查找文件,单位为分钟
-mmin 按照文件的状态修改时间来查找文件,单位为分钟
-group 按照文件属主来查找文件
-name 按照文件名来查找文件,只支持*,?,[]等特殊通配符
-newer 查找更改时间比指定文件新的文件
-nogroup 查找没有有效用户组的文件,即/etc/group中不存在
-nouser 查找没有有效属主的文件,即/etc/passwd中不存在
-path pattern 指定路径样式
-perm 按照文件权限来查找文件
-regex 按照正则表达式
-iregex 接正则表达式,不区分大小写
-size n[cwbkmg] 查找文件长度为n块的文件
-user 按照文件属主来查找文件
-type 模块
b 块设备
c 字符设备
d 目录
p 管道文件
l 符号链接文件
f 普通文件
s socket文件
D door
actions模块
-delete 将查找出的文件删除
-exec 对匹配的文件执行该参数所给出的shell命令
-ok 和-exec作用相同,但在执行每个命令之前,都会让用户先确定
-prune 使用这一选项可以使find命令不在当前指定目录中查找
-print 将匹配的文件输出到标准输出
! 取反
-a 取交集
-o 取并集
无服务器架构
https://www.redhat.com/zh/topics/cloud-native-apps/what-is-serverless#%E6%A6%82%E8%BF%B0
https://jimmysong.io/kubernetes-handbook/usecases/serverless.html
Serverless(无服务器架构)指的是由开发者实现的服务端逻辑运行在无状态的计算容器中,它由事件触发, 完全被第三方管理,其业务层面的状态则被开发者使用的数据库和存储资源所记录。
简单来说,就是开发人员不需要关心底层设备的扩缩容和管理,只需要关心自己写的业务逻辑,由架构本身来保证你的代码可以执行和响应请求,通过容器编排,来执行你的业务逻辑代码。
是在PaaS上更抽象的一层;只要是开发人员使用时,不需要去关心底层设备和资源的,都可以看作是无服务架构。
IaaS PaaS SaaS对比

vscode c_cpp配置(远端)
includePath给出了全局的包含路径
https://code.visualstudio.com/docs/editor/variables-reference
链接给出了vscode内置的路径变量
{
"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: Google, IndentWidth: 4,ColumnLimit: 100}",
"C_Cpp.clang_format_path": ".",
"clang-format.style": "file",
"clang-format.executable": "/usr/bin/clang-format",
"clang-format.fallbackStyle": "Google",
"C_Cpp.errorSquiggles": "Enabled",
"clang.cxxflags": [
"-std=c++11"
],
"C_Cpp.default.includePath": [
"/root/is_trpc/**",
],
"clang.executable": "/usr/bin/clang",
}
Mac下安装homebrew
https://blog.csdn.net/qq_42351033/article/details/116566478
https://zhuanlan.zhihu.com/p/111014448
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
Mac下安装npm
1、安装 node
brew install node
2、npm升级
npm是随着nodejs安装一并安装的。 更新npm,可以用npm命令。
npm install npm -g
3、npm 常用命令
本地安装, 安装在当前目录
npm install xx
查看所有全局安装的模块
npm list -g
查看某个模块的版本号
npm list grunt
卸载模块
npm uninstall xxx
卸载后,可以cd到node_modules/目录下查看,或者使用命令查看:
npm ls
更新模块
npm update xx
搜索模块
nm search xx
mysql查看建表时间
select CREATE_TIME,TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = 'ucase_task' order by create_time desc;
diff时间
https://blog.csdn.net/laowang2915/article/details/79666642
mysql 命令行参数
https://blog.csdn.net/embedded_sky/article/details/41966037
shell字符串拼接
http://c.biancheng.net/view/1120.html
mysql noexists用法
insert into tableA select * from tableB where
noexists(select * from tableB where tableA.id=tableB.id);
这个语句其实就是将tableB的数据导入到tableA中,但是只导入tableA中没有的记录;
逻辑是,以tableB(被导入表)的记录去匹配tableA的记录,如果有,说明tableA中已经有了这条记录,那么对应的tableB的这条记录不会被插入到tableA中,反之则会插入。
excel的vlookup函数
这个函数是用来匹配查找的,根据某行某个值来查找然后获取对应命中的行的一些字段值
https://zhuanlan.zhihu.com/p/29161495
=VLOOKUP(D823,sheet_name!$AG$7063,2,FALSE())
D823是要被匹配内容,sheet_name是要被匹配的表,$AG$7063这是一个区域,表示从A列的第一行到G列的7063行这个矩形区域内,去查找D823格的内容,FALSE()表示精确匹配,否则为模糊匹配,数字2表示刚刚说的区域的第几列,这个意思是说,如果在这个区域匹配到的某一行,选择哪一列的值作为结果值。
C++的静态变量
https://www.runoob.com/w3cnote/cpp-static-usage.html
这里特意记录下局部静态变量的事,全局静态变量和全局变量都比较熟悉。
局部静态变量和全局静态变量没有什么区别,只是全局的话,在函数进入main的时候已经在数据段或者BSS段(为初始化全局数据段)中生成了对象,而函数内部的局部静态变量,则要到执行函数的时候才会生成。
但是静态变量的特性不变,唯一和共享,直到函数结束才会释放内存。

grep 查询文件中的内容 并去重
grep -R "priority" ./* | awk '{print $1}' | uniq