shell

shell

# 逻辑关系算术
a=5
b=10
c=1
a=$((a*2/5+1))
if [ ! $a -lt $b -a $a -gt $c ];then
    echo "$a"
    print "%d\n" $a
fi
## :string
[ $s1 = $s2 ]
[ $s1 != $s2 ]
[ -z $s1 ]
[ -n "$s1" ]
## :file
[ -f/d/L/b/c/p/S/r/w/x/u/g/k/e/s file ]
## :array
array="go,to,where"
IFS=','
set -- $arrstr
IFS=' '
for x in $@;do
done
## :掐头去尾替换
${str%.txt}
${str#head}
replace=$(echo "hello cpp world cpp" | sed 's/cpp/sh/g')# ${str//cpp/sh}

# 选择循环跳转
if [ -f file ];then
    echo "file"
elif [ -d dir ];then
    echo "dir"
else
    echo "other"
fi

case $x in
    1) echo "1";;
    2|3) echo "2";;
    *) echo "x";;
esac

for var in "hello world to shell";do
    echo "$var"
done

while/until [];do
    echo x
done

# 函数
myfun () {
    echo "$1 $2 $3"
    echo "$*"
    echo "$@"
}
myfun 1 2 3

gdb tips

gdb [OPTIONS] [program [procID or progfile core]] gdb -p pid

info threads
thread id
#只有当前被调试线程会执行|默认全部执行|当next or step时同on,continue-until-finish等大跳转则全部运行,此时遇到断点(包括另一线程处的断点)则切换为当前线程
set scheduler-locking on|off|step
#默认,fork之后父子独立://默认追踪父进程//追踪子进程
detach-on-fork on;follow-fork-mode parent
detach-on-fork on;follow-fork-mode child
#fork之后block在该位置://默认追踪父进程,子进程block在fork位置//追踪子进程,父进程block在fork位置
detach-on-fork off;follow-fork-mode parent
detach-on-fork off;follow-fork-mode child

#汇编
disas[semble]

valgrind内存泄漏分析

valgrind ./app

perf性能热点分析

perf stat -p pid

sed

# 执行文件的第5行命令
sed -n '5p' cmd |bash
# 批量查找替换文件内容
sed -i 's/LD_LIBRARY_PATH=./LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH/g' *.sh

gcc/g++

https://www.runoob.com/w3cnote/gcc-parameter-detail.html

# 同时链接动态库(默认)和静态库
g++ -Wl,-Bstatic -L. -lx -Wl,-Bdynamic -L. -ly
# 生成intel汇编语法
cc -S -masm=intel add.c
# Optimization
-O0:不优化
-O/-O1/-Og:等价表示,g在1基础上增强debug
-O2/-Os/-Oz:s和z进一步在2基础上优化大小
-O3/-Ofast:fast在3基础上优化速度

快捷拷贝程序依赖的动态库

ldd app |awk '{print $3}' |xargs -i cp -L {} mdir/

ssh

# 生成.ssh/id_rsa.pub 并且远程添加公钥
ssh-keygen -t rsa -C "lets2rs@126.com"
cat .ssh/id_rsa.pub | ssh root@47.106.171.40 "cat - >>~/.ssh/authorized_keys"
# ssh代理连接
ssh -v -i id_rsa -oProxyCommand="ssh -i id_rsa yh@35.75.184.13 -p 10022 -N -W %h:%p" yh@10.64.4.45
# ssh免(输入)密码连接
sshpass -p BoyuUbuntu ssh boyu@192.168.0.20

远程拷贝

scp dlib.tar.xz cat@119.27.182.173:/home/cat/tp
rsync --partial -z -e 'ssh -v -i id_rsa -oProxyCommand="ssh -i id_rsa yh@35.75.184.13 -p 10022 -N -W %h:%p"' mCtrl.tar.xz yh@10.64.4.45:~

测试udp连通性:端口占用-存在即使成功也不起作用的情况

nc -vuz 172.18.0.12 36802

测试udp连通性:端口占用

server:nc -lu 36802
client:nc -u 127.0.0.1 36802

查看程序占用的ip和端口号

netstat -[a|4]pn

tcpdump:抓取100源地址和36802的目的端口,tcp/udp用来修饰端口的

tcpdump -i ens5 -An src host 10.64.2.100 and udp dst port 36802

curl

# 模拟HTTP请求
curl 127.0.0.1:9909
# 下载文件类似wget,加k不进行ssl校验
curl -LOk https://ziglang.org/download/0.11.0/zig-0.11.0.tar.xz

ps查看进程

ps -ef
# 查看某进程的线程
ps -T -p pid
top -H -p pid

kill

kill -9 pid
pkill -f marketCtrl

git

# name,email,then need id_rsa for clone in git@
git config --global -e
git config --global user.name "[name]"
git config --global user.email "[email address]"
git config --global core.editor vi
git config --global http.sslverify false
# 暂存与恢复
git stash
git stash pop
# 丢弃工作区的修改或删除,不含新增或未追踪
git checkout .
# 删除所有未追踪的文件或目录,保险起见先查即将删除项:git clean -nxdf
git clean -df
git clean -xdf
# 加入暂存(当前目录不含.xx|当前目录|版本库所有目录)
git add [*|.|-A]
# 查看pull/push所用协议,更改使ssh密钥起作用
git remote -v 
git config remote.origin.url git@gitlab.com:lets2rs/helix.git

查看log文件

tail -f x.log #退出ctrl+c
less +F x.log #退出ctrl+c;q