包括 shell、SQL 以及一些常用命令的集合。
shell批量修改文件名
1 | for file in `/bin/ls | grep .cfg` |
shell判断目录是否存在
1 | dir="/opt/install/" |
sql查询表中某字段重复的数据
1 | SELECT * FROM vm_info_tab |
抓包
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
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 | # 批量建立互信 |
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 |
查看网络流量
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
- 解压1 -
.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
2grep -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/*