顯示具有 Shell Script 標籤的文章。 顯示所有文章
顯示具有 Shell Script 標籤的文章。 顯示所有文章

2017年5月15日 星期一

Shell Script 刪除過期檔案

Shell Script 排程刪除過期檔案,並記錄刪除的檔案清單!

FTP 是用來傳送 E-Mail 無法傳遞的大檔案,使用者一般放上去就是放著,不會在對方下載完後再上 FTP 去刪除它。

每個使用者把它當檔案伺服器使用,磁碟空間就會不足了。

不記錄的話,也可以直接將第二行 find 命令寫在 crontab 裡更精簡。


#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

Home="/var/ftp"
Delete_Day="5"
User_Name="/root/User_List.txt"

for U in `awk '{print $1}' $User_Name`; do
  find $Home/$U/ -depth -type f \
        -daystart -mtime +$Delete_Day | sort >> /tmp/AutoDelFile.$(date +%Y%m%d).txt
  find $Home/$U/ -depth -type f \
        -daystart -mtime +$Delete_Day -exec rm -rf {} \; > /dev/null 2>&1

  find $Home/$U/ -depth -empty -exec rm -rf {} \; > /dev/null 2>&1
done



2017年5月12日 星期五

Linux Mail Server 郵件回收

*每台主機環境都有些許差異,使用前請確認本身的環境參數,以免作業上的錯誤!

總是會遇到某些使用者發信時發錯人,跑來說怎麼辦?
我哪知道怎麼辦!!!
但.........如果是老闆問又該怎麼辦,只好想辦法了。

郵件回收只能做到使用者還沒將伺服器上的信件收走,如果使用者隨時都在注意有沒有新信件的話............................

這支 script 是執行在 Ubuntu 系統的 iRedMail 。


#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

Delete_List='/tmp/mail_list.txt'
Home='var/vmail/vmail1/example.ddns.net'
Log_File='/var/log/mail.log'
Date=`date +%B" "%d" "%H`

read -p " 請輸入搜尋的使用者 E-Mail 帳號:" User_Email
echo -e " 搜尋的日期、時間範圍: $Date 時\n"
grep "$Date" $Log_File | grep "$User_Email" | grep --color "Message-ID"

echo -e "\n"

# 這裡須注意,一定要找到<唯一的 MAIL ID 值>
read -p " 請輸入 Message-ID(數字字串即可):" str
#read -p " 請輸入搜尋的使用者英文名,如不輸入預設搜尋全部使用者目錄:" User_Name
cat /dev/null > $Delete_List
clear

if [ -z $User_Name ]; then
     #default_user=`awk -F":" '($3>499) && ($7 != "/usr/sbin/nologin") {print $1}' /etc/passwd | sort`
     default_user=`ls /$Home/ | sort`
     f_user="${default_user}"
else
     f_user="${User_Name:-$default_user}"
fi

num=1
emp=1

for u in $f_user
do
   echo " 正在檢查第 $emp 位員工 $u 信箱!"
   grep -ir "$str" /$Home/$u/Maildir/{cur,new,tmp}/ | awk -F":" '{print $1}' >> $Delete_List

   for d in `awk '(NR == '"$num"') {print $1}' $Delete_List`
   do
     mv `ls $d*` /tmp > /dev/null 2>&1
     echo " 移動使用者:$u 信件:$d 到 /tmp, 收到此信件人員總數:$num"
     num=$(($num+1))
   done

   emp=$(($emp+1))
done
echo " 檢查完畢"





自動、手動搜尋過期帳號,刪除帳號

*每台主機環境都有些許差異,使用前請確認本身的環境參數,以免作業上的錯誤!

這個 script 是自己不專業的亂搞,用來管理 FTP 帳號所寫的。
主要的用途是有些 FTP 臨時使用的帳號,用完後就須刪除。怕自己忘記所以寫了一個 script 排程讓在設定的時間到了就刪掉 FTP 帳號。

它主要是依據使用者 Home 目錄的修改時間,來判斷是否過期。

#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

# User_List.txt 可由建立帳號時填入清單
User_Home="home"
User_List="/root/User_List.txt"
tmpFile="/tmp/DelUser.txt"

echo -e "   帳號名稱 \t\t未登入天數" > $tmpFile

QUERY_FTP()
{
for i in `awk '{print $1}' $User_List`
do
#User folder modify day.
MD=`expr substr "$(stat -c '%y' /$User_Home/$i)" 1 19`
Modify_Day=`date -d "$MD" +%s`

#Not use ftp account day.
Days=$((($Current_Day - $Modify_Day)/86400))
  if [ $Days -gt $Delete_Day ]; then
     if [ `expr length "$i"` -lt 6 ]; then
        echo -e "  $i\t\t\t$Days 天" >> $tmpFile
     else
        echo -e "  $i\t\t$Days 天" >> $tmpFile
     fi
  fi
done
cat $tmpFile | more
echo -e "\n"
echo -e "  查詢的資料清單可查看 $tmpFile 。\n"
}

DEL_FTP()
{
echo -e "  刪除的資料清單可查看 $tmpFile 。"

for i in `awk '{print $1}' $User_List`
do
#User folder modify day.
MD=`expr substr "$(stat -c '%y' /$User_Home/$i)" 1 19`
Modify_Day=`date -d "$MD" +%s`

#Not use ftp account day.
Days=$((($Current_Day - $Modify_Day)/86400))
  if [ $Days -gt $Delete_Day ]; then
     if [ `expr length "$i"` -lt 6 ]; then
        echo -e "  $i\t\t\t$Days 天" >> $tmpFile
        su -c "sed -i 's/$i//g' $User_List > /dev/null 2>&1"
        su -c "sed -i '/^$/d' $User_List > /dev/null 2>&1"
        su -c "userdel -r $i > /dev/null 2>&1"
     else
        echo -e "  $i\t\t$Days 天" >> $tmpFile
        su -c "sed -i 's/$i//g' $User_List > /dev/null 2>&1"
        su -c "sed -i '/^$/d' $User_List > /dev/null 2>&1"
        su -c "userdel -r $i > /dev/null 2>&1"
     fi
  fi
done

echo -e "  完成 ftp 帳號刪除!!!\n"
}

#System current day.
Current_Day=`date +%s`

#Query OR Delete ftp account.
#QD="D"
read -p "  請選擇 查詢 或 刪除超過搜尋天數的 FTP 帳號(Q:查詢 D:刪除): " QD

#Auto Remove not use ftp account of the time.
#Delete_Day="10"
read -p "  請輸入搜尋未登入的天數: " Delete_Day
clear
echo -e "  搜尋中,請稍等。"
echo -e "  搜尋條件為超過 $Delete_Day 天未登入使用 FTP 帳號!!!\n"

if [ "$QD" == "Q" -o "$QD" == "q" ]; then
    QUERY_FTP

elif [ "$QD" == "D" -o "$QD" == "d" ]; then
    DEL_FTP

else
    echo -e "\n  輸入的選項錯誤,結束程式。\n"
    exit 1

fi



CubeCOS 虛擬機刪除網路介面,且主機內沒有 virtio 驅動程式成為孤島主機時,進行 virtio iso 掛載流程

 # 當 CubeCOS 虛擬機刪除網路介面,且主機內沒有 virtio 驅動程式成為孤島主機時,進行 virtio iso 掛載流程。 # 步驟一:確認目標虛擬機的底層名稱 # 在 Compute Node(計算節點)上列出運行中的 instance,並反查對應的 OpenSt...