Linux常用命令 shell脚本for QA-数据脱敏版4

9. nohup命令

以下命令在后台执行 root 目录下的 runoob.sh 脚本,并重定向输入到 runoob.log 文件:

nohup /root/runoob.sh > runoob.log 2>&1 &

2>&1 解释:

将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。

  • 0 – stdin (standard input,标准输入)

  • 1 – stdout (standard output,标准输出)

  • 2 – stderr (standard error,标准错误输出)

8.过滤单个多个文件夹 删除其他所有文件夹

过滤单个文件夹 删除其他所有文件夹

ls | grep -v 2022-08-30-15-17-18 | xargs rm -rf

ls | grep -v 2022-10-28-15-40-54 | xargs rm -rf

反向查找 grep -Ev 多个过滤文件夹 过滤多个文件夹

ls|grep -Ev '2022-09-05-14-47-18|a' | xargs rm -rf

ls | grep -Ev '2022-11-03-16-14-28|2022-11-03-16-10-06' | xargs rm -rf

7. Linux如何将文件中的多行转换成1行

使用awk将文件中的多行转换成1行
1. 采用awk
awk默认将记录分隔符(record separator即RS)设置为\n,此行代码将RS设置为EOF(文件结束),也就是把文件视为一个记录,然后通过gsub函数将\n替换成空格,最后输出。

[root@localhost ~]# awk BEGIN{RS=EOF}'{gsub(/\n/," ");print}' file

2. cat file | xargs
这可能是最简单的一种方式。

[root@localhost ~]# cat file | xargs echo

6. linux中删除指定文件以外的其它所有文件

ls | grep -v keep | xargs rm -rf

删除keep文件之外的所有文件
说明: ls先得到当前的所有文件和文件夹的名字, grep -v keep,进行grep正则匹配查找keep,-v参数决定了结果为匹配之外的结果,也就是的到了keep之外的所有文件名,然后 xargs用于从标准输入获得参数 并且传递给后面的命令,这里使用的命令是 rm,然后由rm删除前面选择的文件。
好处:使用了grep来正则表达式来匹配文件名字,可以一次保留多个文件,从而进行更加准确的处理

ls | grep -v 2022-08-30-15-17-18 | xargs rm -rf

反向查找 grep -Ev 多个过滤文件夹 过滤多个文件夹

ls|grep -Ev '2022-09-05-14-47-18|2022-08-30-15-17-18' | xargs rm -rf

5. linux中查看文件大小,以G为单位

ls -lh

4. 查看容器状态

[root@xx-vm ~]# docker ps |grep Dis  查找某个容器
dc1671b820b4   harbor.xx.com/xx/xx-vnc                               "./Dispatcher.out"       5 days ago     Up 5 days     0.0.0.0:5500->5500/tcp, :::5500->5500/tcp, 0.0.0.0:5901->5901/tcp, :::5901->5901/tcp                                                                                                         xx-vnc
[root@xx-vm ~]# docker exec -it dc1671b820b4 /bin/sh  进入容器

# ls
Dispatcher.out    Dispatcher.txt
# cat Dispatcher.txt

3. 查看日志mqtt

docker ps 

docker ps |grep log

docker logs 容器id

出现mqtt connection success  服务端下发消息了

如下mqtt消息失败

docker ps |grep tci-api  查找服务

docker logs 容器id

2. Linux CPU负载过高排查方法

Linux CPU负载过高排查方法 - 云+社区 - 腾讯云

问:如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?

步骤一、找到最耗CPU的进程

工具:top

方法:

  • 执行top -c ,显示进程运行信息列表
  • 键入P (大写p),进程按照CPU使用率排序

如上图,最耗CPU的进程除了root的PID为768  --左图1

步骤二:找到最耗CPU的线程

工具:top

方法:

  • top -Hp 768 ,显示一个进程的线程运行信息列表
  • 键入P (大写p),线程按照CPU使用率排序

如上图,进程768内,最耗CPU的线程PID为1009 --右图2

步骤三:将线程PID转化为16进制

工具:printf

方法:printf “%x” 1009

图示:

如上图,1009对应的16进制是3f1,当然,这一步可以用计算器。

之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。

步骤四:查看堆栈,找到线程在干嘛

工具:pstack/jstack/grep

方法:jstack 10765 | grep ‘0x2a34’ -C5 --color

  • 打印进程堆栈
  • 通过线程id,过滤得到线程堆栈

图示:

如上图,找到了耗CPU高的线程对应的线程名称“AsyncLogger-1”,以及看到了该线程正在执行代码的堆栈

1. shell对指定文件夹中文件进行过滤,排除某个文件夹,并修改文件内容的shell脚本

#!/bin/sh
#cd 后面的内容为执行文件夹,即需要替换字符串的文件夹
cd /Users/qa/Desktop/2021/code/cloud/cloud-api/src/main/java/dataCheck/cmo200

#遍历文件,并对文件中的内容进行全部替换
for file in `ls |grep -v replace.sh`
do
 echo $file
 sed -i '' 's/150/200/g' $file |grep -v replace.sh
 sed -i '' 's/cmo15/cmo20/g' $file |grep -v replace.sh
 sed -i '' 's/边缘端资源管理容器资源存储管理/边缘端资源管理容器资源存储管理/g' $file |grep -v replace.sh

done

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方狱兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值