虞美人·听雨
虞美人·听雨
[宋] 蒋捷
少年听雨歌楼上,红烛昏罗帐。壮年听雨客舟中,江阔云低、断雁叫西风。
而今听雨僧庐下,鬓已星星也。悲欢离合总无情,一任阶前、点滴到天明。
Bash job control
1. job control是什么job control指暂停执行进程并稍后继续执行它的能力。
bash给每个pipeline关联一个job。
2. 前台进程和后台进程前台(foreground)进程指,与当前终端进程的进程组id(process group id)相同的进程; 反之为后台(background)进程。
区别包括:
前台进程接受键盘生成的信号(如ctrl+c生成SIGINT),后台进程不会接受。
只有前台进程被允许读取终端,后台进程如果尝试读终端会被发送SIGTTIN信号,它会暂停(suspend)该进程。
3. job spec
%<n>指第n个job
%和%%和%+指当前job(即最后一个从foreground暂停或从background启动的job)
%-指前一个job
4. 使用4.1 Ctrl+Z(suspend字符)暂停进程,同时控制权返回给bash。
4.2 Ctrl+Y(delayed suspend字符)在进程尝试读终端时,暂停进程并把控制权返回给bash。
4.3 bg命令用法为bg [<jobspec>... ...
git stash命令用法
1. stash特定文件1git stash push [-m message] <path>...
2. 展示stash内容1git stash show [-p] <index>
<index>为stash索引号数字,不带-p选项只显示变动文件名,带上-p显示变动内容
Linux vim常用命令
1. 查找1.1 向后查找命令为/<search_word>然后回车,使用n定位到下一次出现,使用N定位到上一次出现
1.2 向前查找使用命令?<search_word>
1.3 case-insensitive查找默认是case-sensitive的,若想insensitive,在<search_word>前或者后添加\c
例如/<search_word>\c
2. 替换2.1 全文替换命令为:%s/<search_word>/<replace_word>/g
将全文中所有的<search_word>替换为<replace_word>,这是case-sensitive的
若想case-insensitive,给上述命令添加i选项
2.2 每次替换时询问若想在每次替换实际发生时询问是否确认,给上述命令添加c选项(c表示confirmation),即
:%s/<search_word>/<replace_word>/gc
在prompt出现时的回答包括:
y,表示ye ...
git submodule命令用法
1. 含义submodule指向子模块仓库一个特定的commit,也可以追踪子模块仓库一个特定的分支
2. 常用命令2.1 添加子模块1git submodule add [-b branch] <repository> [<path>]
添加<repository>的branch分支到<path>目录
2.2 clone主仓库1git clone --recursive <parent-repository>
在克隆主仓库时同时克隆其中包含的子模块
2.3 下载主仓库的所有子模块内容1git submodule update --init --recursive
2.4 更新到子模块远程仓库的状态1git submodule update --remote
这个命令会改变submodule指向的子模块仓库中的具体commit
2.5 修改submodule指向的commit123456789cd <path-to-submodule>git checkout <some-commit>cd & ...
Linux sed命令使用方法
1. 缩写sed是stream editor的缩写。
2. 常用选项
-i,原地修改输入文件
3. 常见使用场景3.1 替换某个文本的所有出现使用方法为sed 's/<word1>/<word2>/g' input.txt
s指substitution(替换)
/是分隔符,也可以是其他字符作分隔符,如+
<word1>是被替换的字符串
<word2>是要替换为的字符串
g表示global(全局替换),不指定g的话只会替换每一行的第一次出现的<word1>。
3.2 删除指定行行编号都是从1开始
sed '<n>d' input.txt,删除第<n>行
sed '$d' input.txt,删除最后一行
sed '<start>,<end>d' input.txt,删除第<start>到<end>行(闭区间)
4. sed的正则表达式sed默认使用Basic Regul ...
Linux生成动态库
1. -fPIC选项所有作为输入的目标文件和静态库在编译时必须添加了-fPIC选项,才能生成动态库。
2. 生成动态链接库使用g++命令把多个静态库和目标文件生成动态库
1234567g++ -Wl,--whole-archive -l:<libfirst.a> -l:<libsecond.a> ... -Wl,--no-whole-archive -l:<libthird.a> ... <object_first.o> <object_second.o> ... -Wl,-L<lib_path> -shared -o <libshared.so>
-Wl,--whole-archive后指定需要包括其中所有目标文件的库
-Wl,--no-whole-archive用以取消-Wl,--whole-archive的后续作用
-Wl,-L<lib_path>用以添加库文件查找目录
-shared表明此次链接要创建一个动态库
-o <libsh ...
Linux生成静态库
1. 使用ar -M [ < merge.script ]命令写一个脚本merge.script,将脚本重定向给ar -M命令的stdin。
使用create传入输出的静态库文件名,addlib传入输入的静态库,addmod传入输入的目标文件,最后调用save和end。
123456789create <libmerged.a>addlib <libfirst.a>addlib <libsecond.a>...addmod <object_first.o>addmod <object_second.o>...saveend
2. 注意排列顺序把必须包括其所有符号的输入库放在前面,因为在后面库中包含重复符号名的时候可能直接丢弃以前面为准。
3. 参考
stackoverflow
文档
Linux nm命令常见用法
1. nm命令单词name的简称,用于查看二进制目标文件中的符号信息
2. 输出三列,分别是(1)符号地址(2)符号类型(3)符号名
常见符号类型包括(1)”T”,”t”,代码段中的符号(2)”U”(大写字母u),未定义的符号
3. 常用选项3.1 -A在每一行都显示文件名
3.2 -C符号名demangle
3.3 -u,小写字母u只显示未定义的符号
Linux ldd命令使用方法
1. 作用打印可执行程序或者动态库的动态库依赖
2. 工作原理ldd是一个可执行shell脚本,其设置LD_TRACE_LOADED_OBJECTS环境变量为非空值,调用动态链接器ld.so
例如,为了查看ls命令的依赖,ldd /usr/bin/ls
相当于
LD_TRACE_LOADED_OBJECTS=1 /lib64/ld-linux-x86-64.so.2 /usr/bin/ls
