當前位置: 妍妍網 > 碼農

開啟周五的正確方式,經典shell指令碼安排上~

2024-03-22碼農

關註上方 浩道Linux ,回復 資料 ,即可獲取海量 L inux Python 網路通訊、網路安全 等學習資料!

前言

大家好,這裏是 浩道Linux ,主要給大家分享 L inux P ython 網路通訊、網路安全等 相關的IT知識平台。

為了讓大家更好的開啟周五,今天浩道又跟大家分享幾個Linux運維中常用到的shell指令碼,一起擼起來!

文章來源: https://blo g.csdn.net/lyshark_lyshark/article/details/125853245

一、根據PID過濾行程所有資訊

#! /bin/bash
# Function: 根據使用者輸入的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"記憶體占用率:`ps -aux| awk '$2~/^'$P'$/{print $4}'`%"
echo"行程開始執行的時刻:`ps -aux| awk '$2~/^'$P'$/{print $9}'`"
echo"行程執行的時間:`ps -aux| awk '$2~/^'$P'$/{print $10}'`"
echo"行程狀態:`ps -aux| awk '$2~/^'$P'$/{print $8}'`"
echo"行程虛擬記憶體:`ps -aux| awk '$2~/^'$P'$/{print $5}'`"
echo"行程共享記憶體:`ps -aux| awk '$2~/^'$P'$/{print $6}'`"
echo"--------------------------------"

二、根據行程名過濾行程資訊
會顯示出該行程名包含的所有執行緒

#! /bin/bash
# Function: 根據輸入的程式的名字過濾出所對應的PID,並顯示出詳細資訊,如果有幾個PID,則全部顯示
read -p "請輸入要查詢的行程名:" NAME
N=`ps -aux | grep $NAME | grep -v grep | wc -l` ##統計行程總數
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"記憶體占用率:`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"行程狀態:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $8}'`"
echo"行程虛擬記憶體:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $5}'`"
echo"行程共享記憶體:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $6}'`"
echo"***************************************************************"
let N-- i++
done

三、根據使用者名稱查詢該使用者的相關資訊

#! /bin/bash
# Function:根據使用者名稱查詢該使用者的所有資訊
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"該使用者有登入系統的許可權!!"
echo"------------------------------"
elif [ $Login == "/sbin/nologin" ];then
echo"該使用者沒有登入系統的許可權!!"
echo"------------------------------"
fi
fi

四、加固系統的一些配置

#! /bin/bash
# Function:對帳戶的密碼的一些加固
read -p "設定密碼最多可多少天不修改:" A
read -p "設定密碼修改之間最小的天數:" B
read -p "設定密碼最短的長度:" C
read -p "設定密碼失效前多少天通知使用者:" 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"已對密碼進行加固,新使用者不得和舊密碼相同,且新密碼必須同時包含數位、小寫字母,大寫字母!!"
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"已設定禁止root使用者遠端登入!!"
sed -i '/PermitRootLogin/c\PermitRootLogin no' /etc/ssh/sshd_config
read -p "設定歷史命令保存條數:" E
read -p "設定帳戶自動登出時間:" F
sed -i '/^HISTSIZE/c\HISTSIZE='$E'' /etc/profile
sed -i '/^HISTSIZE/a\TMOUT='$F'' /etc/profile
echo"已設定只允許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"即將對系統中的帳戶進行檢查...."
echo"系統中有登入許可權的使用者有:"
awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd
echo"********************************************"
echo"系統中UID=0的使用者有:"
awk -F: '($3=="0"){print $1}' /etc/passwd
echo"********************************************"
N=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
echo"系統中空密碼使用者有:$N"
if [ $N -eq 0 ];then
echo"恭喜你,系統中無空密碼使用者!!"
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"必須為空使用者設定密碼!!"
passwd $None
let N--
done
 M=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
if [ $M -eq 0 ];then
echo"恭喜,系統中已經沒有空密碼使用者了!"
else
echo"系統中還存在空密碼使用者:$M"
fi
fi
echo"即將對系統中重要檔進行釘選,釘選後將無法添加刪除使用者和組"
read -p "警告:此指令碼執行後將無法添加刪除使用者和組!!確定輸入Y,取消輸入N;Y/N:" i
case$iin
[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






更多精彩

關註公眾號 浩道Linux

浩道Linux ,專註於 Linux系統 的相關知識、 網路通訊 網路安全 Python相關 知識以及涵蓋IT行業相關技能的學習, 理論與實戰結合,真正讓你在學習工作中真正去用到所學。同時也會分享一些面試經驗,助你找到高薪offer,讓我們一起去學習,一起去進步,一起去漲薪!期待您的加入~~~ 關註回復「資料」可 免費獲取學習資料 (含有電子書籍、視訊等)。

喜歡的話,記得 點「贊」 「在看」