当前位置: 首页 > news >正文

Shell 脚本 100 例《四》

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

31. 统计当前 Linux 系统中可以登录计算机的账户有多少个
#!/bin/bash
#方法 1:
grep   "bash$"  /etc/passwd  | wc ‐l
#方法 2:
awk  ‐f:  '/bash$/{x++}end{print x}'  /etc/passwd
 
32. 统计/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"
 
33. 自动为其他脚本添加解释器信息#!/bin/bash,如脚本名为 test.sh 则效果如下:
#./test.sh  abc.sh    自动为 abc.sh 添加解释器信息
#./test.sh  user.sh
#!/bin/bash    自动为 user.sh 添加解释器信息
#先使用 grep 判断对象脚本是否已经有解释器信息,如果没有则使用 sed 添加解释器以及描述信息
if  !  grep  ‐q  "^#!"  $1; then
sed  '1i #!/bin/bash'  $1
sed  '2i #Description: '
fi
#因为每个脚本的功能不同,作用不同,所以在给对象脚本添加完解释器信息,以及 Description 后还希望
#继续编辑具体的脚本功能的描述信息,这里直接使用 vim 把对象脚本打开,并且光标跳转到该文件的第 2 行
vim +2 $1

34. 自动化部署 varnish 源码包软件
#!/bin/bash
#Author:丁丁历险(Jacob)
#本脚本需要提前下载 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
 
35. 编写 nginx 启动脚本
#!/bin/bash
#Author:丁丁历险(Jacob)
#本脚本编写完成后,放置在/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
 
36. 自动对磁盘分区、格式化、挂载
#!/bin/bash
#Author:丁丁历险(Jacob)
#对虚拟机的 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
 
37. 自动优化 Linux 内核参数
#!/bin/bash
#Author:丁丁历险(Jacob)

#脚本针对 RHEL7
cat >> /usr/lib/sysctl.d/00‐system.conf <<EOF
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
 
38. 切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)
#mkdir  /data/scripts
#vim   /data/scripts/nginx_log.sh  
#!/bin/bash
logs_path="/usr/local/nginx/logs/"
mv ${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
 
39. 检测 MySQL 数据库连接数量
#!/bin/bash
#Author:丁丁历险(Jacob)
#本脚本每 2 秒检测一次 MySQL 并发连接数,可以将本脚本设置为开机启动脚本,或在特定时间段执行
#以满足对 MySQL 数据库的监控需求,查看 MySQL 连接是否正常
#本案例中的用户名和密码需要根据实际情况修改后方可使用
log_file=/var/log/mysql_count.log
user=root
passwd=123456
while :
do
        sleep 2
        count=`mysqladmin  ‐u  "$user"  ‐p  "$passwd"   status |  awk '{print $4}'`
        echo "`date +%Y‐%m‐%d` 并发连接数为:$count" >> $log_file

40. 根据 md5 校验码,检测文件是否被修改
#!/bin/bash
#Author:丁丁历险(Jacob)
#本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文件
#本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次
#将两次执行的结果做对比,MD5 码发生改变的文件,就是被人篡改的文件
for  i  in  $(ls /etc/*.conf)
do
  md5sum "$i" >> /var/log/conf_file.log
done

转载于:https://my.oschina.net/szwangsen/blog/1612495

相关文章:

  • Powershell 批量重命名
  • 浙江台州警方侦破特大制售假酒案 涉案金额超4000万元
  • 《SQL必知必会》读书笔记
  • Unity C#编程优化——枚举
  • 正则表达式知识点汇总
  • 山西政协委员建言探索农业托管模式 解决“谁来种地”问题
  • 发现操作系统的数据库出现死锁如何处理
  • 微服务架构到底应该如何选择?
  • 搭建MySQL高可用负载均衡集群
  • Rust发布1.32版本,跟踪、模块化、宏等方面均有改进
  • python文本 字符串逐字符反转以及逐单词反转
  • 海南2018年共审理涉黑涉恶案件82件456人
  • 家电新政促销费 国美智能、绿色家电销售迎政策红利
  • 机器学习新手必学十大算法指南
  • linux如何批量关闭进程
  • 30秒的PHP代码片段(1)数组 - Array
  • Angular Elements 及其运作原理
  • CSS盒模型深入
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • java8 Stream Pipelines 浅析
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Python3爬取英雄联盟英雄皮肤大图
  • ReactNativeweexDeviceOne对比
  • spring security oauth2 password授权模式
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 检测对象或数组
  • 聊聊flink的TableFactory
  • 普通函数和构造函数的区别
  • 巧用 TypeScript (一)
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 阿里云服务器购买完整流程
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • #pragma预处理命令
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (翻译)terry crowley: 写给程序员
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (三) diretfbrc详解
  • (转)大道至简,职场上做人做事做管理
  • (转载)虚函数剖析
  • ***通过什么方式***网吧
  • .gitignore文件---让git自动忽略指定文件
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 动态调用WebService + WSE + UsernameToken
  • .Net 知识杂记
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .net下简单快捷的数值高低位切换
  • [16/N]论得趣
  • [Android]通过PhoneLookup读取所有电话号码