日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

10 個(gè)實(shí)用 Shell 腳本,珍藏版

 昵稱10087950 2022-06-21 發(fā)布于江蘇
在生產(chǎn)環(huán)境中,我們會(huì)經(jīng)常編寫一些 Shell 命令或腳本幫我們的工作,本文分享了最近用到的幾例shell實(shí)用腳本,感興趣的朋友跟隨小編一起看看吧。
很多人認(rèn)為 Shell 腳本簡(jiǎn)單,但其實(shí) Shell 小腳本卻有大智慧。別小看幾十行代碼,它夾雜著系統(tǒng)設(shè)計(jì)、代碼規(guī)范和操作經(jīng)驗(yàn)等等細(xì)節(jié),在建設(shè)自動(dòng)化運(yùn)維的工作中,還是很值得我們研究學(xué)習(xí)的。
編寫腳本的注意事項(xiàng):
  1. 開(kāi)頭加解釋器:#!/bin/bash

  2. 語(yǔ)法縮進(jìn),使用四個(gè)空格;多加注釋說(shuō)明。

  3. 命名建議規(guī)則:變量名大寫、局部變量小寫,函數(shù)名小寫,名字體現(xiàn)出實(shí)際作用。

  4. 默認(rèn)變量是全局的,在函數(shù)中變量local指定為局部變量,避免污染其他作用域。

  5. 有兩個(gè)命令能幫助我調(diào)試腳本:set -e 遇到執(zhí)行非0時(shí)退出腳本,set-x 打印執(zhí)行過(guò)程。

  6. 寫腳本一定先測(cè)試再到生產(chǎn)上。


1、備份當(dāng)前日期文件


















#!/bin/bash#一月前historyTime=$(date "+%Y-%m-%d %H" -d '1 month ago')echo ${historyTime}historyTimeStamp=$(date -d "$historyTime" +%s)echo ${historyTimeStamp} #一周前$(date "+%Y-%m-%d %H" -d '7 day ago') #本月一月一日date_this_month=`date +%Y%m01` #一天前date_today=`date -d '1 day ago' +%Y%m%d` #一小時(shí)前$(date "+%Y-%m-%d %H" -d '-1 hours')

2、DOS攻擊防范(自動(dòng)屏蔽攻擊IP)












#!/bin/bashDATE=$(date +%d/%b/%Y:%H:%M)#nginx日志LOG_FILE=/usr/local/nginx/logs/demo2.access.log#分析ip的訪問(wèn)情況ABNORMAL_IP=$(tail -n5000 $LOG_FILE |grep $DATE |awk '{a[$1]++}END{for(i in a)if(a[i]>10)print i}')for IP in $ABNORMAL_IP; do    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then        iptables -I INPUT -s $IP -j DROP        echo "$(date +'%F_%T') $IP" >> /tmp/drop_ip.log    fidone

3、批量創(chuàng)建多少個(gè)用戶并設(shè)置密碼














#!/bin/bashUSER_LIST=$@USER_FILE=./user.infofor 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    echo "$USER User create successful."  else    echo "$USER User already exists!"  fidone

4、快速在Ubuntu 20.04上架設(shè)LAMP服務(wù)器及WordPress博客
詳情見(jiàn)https://www./ubuntu-20-04-lamp-wordpress.html































































































#/bin/sh
install_dir="/var/www/html"#Creating Random WP Database Credenitalsdb_name="wp`date +%s`"db_user=$db_namedb_password=`date |md5sum |cut -c '1-12'`sleep 1mysqlrootpass=`date |md5sum |cut -c '1-12'`sleep 1
#### Install Packages for https and mysqlapt -y install apache2apt -y install mysql-server

#### Start httprm /var/www/html/index.htmlsystemctl enable apache2systemctl start apache2
#### Start mysql and set root password
systemctl enable mysqlsystemctl start mysql
/usr/bin/mysql -e "USE mysql;"/usr/bin/mysql -e "UPDATE user SET Password=PASSWORD($mysqlrootpass) WHERE user='root';"/usr/bin/mysql -e "FLUSH PRIVILEGES;"touch /root/.my.cnfchmod 640 /root/.my.cnfecho "[client]">>/root/.my.cnfecho "user=root">>/root/.my.cnfecho "password="$mysqlrootpass>>/root/.my.cnf####Install PHPapt -y install phpapt -y php-mysql apt -y php-gd
sed -i '0,/AllowOverride\ None/! {0,/AllowOverride\ None/ s/AllowOverride\ None/AllowOverride\ All/}' /etc/apache2/apache2.conf #Allow htaccess usage
systemctl restart apache2
####Download and extract latest WordPress Packageif test -f /tmp/latest.tar.gzthenecho "WP is already downloaded."elseecho "Downloading WordPress"cd /tmp/ && wget "http:///latest.tar.gz";fi
/bin/tar -C $install_dir -zxf /tmp/latest.tar.gz --strip-components=1chown www-data: $install_dir -R
#### Create WP-config and set DB credentials/bin/mv $install_dir/wp-config-sample.php $install_dir/wp-config.php
/bin/sed -i "s/database_name_here/$db_name/g" $install_dir/wp-config.php/bin/sed -i "s/username_here/$db_user/g" $install_dir/wp-config.php/bin/sed -i "s/password_here/$db_password/g" $install_dir/wp-config.php
cat << EOF >> $install_dir/wp-config.phpdefine('FS_METHOD', 'direct');EOF
cat << EOF >> $install_dir/.htaccess# BEGIN WordPress<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRule ^index.php$ – [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . /index.php [L]</IfModule># END WordPressEOF
chown www-data: $install_dir -R
##### Set WP Saltsgrep -A50 'table_prefix' $install_dir/wp-config.php > /tmp/wp-tmp-config/bin/sed -i '/**#@/,/$p/d' $install_dir/wp-config.php/usr/bin/lynx --dump -width 200 https://api./secret-key/1.1/salt/ >> $install_dir/wp-config.php/bin/cat /tmp/wp-tmp-config >> $install_dir/wp-config.php && rm /tmp/wp-tmp-config -f/usr/bin/mysql -u root -e "CREATE DATABASE $db_name"/usr/bin/mysql -u root -e "CREATE USER '$db_name'@'localhost' IDENTIFIED WITH mysql_native_password BY '$db_password';"/usr/bin/mysql -u root -e "GRANT ALL PRIVILEGES ON $db_name.* TO '$db_user'@'localhost';"######Display generated passwords to log file.echo "Database Name: " $db_nameecho "Database User: " $db_userecho "Database Password: " $db_passwordecho "Mysql root password: " $mysqlrootpass

5、每天自動(dòng)備份 MySQL 數(shù)據(jù)庫(kù)



















#!/bin/sh
# Database infoDB_USER="batsing"DB_PASS="batsingpw"DB_HOST="localhost"DB_NAME="timepusher"
# 一些變量BIN_DIR="/usr/bin" #mysql bin路徑BCK_DIR="/mnt/mysqlBackup" #備份文件目錄DATE=`date +%F`
# TODO# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/db_$DATE.sql
#還原數(shù)據(jù)庫(kù)#用mysql-front導(dǎo)入前一天的 *.sql 文件即可恢復(fù)數(shù)據(jù)

6、MySQL 數(shù)據(jù)庫(kù)備份單循環(huán)














#!/bin/bashDATE=$(date +%F_%H-%M-%S)HOST=localhostUSER=backupPASS=123.comBACKUP_DIR=/data/db_backupDB_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; doBACKUP_NAME=$BACKUP_DIR/${DB}_${DATE}.sqlif ! mysqldump -h$HOST -u$USER -p$PASS -B $DB > $BACKUP_NAME 2>/dev/null; thenecho "$BACKUP_NAME 備份失敗!"fidone

7、MySQL 數(shù)據(jù)庫(kù)備份多循環(huán)



















#!/bin/bashDATE=$(date +%F_%H-%M-%S)HOST=localhostUSER=backupPASS=123.comBACKUP_DIR=/data/db_backupDB_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; doBACKUP_DB_DIR=$BACKUP_DIR/${DB}_${DATE}[ ! -d $BACKUP_DB_DIR ] && mkdir -p $BACKUP_DB_DIR &>/dev/nullTABLE_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "use $DB;show tables;" 2>/dev/null)for TABLE in $TABLE_LIST; doBACKUP_NAME=$BACKUP_DB_DIR/${TABLE}.sqlif ! mysqldump -h$HOST -u$USER -p$PASS $DB $TABLE > $BACKUP_NAME 2>/dev/null; thenecho "$BACKUP_NAME 備份失敗!"fidonedone

8、Nginx 日志按要求切割




























#!/bin/bash#安裝目錄下日志文件base_log_path='/usr/local/openresty/nginx/logs/access.log'base_error_path='/usr/local/openresty/nginx/logs/error.log' #需要保存的目錄位置log_path='/data_lytdev_dir/nginx/logs/' #獲取月份log_month=$(date -d yesterday +"%Y%m") #獲取前一天日期 (第二天凌晨備份,即保存的日志就是當(dāng)天時(shí)間的日志)log_day=$(date -d yesterday +"%d") #在指定位置創(chuàng)建文件夾mkdir -p $log_path/$log_month #將安裝目錄下的日志文件,移動(dòng)到指定存儲(chǔ)位置mv $base_log_path $log_path/$log_month/access_$log_day.logmv $base_error_path $log_path/$log_month/error_$log_day.log #再使用信號(hào)控制切割日志#USR1 表示nginx信號(hào)控制,切割日志kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid`  #每天凌晨1點(diǎn)切割日志* 1 * * * /usr/local/openresty/nginx/logs/log_rotate.sh

9、生成10個(gè)隨機(jī)數(shù)保存于數(shù)組中并找出其最大值和最小值












#!/bin/bashdeclare -i min maxdeclare -a numsfor ((i=0;i<10;i++));do    nums[$i]=$RANDOM    [ $i -eq 0 ] && min=${nums[0]} &&  max=${nums[0]}&& continue    [ ${nums[$i]} -gt $max ] && max=${nums[$i]}    [ ${nums[$i]} -lt $min ] && min=${nums[$i]}doneecho "All numbers are ${nums[*]}"echo Max is $maxecho Min is $min

圖片


10、














#!/bin/bashNIC=$1echo -e " In ------ Out"while true; do    OLD_IN=$(awk '$0~"'$NIC'"{print $2}' /proc/net/dev)    OLD_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)    sleep 1    NEW_IN=$(awk  '$0~"'$NIC'"{print $2}' /proc/net/dev)    NEW_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)    IN=$(printf "%.1f%s" "$((($NEW_IN-$OLD_IN)/1024))" "KB/s")    OUT=$(printf "%.1f%s" "$((($NEW_OUT-$OLD_OUT)/1024))" "KB/s")    echo "$IN $OUT"    sleep 1done

圖片

歡迎在下面的留言欄里與大家分享一些有用的 Shell 腳本。

來(lái)自:Linux迷

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多