我正在帮助下周开设两门Unix课程。 用户将被授予一个RHEL 5机器上的帐户,在此期间,他们将文件添加到他们的/home
文件夹,更新他们的.bashrc
和其他dotfiles,并执行其他一般的杂乱,需要清理。
第二次会议的学生将在第一次会议中重复使用人员的用户帐户。 我想自动清理帐户,所以新用户可以重新开始。
我确信我可以编写一个运行su -u $USER_ID
的shell脚本,并在其homedir中放置一个“原始”的好文件集,并删除它find的其他东西。 有其他的工具可以帮助我清理/重置操作吗? 我对傀儡,厨师或其他工具没有任何经验。 他们会有帮助做这样的事情吗?
为了提供这个问题的范围,大约有30个用户帐户,我知道所有的用户名/密码,他们都是在同一个RHEL盒子上创build的。
有很多方法可以帮助:
/etc/skel
复制回homedir。 之后更改权限。 tar
把家里的东西还原,从tar
还原 而学习其他工具,如木偶/厨师,如果你想在下周获得成果,就有点太多了。
假设你所有的学生的UID在1000到65000之间
像这样快速的一行就可以工作。 Awk会为范围内的每个用户打印一个rsync命令和chown命令。 将awk的输出发送到bash将运行所有命令来重置目录和权限。
# see what will happen. awk 'BEGIN{FS=":"} $3 >= 1000 && $3 <=65000 { print "rsync --delete -v -r /etc/skel/ " $6 "/ ; chown -R " $1 ":" $1 " " $6;}' /etc/passwd # actually run the commands to reset all users matched by awk. bash <( awk 'BEGIN{FS=":"} $3 >= 1000 && $3 <=65000 { print "rsync --delete -v -r /etc/skel/ " $6 "/ ; chown -R " $1 ":" $1 " " $6;}' /etc/passwd )
如果你使用gdm作为你的loginpipe理器,你可以添加这样的文件:/ etc / gdm / PostSession / Default
#!/bin/sh if [[ "$USER" != "" ]]; then rm -rf /home/$USER cp -r /etc/skel /home/$USER chown -R $USER:$USER /home/$USER fi
“原始”帐户文件集通常位于unix系统的/ etc / skel下。
除此之外,我不知道任何工具来自动清理。 我可能最终会写一些简单的bash脚本。
尝试这个
#!/bin/bash BASEDIR=/home # error codes E_OK=0 E_NOK=1 function handle_error { CODE=$1 ACTION=$2 INV=$3 # INV means to invert the handling logic if [ -z $INV ]; then if [ $CODE -ne 0 ]; then echo "error: $ACTION" exit $E_NOK fi else if [ $CODE -eq 0 ]; then echo "error: $ACTION" exit $E_NOK fi fi return $E_OK } function print_usage() { echo "usage: reset-homedir.sh USERNAME" } # target user and target dir TUSER=$1 TDIR=$BASEDIR/$TUSER if [ -z $TUSER ]; then print_usage exit 0 fi getent passwd $TUSER >& /dev/null RC=$? handle_error $RC "user $TUSER does not exist" TGROUP="`id -gn $1`" if [ ! -d $TDIR ]; then echo "error: target directory $TDIR does not exist" exit 1 fi # you don't want to delete user mounted stuff do you? MOUNTS="`mount |grep $TDIR`" >& /dev/null RC=$? handle_error $RC "there are mounted filesystems below $TDIR" TRUE ps -u $TUSER >& /dev/null RC=$? handle_error $RC "user $TUSER is logged in" TRUE echo echo "$TDIR will be reset to the default state - ALL DATA WILL BE LOST" echo echo "-- press ENTER to continue or CTRL+C to abort --" read dummy # we did our best to check for unwanted situations rm -rf $TDIR # creates a new one cp -R /etc/skel $TDIR chown -R $TUSER:"$TGROUP" $TDIR echo Done.
可能有一些很好的工具可以帮助,但我可能只是(a)把所需的东西放在一个git仓库中,(b)编写一个脚本,遍历用户和rm所需的东西,并从git仓库。
这适用于Ubuntu GNOME:pico /usr/local/bin/cleanup.sh
rm -rf / home / user / Downloads / *
退出chmod 511 /usr/local/bin/cleanup.sh
pico / etc / gdm / PostSession / Default
/usr/local/bin/cleanup.sh退出0