Linux 伺服器系統管理第十四章 系統管理程式設計  上一頁    

14-3 進階帳戶管理程式

內容:

許多情況需要一次建立多個帳戶,譬如開學時後,老師必須幫每位修課學生開啟帳戶,如果一個接一個利用命令(adduserpasswd)建立的話;學期結束又要一個接一個刪除,可能非常耗時。我們可利用 Shell 寫一個簡單程式,一次可大量增加或刪除帳戶。

14-3-1建立大量帳戶

大量帳戶大多有一個共用名稱(如 user)、起始與結束號碼(如 10 ~12)、以及相同群組(如 users)等等,依照此慣例程式範例如下$ vi ex14_6):

#! /bin/bash

echo "歡迎使用 ex14_6 增加多個帳戶"

 

# 輸入帳戶參數

read -p "請輸入整體共用名稱 =>" mainName

read -p "請輸入起始號碼 =>" startNum

read -p "請輸入結束號碼 =>" endNum

read -p "請輸入群組名稱 =>" groupName

read -p "請輸入帳戶註解 =>" comment

read -p "請輸入帳戶共用密碼 =>" pass

if [ "$mainName" == "" ]; then

    echo "帳戶共用名稱不空白"; exit 1

fi

 

count=$startNum

while [ $count -le $endNum ] ; do

    useradd -g $groupName -c $comment ${mainName}$count

    echo ${pass}$count | passwd --stdin ${mainName}$count

    echo "${mainName}$count 帳號的密碼是 ${pass}$count"

    count=`expr $count + 1`

done

echo "完成大量帳戶設定"f

執行結果如下:

[root@Secure-1 book]# ex14_6

歡迎使用 ex14_6 增加多個帳戶

請輸入整體共用名稱 =>user

請輸入起始號碼 =>10

請輸入結束號碼 =>12

請輸入群組名稱 =>users

請輸入帳戶註解 =>電子系學生

請輸入帳戶共用密碼 =>guest

Changing password for user user10.

passwd: all authentication tokens updated successfully.

user10 帳號的密碼是 guest10

Changing password for user user11.

passwd: all authentication tokens updated successfully.

….

passwd: all authentication tokens updated successfully.

user12 帳號的密碼是 guest12

完成大量帳戶設定

14-3-2 刪除大量帳戶

ex14_6 範例的概念相同,程式範例如下$ vi ex14_7):

#! /bin/bash

echo "歡迎使用 ex14_7 刪除多個帳戶"

 

# 輸入帳戶參數

read -p "請輸入整體共用名稱 =>" mainName

read -p "請輸入起始號碼 =>" startNum

read -p "請輸入結束號碼 =>" endNum

 

# 開始刪除多個帳戶

count=$startNum

while [ $count -le $endNum ]; do

    userdel -r ${mainName}$count          # 共用名稱與號碼連結

    echo "已刪除 ${mainName}$count 帳戶了"

    count=`expr $count + 1`

done

echo "完成刪除大量帳戶"

執行結果如下:

[root@Secure-1 book]# ex14_7

歡迎使用 ex14_7 刪除多個帳戶

請輸入整體共用名稱 =>user

請輸入起始號碼 =>10

請輸入結束號碼 =>12

已刪除 user10 帳戶了

….

已刪除 user12 帳戶了

完成刪除大量帳戶

14-3-3 刪除大量檔案

當學期結束後刪除大量帳戶,開學時又新增大量帳戶,好像有點麻煩。新學期也可以再利用舊帳戶,只要將帳戶內的檔案刪除即可。我們可以編寫一只範例,可以同時刪除大量家目錄內的檔案,範例如下$vi ex14_8):

#! /bin/bash

echo "歡迎使用 ex14_8 清除多帳戶家目錄內檔案"

 

# 輸入帳戶參數

read -p "請輸入整體共用名稱 =>" mainName

read -p "請輸入起始號碼 =>" startNum

read -p "請輸入結束號碼 =>" endNum

 

count=$startNum

while [ $count -le $endNum ] ; do

    user_d=$mainName$count

 

    # /etc/passwd 尋找使用者家目錄位置

    home_d=`echo $user_d | awk -F: 'BEGIN {getline temp < "/dev/stdin"}

              {if ($1 == temp) print $6}' /etc/passwd`

 

    # 搜尋家目錄下有哪些檔案或目錄,並填入 files 陣列內

    files=`ls $home_d`

 

    # 刪除 files 陣列內所登錄的檔案或目錄

    for file in $files ; do

         rm -r -f $home_d"/"$file

    done

    echo "已刪除 $user_d 家目錄($home_d)下所有檔案"

    count=`expr $count + 1`

done

echo "完成刪除多帳戶的家目錄內檔案與目錄"

14-3-4 刪除超過 500 K 檔案。

程式範例如下ex14_9):

#! /bin/bash

echo "歡迎使用 ex14_9 刪除帳戶內較大的檔案"

 

# 輸入帳戶參數

read -p "請輸入整體共用名稱 =>" mainName

read -p "請輸入起始號碼 =>" startNum

read -p "請輸入結束號碼 =>" endNum

read -p "請輸入檔案大小( 500k) =>" Size

 

count=$startNum

while [ $count -le $endNum ] ; do

    homeDir=`eval echo ~${mainName}$count`

    Files=`find $homeDir -size +$Size -type f -print`

    for file in $Files ; do

         rm -f $file

    done

    count=`expr $count + 1`

done

echo "完成刪除帳戶內較大的檔案"

14-3-5刪除未使用之檔案

我們也可以編寫一程式,搜尋某些帳戶內太久沒有使用的檔案,並將它刪除,範例如下:$vi ex14_10

#! /bin/bash

echo "歡迎使用 ex14_10 刪除帳戶內較舊的檔案"

 

# 輸入帳戶參數

read -p "請輸入整體共用名稱 =>" mainName

read -p "請輸入起始號碼 =>" startNum

read -p "請輸入結束號碼 =>" endNum

read -p "請輸入舊檔案天數( 50) =>" Days

 

count=$startNum

while [ $count -le $endNum ] ; do

 

    # 利用 eval 命令取出用戶的家目錄

    homeDir=`eval echo ~${mainName}$count`

 

    # 將家目錄下所有舊檔案儲存於 Files_1 陣列內

    Files_1=`find $homeDir -atime +$Days -print`

 

    # 將家目錄下舊隱藏檔名稱儲存於 Files_2 陣列內

    Files_2=`find $homeDir -atime +$Days -name ".*" -print`

    for file_1 in $Files_1 ; do

         flag=1

         for file_2 in $Files_2 ; do

             if [ $file_1 == $file_2 ] ; then

                 flag=0

             fi

         done

         if [ $flag == "1" ]; then

             rm -i $file_1

         fi

    done

    count=`expr $count + 1`

done

echo "完成刪除帳戶內較大的檔案"

執行此範例最大的困擾的是沒有超過 30 天未使用的檔案,但我們還是可以利用 touch 命令設定某一檔案被修改時間,如下(將 file_1 設定為 2007 3 20 10 45 分被修改,請自行輸入練習):

[root@Secure-1 book]# touch –t 200703201045 file_1

[root@Secure-1 book]# ls -l file_1

-rw-r--r-- 1 root root 0  3 20  2007 file_1

 

翻轉工作室:粘添壽

 

Linux 伺服器系統管理 - CentOS:

 

 

 

翻轉電子書系列: