前言

 记录工作中常用的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 目录下的内容,然后继续重试。

 

参考

posted on 2021-12-07 09:58  Martin8866  阅读(44)  评论(0编辑  收藏  举报