20、編寫批量修改擴展名腳本 #!/bin/bash # 編寫批量修改擴展名腳本,如批量將 txt 文件修改成 doc 文件 # 執行腳本時,須要給腳本添加位置參數 # 腳本名 txt doc(能夠將 txt 的擴展名修改成 doc) # 腳本名 doc jpg(能夠將 doc 的擴展名修改成 jpg) for i in "ls *.$1" do mv $i ${i%.*}.$2 done
釋:php
假設定義了一個變量爲,【代碼以下】: file=/dir1/dir2/dir3/my.file.txt 能夠用${ }分別替換獲得不一樣的值: ${file#*/}:刪掉《=最後一個 / 及其左邊的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:刪掉 《= 第一個 / 及其左邊的字符串:my.file.txt ${file#*.}:刪掉第一個 . 及其左邊的字符串:file.txt ${file##*.}:刪掉最後一個 . 及其左邊的字符串:txt ${file%/*}:刪掉=》最後一個 / 及其右邊的字符串:/dir1/dir2/dir3 ${file%%/*}:刪掉=》第一個 / 及其右邊的字符串:(空值) ${file%.*}:刪掉最後一個 . 及其右邊的字符串:/dir1/dir2/dir3/my.file ${file%%.*}:刪掉第一個 . 及其右邊的字符串:/dir1/dir2/dir3/my 【記憶的方法爲】: # 是 去掉左邊(鍵盤上#在 $ 的左邊) %是去掉右邊(鍵盤上% 在$ 的右邊) 單一符號是最小匹配;兩個符號是最大匹配 ${file:0:5}:提取最左邊的 5 個字節:/dir1 ${file:5:5}:提取第 5 個字節右邊的連續5個字節:/dir2 也能夠對變量值裏的字符串做替換: ${file/dir/path}:將第一個dir 替換爲path:/path1/dir2/dir3/my.file.txt ${file//dir/path}:將所有dir 替換爲 path:/path1/path2/path3/my.file.txt
1八、使用死循環實時顯示 eth0 網卡發送的數據包流量 #!/bin/bash # 使用死循環實時顯示 eth0 網卡發送的數據包流量 while : do echo '本地網卡 eth0 流量信息以下: ' ifconfig eth0 | grep "RX pack" | awk '{print $5}' ifconfig eth0 | grep "TX pack" | awk '{print $5}' sleep 1 done
1九、使用 user.txt 文件中的人員名單,在計算機中自動建立對應的帳戶並配置初始密碼本腳本執行,須要提早準備一個 user.txt 文件,該文件中包含有若干用戶名信息 #!/bin/bash # 使用 user.txt 文件中的人員名單,在計算機中自動建立對應的帳戶並配置初始密碼 # 本腳本執行,須要提早準備一個 user.txt 文件,該文件中包含有若干用戶名信息 for i in `cat user.txt` do useradd $i echo "123456" | passwd ‐‐stdin $i done
2一、使用 expect 工具自動交互密碼遠程其餘主機安裝 httpd 軟件 #!/bin/bash # 使用 expect 工具自動交互密碼遠程其餘主機安裝 httpd 軟件 # 刪除~/.ssh/known_hosts 後,ssh 遠程任何主機都會詢問是否確認要鏈接該主機 rm ‐rf ~/.ssh/known_hosts expect <<EOF spawn ssh 192.168.4.254 expect "yes/no" {send "yes\r"} # 根據本身的實際狀況將密碼修改成真實的密碼字串 expect "password" {send "密碼\r"} expect "#" {send "yum ‐y install httpd\r"} expect "#" {send "exit\r"} EOF
五、監控內存和磁盤容量,小於給定值時報警 #!/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
八、檢測本機當前用戶是否爲超級管理員,若是是管理員,則使用 yum 安裝 vsftpd,若是不是,則提示您非管理員(使用 UID 數字對比版本) #!/bin/bash # 檢測本機當前用戶是否爲超級管理員,若是是管理員,則使用 yum 安裝 vsftpd,若是不 # 是,則提示您非管理員(使用 UID 數字對比版本) if [ $UID -eq 0 ];then yum ‐y install vsftpd else echo "您不是管理員,沒有權限安裝軟件" fi
九、編寫腳本:提示用戶輸入用戶名和密碼,腳本自動建立相應的帳戶及配置密碼。若是用戶不輸入帳戶名,則提示必須輸入帳戶名並退出腳本;若是用戶不輸入密碼,則統一使用默認的 123456 做爲默認密碼。 #!/bin/bash # 編寫腳本:提示用戶輸入用戶名和密碼,腳本自動建立相應的帳戶及配置密碼。若是用戶 # 不輸入帳戶名,則提示必須輸入帳戶名並退出腳本;若是用戶不輸入密碼,則統一使用默 # 認的 123456 做爲默認密碼。 read -p "請輸入用戶名: " user #使用‐z 能夠判斷一個變量是否爲空,若是爲空,提示用戶必須輸入帳戶名,並退出腳本,退出碼爲 2 #沒有輸入用戶名腳本退出後,使用$?查看的返回碼爲 2 if [ -z $user ];then echo "您不需輸入帳戶名" exit 2 fi #使用 stty ‐echo 關閉 shell 的回顯功能 #使用 stty echo 打開 shell 的回顯功能 stty -echo read -p "請輸入密碼: " pass stty echo pass=${pass:‐123456} useradd "$user" echo "$pass" | passwd ‐‐stdin "$user"
七、檢測本機當前用戶是否爲超級管理員,若是是管理員,則使用 yum 安裝 vsftpd,若是不是,則提示您非管理員(使用字串對比版本) #!/bin/bash # 檢測本機當前用戶是否爲超級管理員,若是是管理員,則使用 yum 安裝 vsftpd,若是不 # 是,則提示您非管理員(使用字串對比版本) if [ $USER == "root" ] then yum ‐y install vsftpd else echo "您不是管理員,沒有權限安裝軟件" fi
2二、一鍵部署 LNMP(源碼安裝版本) #!/bin/bash # 一鍵部署 LNMP(源碼安裝版本) menu() { clear echo " ##############‐‐‐‐Menu‐‐‐‐##############" echo "# 1. Install Nginx" echo "# 2. Install MySQL" echo "# 3. Install PHP" echo "# 4. Exit Program" echo " ########################################" } choice() { read -p "Please choice a menu[1‐9]:" select } install_nginx() { id nginx &>/dev/null if [ $? -ne 0 ];then useradd -s /sbin/nologin nginx fi if [ -f nginx‐1.8.0.tar.gz ];then tar -xf nginx‐1.8.0.tar.gz cd nginx‐1.8.0 yum -y install gcc pcre‐devel openssl‐devel zlib‐devel make ./configure ‐‐prefix=/usr/local/nginx ‐‐with‐http_ssl_module make make install ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ cd .. else echo "沒有 Nginx 源碼包" fi } install_mysql() { yum -y install gcc gcc‐c++ cmake ncurses‐devel perl id mysql &>/dev/null if [ $? -ne 0 ];then useradd -s /sbin/nologin mysql fi if [ -f mysql‐5.6.25.tar.gz ];then tar -xf mysql‐5.6.25.tar.gz cd mysql‐5.6.25 cmake . make make install /usr/local/mysql/scripts/mysql_install_db ‐‐user=mysql ‐‐datadir=/usr/local/mysql/data/ ‐‐basedir=/usr/local/mysql/ chown -R root.mysql /usr/local/mysql chown -R mysql /usr/local/mysql/data /bin/cp -f /usr/local/mysql/support‐files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld /bin/cp -f /usr/local/mysql/support‐files/my‐default.cnf /etc/my.cnf echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf ldconfig echo 'PATH=\$PATH:/usr/local/mysql/bin/' >> /etc/profile export PATH else echo "沒有 mysql 源碼包" exit fi } install_php() { #安裝 php 時沒有指定啓動哪些模塊功能,若是的用戶能夠根據實際狀況自行添加額外功能如‐‐with‐gd 等 yum -y install gcc libxml2‐devel if [ -f mhash‐0.9.9.9.tar.gz ];then tar -xf mhash‐0.9.9.9.tar.gz cd mhash‐0.9.9.9 ./configure make make install cd .. if [ ! ‐f /usr/lib/libmhash.so ];then ln -s /usr/local/lib/libmhash.so /usr/lib/ fi ldconfig else echo "沒有 mhash 源碼包文件" exit fi if [ -f libmcrypt‐2.5.8.tar.gz ];then tar -xf libmcrypt‐2.5.8.tar.gz cd libmcrypt‐2.5.8 ./configure make make install cd .. if [ ! -f /usr/lib/libmcrypt.so ];then ln -s /usr/local/lib/libmcrypt.so /usr/lib/ fi ldconfig else echo "沒有 libmcrypt 源碼包文件" exit fi if [ -f php‐5.4.24.tar.gz ];then tar -xf php‐5.4.24.tar.gz cd php‐5.4.24 ./configure ‐‐prefix=/usr/local/php5 ‐‐with‐mysql=/usr/local/mysql ‐‐enable‐fpm ‐‐ enable‐mbstring ‐‐with‐mcrypt ‐‐with‐mhash ‐‐with‐config‐file‐path=/usr/local/php5/etc ‐‐with‐ mysqli=/usr/local/mysql/bin/mysql_config make && make install /bin/cp -f php.ini‐production /usr/local/php5/etc/php.ini /bin/cp -f /usr/local/php5/etc/php‐fpm.conf.default /usr/local/php5/etc/php‐fpm.conf cd .. else echo "沒有 php 源碼包文件" exit fi } while : do menu choice case $select in 1) install_nginx ;; 2) install_mysql ;; 3) install_php ;; 4) exit ;; *) echo Sorry! esac done
2七、統計 13:30 到 14:30 全部訪問 apache 服務器的請求有多少個 #!/bin/bash # 統計 13:30 到 14:30 全部訪問 apache 服務器的請求有多少個 # awk 使用‐F 選項指定文件內容的分隔符是/或者: # 條件判斷$7:$8 大於等於 13:30,而且要求,$7:$8 小於等於 14:30 # 最後使用 wc ‐l 統計這樣的數據有多少行,即多少個 awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"' /var/log/httpd/access_log |wc -l
2八、統計 13:30 到 14:30 全部訪問本機 Aapche 服務器的遠程 IP 地址是什麼 #!/bin/bash # 統計 13:30 到 14:30 全部訪問本機 Aapche 服務器的遠程 IP 地址是什麼 # awk 使用‐F 選項指定文件內容的分隔符是/或者: # 條件判斷$7:$8 大於等於 13:30,而且要求,$7:$8 小於等於 14:30 # 日誌文檔內容裏面,第 1 列是遠程主機的 IP 地址,使用 awk 單獨顯示第 1 列便可 awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"{print $1}' /var/log/httpd/access_log
2五、查看有多少遠程的 IP 在鏈接本機 #!/bin/bash # 查看有多少遠程的 IP 在鏈接本機(不論是經過 ssh 仍是 web 仍是 ftp 都統計) # 使用 netstat ‐atn 能夠查看本機全部鏈接的狀態,‐a 查看全部, # -t僅顯示 tcp 鏈接的信息,‐n 數字格式顯示 # Local Address(第四列是本機的 IP 和端口信息) # Foreign Address(第五列是遠程主機的 IP 和端口信息) # 使用 awk 命令僅顯示第 5 列數據,再顯示第 1 列 IP 地址的信息 # sort 能夠按數字大小排序,最後使用 uniq 將多餘重複的刪除,並統計重複的次數 netstat -atn | awk '{print $5}' | awk '{print $1}' | sort -nr | uniq -c
2三、編寫腳本快速克隆 KVM 虛擬機 #!/bin/bash # 編寫腳本快速克隆 KVM 虛擬機 # 本腳本針對 RHEL7.2 或 Centos7.2 # 本腳本須要提早準備一個 qcow2 格式的虛擬機模板, # 名稱爲/var/lib/libvirt/images /.rh7_template 的虛擬機模板 # 該腳本使用 qemu‐img 命令快速建立快照虛擬機 # 腳本使用 sed 修改模板虛擬機的配置文件,將虛擬機名稱、UUID、磁盤文件名、MAC 地址 # exit code: # 65 ‐> user input nothing # 66 ‐> user input is not a number # 67 ‐> user input out of range # 68 ‐> vm disk image exists IMG_DIR=/var/lib/libvirt/images BASEVM=rh7_template read -p "Enter VM number: " VMNUM if [ $VMNUM -le 9 ];then VMNUM=0$VMNUM fi if [ -z "${VMNUM}" ]; then echo "You must input a number." exit 65 elif [[ ${VMNUM} =~ [a‐z] ]; then echo "You must input a number." exit 66 elif [ ${VMNUM} -lt 1 -o ${VMNUM} -gt 99 ]; then echo "Input out of range" exit 67 fi NEWVM=rh7_node${VMNUM} if [ -e $IMG_DIR/${NEWVM}.img ]; then echo "File exists." exit 68 fi echo -en "Creating Virtual Machine disk image......\t" qemu‐img create -f qcow2 ‐b $IMG_DIR/.${BASEVM}.img $IMG_DIR/${NEWVM}.img &> /dev/null echo -e "\e[32;1m[OK]\e[0m" #virsh dumpxml ${BASEVM} > /tmp/myvm.xml cat /var/lib/libvirt/images/.rhel7.xml > /tmp/myvm.xml sed -i "/<name>${BASEVM}/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml sed -i "/uuid/s/<uuid>.*<\/uuid>/<uuid>$(uuidgen)<\/uuid>/" /tmp/myvm.xml sed -i "/${BASEVM}\.img/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml # 修改 MAC 地址,本例使用的是常量,每位使用該腳本的用戶須要根據實際狀況修改這些值 # 最好這裏可使用便利,這樣更適合於批量操做,能夠克隆更多虛擬機 sed -i "/mac /s/a1/0c/" /tmp/myvm.xml echo -en "Defining new virtual machine......\t\t" virsh define /tmp/myvm.xml &> /dev/null echo -e "\e[32;1m[OK]\e[0m"
#!/bin/bash # 打印國際象棋棋盤 # 設置兩個變量,i 和 j,一個表明行,一個表明列,國際象棋爲 8*8 棋盤 # i=1 是表明準備打印第一行棋盤,第 1 行棋盤有灰色和藍色間隔輸出,總共爲 8 列 # i=1,j=1 表明第 1 行的第 1 列;i=2,j=3 表明第 2 行的第 3 列 # 棋盤的規律是 i+j 若是是偶數,就打印藍色色塊,若是是奇數就打印灰色色塊 # 使用 echo ‐ne 打印色塊,而且打印完成色塊後不自動換行,在同一行繼續輸出其餘色塊 for i in {1..8} do for j in {1..8} do sum=$[i+j] if [ $[sum%2] -eq 0 ];then echo -ne "\033[46m \033[0m" else echo -ne "\033[47m \033[0m" fi done echo done
3八、切割 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
3九、檢測 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
4一、檢測 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
3二、統計/var/log 有多少個文件,並顯示這些文件名 #!/bin/bash # 統計/var/log 有多少個文件,並顯示這些文件名 # 使用 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 # 自動對磁盤分區、格式化、掛載 # 對虛擬機的 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
3五、編寫 nginx 啓動腳本 #!/bin/bash # 編寫 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
#!/bin/bash # 判斷文件或目錄是否存在 if [ $# -eq 0 ] ;then echo "未輸入任何參數,請輸入參數" echo "用法:$0 [文件名|目錄名]" fi if [ -f $1 ];then echo "該文件,存在" ls -l $1 else echo "沒有該文件" fi if [ -d $1 ];then echo "該目錄,存在" ls -ld $2 else echo "沒有該目錄" fi
#!/bin/bash # 關閉 SELinux sed -i '/^SELINUX/s/=.*/=disabled/' /etc/selinux/config setenforce 0
8七、Shell 腳本對信號的處理,執行腳本後,按鍵盤 Ctrl+C 沒法終止的腳本html
#!/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
使用腳本開啓關閉虛擬機node
#!/bin/bash # 使用腳本開啓關閉虛擬機 # 腳本經過調用virsh命令實現對虛擬機的管理,若是沒有該命令,須要安裝 libvirt‐client 軟件包 # $1是腳本的第1個參數,$2是腳本的第2個參數 # 第1個參數是你但願對虛擬機進行的操做指令,第2個參數是虛擬機名稱 case $1 in list) virsh list --all ;; start) virsh start $2 ;; stop) virsh destroy $2 ;; enable) virsh autostart $2 ;; disable) virsh autostart --disable $2 ;; *) echo "Usage:$0 list" echo "Usage:$0 [start|stop|enable|disable] VM_name" cat << EOF #list 顯示虛擬機列表 #start 啓動虛擬機 #stop 關閉虛擬機 #enable 設置虛擬機爲開機自啓 #disable 關閉虛擬機開機自啓功能 EOF ;; esac
80、顯示本機 Linux 系統上全部開放的端口列表python
#!/bin/bash # 顯示本機 Linux 系統上全部開放的端口列表 # 從端口列表中觀測有沒有沒用的端口,有的話能夠將該端口對應的服務關閉,防止意外的攻擊可能性 ss -nutlp | awk '{print $1,$5}' | awk -F"[: ]" '{print "協議:"$1,"端口號:"$NF}' | grep "[0‐9]" | uniq
8一、將 Linux 系統中 UID 大於等於 1000 的普通用戶都刪除 #!/bin/bash # 將 Linux 系統中 UID 大於等於 1000 的普通用戶都刪除 # 先用 awk 提取全部 uid 大於等於 1000 的普通用戶名稱 # 再使用 for 循環逐個將每一個用戶刪除便可 user=$(awk -F: '$3>=1000{print $1}' /etc/passwd) for i in $user do userdel -r $i done
7九、判斷用戶輸入的是 Yes 或 NO #!/bin/bash # 判斷用戶輸入的是 Yes 或 NO read -p "Are you sure?[y/n]:" sure case $sure in y|Y|Yes|YES) echo "you enter $a" ;; n|N|NO|no) echo "you enter $a" ;; *) echo "error";; esac
7六、判斷用戶輸入的數據類型(字母、數字或其餘) mysql
#!/bin/bash # 判斷用戶輸入的數據類型(字母、數字或其餘) read -p "請輸入一個字符:" KEY case "$KEY" in [a‐z]|[A‐Z]) echo "字母" ;; [0‐9]) echo "數字" ;; *) echo "空格、功能鍵或其餘控制字符" esac
7四、統計 Linux 進程相關數量信息linux
#!/bin/bash # 統計 Linux 進程相關數量信息 running=0 sleeping=0 stoped=0 zombie=0 # 在 proc 目錄下全部以數字開始的都是當前計算機正在運行的進程的進程 PID # 每一個 PID 編號的目錄下記錄有該進程相關的信息 for pid in /proc/[1‐9]* do procs=$[procs+1] stat=$(awk '{print $3}' $pid/stat) # 每一個 pid 目錄下都有一個 stat 文件,該文件的第 3 列是該進程的狀態信息 case $stat in R) running=$[running+1] ;; T) stoped=$[stoped+1] ;; S) sleeping=$[sleeping+1] ;; Z) zombie=$[zombie+1] ;; esac done echo "進程統計信息以下" echo "總進程數量爲:$procs" echo "Running 進程數爲:$running" echo "Stoped 進程數爲:$stoped" echo "Sleeping 進程數爲:$sleeping" echo "Zombie 進程數爲:$zombie"
70、自動修改計劃任務配置文件nginx
#!/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
6九、設置 Python 支持自動命令補齊功能c++
#!/bin/bash # 設置 Python 支持自動命令補齊功能 # Summary:Enable tab complete for python # Description: Needs import readline and rlcompleter module # import readline # import rlcompleter # help(rlcompleter) display detail: readline.parse_and_bind('tab: complete') # man python display detail: PYTHONSTARTUP variable if [ ! -f /usr/bin/tab.py ];then cat >> /usr/bin/tab.py <<EOF import readline import rlcompleter readline.parse_and_bind('tab: complete') EOF fi sed -i '$a export PYTHONSTARTUP=/usr/bin/tab.py' /etc/profile source /etc/profile
6八、修改 Linux 系統的最大打開文件數量 #!/bin/bash # 修改 Linux 系統的最大打開文件數量 # 往/etc/security/limits.conf 文件的末尾追加兩行配置參數,修改最大打開文件數量爲 65536 cat >> /etc/security/limits.conf <<EOF * soft nofile 65536 * hard nofile 65536 EOF
[root@xuegod-master ~]# ip a | awk 'BEGIN{print " 本 機 MAC 地 址 信 息 如 下 :"}{if(/inet /){print $2}}' | grep -v "127.0.0.1/8" 本 機 MAC 地 址 信 息 如 下 : 192.168.1.129/24 [root@xuegod-master ~]# ip a | awk 'BEGIN{print " 本 機 MAC 地 址 信 息 如 下 :"}{if(/link\/ether/){print $2}}' 本 機 MAC 地 址 信 息 如 下 : 00:0c:29:ed:bb:ce
6二、制定目錄路徑,腳本自動將該目錄使用 tar 命令打包備份到/data目錄 #!/bin/bash # 制定目錄路徑,腳本自動將該目錄使用 tar 命令打包備份到/data目錄 [ ! -d /data ] && mkdir /data [ -z $1 ] && exit if [ -d $1 ];then tar -czf /data/$1.-`date +%Y%m%d`.tar.gz $1 else echo "該目錄不存在" fi
5一、查找 Linux 系統中的殭屍進程 #!/bin/bash # 查找 Linux 系統中的殭屍進程 # awk 判斷 ps 命令輸出的第 8 列爲 Z 是,顯示該進程的 PID 和進程命令 ps aux | awk '{if($8 == "Z"){print $2,$11}}'
50、刪除某個目錄下大小爲 0 的文件 #!/bin/bash # 刪除某個目錄下大小爲 0 的文件 #/var/www/html 爲測試目錄,腳本會清空該目錄下全部 0 字節的文件 dir="/var/www/html" find $dir -type f -size 0 -exec rm -rf {} \;
4八、使用腳本自動建立邏輯卷 #!/bin/bash # 使用腳本自動建立邏輯卷 # 清屏,顯示警告信息,建立將磁盤轉換爲邏輯卷會刪除數據 clear echo -e "\033[32m !!!!!!警告(Warning)!!!!!!\033[0m" echo echo "+++++++++++++++++++++++++++++++++++++++++++++++++" echo "腳本會將整個磁盤轉換爲 PV,並刪除磁盤上全部數據!!!" echo "This Script will destroy all data on the Disk" echo "+++++++++++++++++++++++++++++++++++++++++++++++++" echo read -p "請問是否繼續 y/n?:" sure # 測試用戶輸入的是否爲 y,若是不是則退出腳本 [ $sure != y ] && exit # 提示用戶輸入相關參數(磁盤、卷組名稱等數據),並測試用戶是否輸入了這些值,若是沒有輸入,則腳本退出 read -p "請輸入磁盤名稱,如/dev/vdb:" disk [ -z $disk ] && echo "沒有輸入磁盤名稱" && exit read -p "請輸入卷組名稱:" vg_name [ -z $vg_name ] && echo "沒有輸入卷組名稱" && exit read -p "請輸入邏輯卷名稱:" lv_name [ -z $lv_name ] && echo "沒有輸入邏輯卷名稱" && exit read -p "請輸入邏輯卷大小:" lv_size [ -z $lv_size ] && echo "沒有輸入邏輯卷大小" && exit # 使用命令建立邏輯卷 pvcreate $disk vgcreate $vg_name $disk lvcreate -L ${lv_size}M -n ${lv_name} ${vg_name}
4二、備份 MySQL 的 shell 腳本(mysqldump版本) #!/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
8二、使用腳本開啓關閉虛擬機 #!/bin/bash # 使用腳本開啓關閉虛擬機 # 腳本經過調用virsh命令實現對虛擬機的管理,若是沒有該命令,須要安裝 libvirt‐client 軟件包 # $1是腳本的第1個參數,$2是腳本的第2個參數 # 第1個參數是你但願對虛擬機進行的操做指令,第2個參數是虛擬機名稱 case $1 in list) virsh list --all ;; start) virsh start $2 ;; stop) virsh destroy $2 ;; enable) virsh autostart $2 ;; disable) virsh autostart --disable $2 ;; *) echo "Usage:$0 list" echo "Usage:$0 [start|stop|enable|disable] VM_name" cat << EOF #list 顯示虛擬機列表 #start 啓動虛擬機 #stop 關閉虛擬機 #enable 設置虛擬機爲開機自啓 #disable 關閉虛擬機開機自啓功能 EOF ;; esac