个人积累的一些shell脚本结合书本知识总结,精简学习直接代码,可以复制粘贴直接用
1. 统计当前Linux 系统中可以登录计算机的账户有多少个
#!/bin/bash
#方法1:
grep "bash$" /etc/passwd | wc ‐l
#方法2:
awk ‐f: '/bash$/{x++}end{print x}' /etc/passwd
2. 统计/var/log 有多少个文件,并显示这些文件名
#!/bin/bash
#使用ls 递归显示所有,再判断是否为文件,如果是文件则计数器加1
cd /var/log
sum=0
for i in `ls ‐r *`
do
if [ ‐f $i ];then
let sum++
echo "文件名:$i"
fi
done
echo "总文件数量为:$sum"
3. 自动为其他脚本添加解释器信息#!/bin/bash,如脚本名为test.sh 则效果如下:
#./test.sh abc.sh 自动为abc.sh 添加解释器信息
#./test.sh user.sh 自动为user.sh 添加解释器信息
#!/bin/bash
#先使用grep 判断对象脚本是否已经有解释器信息,如果没有则使用sed 添加解释器以及描述信息
if ! grep ‐q "^#!" $1; then
sed '1i #!/bin/bash' $1
sed '2i #Description: '
fi
#因为每个脚本的功能不同,作用不同,所以在给对象脚本添加完解释器信息,以及Description 后还希望
#继续编辑具体的脚本功能的描述信息,这里直接使用vim 把对象脚本打开,并且光标跳转到该文件的第2 行
vim +2 $1
4. 自动化部署varnish 源码包软件
#本脚本需要提前下载varnish‐3.0.6.tar.gz 这样一个源码包软件,该脚本即可用自动源码安装部署软件
yum ‐y install gcc readline‐devel pcre‐devel
useradd ‐s /sbin/nologin varnish
tar ‐xf varnish‐3.0.6.tar.gz
cd varnish‐3.0.6
#使用configure,make,make install 源码安装软件包
./configure ‐‐prefix=/usr/local/varnish
make && make install
#在源码包目录下,将相应的配置文件拷贝到Linux 系统文件系统中
#默认安装完成后,不会自动拷贝或安装配置文件到Linux 系统,所以需要手动cp 复制配置文件
#并使用uuidgen 生成一个随机密钥的配置文件
cp redhat/varnish.initrc /etc/init.d/varnish
cp redhat/varnish.sysconfig /etc/sysconfig/varnish
cp redhat/varnish_reload_vcl /usr/bin/
ln ‐s /usr/local/varnish/sbin/varnishd /usr/sbin/
ln ‐s /usr/local/varnish/bin/* /usr/bin
mkdir /etc/varnish
cp /usr/local/varnish/etc/varnish/default.vcl /etc/varnish/
uuidgen > /etc/varnish/secret
5. 编写nginx 启动脚本
#本脚本编写完成后,放置在/etc/init.d/目录下,就可以被Linux 系统自动识别到该脚本
#如果本脚本名为/etc/init.d/nginx,则service nginx start 就可以启动该服务
#service nginx stop 就可以关闭服务
#service nginx restart 可以重启服务
#service nginx status 可以查看服务状态
program=/usr/local/nginx/sbin/nginx
pid=/usr/local/nginx/logs/nginx.pid
start(){
if [ ‐f $pid ];then
echo "nginx 服务已经处于开启状态"
else
$program
fi
stop(){
if [ ‐! ‐f $pid ];then
echo "nginx 服务已经关闭"
else
$program ‐s stop
echo "关闭服务ok"
fi
}
status(){
if [ ‐f $pid ];then
echo "服务正在运行…"
else
echo "服务已经关闭"
fi
}
case $1 in
start)
start;;
stop)
stop;;
restart)
stop
sleep 1
start;;
status)
status;;
*)
echo "你输入的语法格式错误"
esac
6. 自动对磁盘分区、格式化、挂载
#对虚拟机的vdb 磁盘进行分区格式化,使用<<将需要的分区指令导入给程序fdisk
#n(新建分区),p(创建主分区),1(分区编号为1),两个空白行(两个回车,相当于将整个磁盘分一个区)
#注意:1 后面的两个回车(空白行)是必须的!
fdisk /dev/vdb << EOF
n
p
1
wq
EOF
#格式化刚刚创建好的分区
mkfs.xfs /dev/vdb1
#创建挂载点目录
if [ ‐e /data ]; then
exit
fi
mkdir /data
#自动挂载刚刚创建的分区,并设置开机自动挂载该分区
echo '/dev/vdb1 /data xfs defaults 1 2' >> /etc/fstab
mount ‐a
7. 自动优化Linux 内核参数
#!/bin/bash
#脚本针对RHEL7
cat >> /usr/lib/sysctl.d/00‐system.conf <
fs.file‐max=65535
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 5010 641280 5010 128
net.core.wmem_default=262144
net.core.wmem_max=262144
net.core.rmem_default=4194304
net.core.rmem_max=4194304
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
EOF
sysctl –p
8. 切割Nginx 日志文件(防止单个文件过大,后期处理很困难)
#mkdir /data/scripts
#vim /data/scripts/nginx_log.sh
#!/bin/bash
logs_path="/usr/local/nginx/logs/"
mv logspathaccess.log{logs_path}access.log {logs_path}access_$(date ‐d "yesterday" +"%Y%m%d").log
kill ‐USR1 `cat /usr/local/nginx/logs/nginx.pid`
# chmod +x /data/scripts/nginx_log.sh
#crontab ‐e #脚本写完后,将脚本放入计划任务每天执行一次脚本
0 1 * * * /data/scripts/nginx_log.sh
9. 检测MySQL 数据库连接数量
#本脚本每2 秒检测一次MySQL 并发连接数,可以将本脚本设置为开机启动脚本,或在特定时间段执行
#以满足对MySQL 数据库的监控需求,查看MySQL 连接是否正常
#本案例中的用户名和密码需要根据实际情况修改后方可使用
log_file=/var/log/mysql_count.log
user=root
passwd=123456
while :
do
sleep 2
count=`mysqladmin ‐u "‐user"‐p"user" ‐p "passwd" status | awk '{print $4}'`
echo "`date +%Y‐%m‐%d` 并发连接数为:count">>count" >> log_file
done
10. 根据md5 校验码,检测文件是否被修改
#!/bin/bash
#本示例脚本检测的是/etc 目录下所有的conf 结尾的文件,根据实际情况,您可以修改为其他目录或文件
#本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次
#将两次执行的结果做对比,MD5 码发生改变的文件,就是被人篡改的文件
for i in $(ls /etc/*.conf)
do
md5sum "$i" >> /var/log/conf_file.log
done
如果想上手操作练代码的同学们可以通过阿里云ecs服务器免费试用参与!
入口:新老同学免费试用