shell脚本大全


fork炸弹

#!/bin/bash
# Shell 脚本的 fork 炸弹 

# 快速消耗计算机资源,致使计算机死机
# 定义函数名为.(点), 函数中递归调用自己并放入后台执行
.() { .|.& };.

服务器系统配置初始化

#!/bin/bash
#设置时区并同步时间
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
if ! crontab -l | grep ntpdate &>/dev/null ; then
    (echo "* 1 * * * ntpdate time.windows.com >/dev/null 2>&1";crontab -l) | crontab
fi

#禁用selinux
sed -i '/SELINUX/{s/permissive/disabled/}' /etc/selinux/config

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

#历史命令显示操作时间
if ! grep HISTTIMEFORMAT /etc/bashrc; then
    echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/bashrc
fi

#SSH超时时间
if ! grep "TMOUT=600" /etc/profile &>/dev/null; then
    echo "export TMOUT=600" >> /etc/profile
fi

#禁止root远程登录
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

#禁止定时任务发送邮件
sed -i 's/^MAILTO=root/MAILTO=""/' /etc/crontab

#设置最大打开文件数
if ! grep "* soft nofile 65535" /etc/security/limits.conf &>/dev/null; then
    cat >> /etc/security/limits.conf << EOF
    * soft nofile 65535
    * hard nofile 65535
EOF
fi

#系统内核优化
cat >> /etc/sysctl.conf <<EOF
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 20480
net.ipv4.tcp_max_syn_backlog =20480
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_fin_timeout =20
EOF

#减少SWAP使用
echo "0" > /proc/sys/vm/swappiness

#安装系统性能分析工具及其他
yum install gcc make autoconf vim sysstat net-tools iostat iftop iotp lrzsz -y

批量创建100个用户并设置密码

#!/bin/bash
USER_LIST=$@
USER_FILE=./user.info
for USER in $USER_LIST; do
    if ! id $USER &>/dev/null; then
      PASS=$(echo $RANDOM | md5sum | cut -c 1-8)
      useradd $USER
      echo $PASS | passwd --stdin $USER &>/dev/null
      echo "$USER  $PASS" >> $USER_FILE
    else
      echo "$USER User already exists!"
    fi
done

找出占用CPU/内存过高的进程

#!/bin/bash
echo  "------------- cpu top 10 -------------"
ps -eo pid,pcpu,pmem,args --sort=-pcpu |head -n 10
echo  "------------- memory top 10 -------------"
ps -eo pid,pcpu,pmem,args --sort=-pmem |head -n 10

批量检查网站是否异常

#!/bin/bash
URL_LIST="www.baidu.com www.yzfhq.xyz www.google.com"
for URL in $URL_LIST; do
    FAIL_COUNT=0
    for ((i=1;i<=3;i++)); do
      HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%&#123;http_code&#125;" $URL)
      if [ $HTTP_CODE -eq 200 ]; then
        echo "$URL OK"
        break
      else
        echo "$URL retry $FAIL_COUNT"
        let FAIL_COUNT++
      fi
    done
    if [ $FAIL_COUNT -eq 3 ]; then
      echo "$URL access failure"
    fi
done

LNMP自动部署

#!/bin/bash
NGINX_V=1.19.2
PHP_V=7.3.7
TMP_DIR=/tmp

INSTALL_DIR=/usr/local

PWD_C=$PWD

echo
echo -e "\tMenu\n"
echo -e "1. Install Nginx"
echo -e "2. Install PHP"
echo -e "3. Install MySQL"
echo -e "4. Deploy LNMP"
echo -e "9. Quit"

function command_status_check() &#123;
  if [$? -ne 0]; then
    echo $1
    exit
  fi
&#125;

function install_nginx() &#123;
  cd $TMP_DIR
  yum install -y gcc gcc-c++ make openssl-devel pcre-devel wget
  wget http://nginx.org/download/nginx-$&#123;NGINX_V&#125;.tar.gz
  tar zxf nginx-$&#123;NGINX_V&#125;.tar.gz
  cd nginx-$&#123;NGINX_V&#125;
  ./configure --prefix=$INSTALL_DIR/nginx \
  --with-http_ssl_module \
  --with-http_stub_status_module \
  --wiht-stream
  command_status_check "Nginx - 平台环境检查失败"
  make -j 4
  command_status_check "Nginx - 编译失败"
  make install
  command_status_check "Nginx - 安装失败"
  mkdir -p $INSTALL_DIR/nginx/conf/vhost
  alias cp=cp ; cp -rf $PWD_C/nginx.conf $INSTALL_DIR/nginx/conf
  rm -rf $INSTALL_DIR/nginx/html/*
  echo "ok" > $INSTALL_DIR/nginx/html/status.html
  echo '<?php echo "ok"?>' > $INSTALL_DIR/nginx/html/status.php
  $INSTALL_DIR/nginx/sbin/nginx
  command_status_check "Nginx - 启动失败"
&#125;

function install_php() &#123;
  cd $TMP_DIR
  yum install -y gcc gcc-c++ make gd-devel libxml2-devel \
      libcurl-devel libjpeg-devel libpng-devel openssl-devel \
      libmcrypt-devel libxslt-devel libtidy-devel
  wget http://docs.php.net/distributions/php-$&#123;PHP_V&#125;.tar.gz
  tar zxf php-$&#123;PHP_V&#125;.tar.gz
  cd php-$&#123;PHP_V&#125;
  ./configure --prefix=$INSTALL_DIR/php \
  --with-config-file-path=$INSTALL_DIR/php/etc \
  --enable-fpm --enable-opcache \
  --with-mysql --with-mysqli --with-pdo-mysql \
  --with-openssl --with-zlib --with-curl --with-gd \
  --with-jpeg-dir --with-png-dir --with-freetype-dir \
  --enable-mbstring --enable-hash
  command_status_check "PHP - 平台环境检查失败"
  make -j 4
  command_status_check "PHP - 安装失败"
  cp php.ini-profuction $INSTALL_DIR/php/etc/php.ini
  cp sapi/fpm/php-fpm.conf $INSTALL_DIR/php/etc/php-fpm.conf
  cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
  chmod +x /etc/init.d/php-fpm
  /etc/init.d/php-fpm start
  command_status_check "PHP - 启动失败"
&#125;

read -p "请输入编号: " number
case $number in
    1)
      install_nginx;;
    2)
      install_php;;
    3)
      install_mysql;;
    4)
      install_nginx
      install_php
      ;;
    9)
      exit;;
esac

MySQL备份

#!/bin/bash
DATE=$(date +%F_%H-%M-%S)
HOST=localhost
USER=backup
PASS=yzfhq
BACKUP_DIR=/data/db_backup
DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2>/dev/null |egrep -v "Database|information_schema|mysql|performance_schema|sys")

for DB in $DB_LIST; do
    BACKUP_NAME=$BACKUP_DIR/$&#123;DB&#125;_$&#123;DATE&#125;.sql
    if ! mysqldump -h$HOST -u$USER -p$PASS -B $DB > $BACKUP_NAME 2>/dev/null; then
      echo "$BACKUP_NAME 备份失败"
    fi
done

生成随机密码

#!/bin/bash
# 生成随机密码(urandom 版本) 

# /dev/urandom 文件是 Linux 内置的随机设备文件
# cat /dev/urandom 可以看看里面的内容,ctrl+c 退出查看
# 查看该文件内容后,发现内容有些太随机,包括很多特殊符号,我们需要的密码不希望使用这些符号
# tr ‐dc '_A‐Za‐z0‐9' < /dev/urandom
# 该命令可以将随机文件中其他的字符删除,仅保留大小写字母,数字,下划线,但是内容还是太多
# 我们可以继续将优化好的内容通过管道传递给 head 命令,在大量数据中仅显示头 10 个字节
# 注意 A 前面有个下划线
tr -dc '_A‐Za‐z0‐9' </dev/urandom | head -c 10

计划任务

#!/bin/bash
# 自动修改计划任务配置文件 

read -p "请输入分钟信息(00‐59):" min
read -p "请输入小时信息(00‐24):" hour
read -p "请输入日期信息(01‐31):" date
read -p "请输入月份信息(01‐12):" month
read -p "请输入星期信息(00‐06):" weak
read -p "请输入计划任务需要执行的命令或脚本:" program
echo "$min $hour $date $month $weak $program" >> /etc/crontab

信号处理,ctrl+c无法终止的脚本

#!/bin/bash
# Shell 脚本对信号的处理,执行脚本后,按键盘 Ctrl+C 无法终止的脚本 

# 使用 trap 命令可以拦截用户通过键盘或 kill 命令发送过来的信号
# 使用 kill ‐l 可以查看 Linux 系统中所有的信号列表,其中 2 代表 Ctrl+C
# trap 当发现有用户 ctrl+C 希望终端脚本时,就执行 echo "暂停 10s";sleep 10 这两条命令
# 另外用户使用命令:[ kill ‐2 脚本的 PID ] 也可以中断脚本和 Ctrl+C 一样的效果,都会被 trap 拦截
trap 'echo "暂停 10s";sleep 10' 2
while :
do
    echo "go go go"
done

关闭selinux

#!/bin/bash

# 关闭 SELinux 
sed -i  '/^SELINUX/s/=.*/=disabled/' /etc/selinux/config
setenforce 0

多进程ping

#!/bin/bash

net="192.168.106"
multi_ping_fun()&#123;
    ping -c2 -i0.2 -W1 $1 &>/dev/null
    if [ $? -eq 0 ];then
        echo "$1 is up"
    else
        echo "$1 is down"
    fi
&#125;

for i in &#123;1..254&#125;
do
    multi_ping_fun $net.$i &
done

文章作者: Ricechips
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Ricechips !
 本篇
shell脚本大全 shell脚本大全
fork炸弹#!/bin/bash # Shell 脚本的 fork 炸弹 # 快速消耗计算机资源,致使计算机死机 # 定义函数名为.(点), 函数中递归调用自己并放入后台执行 .() { .|.& };. 服务器系
2020-09-08 Ricechips
下一篇 
docker之centos套娃 docker之centos套娃
搭建与使用curl -sSL https://get.daocloud.io/docker | shdocker pull daocloud.io/library/centos:7systemctl start dockerdocker i
2020-08-27 Ricechips
  目录