linux中常用shell脚本整理

这篇具有很好参考价值的文章主要介绍了linux中常用shell脚本整理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

linux常见shell脚本整理

备份日志
#!/bin/bash  
# 每日创建新的备份日志-根据日期备份
tar  -czf  log-`date +%Y%m%d`.tar.gz  /var/log  
# 通过crontab 每日定时启动
00  03  *  *  5  /root/logbak.sh  
监控内存和磁盘容量,小于给定值时报警
#!/bin/bash  
  
# 实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员  
  
# 提取根分区剩余空间  
disk_size=$(df / | awk '/\//{print $4}')  
  
# 提取内存剩余空间  
mem_size=$(free | awk '/Mem/{print $4}')  
while :  
do  
# 注意内存和磁盘提取的空间大小都是以 Kb 为单位  
if  [  $disk_size -le 512000 -a $mem_size -le 1024000  ]  
then  
    mail  ‐s  "Warning"  root  <<EOF  
  Insufficient resources,资源不足  
EOF  
fi  
done  
监控网段中的主机状态
#!/bin/bash  
  
myping(){  
ping ‐c 2 ‐i 0.3 ‐W 1 $1  &>/dev/null  
if  [ $? -eq 0 ];then  
  echo "$1 is up"  
else  
  echo "$1 is down"  
fi  
}  
for i in {1..254}  
do  
     myping 192.168.4.$i &  
done    
根据文件创建用户名密码
#!/bin/bash  

for i in `cat user.txt`  
do  
     useradd  $i  
     echo "123456" | passwd ‐‐stdin $i  
done  
查看连接本机的Ip
#!/bin/bash 
netstat -atn  |  awk  '{print $5}'  | awk  '{print $1}' | sort -nr  |  uniq -c 
统计时间段内访问量
#!/bin/bash 
# 统计时间段内的访问量 
awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"' /var/log/httpd/access_log |wc -l 
# 统计时间段内的访问Ip
awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"{print $1}' /var/log/httpd/access_log  
Nginx启动脚本
#!/bin/bash  

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  
自动切割nginx日志文件
#mkdir  /data/scripts  
#vim   /data/scripts/nginx_log.sh    
#!/bin/bash  
  
# 切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)   
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 
检测Mysql数据库连接数量
#!/bin/bash  
  
# 检测 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  "$passwd"   status |  awk '{print $4}'`  
    echo "`date +%Y‐%m‐%d` 并发连接数为:$count" >> $log_file  
done  
检测mysql服务是否存活
#!/bin/bash  
  
# 检测 MySQL 服务是否存活   
  
# host 为你需要检测的 MySQL 主机的 IP 地址,user 为 MySQL 账户名,passwd 为密码  
# 这些信息需要根据实际情况修改后方可使用  
host=192.168.51.198  
user=root  
passwd=123456  
mysqladmin -h '$host' -u '$user' -p'$passwd' ping &>/dev/null  
if [ $? -eq 0 ]  
then  
        echo "MySQL is UP"  
else  
        echo "MySQL is down"  
fi
备份Mysql
#!/bin/bash  
  
# 备份 MySQL 的 shell 脚本(mysqldump版本)   
  
# 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签)  
# dbname(需要备份的数据库名称,根据实际需求需要修改该变量的值,默认备份 mysql 数据库)  
  
user=root  
passwd=123456  
dbname=mysql  
date=$(date +%Y%m%d)  
  
# 测试备份目录是否存在,不存在则自动创建该目录  
[ ! -d /mysqlbackup ] && mkdir /mysqlbackup  
# 使用 mysqldump 命令备份数据库  
mysqldump -u "$user" -p "$passwd" "$dbname" > /mysqlbackup/"$dbname"-${date}.sql  
根据md5校验码,检测文件是否修改
#!/bin/bash  
  
# 根据 md5 校验码,检测文件是否被修改   
# 本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文件  
# 本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次  
# 将两次执行的结果做对比,MD5 码发生改变的文件,就是被人篡改的文件  
for i in $(ls /etc/*.conf)  
do  
  md5sum "$i" >> /var/log/conf_file.log  
done  
非交互生成ssh秘钥文件
#!/bin/bash  
  
# 非交互自动生成 SSH 密钥文件   
# ‐t 指定 SSH 密钥的算法为 RSA 算法;‐N 设置密钥的密码为空;‐f 指定生成的密钥文件>存放在哪里  
rm  -rf  ~/.ssh/{known_hosts,id_rsa*}  
ssh‐keygen -t RSA -N '' -f ~/.ssh/id_rsa
监控http服务器状态
#!/bin/bash  
  
# 监控 HTTP 服务器的状态(测试返回码)  
  
# 设置变量,url为你需要检测的目标网站的网址(IP 或域名),比如百度  
url=http://http://183.232.231.172/index.html  
  
# 定义函数 check_http:  
# 使用 curl 命令检查 http 服务器的状态  
# ‐m 设置curl不管访问成功或失败,最大消耗的时间为 5 秒,5 秒连接服务为相应则视为无法连接  
# ‐s 设置静默连接,不显示连接时的连接速度、时间消耗等信息  
# ‐o 将 curl 下载的页面内容导出到/dev/null(默认会在屏幕显示页面内容)  
# ‐w 设置curl命令需要显示的内容%{http_code},指定curl返回服务器的状态码  
check_http()  
{  
        status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} $url)  
}  
  
  
while :  
do  
        check_http  
        date=$(date +%Y%m%d‐%H:%M:%S)  
  
  
# 生成报警邮件的内容  
        echo "当前时间为:$date  
        $url 服务器异常,状态码为${status_code}.  
        请尽快排查异常." > /tmp/http$$.pid  
  
  
# 指定测试服务器状态的函数,并根据返回码决定是发送邮件报警还是将正常信息写入日志  
        if [ $status_code -ne 200 ];then  
                mail -s Warning root < /tmp/http$$.pid  
        else  
                echo "$url 连接正常" >> /var/log/http.log  
        fi  
        sleep 5  
done  
删除目录下大小为0的文件
#!/bin/bash  
# 删除某个目录下大小为 0 的文件  
#/var/www/html 为测试目录,脚本会清空该目录下所有 0 字节的文件  
dir="/var/www/html"  
find $dir -type f -size 0 -exec rm -rf {} \;  
查找linux系统中的僵尸进程
#!/bin/bash  
  
# 查找 Linux 系统中的僵尸进程  
# awk 判断 ps 命令输出的第 8 列为 Z 是,显示该进程的 PID 和进程命令  
ps aux | awk '{if($8 == "Z"){print $2,$11}}'
生成随机密码
#!/bin/bash  
  
# 生成随机密码(urandom 版本)   
tr -dc '_A‐Za‐z0‐9' </dev/urandom | head -c 10  

## 

生成随机密码(指定字符串)
# 生成随机密码(字串截取版本)   
  
# 设置变量 key,存储密码的所有可能性(密码库),如果还需要其他字符请自行添加其他密码字符  
# 使用$#统计密码库的长度  
key="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"  
num=${#key}  
# 设置初始密码为空  
pass=''  
# 循环 8 次,生成随机密码  
# 每次都是随机数对密码库的长度取余,确保提取的密码字符不超过密码库的长度  
# 每次循环提取一位随机密码,并将该随机密码追加到 pass 变量的最后  
for i in {1..8}  
do    
  index=$[RANDOM%num]  
  pass=$pass${key:$index:1}  
done  
echo $pass  
获取本地的一些信息
#!/bin/bash  
  
# 获取本机 MAC 地址  
ip a s | awk 'BEGIN{print  " 本 机 MAC 地 址 信 息 如 下 :"}/^[0‐9]/{print $2;getline;if($0~/link\/ether/){print $2}}' | grep -v lo:  

## 显示本机系统上所有开放的端口列表
ss -nutlp | awk '{print $1,$5}' | awk -F"[: ]" '{print "协议:"$1,"端口号:"$NF}' | grep "[0‐9]" | uniq  
修改linux系统最大打开文件数量
#!/bin/bash  
  
# 修改 Linux 系统的最大打开文件数量   
  
# 往/etc/security/limits.conf 文件的末尾追加两行配置参数,修改最大打开文件数量为 65536  
cat >> /etc/security/limits.conf <<EOF  
* soft nofile  65536  
* hard nofile  65536  
EOF  
一次部署memcache
#!/bin/bash  
  
# 一键部署 memcached   
# 脚本用源码来安装 memcached 服务器  
# 注意:如果软件的下载链接过期了,请更新 memcached 的下载链接  
wget http://www.memcached.org/files/memcached-1.5.1.tar.gz  
yum -y install gcc  
tar -xf  memcached‐1.5.1.tar.gz  
cd memcached‐1.5.1  
./configure  
make  
make install  
打印各种格式的时间
  
echo "显示星期简称(如:Sun)"  
date +%a  
echo "显示星期全称(如:Sunday)"  
date +%A  
echo "显示月份简称(如:Jan)"  
date +%b  
echo "显示月份全称(如:January)"  
date +%B  
echo "显示数字月份(如:12)"  
date +%m  
echo "显示数字日期(如:01 号)"  
date +%d  
echo "显示数字年(如:01 号)"  
date +%Y echo "显示年‐月‐日"  
date +%F  
echo "显示小时(24 小时制)"  
date +%H  
echo "显示分钟(00..59)"  
date +%M  
echo "显示秒"  
date +%S  
echo "显示纳秒"  
date +%N  
echo "组合显示"  
date +"%Y%m%d %H:%M:%S"  
生成签名秘钥和证书
read -p "请输入存放证书的目录:" dir  
if [ ! -d $dir ];then  
  echo "该目录不存在"  
  exit  
fi  
read -p "请输入密钥名称:" name  
# 使用 openssl 生成私钥  
openssl genrsa -out ${dir}/${name}.key  
# 使用 openssl 生成证书 #subj 选项可以在生成证书时,非交互自动填写 Common Name 信息  
openssl req -new -x509 -key ${dir}/${name}.key -subj "/CN=common" -out ${dir}/${name}.crt  
定时启动Python程序
  • 需要保证job.py文件可执行
  • chmod u+x /root/s1.sh 保证sh文件的执行权限
  • crontab -e 编辑定时任务
    • */1 * * * * /root/s1.sh # 设置每分钟执行一次
#!/bin/bash
python3 /root/job.py
echo 'Python脚本执行成功,时间:' >> /root/log
date >> /root/log
开启和关闭jar操作
  • jar包名称为 uid-consumer-1.1.0-SNAPSHOT.jar
#!/bin/sh

# 该脚本为Linux下启动java程序的脚本
# 特别注意:
# 该脚本使用系统kill命令来强制终止指定的java程序进程。
# 所以在杀死进程前,可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本,
# 根据实际情况来修改以下配置信息 ##################################

# JAVA应用程序的名称
APP_NAME=uid-consumer
# JAVA应用程序端口号
SERVER_PORT=9999
# jar包存放路径
JAR_PATH='/app/uid-consumer'
# jar包名称
JAR_NAME=uid-consumer-1.1.0-SNAPSHOT.jar
# PID 代表是PID文件
JAR_PID=$JAR_NAME\.pid
# 日志输出文件
LOG_FILE=logs

# java虚拟机启动参数
JAVA_OPTS="-Xms512m -Xmx512m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:ParallelGCThreads=4 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=utf-8"

# 根据实际情况来修改以上配置信息 ##################################


# 检查程序是否处于运行状态
is_exist() {
  # 查询出应用服务的进程id,grep -v 是反向查询的意思,查找除了grep操作的run.jar的进程之外的所有进程
  pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `

  # [ ]表示条件测试。注意这里的空格很重要。要注意在'['后面和']'前面都必须要有空格
  # [ -z STRING ] 如果STRING的长度为零则返回为真,即空是真
  # 如果不存在返回0,存在返回1
  if [ -z "${pid}" ]; then
   return 0
  else
    return 1
  fi
}

# ######### Shell脚本中$0、$?、$!、$$、$*、$#、$@等的说明 #########

# $$ Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)
# $! Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)
# $? 最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
# $- 显示shell使用的当前选项,与set命令功能相同
# $* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个。
# $@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
# $# 添加到Shell的参数个数
# $0 Shell本身的文件名
# $1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

# 服务启动方法
start() {
  is_exist
  if [ $? -eq "1" ]; then
    echo "$APP_NAME is already running pid is ${pid}"
  else
    # jar服务启动脚本
    nohup java $JAVA_OPTS -Xloggc:$LOG_FILE/gc/gclog.log -XX:HeapDumpPath=$LOG_FILE/gc/HeapDump.hprof -jar $JAR_PATH/$JAR_NAME >./$LOG_FILE/run.log 2>&1 &
    echo $! > $JAR_PID
    echo "start $APP_NAME successed pid is $! "
    tail -1000f $LOG_FILE/run.log
   fi
  }

# 服务停止方法
stop() {
  # is_exist
  pidf=$(cat $JAR_PID)
  # echo "$pidf" 
  echo "pid = $pidf begin kill $pidf"
  kill $pidf
  rm -rf $JAR_PID
  sleep 2
  # 判断服务进程是否存在
  is_exist
  if [ $? -eq "1" ]; then
    echo "pid = $pid begin kill -9 $pid"
    kill -9  $pid
    sleep 2
    echo "$APP_NAME process stopped!" 
  else
    echo "$APP_NAME is not running!"
  fi 
}

# 服务运行状态查看方法
status() {
  is_exist
  if [ $? -eq "1" ]; then
    echo "$APP_NAME is running,pid is ${pid}"
  else
    echo "$APP_NAME is not running!"
  fi
}

# 重启服务方法
restart() {
  # 调用服务停止命令
  stop
  # 调用服务启动命令
  start
}

# 帮助说明,用于提示输入参数信息
usage() {
    echo "Usage: sh run-service.sh [ start | stop | restart | status ]"
    exit 1
}

###################################
# 读取脚本的第一个参数($1),进行判断
# 参数取值范围:{ start | stop | restart | status }
# 如参数不在指定范围之内,则打印帮助信息
###################################
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  'start')
    start
    ;;
  'stop')
    stop
    ;;
  'restart')
    restart
    ;;
  'status')
    status
    ;;
  *)
    usage
    ;;
esac
exit 0

文章来源地址https://www.toymoban.com/news/detail-704007.html

到了这里,关于linux中常用shell脚本整理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux的shell脚本常用命令

    使用shell脚本可以将所要执行的命令行进行汇总,统一执行,制作为脚本工具,简化重复性工作 1.1.1、启动命令 假设我们拥有一个halloWord.sh的脚本,通过cd 命令进入相对应的目录下 1.1.2、记录日志 将脚本执行的内容以及输出记录在log.txt文件中,同时也控制台显示器也要输出

    2024年02月13日
    浏览(32)
  • Shell脚本常用命令及如何通过shell脚本实现服务器上文件的上传和下载

    Shell脚本常用命令 简介 1、什么是shell: Shell 是一个用 C 语言编写的应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 脚本(shell script),是一种为 shell 编写的脚本程序,扩展名为.sh。 2、如何编写shell脚本: 文本编辑器(可以使用

    2024年02月03日
    浏览(54)
  • 大数据开发中常用组件服务的集群管理脚本整理集合

    bash的运行模式可分为 login shell (用户名、密码登录)和 non-login shell (SSH登录)。 两者登录方式加载情况: 1. login shell 启动时会加载: /etc/profile,~/.bash_profile,~/.bashrc 2. non-login shell 启动时会加载: ~/.bashrc 注意: ~/.bashrc 实则会加载 /etc/bashrc , /etc/bashrc 又加载 /etc/profile.d/*.sh

    2024年02月07日
    浏览(30)
  • 常用的34个Linux Shell脚本,一定能帮到你!

    关注“云计算就该这么学”微信公众号,回复暗号【001】,立即领取154页Linux学习笔记。 作为一名 Linux 工程师,会写好的脚本不仅能提高工作效率,还能有更多的时间做自己的事。最近在网上冲浪的时候,也注意收集一些大佬写过的脚本,汇总整理一下,欢迎收藏,与君共勉

    2024年02月09日
    浏览(27)
  • VMware vCenter服务器常用的巡检命令、运维命令和PowerShell脚本

    一、前言 最近整理一些VMware vCenter和Esxi常用的巡检命令和运维命令如下: 二、巡检命令 三、运维命令 运维常用命令: 四、Powershell脚本 以上就是vCenter和ESXi常用的运维与监控命令,可以帮助vSphere管理员管理和监控环境。

    2024年02月11日
    浏览(40)
  • 运维Shell脚本小试牛刀(二)

    运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解 [root@www shelldic]# cat checkpass.sh  #!/bin/bash - #================================================================================================================== # # #                          

    2024年02月10日
    浏览(25)
  • 运维Shell脚本小试牛刀(一)

    运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解 运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客 Cenos7安装小火车程序动画 运维Shell脚本小试牛刀(五):until循环 运维Shell脚本小试牛刀

    2024年02月11日
    浏览(31)
  • 常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)

    1、第一个案例:helloworld 2、打印运行的python进程 3、获取并打印参数 4、用脚本写for循环 5、使用C语言风格的for命令 6、while循环案例 7、使用break跳出外部循环 8、使用continue命令 9、case案例 10、判断两个数是否相等 11、使用双圆括号 12、使用双方括号 13、反引号的使用 14、字

    2024年02月07日
    浏览(34)
  • 运维高级--shell脚本完成分库分表

         随着系统的运行,存储的数据量会越来越大,系统的访问的压力也会随之增大,如果一个库中的表数据超过了一定的数量,比如说MySQL中的表数据达到千万级别,就需要考虑进行分库分表;      其次随着表数据的不断增大,会发现查询也随着变得缓慢,如果添加索

    2024年02月15日
    浏览(35)
  • Shell脚本——流量探测(自动化运维)

    目的    自动  捕获 指定IP或端口 的流量 生成日志,实现 流量 探测功能 准备    Root 用户权限下才能运行tcpdump脚本 优势   Liunx系统自带,无需安装其他组件,捕获准确度高 缺点   不能同时检测多个IP流量,效率低 重点         日志文件   touch  /home/node1/scripts/t

    2024年02月16日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包