作者: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)遍歷自定義的省份編碼列表详炬。對于每一個省份編碼,腳本將其分割為三個部分:省份編碼寞奸、運營商和數據上報類型呛谜。然后進入對應的省份目錄。
執(zhí)行du -sh 2023-10-*
命令枪萄,查詢所有以2023-10-
開頭目錄的大小隐岛,并將結果輸出到一個名為$province_code_file_size.txt
的文件中。
執(zhí)行for
循環(huán)瓷翻,循環(huán)遍歷所有子目錄并查詢每個子目錄中的文件數量聚凹,然后將結果輸出到一個名為$province_code_file_count.txt
的文件中。
最后齐帚,腳本會返回到上級目錄妒牙,以便對下一個省份編碼下的文件大小及文件數量進行查詢。所有的查詢結果將保存在/opt/
目錄下的以省份編碼命名的文件中对妄。
#!/bin/bash
# @Time : 2023/10/30
# @Author : jacktian
# @Desc : 這是一個適用于某臺服務器循環(huán)查詢特定省份湘今、特定運營商、特定數據上報類型的文件大小及文件個數的腳本饥伊。
# 定義省份編碼列表
provinces=("110000/dianxin/1024" "120000/liantong/1024" "130000/yidong/1024")
# 遍歷省份編碼列表
for province in "${provinces[@]}"; do
# 分割省份編碼象浑、運營商和數據上報類型
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命令查詢日期文件個數琅豆,并將結果輸出到對應的省份編碼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)查詢特定省份愉豺、特定數據上報類型的文件大小及文件個數。跟如上腳本 6 略有差異茫因。
#!/bin/bash
# @Time : 2023/10/30
# @Author : jacktian
# @Desc : 這是一個適用于某臺服務器循環(huán)查詢特定省份蚪拦、特定數據上報類型的文件大小及文件個數的腳本。
# 定義省份編碼列表
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命令查詢日期文件個數驰贷,并將結果輸出到對應的省份編碼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 文件在特定時間段內的修改情況,并把結果保存在日志中洛巢。
#!/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
時間段內修改的文件,并輸出它們的修改時間和大小信息茂装,將結果追加到指定的輸出文件中怠蹂。
腳本 9:該腳本主要用于監(jiān)控系統(tǒng)資源使用情況,獲取并記錄了磁盤使用情況少态、CPU空閑情況褥蚯、內存空閑情況和進程總數,并將這些打印信息輸出到某個日志文件中况增。
#!/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澳骤、打印內存空閑情況
MEMORY=$(free -h | awk 'BEGIN {printf"內存空閑使用率:"} NR==2 {print $4}')
#4歧强、打印進程總數
JINCHENG=$(ps aux | wc -l | awk 'BEGIN {printf"進程總數:"} {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
:該變量獲取了內存的空閑使用率白修。使用free -h
命令獲取內存信息妒峦,然后使用awk
提取出空閑內存的使用率 -
JINCHENG
:該變量獲取了系統(tǒng)的進程總數。使用ps aux
命令獲取進程信息兵睛,然后使用wc -l
命令統(tǒng)計行數肯骇,即進程總數 -
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è)微信機器人地址(需要根據實際機器人地址配置)
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ā)送告警信息,只是在日志中記錄正常訪問的信息
以上就是今天所要分享的全部內容了般贼。
如果你覺得這篇文章對你有點用的話愧哟,為本文點個贊
、留個言
或者轉發(fā)
一下哼蛆,讓更多的朋友看到蕊梧,因為這將是我持續(xù)輸出更多優(yōu)質文章的最強動力!