Linux shell -- 组合命令

1、删除指定目录下所有符号链接
find 查找目录 -type l | xargs rm

find 命令不输出错误信息(find: ‘/run/mtx’: Permission denied):
把错误信息被重定向到了/dev/null

find / -name <filename> 2> /dev/null

2、grep
非:排除多个关键字 grep -vE ‘kw1|kw2’ , -E表示是扩展正则表达式,|是扩展正则表达式元字符,表示或操作符
与:同时匹配多个关键字 用管道连接多个grep命令, 即 grep kw1 | grep kw2
或:匹配多个关键字中的一个 grep -E ‘kw1|kw2’, kw1 中有空格也不需要双引号括起来

在当前目录下,在所有文件名含有ERROR的文件中 查找 CostCenter 字符串:
grep -r CostCenter *ERROR*

3、把当前目录下所有文件中的milliseconds=“2000” 改成 milliseconds=“1000”
sed -i “s/2000/1000/g” `grep milliseconds=“2000” . -rl`

4、把dt有关进程都kill掉:
alias kill_dt=‘ps -ef | grep dt | grep -v grep | cut -c 9-15 | xargs kill -9’

5、在当前目录及子目录下查找 文件CMakeLists.txt,这些文件中含有字符串"go"
find . -type f -name CMakeLists.txt -exec grep -in "go" {} \;

6、设置子进程私有变量:

LD_LIBRARY_PATH=. ./main
echo $LD_LIBRARY_PATH  #在父进程打印子进程的自定义变量,没有值
             

LD_LIBRARY_PATH变量 只对main子进程有效,离开了main子进程,LD_LIBRARY_PATH变量为空

7、父进程自定义变量对子进程无效:

LD_LIBRARY_PATH=.
./main
echo $LD_LIBRARY_PATH
.  #在父进程打印其自定义变量,其值有效

上面,main子进程执行中,LD_LIBRARY_PATH为空值。因为LD_LIBRARY_PATH是父进程的自定义变量,自定义变量不会被子进程继承。可以通过export命令把自定义变量变成环境变量(全局变量),环境变量会被子进程继承.

8、sort排序

 sort -r  -nk11 file_name | head

-r 表示按降序排列
-n 表示按照数值比较
-k 表示第几列

9、对ls/find 找出的文件中查找keyword

ls *.txt | xargs grep keyword

等价于:

ls *.txt
a.txt  b.txt  c.txt #结果
grep keyword a.txt b.txt c.txt

xargs 是把ls出的文件作为参数传给grep命令。
xargs读入stdin(管道传递来)的数据,以空格符或换行符作为标识符,将stdin的数据分隔为参数。因为以空格符作为分隔,所以如果文件名中含有空格, xargs会误判。

10、对ls找出的文件中统计每个文件有多少行关键字, 命令1:

 ls *.txt | xargs grep -c keyword 

然后统计所有文件总共有多少行关键字,命令2:

 ls *.txt | xargs grep -c keyword |  awk -F ":" '{sum+=$2}END{print sum}'

其中, awk -F “:” ‘{sum+=$2}END{print sum}’ 表示以 : 分割, 并把第二列加起来。$2表示第2列,$0表示分割前的字符串。

假如命令1输出的文件名中含有:, 则 以下命令中 $3 表示在每个文件中keyword的行数,如果keyword行数大于0,则打印文件名,命令3:

ls *log |  xargs grep -c keyword |   awk -F ":" '{if($3>0)printf "%s:%s\n", $1,$2}'

命令3 输出的文件,对其内容 按制表符分割,如果第10列值大于0,则打印该行。 xargs表示把命令3输出的文件列表作为 当前命令的输入。即在命令3中awk前没有加xargs,则该awk处理的是命令1输出的内容,命令4:

ls 2023-10-23-12*log |  xargs grep -c keyword | awk -F ":" '{if($3>0)printf "%s:%s\n", $1,$2}' | 
xargs awk -F "\t"  '{if($10>1) print $0}' |

11、循环打印nginx worker进程的CPU使用率


while true; 
do
    time=$(date "+%Y-%m-%d %H:%M:%S")
    pstr=$time

    for pid in `ps -ef | grep nginx | grep worker | awk '{print $2}'`
    do
        
        cpu=$(top -bn1 -n 1 -p $pid | tail -1 | awk '{ print $9 }')
        conn=`sudo netstat -anp | grep $pid  | wc -l`
        
        pstr="$pstr pid:$pid,CPU:$cpu,CONN:$conn "
    done    
echo $pstr
done

12、查看打开文件的flags信息

 cat  /proc/<pid>/fdinfo/<fd>

查看打开文件的type

cat  /proc/<pid>/fd/<fd>

13、实时显示占用CPU时钟最多的函数或者指令,因此可以用来查找热点函数

perf top

14、从多个键值对组成的字符串中提取若干个值。
先按逗号分割,选取需要的键值对,并用冒号拼接成一个字符串,然后按照冒号分割,取出需要的字段。例如data.txt文件内容如下:

a1:ddd,b1:ccc,c2:ddd,d1:eeee
a1:xxx,b1:zzz,c2:eeee,d1:wwww

需要从中提取出键b1、c2的值。使用命令如下:

gawk -F, '{print $2 ":" $3}' data.txt  | gawk  'BEGIN{print "b1\tc2"; FS=":"; OFS="\t"} {print $2,$4}'
结果如下:
b1      c2
ccc     ddd
zzz     eeee

15、把excel中某一列转换成sql in查询条件。
1)选中该列并粘贴到vscode中;2)使用正则表达式替换: 查找: \r?\n , 替换 ','
16、正则表达式匹配IPv6地址 :

^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$

17、
./<文件名.sh> 或者 sh <文件名.sh> 是在当前shell的子shell中执行脚本,shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。
. <文件名.sh> 或者 source <文件名.sh> 是在当前shell中执行脚本,可以用来给当前shell设置环境变量
18、
在shell中,圆括号 () 是一种特殊字符,用于创建子shell或命令组。如果命令行参数中有字符(),则使用双引号/单引号引起来。 双引号会解释一些特殊字符,如 $ 和 `,但是不会解释括号 ()。在双引号中,括号 () 会被视为普通字符,而不是 shell 命令的一部分。
在单引号中,所有的特殊字符都会被当作普通字符对待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值