나는 이전에 비밀번호 생성기의 출력을 사용자 이름으로 사용하여 100명 이상의 사용자를 생성하는 bash 스크립트를 만들었습니다. 지금까지 제가 본 가장 가까운 해결책은 삭제할 사용자 목록을 만든 다음 해당 목록을 실행하는 스크립트를 만드는 것입니다.
원치 않는 사용자를 모두 수동으로 나열하지 않고도 이러한 사용자를 모두 제거할 수 있는 방법이나 빠른 대안이 있는지 궁금합니다.
답변1
댓글에 게시된 내용은 실제로 가장 간단한 솔루션입니다.
즐겨 사용하는 텍스트 편집기를 사용하여 , , 을
/etc/passwd
연 다음 삭제하세요./etc/shadow
/etc/group
제가 추가해야 할 유일한 것은, 정말(~해야 한다자명하지만 그렇지 않음)은 다음과 같습니다.해당 파일을 편집하기 전에 백업하십시오.
그래서 당신은 다음과 같은 것을 얻게 될 것입니다 :
sudo cp /etc/passwd /etc/passwd.bak
sudo cp /etc/shadow /etc/shadow.bak
sudo cp /etc/group /etc/group.bak
sudo -e /etc/passwd /etc/shadow /etc/group
물론 지금, 만약 당신이반품이러한 사용자의 홈 디렉토리를 삭제해야 하지만 문제가 해결되지는 않습니다. 하지만 사용자 자체를 삭제하면 됩니다. 그게 전부입니다.
만약 너라면하다홈 디렉터리를 삭제하는 가장 쉬운 방법은 /etc/passwd
백업 복사본과 수정된 복사본 간의 차이점을 필터링하는 것입니다.
comm -2 -3 /etc/passwd.bak /etc/passwd | cut -d: -f6,6 > /tmp/dirs-to-delete
그럼 (당신이 언제매우목록에 원하는 파일만 포함되어 있는지 확인하십시오. 목록을 반복하여 해당 파일을 모두 제거합니다.
사실, 먼저 공백이나 기타 이상한 조건을 확인하기 위해 추가적인 온전성 검사를 수행합니다.
awk 'NF > 1 { printf "Problem with entry <%s> on line %d\n", $0, NR }' /tmp/dirs-to-delete
그리고 디렉터리가 모두 실제로 존재하는지 확인하세요.
for d in $(cat /tmp/dirs-to-delete); do
[ -d "$d" ] ||
printf 'Supposed directory <%s> is not a directory\n' "$d"
done
그리고 어떤 문자도 와일드카드로 해석되지 않도록 해야 합니다(특수 문자를 사용하여 줄의 줄 번호를 인쇄하세요).
sed -n '/[][*?]/=' /tmp/dirs-to-delete
하지만 정말 만족스러우면 다음과 같이 하세요.
rm -rf $(cat /tmp/dirs-to-delete)
(참고로 명령어는존나 위험해당신이 모른다면정확히파일에 무엇이 들어있나요? 조심하지 않으면 하드 드라이브가 지워질 수도 있습니다. )
답변2
사용자를 추가하는 데 사용한 명령, 옵션 및 시스템 구성에 따라 다릅니다. 예를 들어, 시스템이 UID_MIN
1000에서 시작하도록 구성되어 있고 시스템에 단 한 명의 사용자(UID 1000)만 있는 경우 다음과 같은 것을 사용할 수 있습니다.목록만 가져오기Bash의 사용자 수:
for user in $(cut -d : -f 1 /etc/passwd)
do
user_id=$(id -g ${user})
if [ ${user_id} -ge 1001 -a ${user_id} -le 1100 ]
then
echo ${user};
fi
done
생성 중에 이러한 옵션을 사용한 경우 생성된 그룹 및 홈 폴더를 삭제할 수도 있습니다.
답변3
추가한 사용자를 계속 추적하거나(예: 임의의 사용자 이름을 생성한 이후 로그 파일에 있을 수도 있음) 두 사용자를 구별하는 데 사용할 수 있는 패턴이 있는 경우가 아니면 이를 수행하는 좋은 방법이 있을 수 있는지 모르겠습니다. 제거하려는 사용자와 유지하려는 사용자(예: 모든 "실제" 사용자 이름에 알파벳 문자만 포함되어 있고 모든 임의의 사용자 이름에 알파벳이 아닌 문자가 포함될 수 있음)
이것이 절약할 수 있다고 생각하는 유일한 경우는 유지하려는 사용자 집합이 삭제하려는 사용자 집합보다 훨씬 작거나 어딘가에 연속적으로 나열되어 있는 경우입니다. 임의의 사용자를 모두 한 번에 추가한 다음 다른 사용자를 추가하지 않으면 실제로 이런 일이 발생할 수 있습니다. 이 경우 다음과 같은 사용자 목록을 얻을 수 있습니다.
cat /etc/passwd | tail -n 100 | cut -d: -f1
그런 다음 삭제할 수도 있습니다(참고: 실행하기 전에 모든 것을 다시 확인하세요!).
for username in $(cat /etc/passwd | tail -n 100 | cut -d: -f1); do
sudo userdel "${username}"
done
답변4
이하의 사용자 ID를 가진 사용자는 삭제하면 안 된다는 조건을 체크하여 사용자를 삭제하려면 아래 라인을 사용하십시오.1001
cat /etc/passwd | awk -F ":" '{print $1,$3}' | awk '$2 > 1001 {print “userdel -r” “ “ $1}’