-
Notifications
You must be signed in to change notification settings - Fork 0
/
shell.sh
284 lines (215 loc) · 7.88 KB
/
shell.sh
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
#!/bin/bash
## shell常用命令 2016-05-30
## http://www.aqzt.com
## email: [email protected]
## robert yu
## centos 6和centos 7
##下载脚本并执行
wget -q -O https://raw.githubusercontent.com/aqzt/kjyw/master/redis/install.sh | sh
curl -s https://raw.githubusercontent.com/aqzt/kjyw/master/redis/install.sh | sh
curl -fsSL https://raw.githubusercontent.com/aqzt/kjyw/master/redis/install.sh | sh
##传参数
curl -s https://raw.githubusercontent.com/aqzt/kjyw/master/redis/redis_port.sh | sh -s start 8001 8009
##内存强制释放命令,最好不要在生产环境使用,生产环境需先下线服务,再使用
echo 3 > /proc/sys/vm/drop_caches
##sync 命令将所有未写的系统缓冲区写到磁盘中,再强制释放内存
sync && echo 3 > /proc/sys/vm/drop_caches
##Mutt 发送测试邮件
echo "邮件内容123456" | mutt -s “邮件标题测试邮件” -a /home/test.txt [email protected]
echo "mail test 123" | mail -s "mail_test" [email protected]
##生成16位随机密码
openssl rand -base64 12
##生成32位随机密码
openssl rand -base64 24
批量创建文件夹
mkdir 60{00..19}
#利用wc命令统计文件行,单词数,字符数,利用sort排序和去重,再结合uniq可以进行词频统计。比如:
cat file.txt
aqztcom
aqztcom-talk
aqztcom-yun
aqztcom
aqztcom-shuo
sort file.txt | uniq -c | sort -nr | head -5
2 aqztcom
1 aqztcom-shuo
1 aqztcom-talk
1 aqztcom-yun
gzip/tar:压缩/解压
cat/zcat:文件查看
less/more:文件查看,支持gz压缩格式直接查看
head/tail:查看文件前/后10行
wc:统计行数、单词数、字符数
du -h -c -s:查看空间占用
awk:命令行下的数据库操作工具
join/cut/paste:关联文件/切分字段/合并文件
fgrep/grep/egrep:全局正则表达式查找
find:查找文件,并且对查找结果批量化执行任务
sed:流编辑器,批量修改、替换文件
split:对大文件进行切分处理,按多少行一个文件,或者多少字节一个文件
rename:批量重命名(Ubuntu上带的perl脚本,其它系统需要安装),使用-n命令进行测试
#如果想临时计时跑满下CPU,一个进程跑满一个核。可以用如下命令:
timeout 600 bash -c "while [ 1 ];do echo 'a' > /dev/null; done"
#查nagios告警Warning太多IP,并排序重复次数
cat nagios-09-18-2016-00.log |grep mail |grep Warning |grep em |grep Traffic > 1.log
cat nagios-09-18-2016-00.log |grep mail |grep Warning |grep em |grep Traffic | awk -F '[;]' '{print $2}' >2.log
sort 2.log | uniq -c | sort -n > 3.log
#查nagios告警Critical太多IP,并排序重复次数
cat nagios-09-18-2016-00.log |grep mail |grep Critical |grep em |grep Traffic > 1.log
cat nagios-09-18-2016-00.log |grep mail |grep Critical |grep em |grep Traffic | awk -F '[;]' '{print $2}' >2.log
sort 2.log | uniq -c | sort -n > 3.log
#查nagios全部告警太多IP,并排序重复次数
cat nagios-09-18-2016-00.log |grep mail > 1.log
cat nagios-09-18-2016-00.log |grep mail | awk -F '[;]' '{print $2}' >2.log
sort 2.log | uniq -c | sort -n > 3.log
#查日志请求量变多,排序
awk -F'`;' '{print $12}' web_proxy_access_data_nginx.log | sort | uniq -c | sort -rn
awk -F'`;' '{print $12}' web_proxy_access_data_nginx.log | sort | uniq -c | sort -rn | head -n 10
#查日志域名查看接口请求情况
awk -F'`;' '{print $7}' data_nginx.log | awk -F'?' '{print$1}' | sort| uniq -c | sort -n -k 1 -r | head -n 10
# 解压缩日志
$ gzip -d a.gz
$ tar zcvf/jcvf one.tar.bz2 one
# 直接查看压缩日志
$ less a.gz
# 无需先解压
# 查询字符串,并显示匹配行的前3行和后3行内容
fgrep 'yunjie-talk' -A 3 -B 3 log.txt
# 在当前目前(及子目录)下,所有的log文件中搜索字符串hacked by:
$ find . -name "*.log" | xargs fgrep "hacked by"
##fgrep, grep, egrep的一些区别:
fgrep按字符串的本来意思完全匹配,里面的正则元字符当成普通字符解析, 如: fgrep “1.2.3.4″ 则只匹配ip地址: 1.2.3.4, 其中的.不会匹配任意字符。fgrep当然会比grep快多了。写起来又简单,不用转义。
grep只使用普通的一些正则,egrep或者grep -E使用扩展的正则,如
egrep "one|two", 匹配one或者two
grep -E -v ".jpg|.png|.gif|.css|.js" log.txt |wc -l
date:命令行时间操作函数
sort/uniq:排序、去重、统计
comm:对两个排序文件进行按行比较(共同行、只出现在左边文件、只出现在右边文件)
diff:逐字符比较文件的异同,配合cdiff,类似于github的显示效果
curl/w3m/httpie:命令行下进行网络请求
iconv:文件编码转换,如:iconv -f GB2312 -t UTF8 1.csv > 2.csv
seq:产生连续的序列,配合for循环使用
$ date -d today +%Y%m%d
20160320
$ date -d yesterday +%Y%m%d
20160319
# 排序两个文件
$ sort a.txt > a.txt.sort
$ sort b.txt > b.txt.sort
# 求只出现在c.sh中的内容
$ comm -2 -3 a.txt.sort b.txt.sort
if条件判断:
if [ -d ${base_d} ];
then mkdir -p ${base_d};
fi
while循环:
while
do
do_something;
done
for循环(用得很多):
for x in *.log.gz;
do
gzip -d ${x};
done
生成过去8天的日期序列:
$for num in `seq 8 -1 1`;do dd=`date --date="${num} day ago" +%Y%m%d`;echo ${dd};done
20160312
20160313
20160314
20160315
20160316
20160317
20160318
20160319
有目录和文件如下:
20160320 目录
10.1.0.1_20160320*.log.gz 目录
201603200000.log.gz 文件
201603200010.log.gz 文件
10.1.0.2_20160320*.log.gz 目录
201603200000.log.gz 文件
201603200010.log.gz 文件
需求:去掉目录中的*.log.gz,这样很容易让人误解为文件。 rename -n为测试,rename使用和sed相同的语法。
$ for d in 201603??;do echo ${d}; cd ${d}; rename -n 's/*.log.gz//' *.log.gz ; cd ..;done
测试完成后,使用rename不加-n为真正执行重命名操作。
####################################################
把两个空格替换成一个空格,然后一直替换
echo "a b d" |sed -e 's/ \+/ /g'
如果你闲邮件提醒烦,可以这么干
grep "unset MAILCHECK" /etc/profile
if [ $? -ne 0 ]; then
sed -i "/unset MAILCHECK/d" /etc/profile
echo "unset MAILCHECK" >> /etc/profile
fi
grep -v "^;" /etc/php/php.ini
cat /etc/php/php.ini |grep -v "^;"
egrep -v "^;|^$" /etc/php/php.ini
BM.BM_PAYMENT.AAAfpLACIAAATeGAAK
BM.BM_PAYMENT.AAAfpLACIAAATeGAAL
awk -F . '{print $0$1}' file
BM.BM_PAYMENT 取这两个 AWK是这样写吗
echo "BM.BM_PAYMENT.AAAfpLACIAAATeGAAK"|awk '{FS=".";OFS=".";print $1,$2}'
BM.BM_PAYMENT
echo "BM.BM_PAYMENT.AAAfpLACIAAATeGAAK"|awk -F'.' '{printf("%s.%s\n",$1,$2)}'
BM.BM_PAYMENT
两种方法,随便哪个都行echo "BM.BM_PAYMENT.AAAfpLACIAAATeGAAK"|cut -d '.' -f 1,2
BM.BM_PAYMENT
useradd
#!/bin/bash
echo "please user"
read name
echo "please num"
read num
n=1
for ((n=1;n<$num;n++))
#while [ $n -le $num ]
do
echo $name$n
/usr/sbin/useradd $name$n
echo 123123 | /usr/bin/passwd --stdin $name$n
# n=`expr $n + 1`
done
n=$1
/bin/grep $n /etc/group
if [ $? -eq 0 ]
then
echo aaa
else
/usr/sbin/groupadd $n
fi
group2.txt
adminuser dbuser updatauser
dbuser updatauser
updatauser wheel
awk '{print $2","}' user.list > group2.txt
#echo "fenkai:"
sed -i 's/,/ /g' group2.txt
groupid=`cat group2.txt`
for A in $groupid
do
#echo $A
n=$A
/bin/grep $n /etc/group
if [ $? -eq 0 ]
then
echo $n exists
else
/usr/sbin/groupadd $n
fi
done
#awk -F, '{print $2}' group2.txt
要替代当前目录下所有Makefile中-Werror为‘’
find ./ -type f -name Makefile | xargs perl -pi -e `s|-Werror| |g`
#!/bin/bash
for AAA in `ls ${DIR}`
do
sed -i 's/-Werror//g' $AAA
done
文件夹各自打成一个以文件名的生成一个tar.gz的包
http://bbs.linuxtone.org/thread-10250-1-1.html
写个for就行了
for a in 2011*;do
tar zcvf $a $a.tar.gz
done
ls | awk '{ print "tar zcvf "$0".tgz " $0|"/bin/bash" }'