misc

一些杂七杂八的指令(组合)

# 用指定IP和Port连某台机器
ssh -i ~/.ssh/my_id_rsa yourname@remote_ip -p port

# 用scp直接从A机器往B机器拷贝文件(跳过本地中转过程)
scp -3 machine_a:/home/yourname/test.txt machine_b:/home/yourname/downloads/
# 用scp传文件夹
scp -r /path/to/local/folder username@remote:/path/to/remote/folder

# 查看Linux版本信息(Debian)
cat /etc/os-release

# 批量清空文件(如日志)
find somedir/ -name your_pattern_*.log -exec dd if=/dev/null of={} \;
find somedir/ -name your_pattern_*.log | xargs -I {} sh -c "cat /dev/null > {}"

# 计算一个目录下所有文件的md5总和
find /path/to/directory -type f -print0 | sort -z | xargs -0 cat | md5sum

# pip安装指定版本的库(pip3同理)
pip install gevent==1.4.0 greenlet==0.4.15
pip install -r requirements.txt	# 从文件安装(pip freeze > requirements.txt得到)

# vim删除包含特定字符串的行
%g/debug/d
# vim删除不包含特定字符串的行
%g!/debug/d

# 查看某个进程监听了哪些tcp端口(去掉grep那部分可以看进程打开的所有文件)
lsof -p 17637 | grep -i tcp
# 查看打开了某个文件的所有进程
lsof -a /lib/x86_64-linux-gnu/libutil-2.19.so
# 查看监听了udp的进程
lsof -i udp
# 查看使用了8888端口的进程
lsof -i :8888

# 查看当前所有进程,按线程数排序(这样可以找到创建线程最多的进程)
ps -eLf | sort -nrk 6,6 | head

# 查找某个.so是否有某个符号
nm -D /lib/x86_64-linux-gnu/libdl-2.28.so | grep dlsym
# 查看demangle后的符号(底层形式转换成用户可读形式)
nm -C /usr/lib/x86_64-linux-gnu/libresolv.a 

# 查看二进制都加载了哪些.so
ldd /usr/bin/python3.7

# 查看二进制的动态库部分,可用于看RUNPATH,方便知道它的动态库搜索路径
readelf -d ./bin/my_bin
# 查看二进制的符号表(看.so或者.a也可以的,尤其是系统的库,这个貌似nm看不到)
readelf -s ./bin/my_bin

# 查找是否安装了某个库
dpkg -l | grep libmongoc-dev
# 查找某个库的库文件及头文件位置
dpkg -L libmongoc-dev

# 查看文件的创建/修改时间信息
stat filepath

# 创建软连接,ln -s target_path link_path
# 文件:
sudo ln -s /lib/x86_64-linux-gnu/libicuuc.so.67 /lib/x86_64-linux-gnu/libicuuc.so
# 文件夹,需要保证/usr/local/python3/include存在,sudo mkdir -p /usr/local/python3/include:
sudo ln -s /usr/local/include/python3.7m /usr/local/python3/include/python3.7m 

# 检查tcp连通性
telnet 127.0.0.1 1234 
# 也可以用nc,如:nc 127.0.0.1 1234;如果看udp,就加-u,如:nc -u 127.0.0.1 1234,但nc不一定有,要装
# 检查udp连通性
nc -vuz 127.0.0.1 1234
# 如果双端都有nc,可以这样:
nc -u -l -p 12345   # 服务端
echo "hello" | nc -u dest_ip 12345  # 客户端
# 这样服务端会显示hello,不过好像只能一次,再用就只能两边ctrl+c再来

# perf相关
# 直接启动
perf record -o ~/tmp/test_perf.data your_command
# 分析perf数据
perf report -i ~/tmp/test_perf.data
# 更多请查看:https://www.brendangregg.com/perf.html

# ag相关
# 只匹配py文件(ag --list-file-types查看支持的类型,常用有--cc和--cpp):
ag --python -w keyword ./dir_to_match