前言
记录工作中常用的Linux命令以及工具。
一.tmux
Tmux 是一款可以管理会话和分屏的终端复用器。在远程 SSH 断开后可以继续执行任务,重新连接后再继续会话。也能够将进程放到后台运行,需要时重新接管。为了防止 SSH 因网络断开造成的进程运行中断,推荐把所有需要长期运行的训练等任务都使用 Tmux 终端。
1.创建新会话:
tmux new -s upload_data_session_zhanggen
2.Tmux 窗口
在 Tmux 窗口运行所需的程序。
2.1.上传本地数据至asw s3
trickle -s -u 102400 /usr/local/bin/aws s3 sync /data/changzhiwei/fab_web s3://sw-partner-apus/browser_mobile_2023_new/ --acl bucket-owner-full-control --exclude "*SUCCESS"
2.2.查看AWS s3中已经上传的数据
aws s3 ls s3://sw-partner-apus/browser_2023_04_23/ --human-readable --recursive
2.3.通过rsync上传
rsync -avz /home/zhangjianwei/data/fab/target/2023-04-22.tar.gz root@10.82.8.155::eu-s3
sending incremental file list 2023-04-22.tar.gz sent 1,430,748,967 bytes received 34 bytes 9,699,993.23 bytes/sec total size is 1,430,152,368 speedup is 1.00
3.会话分离
同时按下ctrl+b之后松开,再按下 d,即可正常挂起当前会话。
4.进入分离的会话
下次使用时,重新连接到会话
tmux attach-session -t upload_data_session_zhanggen
5.删除会话
tmux kill-session -t upload_data_session_zhanggen
二、systemd程序管理
启动
systemctl status heimdalld
通过日志排错
journalctl -u heimdall --since="2021-07-29 22:00:00" |grep xxx-xxx |grep -i error
journalctl -u heimdall --since "2019-04-18 7:21:48" --until "2019-04-18 07:21:49"
journalctl -u heimdall -f |grep -i error
三、部署程序
netstat -unlp 查看UDP端口 ps -ef|grep mysql 查看进程ID lsof -p 4721 -nP | grep TCP 查看进程打开了多少连接
lsof -i :端口号 查看监听该前端口的进程
ps -ef | grep pid 通过进程号查看进程 tcpdump -i eth0 src host 10.45.4.8 抓包 scp -r root@10.47.80.111:/zhanggen/bin/python3 /home 从远程服务器上下载文件到/home目录 ps -ef|grep tomcat|grep -v grep|awk '{print $2}'|xargs kill -9
du -h --max-depth=1 查看目录下文件的大小,ls -lh是看的是当前路径文件夹和文件的大小,但是文件夹下的文件ls是看不出来的
top -p pid 查看某个进程使用的内存
四、CI构建相关
1.循环读取文件
while IFS= read -r line; do #echo "$line" done < file_name11
2.sed命令
sed全程Stream Editor(流编辑器);
用于在Linux 上执行基本的文本内容操作,如搜索、查找、修改、插入或删除文件
替换操作
-i:默认情况和匹配失败的情况sed会打印结果到stdout,当添加-i选项时会在适当的位置修改文件,当你添加1个后缀(比如,-i.bak)时就会创建原始文件的备份。
-n:不打印
s: s是1个替换指令 Search_String:搜索1个给定的字符串或正则表达式。 Replacement_String:替换成的新字符串。 g:全局替换标志。默认情况下sed 命令替换每行第1次匹配到的内容,不会替换行中的其他的匹配结果。但是提供了该替换标志时所有匹配都将被替换。 / 和 |:分界符,其中|对路径转义 Input_File:要执行操作的文件名。
替换操作
[root@localhost /]# cat name.txt a bug b c d [root@localhost /]# sed "s|bug|fix|" name.txt a fix b c d [root@localhost /]# sed "s|bug|fix|" name.txt > new.txt [root@localhost /]# cat new.txt a fix b c d
插入操作
在第1行后面插入一行内容=newline
sed "1a\newline" name.txt
获取行号
sed -n '/^z.*1$/=' name.txt
查找和替换每一行内容中“第 N 次”出现的模式
sed 's/windows/linux/3' name.txt
仅替换指定行内容
替换第1行内容
sed '1 s|old|new|' name.txt
替换路径
BASE_IMAGE_NAME=$(echo "$BASE_IMAGE" | sed 's|\(.*\):.*|\1|')
修改Dockerfile第2行内容=@conjur
#/bin/bash update_file="name.txt" update_line_number="2p" update_line_old_content="@conjur" update_line_new_content="COPY ./npmrc-artifactory /root/.npmrc" update_line=$(sed -n "$update_line_number" $update_file) if [ "$update_line" = $update_line_old_content ]; then #执行npmrc sed -i "2 s|$update_line_old_content|$update_line_new_content|" $update_file echo "############$update_line_old_content replaced by $update_line_new_content############" else echo "############$update_file is not changged by sed############" fi echo "############file content star############" cat $update_file echo "############file content end############" echo "process completed at $(date)
3.until do done循环
unti循环和while 循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环。
执行/tmp/buildScript脚本,执行成功不会进入do和done,第1次执行失败后进入do和done,脚本执行失败一共尝试2次;
max_attempts=2 attempt_num=1 #先执行tmp/buildScript脚本,执行成功不会进入do和done,第1次执行失败后进入do和done until time bash -ex /tmp/buildScript; do # 检查/tmp/buildScrip执行执行失败的次数 if [ $attempt_num -ge $max_attempts ]; then echo "Failed to execute buildScript after $max_attempts attempts." exit 1 fi #/tmp/buildScrip执行失败后-切换到官方源 echo "buildScript failed on attempt $attempt_num. Retrying..." echo "registry switch to registry.npmmirror.com" rm -rf ./.npmrc cp -r /root/.npmrc-origin /root/.npmrc rm -rf node_modules/* rm -rf package-lock.json rm -rf pnpm-lock.yaml rm -rf yarn.lock npm cache clean --force rm -rf .pnpm-store rm -rf ~/.yarn/cache attempt_num=$((attempt_num+1)) done
以上这段代码的目的是确保buildScript脚本在执行失败时能够被重试,直到成功或者失败尝试次数达到2次。
如果脚本执行失败,会删除 node_modules 目录下的内容,然后继续重试。
参考