1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        幾個必不可少的 Linux 運維腳本!

        共 22172字,需瀏覽 45分鐘

         ·

        2022-10-28 05:44


        領(lǐng)取嵌入式學習路線,

        請加良許微信:coderliangxu-6

        鏈接:https://blog.csdn.net/lyshark_lyshark/article/details/125853245

        一、根據(jù)PID過濾進程所有信息

        #! /bin/bash
        # Function: 根據(jù)用戶輸入的PID,過濾出該PID所有的信息
        read -p "請輸入要查詢的PID: " P
        n=`ps -aux| awk '$2~/^'$P'$/{print $11}'|wc -l`
        if [ $n -eq 0 ];then
         echo "該PID不存在!!"
         exit
        fi
        echo "--------------------------------"
        echo "進程PID: $P"
        echo "進程命令:`ps -aux| awk '$2~/^'$P'$/{print $11}'`"
        echo "進程所屬用戶: `ps -aux| awk '$2~/^'$P'$/{print $1}'`"
        echo "CPU占用率:`ps -aux| awk '$2~/^'$P'$/{print $3}'`%"
        echo "內(nèi)存占用率:`ps -aux| awk '$2~/^'$P'$/{print $4}'`%"
        echo "進程開始運行的時刻:`ps -aux| awk '$2~/^'$P'$/{print $9}'`"
        echo "進程運行的時間:`ps -aux| awk '$2~/^'$P'$/{print $10}'`"
        echo "進程狀態(tài):`ps -aux| awk '$2~/^'$P'$/{print $8}'`"
        echo "進程虛擬內(nèi)存:`ps -aux| awk '$2~/^'$P'$/{print $5}'`"
        echo "進程共享內(nèi)存:`ps -aux| awk '$2~/^'$P'$/{print $6}'`"
        echo "--------------------------------"

        二、根據(jù)進程名過濾進程信息

        會顯示出該進程名包含的所有線程

        #! /bin/bash
        # Function: 根據(jù)輸入的程序的名字過濾出所對應(yīng)的PID,并顯示出詳細信息,如果有幾個PID,則全部顯示
        read -p "請輸入要查詢的進程名:" NAME
        N=`ps -aux | grep $NAME | grep -v grep | wc -l` ##統(tǒng)計進程總數(shù)
        if [ $N -le 0 ];then
          echo "該進程名沒有運行!"
        fi
        i=1
        while [ $N -gt 0 ]
        do
          echo "進程PID: `ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $2}'`"
          echo "進程命令:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $11}'`"
          echo "進程所屬用戶: `ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $1}'`"
          echo "CPU占用率:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $3}'`%"
          echo "內(nèi)存占用率:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $4}'`%"
          echo "進程開始運行的時刻:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $9}'`"
          echo "進程運行的時間:` ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $11}'`"
          echo "進程狀態(tài):`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $8}'`"
          echo "進程虛擬內(nèi)存:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $5}'`"
          echo "進程共享內(nèi)存:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $6}'`"
          echo "***************************************************************"
          let N-- i++
        done

        三、根據(jù)用戶名查詢該用戶的相關(guān)信息

        #! /bin/bash
        # Function:根據(jù)用戶名查詢該用戶的所有信息
        read -p "請輸入要查詢的用戶名:" A
        echo "------------------------------"
        n=`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}' | wc -l`
        if [ $n -eq 0 ];then
        echo "該用戶不存在"
        echo "------------------------------"
        else
          echo "該用戶的用戶名:$A"
          echo "該用戶的UID:`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $3}'`"
          echo "該用戶的組為:`id $A | awk {'print $3'}`"
          echo "該用戶的GID為:`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $4}'`"
          echo "該用戶的家目錄為:`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $6}'`"
          Login=`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $7}'`
          if [ $Login == "/bin/bash" ];then
          echo "該用戶有登錄系統(tǒng)的權(quán)限?。?
          echo "------------------------------"
          elif [ $Login == "/sbin/nologin" ];then
          echo "該用戶沒有登錄系統(tǒng)的權(quán)限?。?
          echo "------------------------------"
          fi
        fi

        四、加固系統(tǒng)的一些配置

        #! /bin/bash
        # Function:對賬戶的密碼的一些加固
        read -p "設(shè)置密碼最多可多少天不修改:" A
        read -p "設(shè)置密碼修改之間最小的天數(shù):" B
        read -p "設(shè)置密碼最短的長度:" C
        read -p "設(shè)置密碼失效前多少天通知用戶:" D
        sed -i '/^PASS_MAX_DAYS/c\PASS_MAX_DAYS '$A'' /etc/login.defs
        sed -i '/^PASS_MIN_DAYS/c\PASS_MIN_DAYS '$B'' /etc/login.defs
        sed -i '/^PASS_MIN_LEN/c\PASS_MIN_LEN '$C'' /etc/login.defs
        sed -i '/^PASS_WARN_AGE/c\PASS_WARN_AGE '$D'' /etc/login.defs

        echo "已對密碼進行加固,新用戶不得和舊密碼相同,且新密碼必須同時包含數(shù)字、小寫字母,大寫字母?。?
        sed -i '/pam_pwquality.so/c\password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1' /etc/pam.d/system-auth

        echo "已對密碼進行加固,如果輸入錯誤密碼超過3次,則鎖定賬戶!!"
        n=`cat /etc/pam.d/sshd | grep "auth required pam_tally2.so "|wc -l`
        if [ $n -eq 0 ];then
        sed -i '/%PAM-1.0/a\auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300' /etc/pam.d/sshd
        fi

        echo  "已設(shè)置禁止root用戶遠程登錄??!"
        sed -i '/PermitRootLogin/c\PermitRootLogin no'  /etc/ssh/sshd_config

        read -p "設(shè)置歷史命令保存條數(shù):" E
        read -p "設(shè)置賬戶自動注銷時間:" F
        sed -i '/^HISTSIZE/c\HISTSIZE='$E'' /etc/profile
        sed -i '/^HISTSIZE/a\TMOUT='$F'' /etc/profile

        echo "已設(shè)置只允許wheel組的用戶可以使用su命令切換到root用戶!"
        sed -i '/pam_wheel.so use_uid/c\auth required pam_wheel.so use_uid ' /etc/pam.d/su
        n=`cat /etc/login.defs | grep SU_WHEEL_ONLY | wc -l`
        if [ $n -eq 0 ];then
        echo SU_WHEEL_ONLY yes >> /etc/login.defs
        fi

        echo "即將對系統(tǒng)中的賬戶進行檢查...."
        echo "系統(tǒng)中有登錄權(quán)限的用戶有:"
        awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd
        echo "********************************************"
        echo "系統(tǒng)中UID=0的用戶有:"
        awk -F: '($3=="0"){print $1}' /etc/passwd
        echo "********************************************"
        N=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
        echo "系統(tǒng)中空密碼用戶有:$N"
        if [ $N -eq 0 ];then
         echo "恭喜你,系統(tǒng)中無空密碼用戶?。?
         echo "********************************************"
        else
         i=1
         while [ $N -gt 0 ]
         do
            None=`awk -F: '($2==""){print $1}' /etc/shadow|awk 'NR=='$i'{print}'`
            echo "------------------------"
            echo $None
            echo "必須為空用戶設(shè)置密碼?。?
            passwd $None
            let N--
         done
         M=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
         if [ $M -eq 0 ];then
          echo "恭喜,系統(tǒng)中已經(jīng)沒有空密碼用戶了!"
         else
        echo "系統(tǒng)中還存在空密碼用戶:$M"
         fi
        fi

        echo "即將對系統(tǒng)中重要文件進行鎖定,鎖定后將無法添加刪除用戶和組"
        read -p "警告:此腳本運行后將無法添加刪除用戶和組??!確定輸入Y,取消輸入N;Y/N:" i
        case $i in
              [Y,y])
                    chattr +i /etc/passwd
                    chattr +i /etc/shadow
                    chattr +i /etc/group
                    chattr +i /etc/gshadow
                    echo "鎖定成功!"
        ;;
              [N,n])
                    chattr -i /etc/passwd
                    chattr -i /etc/shadow
                    chattr -i /etc/group
                    chattr -i /etc/gshadow
                    echo "取消鎖定成功!!"
        ;;
               *)
                    echo "請輸入Y/y or N/n"
        esac


        五、實現(xiàn)磁盤分區(qū)的

        只支持分配主分區(qū)和標準的linux文件系統(tǒng)(ext4/xfs)的分區(qū)

        #! /bin/bash
        # Function:對硬盤進行分區(qū),得到一個標準的linux文件系統(tǒng)(ext4/xfs)的主分區(qū)
        cat /proc/partitions > old
        read -p "請輸入你要分區(qū)的硬盤(寫絕對路徑,如:/dev/sda):" A
        if [ -e $A ];then
          echo "true"
        else
          echo "該設(shè)備不存在!!"
          exit
        fi
        read -p "請輸入你要創(chuàng)建的磁盤分區(qū)類型(這里只能是主分區(qū),默認按回車即可):" B
        read -p "請輸入分區(qū)數(shù)字,范圍1-4,默認從1開始,默認按回車即可:" C
        read -p "請輸入扇區(qū)起始表號,默認按回車即可:" D
        read -p "請輸入你要分區(qū)的分區(qū)大小(格式:如 +5G ):" E
        fdisk $A << EOF
        n
        p
        $C
        $D
        $E
        w
        EOF
        echo "一個標準的linux文件系統(tǒng)的分區(qū)已經(jīng)建立好??!"
        partprobe $A
        echo "-------------------------------"
        cat /proc/partitions
        cat /proc/partitions > new
        F=`diff new old | grep "<" | awk '{print $5}'`
        echo "-------------------------------"
        echo $F
        echo "你想對新分區(qū)設(shè)定什么類型的文件系統(tǒng)?有以下選項:"
        echo "A:ext4文件系統(tǒng)"
        echo "B:xfs文件系統(tǒng)"
        read -p "請輸入你的選擇:" G
        case $G in
                a|A)
                   mkfs.ext4 /dev/$F
                   echo "該分區(qū)將被掛載在 "/mnt/$F" 下" 
                   m=`ls /mnt/|grep $F | wc -l`
                   if [ $m -eq 0 ];then
                    mkdir /mnt/$F
                   fi
                   n=`cat /etc/fstab | grep /dev/$F| wc -l`
                   if [ $n -eq 0 ];then
                      echo "/dev/$F     /mnt/$F     ext4         defaults          0      0" >> /etc/fstab
                   else
                      sed -i '/^\/dev\/$F/c\/dev/$F     /mnt/$F     ext4         defaults          0      0' /etc/fstab
                   fi
                   mount -a
                   df -Th
        ;;
                b|B)
                   mkfs.xfs -f /dev/$F
                   echo "該分區(qū)將被掛載在 "/mnt/$F" 下" 
                   m=`ls /mnt/|grep $F | wc -l`
                   if [ $m -eq 0 ];then
                      mkdir /mnt/$F
                   fi
                   n=`cat /etc/fstab | grep /dev/$F | wc -l`
                   if [ $n -eq 0 ];then
                      echo "/dev/$F     /mnt/$F      xfs       defaults          0      0" >> /etc/fstab
                   else
                      sed -i '/^\/dev\/$F/c\/dev/$F     /mnt/$F     xfs         defaults          0      0' /etc/fstab
                   fi
                   mount -a
                   df -Th
        ;;
                *)
                   echo "你的輸入有誤??!"
        esac

        六、使用一整塊硬盤創(chuàng)建邏輯卷

        #!/bin/bash
        # Function:使用一整塊硬盤創(chuàng)建LVM邏輯卷
        read -p "請輸入你要做成邏輯卷的硬盤(寫絕對路徑,如:/dev/sda):" path
        if [ -e $path ];then
          echo "true"
        else
          echo "該設(shè)備不存在??!"
          exit
        fi
        pvcreate $path
        echo "該硬盤已做成物理卷!"
        vgcreate myvg $path
        echo "該物理卷已加入卷組 myvg 中"
        vgs
        free=`vgs| awk '$1~/myvg/{print}'|awk '{print $6}'`
        echo "該物理卷剩余的空間大小為:$free "
        read -p "請輸入你要創(chuàng)建邏輯卷的大小(如:1G):" repy2
        lvcreate -L $repy2 -n mylv myvg
        echo "已成功創(chuàng)建邏輯卷mylv"
        echo "------------------------"
        lvs
        echo "------------------------"
        echo "你想對新分區(qū)設(shè)定什么類型的文件系統(tǒng)?有以下選項:"
        echo "A:ext4文件系統(tǒng)"
        echo "B:xfs文件系統(tǒng)"
        read -p "請輸入你的選擇:" repy3
        case $repy3 in
                a|A)
                   mkfs.ext4 /dev/myvg/mylv
                   echo "該分區(qū)將被掛載在 "/mnt/mylv" 下" 
                   m=`ls /mnt/|grep mylv | wc -l`
                   if [ $m -eq 0 ];then
                    mkdir /mnt/mylv
                   fi
                   echo "/dev/myvg/mylv     /mnt/mylv     ext4         defaults          0      0" >> /etc/fstab
                   mount -a
                   df -Th
        ;;
                b|B)
                   mkfs.xfs -f /dev/myvg/mylv
                   echo "該分區(qū)將被掛載在 "/mnt/mylv" 下" 
                   m=`ls /mnt/|grep mylv | wc -l`
                   if [ $m -eq 0 ];then
                      mkdir /mnt/mylv
                   fi
                   echo "/dev/myvg/mylv     /mnt/mylv      xfs       defaults          0      0" >> /etc/fstab
                   mount -a
                   df -Th
        ;;
                *)
                   echo "你的輸入有誤??!"
        esac

        七、將一塊硬盤分區(qū),然后分區(qū)設(shè)置為虛擬卷

        #! /bin/bash
        # Author:謝公子
        # Date:2018-10-13
        # Function:新建一個分區(qū),并做成邏輯卷
        cat /proc/partitions > old
        read -p "請輸入你要分區(qū)的硬盤(寫絕對路徑,如:/dev/sda):" A
        if [ -e $A ];then
          echo "true"
        else
          echo "該設(shè)備不存在?。?
          exit
        fi
        read -p "請輸入你要創(chuàng)建的磁盤分區(qū)類型(這里只能是主分區(qū),默認按回車即可):" B
        read -p "請輸入分區(qū)數(shù)字,范圍1-4,默認從1開始,默認按回車即可:" C
        read -p "請輸入扇區(qū)起始表號,默認按回車即可:" D
        read -p "請輸入你要分區(qū)的分區(qū)大小(格式:如 +5G ):" E
        read -p "請輸入你要劃分為邏輯卷的分區(qū)盤符(默認回車即可):" Z
        fdisk $A << EOF
        n
        p
        $C
        $D
        $E
        t
        $Z
        8e
        p
        w
        EOF
        echo "一個標準LVM的分區(qū)已經(jīng)建立好??!"
        partprobe $A
        echo "-------------------------------"
        cat /proc/partitions
        cat /proc/partitions > new
        F=`diff new old | grep "<" | awk '{print $5}'`
        echo "-------------------------------"
        echo $F
        pvcreate /dev/$F
        echo "該硬盤已做成物理卷!"
        n=`vgs | grep myvg |wc -l`
        if [ $n -eq 0 ];then
           vgcreate myvg /dev/$F
           echo "該物理卷已加入卷組myvg中"
        else
           vgextend myvg /dev/$F
           echo  "該物理卷已加入卷組myvg中"
           vgs
           free=`vgs| awk '$1~/myvg/{print}'|awk '{print $7}'`
           echo "該卷組剩余的空間大小為:$free "
           lvs
           exit
        fi
        vgs
        free=`vgs| awk '$1~/myvg/{print}'|awk '{print $6}'`
        echo "該卷組剩余的空間大小為:$free "
        read -p "請輸入你要創(chuàng)建邏輯卷的大小(如:1G):" repy2
        lvcreate -L $repy2 -n mylv myvg
        echo "已成功創(chuàng)建邏輯卷mylv"
        echo "------------------------"
        lvs
        echo "------------------------"
        echo "你想對新分區(qū)設(shè)定什么類型的文件系統(tǒng)?有以下選項:"
        echo "A:ext4文件系統(tǒng)"
        echo "B:xfs文件系統(tǒng)"
        read -p "請輸入你的選擇:" G
        case $G in
                a|A)
                   mkfs.ext4 /dev/myvg/mylv
                   echo "該分區(qū)將被掛載在 "/mnt/$F" 下" 
                   m=`ls /mnt/|grep $F | wc -l`
                   if [ $m -eq 0 ];then
                    mkdir /mnt/$F
                   fi
                   echo "/dev/myvg/mylv     /mnt/$F     ext4         defaults          0      0" >> /etc/fstab
                   mount -a
                   df -Th
        ;;
                b|B)
                   mkfs.xfs -f /dev/myvg/mylv
                   echo "該分區(qū)將被掛載在 "/mnt/$F" 下" 
                   m=`ls /mnt/|grep $F | wc -l`
                   if [ $m -eq 0 ];then
                      mkdir /mnt/$F
                   fi
                   echo "/dev/myvg/mylv     /mnt/$F      xfs       defaults          0      0" >> /etc/fstab
                   mount -a
                   df -Th
        ;;
                *)
                   echo "你的輸入有誤??!"
        esac





        良許花了一個半月的時間研發(fā)了一門 Linux 命令課程,歡迎購買學習!

        課程特色:

        1. 詳細總結(jié) 150 個高頻使用命令,學完可應(yīng)對工作中 95% 命令需求;
        2. 答疑群提供無限次答疑服務(wù),答疑群氛圍很好;
        3. 總時長超 10 小時,媲美大課時長。
        長按下方卡片購買



        強烈推薦一位騰訊大佬錄制的 Shell 實戰(zhàn)案例課程(已獲授權(quán)):

        1. 大佬在騰訊工作 6 年,在大廠工作十幾年,經(jīng)驗豐富;
        2. 大佬根據(jù)自己在大廠工作經(jīng)驗總結(jié)了 100 個案例,超級實用!
        3. 學完這 100 個案例,肯定對自己的 Shell 編程有很大的提升;
        4. 答疑群提供無限次答疑服務(wù),答疑群氛圍很好。
        長按下方卡片購買


        瀏覽 40
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            一道本在线 | 插逼免费观看 | 日韩人妻无码一区二区三区四区 | 91视频污免费 | 国产91在线拍偷自揄拍 | 污污网站观看大全 | 美女被变态男扒了胸罩亲胸 | 国产裸体美女永久免费 | 成人无码电影在线观看 | 成人h无码视频在线观看 |