285 lines
7.9 KiB
Bash
285 lines
7.9 KiB
Bash
#!/bin/bash
|
||
## shell常用命令 2016-05-30
|
||
## http://www.aqzt.com
|
||
## email: ppabc@qq.com
|
||
## 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 aaa@test.com
|
||
echo "mail test 123" | mail -s "mail_test" aaa@test.com
|
||
|
||
##生成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" }'
|
||
|
||
|