常用代码段

包括 shell、SQL 以及一些常用命令的集合。

shell批量修改文件名

1
2
3
4
5
for file in `/bin/ls | grep .cfg`
do
newfile=`echo $file | sed 's/\r//g'`
mv $file $newfile
done

shell判断目录是否存在

1
2
3
4
5
dir="/opt/install/"
if [ ! -d "$dir" ]; then
echo DIR "'$dir'" is not exist!
exit 1
fi

sql查询表中某字段重复的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT * FROM vm_info_tab
WHERE
ip IN (
SELECT
ip
FROM
vm_info_tab
GROUP BY
ip
HAVING
COUNT(*) > 1
)
AND ip != '';

抓包

1
tcpdump -X -nn -i any host 172.20.79.85 and port 8080 -s 0 -w raw.pcap

其中的ip和端口代表目的地址和端口。-w将包重定向到raw.pcap文件中,然后可以通过wireshark进行分析。

shell小数比较

shell对于数值的判断都是基于整数的,如果碰到小数就无能为力了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env bash
a=$1
b=$2
# 此方法需要bc支持,若报错则需要安装bc
if [ $(echo "$a > $b" | bc) -eq 1 ];then
echo $a is bigger
else
echo $b is bigger
fi

# float number comparison,不需要外部插件支持
fcomp() {
awk -v n1="$1" -v n2="$2" 'BEGIN {if (n1+0>n2+0) exit 0; exit 1}'
}

# test and example
if fcomp "$a" "$b"; then
echo "$a>$b"
else
echo "$a<=$b"
fi


# 另外,网上流传下面的方法,这种方法是比较的字符串,是不能作为数值比较的方法的!参照测试结果

if [ `expr $a \> $b` -eq 1 ];then
echo $a is bigger
else
echo $b is bigger
fi

测试结果,明显第二种方法是有问题的:

1
2
3
4
[root@CESHI-CLM-10-254-4-48 liuhao]# source test.sh 19.2 3.3
19.2 is bigger
3.3 is bigger
19.1>3.3

根据hosts批量操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 批量建立互信
for host in $(cat host);
do
ssh-copy-id -i .ssh/id_rsa.pub deployer@$host;
done

# 批量测试nrpe
for host in $(cat hosts);
do
./check_nrpe -H $host -c mycheck_load -a 0.1 1;
done

# 批量生产配置
for host in $(cat hosts);
do
echo 'define host {' >>hosts.cfg ;
echo ' use linux-server' >>hosts.cfg ;
echo ' host_name '$host >>hosts.cfg ;
echo ' alias '$host >>hosts.cfg ;
echo ' address '$host >>hosts.cfg ;
echo ' hostgroups 1' >>hosts.cfg ;
echo '}' >>hosts.cfg ;
echo '' >>hosts.cfg ;
done

redis使用

  • 登录:redis-cli -h localhost -p 6379 -a 123456
  • 获取所有keys:keys *
  • 获取值:get set_value_test2
  • 设置值:set set_value_test2 2
  • 删除当前数据库中的所有Key:flushdb
  • 删除所有数据库中的key:flushall

cp强制覆盖

1
yes|cp -r /tmp/abc/ .

查看系统状态

查看CPU利用

1
mpstat

查看CPU利用

查看网络流量

sar命令包含在sysstat工具包中,提供系统的众多统计数据。

1
sar -n DEV  1 2

命令后面1 2意思是:每一秒钟取1次值,取2次。

DEV显示网络接口信息

另外,-n参数很有用,他有6个不同的开关:DEV | EDEV | NFS | NFSD | SOCK | ALL ,其代表的含义如下:

  • DEV- 显示网络接口信息。
  • EDEV- 显示关于网络错误的统计数据。
  • NFS- 统计活动的NFS客户端的信息。
  • NFSD - 统计NFS服务器的信息
  • SOCK - 显示套接字信息
  • ALL - 显示所有5个开关

返回参数说明:

  • IFACE - LAN接口
  • rxpck/s - 每秒钟接收的数据包
  • txpck/s - 每秒钟发送的数据包
  • rxbyt/s - 每秒钟接收的字节数
  • txbyt/s - 每秒钟发送的字节数
  • rxcmp/s - 每秒钟接收的压缩数据包
  • txcmp/s - 每秒钟发送的压缩数据包
  • rxmcst/s - 每秒钟接收的多播数据包
  • rxerr/s - 每秒钟接收的坏数据包
  • txerr/s - 每秒钟发送的坏数据包
  • coll/s - 每秒冲突数
  • rxdrop/s - 因为缓冲充满,每秒钟丢弃的已接收数据包数
  • txdrop/s - 因为缓冲充满,每秒钟丢弃的已发送数据包数
  • txcarr/s - 发送数据包时,每秒载波错误数
  • rxfram/s - 每秒接收数据包的帧对齐错误数
  • rxfifo/s - 接收的数据包每秒FIFO过速的错误数
  • txfifo/s - 发送的数据包每秒FIFO过速的错误数

压缩相关

  • .tar

    • 解包:tar xvf FileName.tar
    • 打包:tar cvf FileName.tar DirName

      注:tar是打包,不是压缩!

  • 打包时排除 tomcat/logs 目录
    tar -zcvf tomcat.tar.gz --exclude=tomcat/logs tomcat

  • 打包时排除logs和libs两个目录及文件xiaoshan.txt:
    tar -zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/libs --exclude=tomcat/xiaoshan.txt tomcat

  • .gz

    • 解压1 - gunzip FileName.g
    • 解压2 - gzip -d FileName.gz
    • 压缩 - gzip FileName
  • .tar.gz 和 .tgz

    • 解压 - tar zxvf FileName.tar.gz
    • 压缩 - tar zcvf FileName.tar.gz DirName
  • .zip

    • 解压 - unzip FileName.zip
    • 压缩 - zip FileName.zip DirName
  • .rar

    • 解压 - rar x FileName.rar
    • 压缩 - rar a FileName.rar DirName

使用 grep 查找所有包含指定文本的文件

  • 非递归搜索包含指定字符串的文件
    1
    grep -s Core /etc/*

grep-s选项会在发现不存在或者不能读取的文件时隐藏报错信息。结果显示除了文件名之外,还会输出包含请求字符串的行。

  • 递归地搜索包含指定字符串的文件-R
    所谓递归搜索就是指同时搜索所有的子目录。

    1
    grep -R Core /etc/*
  • 搜索所有包含特定单词的文件-w

    1
    2
    grep -sw Core /etc/*
    grep -Rw Core /etc/*
  • 只输出包含特定单词的文件名-l

    1
    grep -Rwl Core /etc/*
  • 大小写不敏感的搜索-i

    1
    grep -Ri Core /etc/*
  • 搜索时排除某些文件--exclude

    1
    grep -Rl --exclude=*.conf  Core /etc/*
  • 搜索时排除某个文件--exclude-dir

    1
    grep -Rl --exclude-dir=/etc/alternatives/  Core /etc/*
  • 搜索结果显示行号-n

    1
    grep -Rnw Core /etc/*
  • 查找不包含指定字符串的文件-v

    1
    grep -Rlv stretch /etc/*
hoxis wechat
一个脱离了高级趣味的程序员,关注回复1024有惊喜~
赞赏一杯咖啡
  • 本文作者: hoxis | 微信公众号【不正经程序员】
  • 本文链接: https://hoxis.github.io/常用代码段.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!
0%