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更有效率。

  • 常用
  1. ctrl+左右键 : 在单词之间跳转

  2. ctrl+a : 跳到本行的行首

  3. ctrl+e : 跳到页尾

  4. Ctrl+u :删除当前光标前面的文字 (还有剪切功能)

  5. ctrl+k :删除当前光标后面的文字(还有剪切功能)

  6. Ctrl+L:进行清屏操作

  7. Ctrl+y : 粘贴Ctrl+u或ctrl+k剪切的内容

  8. Ctrl+w : 删除光标前面的单词的字符(以空格隔开的字符串)

  9. Alt – d :由光标位置开始,往右删除单词,往行尾删

  10. Ctrl+r : 搜索执行过的命令

  11. ! + 最近执行过的命令中的某个字符 :可快速执行最近执行过的命令

  12. 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!$A1:1:G$7063,2,FALSE())

D823是要被匹配内容,sheet_name是要被匹配的表,$A1:1:G$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