다음 주에 두 가지 유닉스 과정을 가르치고 있습니다. 사용자는 RHEL 5 컴퓨터에 계정을 부여받으며,이 기간 동안 /home
폴더 에 파일을 추가하고 해당 파일 .bashrc
및 기타 도트 파일을 업데이트 하며 정리해야 할 일반적인 혼란을 수행합니다.
두 번째 세션의 학생들은 첫 번째 세션에서 사람들의 사용자 계정을 재사용합니다. 계정 정리를 자동화하여 신규 사용자를 새로 시작할 수 있습니다.
필자 su -u $USER_ID
는 자신의 homedir에 “원본”좋은 파일 세트를 저장하고 찾은 다른 것을 제거 하는 쉘 스크립트를 작성할 수 있다고 확신 합니다. 이 정리 / 리셋 작업에 도움이되는 다른 도구가 있습니까? Puppet, Chef 또는 기타 도구에 대한 경험이 없습니다. 이런 식으로 도움이 되겠습니까?
문제의 범위를 제공하기 위해 약 30 명의 사용자 계정이 있으며 모든 사용자 ID / 비밀번호를 알고 있으며 모두 동일한 RHEL 상자에 작성됩니다.
답변
도움이되는 많은 방법이 있습니다.
- 완전한 홈 디렉토리를 제거하고 모든 파일을
/etc/skel
homedir로 다시 복사하십시오 . 나중에 권한을 변경하십시오. - 레슨 1 후에 시스템을 가상 머신에 넣고 스냅 샷을 작성하고 스냅 샷으로 되돌립니다.
- RHEL에서 키오스크 모드와 같은 것을 찾으십시오. 우분투에는 로그 오프 중에 자동으로 집을 복원하는 것과 같은 것이 있습니다.
- btrfs 파일 시스템에 집을 놓고 스냅 샷을 만들고 수업 1 후 되돌립니다.
tar
수업 전 홈 디렉토리, 나중에 홈 삭제,에서 복원tar
- …
다음 주에 결과를 원한다면 Puppet / Chef와 같은 다른 도구를 배우는 것이 너무 많습니다.
답변
모든 학생들이 1000에서 65000 사이의 UID를 가졌다 고 말할 수 있습니다.
이와 같은 빠른 원 라이너가 작동합니다. 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을 사용하는 경우 / 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
답변
“원본”계정 파일 세트는 일반적으로 유닉스 시스템에서 / 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 repo에 넣고 (b) 사용자를 반복하고 원하는 항목을 rm하고 git repo에서 가져 오는 스크립트를 작성하십시오. .
답변
이것은 우분투 그놈에서 작동합니다 : pico /usr/local/bin/cleanup.sh
rm -rf / home / user / Downloads / *
문서를 제거하려면 동일한 작업을 수행하십시오.
chmod 511 종료 /usr/local/bin/cleanup.sh
피코 / etc / gdm / PostSession / Default
! / bin / bash
/usr/local/bin/cleanup.sh exit 0