10 個拿來就用的 Shell 腳本實例!

作者:JackTian
文章首發(fā)于公眾號:【杰哥的IT之旅】

腳本 1:該腳本用于讀取Linux系統(tǒng)/etc/passwd文件中的所有/bin/bash作為登錄默認Shell的用戶列表盖奈,并提取每個用戶的用戶名恶守。對于這些用戶名進行檢查,是否不等于roottidb破加。如果用戶名不等于roottidb俱恶,則使用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_listmd5_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),然后使用grepawk提取出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)質文章的最強動力!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末腮介,一起剝皮案震驚了整個濱河市肥矢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叠洗,老刑警劉巖甘改,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旅东,死亡現(xiàn)場離奇詭異,居然都是意外死亡十艾,警方通過查閱死者的電腦和手機抵代,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疟羹,“玉大人主守,你說我怎么就攤上這事禀倔¢冢” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵救湖,是天一觀的道長愧杯。 經常有香客問我,道長鞋既,這世上最難降的妖魔是什么力九? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮邑闺,結果婚禮上跌前,老公的妹妹穿的比我還像新娘。我一直安慰自己陡舅,他們只是感情好抵乓,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著靶衍,像睡著了一般灾炭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颅眶,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天蜈出,我揣著相機與錄音,去河邊找鬼涛酗。 笑死铡原,一個胖子當著我的面吹牛,可吹牛的內容都是我干的商叹。 我是一名探鬼主播眷蜈,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沈自!你這毒婦竟也來了酌儒?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤枯途,失蹤者是張志新(化名)和其女友劉穎忌怎,沒想到半個月后籍滴,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡榴啸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年孽惰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸥印。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡勋功,死狀恐怖,靈堂內的尸體忽然破棺而出库说,到底是詐尸還是另有隱情狂鞋,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布潜的,位于F島的核電站骚揍,受9級特大地震影響,放射性物質發(fā)生泄漏啰挪。R本人自食惡果不足惜信不,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亡呵。 院中可真熱鬧抽活,春花似錦、人聲如沸锰什。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歇由。三九已至卵牍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沦泌,已是汗流浹背懈凹。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工鱼蝉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓褥芒,卻偏偏與公主長得像侦锯,于是被迫代替她去往敵國和親镀娶。 傳聞我的和親對象是個殘疾皇子缨历,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內容