作者:JackTian
文章首發(fā)于公眾號:【杰哥的IT之旅】
腳本 1:該腳本用于讀取Linux系統(tǒng)/etc/passwd文件中的所有/bin/bash作為登錄默認Shell的用戶列表,并提取每個用戶的用戶名。對于這些用戶名進行檢查,是否不等于root和tidb。如果用戶名不等于root和tidb,則使用usermod命令對該用戶的默認Shell修改為:/sbin/nologin,它通常用于禁止用戶遠程登錄系統(tǒng)。
#!/bin/bash
for user in $(cat /etc/passwd | grep /bin/bash | cut -d ":" -f 1)
do
if [ $user != "root" ] && [ $user != "tidb" ]; then
usermod -s /sbin/nologin $user
fi
done
腳本 2:該腳本首先自定義了md5_list和md5_no_hash.txt兩個文件,然后循環(huán)讀取md5_list文件中每一行的哈希值,判斷是否在md5_no_hash.txt文件中存在。
如果檢查出哈希值在md5_no_hash.txt中存在,則打印信息:MD5值 xxx 在 md5_no_hash.txt 中存在。
如果檢查出哈希值在md5_no_hash.txt中不存在,則打印信息:MD5值 xxx 在 md5_no_hash.txt 中不存在。
#!/bin/bash
# 指定md5_list文件和md5_no_hash.txt文件的路徑
md5_list_file="md5_list"
md5_no_hash_file="md5_no_hash.txt"
# 循環(huán)讀取md5_list文件中的每一行
while IFS= read -r md5; do
# 檢查md5是否在md5_no_hash.txt中
if grep -q "$md5" "$md5_no_hash_file"; then
echo "MD5值 $md5 在 $md5_no_hash_file 中存在"
else
echo "MD5值 $md5 在 $md5_no_hash_file 中不存在"
fi
done < "$md5_list_file"
腳本 3:該腳本的主要功能是:遍歷讀取一個包含IP地址的文件,如該文件名為:mmyd,然后對該文件里的每行IP地址執(zhí)行ping操作,并檢查丟包率。如果ping的丟包率為:100%,則輸出該IP不可達的日志;如果ping不存在丟包率,則輸出該IP可達的日志。
#!/bin/bash
# author:JackTian
# 獲取當前系統(tǒng)時間
current_time=$(date +"%Y-%m-%d-%H:%M:%S")
# 獲取開始時間戳
start_time=$(date +%s)
for i in `cat mmyd` # 這個是逐個讀取該文件里的全部所列出的 IP 地址
do
ping=`ping -c 10 $i | grep loss | awk '{print $6}' | awk -F "%" '{print $1}'`
# 上面一行是對讀出來的ip ping一次,看是否ping通。并取出loss的百分比的值 也就是丟包的值,看是否丟包
Packet_Loss_Rate=`ping -c 10 $i | grep loss | awk '{print $6}'`
if [ $ping -eq 100 ];then
# 比較一下,看丟包的值是不是100,如果是100就是全部丟包,那就是沒ping通,那就顯示 IP ping 失敗了,如果不等于100的話,就ping通了,就顯示 IP ping 成功了。
echo "$current_time 某某移動-活躍 IP 地址:$i ping 失敗了,丟包率為:$Packet_Loss_Rate" >>/opt/jacktian/mmyd_ping.log
else
echo "$current_time 某某移動-活躍 IP 地址:$i ping 成功了!" >>/opt/jacktian/mmyd_ping.log
fi
done
# 獲取結束時間戳
end_time=$(date +%s)
# 計算執(zhí)行時間(秒)
execution_time_seconds=$((end_time - start_time))
# 將執(zhí)行時間轉換為分鐘和秒
minutes=$((execution_time_seconds / 60))
seconds=$((execution_time_seconds % 60))
echo "執(zhí)行完畢!該腳本執(zhí)行時間共: $minutes 分鐘 $seconds 秒"
腳本 4:該腳本用于在Linux系統(tǒng)中創(chuàng)建新用戶,并為該用戶設置密碼、省份代碼、目錄權限以及vsftpd服務的配置。
#!/bin/sh
read -p "user:" user
read -p "passd:" pass
read -p "province:" province
useradd $user -d /bigdata/sftp/province/$province/
#passwd $user
echo $pass | passwd --stdin $user
chown $user /bigdata/sftp/province/$province/ -R
chmod 750 /bigdata/sftp/province/$province/ -R
echo $user>>/etc/vsftpd/chroot_list
echo $user>>/etc/vsftpd/user_list
systemctl restart vsftpd.service
-
read -p "user:" user:提示用戶輸入一個用戶名,并將輸入的值存儲在變量user中 -
read -p "passd:" pass:提示用戶輸入一個密碼,并將輸入的值存儲在變量pass中。注意:在輸入密碼時,不會顯示任何字符 -
read -p "province:" province:提示用戶輸入一個省份代碼,并將輸入的值存儲在變量province中 -
useradd $user -d /bigdata/sftp/province/$province/:該命令將創(chuàng)建一個新用戶,其用戶名為之前輸入的user,其家目錄為:/bigdata/sftp/province/$province/ -
echo $pass | passwd --stdin $user:該命令會將之前輸入的密碼通過標準輸入傳給passwd命令,為新創(chuàng)建的用戶設置密碼 -
chown $user /bigdata/sftp/province/$province/ -R:該命令將更改新創(chuàng)建用戶成為/bigdata/sftp/province/$province/目錄及其子目錄的所有者 -
chmod 750 /bigdata/sftp/province/$province/ -R:該命令會設置/bigdata/sftp/province/$province/目錄及其子目錄的權限為:750,也就是指:用戶有讀、寫、執(zhí)行的權限,而用戶組只有讀和執(zhí)行的權限 -
echo $user>>/etc/vsftpd/chroot_list:該命令會將新創(chuàng)建的用戶添加到vsftpd服務的chroot列表中。這表示當vsftpd服務在運行時,該用戶會被限制在其自己的目錄中,不能訪問系統(tǒng)的其他目錄 -
echo $user>>/etc/vsftpd/user_list:該命令會將新創(chuàng)建的用戶添加到vsftpd服務的用戶列表中。這表示當vsftpd服務在運行時,這個用戶可以登錄并訪問系統(tǒng)。 -
systemctl restart vsftpd.service:重啟vsftpd服務,使之前的所有配置生效
腳本 5:該腳本用于在Linux系統(tǒng)中創(chuàng)建新用戶,并為該用戶設置密碼、省份代碼、idcid、目錄權限以及vsftpd服務的配置。跟如上腳本 4 略有差異。
#!/bin/sh
read -p "user:" user
read -p "passd:" pass
read -p "province:" province
read -p "idcid:" idcid
mkdir -p /bigdata/sftp/province/$province/$idcid
useradd $user -d /bigdata/sftp/province/$province/$idcid
#passwd $user
echo $pass | passwd --stdin $user
chown $user /bigdata/sftp/province/$province/$idcid/ -R
chmod 750 /bigdata/sftp/province/$province/$idcid -R
echo $user>>/etc/vsftpd/chroot_list
echo $user>>/etc/vsftpd/user_list
systemctl restart vsftpd.service
腳本 6:該腳本首先自定義了省份編碼列表為多個目錄路徑,循環(huán)遍歷自定義的省份編碼列表。對于每一個省份編碼,腳本將其分割為三個部分:省份編碼、運營商和數(shù)據(jù)上報類型。然后進入對應的省份目錄。
執(zhí)行du -sh 2023-10-* 命令,查詢所有以2023-10-開頭目錄的大小,并將結果輸出到一個名為$province_code_file_size.txt的文件中。
執(zhí)行for循環(huán),循環(huán)遍歷所有子目錄并查詢每個子目錄中的文件數(shù)量,然后將結果輸出到一個名為$province_code_file_count.txt的文件中。
最后,腳本會返回到上級目錄,以便對下一個省份編碼下的文件大小及文件數(shù)量進行查詢。所有的查詢結果將保存在/opt/目錄下的以省份編碼命名的文件中。
#!/bin/bash
# @Time : 2023/10/30
# @Author : jacktian
# @Desc : 這是一個適用于某臺服務器循環(huán)查詢特定省份、特定運營商、特定數(shù)據(jù)上報類型的文件大小及文件個數(shù)的腳本。
# 定義省份編碼列表
provinces=("110000/dianxin/1024" "120000/liantong/1024" "130000/yidong/1024")
# 遍歷省份編碼列表
for province in "${provinces[@]}"; do
# 分割省份編碼、運營商和數(shù)據(jù)上報類型
province_code=$(echo $province | cut -d'/' -f1)
operator=$(echo $province | cut -d'/' -f2)
category=$(echo $province | cut -d'/' -f3)
# 進入省份目錄
cd /bigdata/sftp/province/$province_code/$operator/$category
# 執(zhí)行du命令查詢文件大小,并將結果輸出到對應的省份編碼txt文件
du -sh 2023-10-* >> /opt/"$province_code"_file_size.txt
# 執(zhí)行for命令查詢?nèi)掌谖募€數(shù),并將結果輸出到對應的省份編碼txt文件
for date in $(ls -d */ | cut -d'/' -f1);
do
echo $date $(ls -1 $date | wc -l) >> /opt/"$province_code"_file_count.txt
done
# 返回上級目錄
cd ..
done
腳本 7:該腳本用于循環(huán)查詢特定省份、特定數(shù)據(jù)上報類型的文件大小及文件個數(shù)。跟如上腳本 6 略有差異。
#!/bin/bash
# @Time : 2023/10/30
# @Author : jacktian
# @Desc : 這是一個適用于某臺服務器循環(huán)查詢特定省份、特定數(shù)據(jù)上報類型的文件大小及文件個數(shù)的腳本。
# 定義省份編碼列表
provinces=("110000" "120000" "130000")
# 遍歷省份編碼列表
for province in "${provinces[@]}"; do
# 進入省份目錄
cd /bigdata/sftp/province/$province/1024
# 執(zhí)行du命令查詢文件大小,并將結果輸出到對應的省份編碼txt文件
du -sh 2023-10-* >> /opt/"$province"_file_size.txt
# 執(zhí)行for命令查詢?nèi)掌谖募€數(shù),并將結果輸出到對應的省份編碼txt文件
for date in $(ls -d */ | cut -d'/' -f1);
do
echo $date $(ls -1 $date | wc -l) >> /opt/"$province"_file_count.txt
done
# 返回上級目錄
cd ..
done
腳本 8:該腳本主要用于為某些特定的 XML 文件在特定時間段內(nèi)的修改情況,并把結果保存在日志中。
#!/bin/bash
# 獲取當前日期
current_date=$(date +%Y-%m-%d)
# 第一條命令
directory_path="/bigdata/sftp/province/110000/yidong/1024/$current_date"
output_file="/opt/log_110000_yidong_$current_date.txt"
cd "$directory_path" && ls -l *.xml | awk '{print $8,$9}' | grep -v '^$' | awk -F '[/:]' '{hour=substr($1,1,2); if ((hour >= "00" && hour < "08") || (hour >= "10" && hour < "12") || (hour >= "14" && hour <= "24")) print}' >> "$output_file"
# 第二條命令
directory_path="/bigdata/sftp/province/120000/dianxin/1024/$current_date"
output_file="/opt/log_120000_dianxin_$current_date.txt"
cd "$directory_path" && ls -l *.xml | awk '{print $8,$9}' | grep -v '^$' | awk -F '[/:]' '{hour=substr($1,1,2); if ((hour >= "00" && hour < "08") || (hour >= "10" && hour < "12") || (hour >= "14" && hour <= "24")) print}' >> "$output_file"
# 第三條命令
directory_path="/bigdata/sftp/province/130000/liantong/1024/$current_date"
output_file="/opt/log_130000_liantong_$current_date.txt"
cd "$directory_path" && ls -l *.xml | awk '{print $8,$9}' | grep -v '^$' | awk -F '[/:]' '{hour=substr($1,1,2); if ((hour >= "00" && hour < "08") || (hour >= "10" && hour < "12") || (hour >= "14" && hour <= "24")) print}' >> "$output_file"
# 退出進程
exit
首先使用date命令獲取當前日期,格式為:YYYY-MM-DD,并自定義current_date變量。
然后,自定義了一個目錄路徑directory_path和輸出文件output_file。
使用ls -l *.xml列出所有以.xml結尾的文件,通過awk '{print $8,$9}'提取文件的修改時間和大小信息,grep -v '^$'過濾掉空行,awk -F '[/:]' '{hour=substr($1,1,2); if ((hour >= "00" && hour < "08") || (hour >= "10" && hour < "12") || (hour >= "14" && hour <= "24")) print}'篩選出每天的00:00-07:59、10:00-11:59、14:00-23:59時間段內(nèi)修改的文件,并輸出它們的修改時間和大小信息,將結果追加到指定的輸出文件中。
腳本 9:該腳本主要用于監(jiān)控系統(tǒng)資源使用情況,獲取并記錄了磁盤使用情況、CPU空閑情況、內(nèi)存空閑情況和進程總數(shù),并將這些打印信息輸出到某個日志文件中。
#!/bin/bash
date=$(date +%Y-%m-%d-%H:%M:%S)
#1、打印磁盤使用情況
DISK_1=$(df -h | awk '{printf $NF} {printf "使用率:"} {print $5} '| grep appslog | grep -v 'Filesystem')
DISK_2=$(df -h | awk '{printf $NF} {printf "使用率:"} {print $5} '| grep bigdata | grep -v 'Filesystem')
DISK_3=$(df -h / | awk '{printf $NF} {printf "使用率:"} {print $5} '| grep / | grep -v 'Filesystem')
#2、打印 CPU 空閑情況
CPU=$(top -n 1 | grep Cpu | awk 'BEGIN {printf"CPU 空閑使用率:"} {print $8}')
#3、打印內(nèi)存空閑情況
MEMORY=$(free -h | awk 'BEGIN {printf"內(nèi)存空閑使用率:"} NR==2 {print $4}')
#4、打印進程總數(shù)
JINCHENG=$(ps aux | wc -l | awk 'BEGIN {printf"進程總數(shù):"} {print $1}')
echo -e "\n $date\n\n $DISK_1\n\n $DISK_3\n\n $CPU\n\n $MEMORY\n\n $JINCHENG\n" >> /opt/jacktian/inspection.log
exit
done
-
date=$(date +%Y-%m-%d-%H:%M:%S):獲取當前日期和時間,格式為:年-月-日-時:分:秒 -
DISK_1、DISK_2、DISK_3:該變量用于獲取磁盤的使用情況。使用df -h命令獲取磁盤信息,然后使用awk提取出使用率和文件系統(tǒng)名稱。grep用于篩選出特定名稱的磁盤(如:appslog 和 bigdata) -
CPU:該變量獲取CPU的空閑使用率。使用top -n 1命令獲取系統(tǒng)狀態(tài),然后使用grep和awk提取出CPU的空閑使用率 -
MEMORY:該變量獲取了內(nèi)存的空閑使用率。使用free -h命令獲取內(nèi)存信息,然后使用awk提取出空閑內(nèi)存的使用率 -
JINCHENG:該變量獲取了系統(tǒng)的進程總數(shù)。使用ps aux命令獲取進程信息,然后使用wc -l命令統(tǒng)計行數(shù),即進程總數(shù) -
echo -e "\n $date\n\n $DISK_1\n\n $DISK_3\n\n $CPU\n\n $MEMORY\n\n $JINCHENG\n":這部分將上述所有的打印信息拼接在一起,并輸出到日志文件中
腳本 10:該腳本主要用于定期循環(huán)連接 FTP 服務器的訪問情況,當異常時通過企業(yè)微信機器人發(fā)送告警信息。
#!/bin/bash
# FTP IP 列表
FTP_IPS=("IP_1" "IP_2" "IP_3")
#企業(yè)微信機器人地址(需要根據(jù)實際機器人地址配置)
WEBHOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXX
#循環(huán)執(zhí)行檢測方法
while :
do
date=$(date +%Y-%m-%d-%H:%M:%S)
# 循環(huán)遍歷 FTP IP 列表
for ip in "${FTP_IPS[@]}"
do
# 連接 FTP 服務器
ftp -n $ip <<EOF
# 退出 FTP 服務器
exit
EOF
# 檢查上一條命令的退出狀態(tài)碼
if [ $? -ne 0 ];
then
# 如果退出狀態(tài)碼不為 0,則表示命令執(zhí)行失敗,發(fā)送異常的告警到企業(yè)微信機器人
curl --location --request POST ${WEBHOOK_URL} \
--header 'Content-Type: application/json' \
-d '{"msgtype": "markdown", "markdown": {"content": "'$date' FTP 訪問異常:$ip"}}'
echo "$date FTP 訪問異常:$ip" >>/opt/ftp_check/ftp_check.log
else
# 如果退出狀態(tài)碼為 0,則表示命令執(zhí)行成功,不發(fā)送正常的告警到企業(yè)微信機器人
echo "$date FTP 訪問正常:$ip" >>/opt/ftp_check/ftp_check.log
fi
done
exit
done
-
FTP_IPS:該變量中包含了多個FTP服務器的IP地址 -
WEBHOOK_URL:該變量為企業(yè)微信機器人的地址,需要將 XXX 部分替換為實際的企業(yè)微信機器人的key - 使用了
while循環(huán)來定期執(zhí)行檢測。在每次循環(huán)中,將獲取當前日期和時間,遍歷FTP_IPS列表。對于列表中的每個IP地址,腳本會嘗試連接到FTP服務器 - 如果連接命令
ftp -n $ip執(zhí)行失敗,則退出狀態(tài)碼不為:0,則表示FTP訪問異常。在這種情況下,腳本會發(fā)送一個異常告警到企業(yè)微信機器人,并將相關信息寫入日志文件 - 如果連接命令執(zhí)行成功,退出狀態(tài)碼為:
0,則表示FTP訪問正常,腳本將不發(fā)送告警信息,只是在日志中記錄正常訪問的信息
以上就是今天所要分享的全部內(nèi)容了。
如果你覺得這篇文章對你有點用的話,為本文點個贊 、留個言或者轉發(fā)一下,讓更多的朋友看到,因為這將是我持續(xù)輸出更多優(yōu)質文章的最強動力!