jiao_ben/shell/shell.sh
2021-06-28 21:49:23 +08:00

285 lines
7.9 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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" }'