텍스트 파일의 데이터에서 사용자를 추가하는 방법

텍스트 파일의 데이터에서 사용자를 추가하는 방법

Linux에서 여러 사용자를 생성하는 방법에 대한 질문이 있는데 이를 처리하려면 프로그램이 필요합니다. 다음 내용으로 새 users.txt 파일을 만듭니다.

adams:5000:Adams, John Couch:/bin/bash
atiyah:5001:Atiyah, Michael:/bin/csh
babbage:5002:Babbage, Charles:/bin/csh
baker:5003:Baker, Alan:/bin/csh
barrow:5004:Barrow, Isaac:/bin/bash

...(파일에는 70개의 사용자 이름이 있습니다)

이러한 사용자를 자동으로 추가하는 스크립트를 작성하는 방법을 알고 싶습니다.

답변1

파일 이름이 이라고 가정하면 file이 스크립트는 다음을 수행합니다.

USERNAME=$(cat file | cut -d: -f1)
echo "$USERNAME"

ID=$(cat file | cut -d: -f2)
echo "$ID"

USER_SHELL=$(cat file | cut -d, -f2 | cut -d: -f2)
echo "$USER_SHELL"

useradd -m -s "$USER_SHELL" -u "$ID" "$USERNAME"

답변2

이것은 작업을 완료하는 최소한의 스크립트입니다. 사용자 이름이나 uid가 사용 중이 아닌지 확인합니다. 각 사용자에 대해 일치하는 그룹을 생성합니다(gid=uid 사용). gid 또는 그룹 이름이 이미 존재하는지 확인하지 않습니다(독자의 연습용으로 남겨두었습니다. 힌트: 사용 getent group).

참고: 아래 스크립트는 테스트되지 않았지만 이전에 유사한 스크립트를 백만 번 작성했습니다(약간 과장)...수정해야 할 몇 가지 사소한 버그가 있을 수 있습니다.

#! /bin/bash
# get newusers file from first arg on cmd line or default to 'newusers.txt'
nf="${1:-newusers.txt}"

# get existing usernames and uids.
names="^($(getent passwd | cut -d: -f1 | paste -sd'|'))$"
 uids="^($(getent passwd | cut -d: -f3 | paste -sd'|'))$"

yesterday=$(date -d yesterday +%Y-%m-%d)
# temp file for passwords
tf=$(mktemp) ; chmod 600 "$tf"

while IFS=: read u uid gecos shell; do
    gid="$uid" ; homedir="/home/$u"
  
    useradd  -e "$yesterday" -m -d "$homedir" -c "$gecos" \
             -u "$uid" -g "$gid" -s "$shell" "$u"

    groupadd -g "$gid" "$u"
  
    # generate a random password for each user..
    p=$(makepasswd)
    echo "$u:$p" >> "$tf"
done < <(awk -F: '$1 !~ names && $2 !~ uids' names="$names" uids="$uids" "$nf")

# uncomment to warn about users not created:
#echo Users not created because the username or uid already existed: >&2
#awk -F: '$1 ~ names || $2 ~ uids' names="$names" uids="$uids" "$nf" >&2    

# uncomment the cat to display the passwords in the terminal
echo ; echo "passwords are saved in $tf"
# cat "$tf"

# set passwords using `chpasswd:
chpasswd < "$tf"

설치되어 있지 않은 경우 pwgen또는 makepassword이와 유사한 프로그램을 사용하십시오. makepasswd또는 4개 이상의 임의의 5개 이상의 문자 단어를 연결하여 최소 20자 길이의 기억하기 쉬운 암호를 얻으십시오. 일부 단어를 대문자로 만들고 각 단어 숫자 및/또는 구두점 사이에 임의의 1-3을 삽입하여 암호를 균등하게 더 길게 만들고 무차별 대입 검색 공간을 늘리십시오. 무작위 비밀번호 생성은 여러 번 재발명되었습니다.

사용자 이름과 비밀번호( 에서)를 인쇄 "$tf"하고 이를 스트립(각 스트립 사이에 빈 줄을 남겨두기 user:password)으로 잘라서 각 사용자에게 제공할 수 있습니다. 즉시 비밀번호를 변경하고 메모를 파기하라고 안내하세요. 비밀번호는 만료되도록 설정되어 있으므로 "$yesterday"(GNU 필요 date) 사용자가 쉘에 처음 로그인할 때 비밀번호를 변경하라는 메시지가 표시되어야 합니다.

답변3

일괄 모드의 파일에서 사용자를 추가하거나 업데이트하는 더 쉬운 방법은 다음과 같습니다 newusers(8).그림자도구 스위치. 이 도구 모음은 최소한 Debian 및 그 파생 제품용 패키지로 제공되어야 합니다. 제가 사용하고 있는 Arch Linux에서 사용할 수 있습니다.

사용 방법에 대한 자세한 내용은 다음을 참조하세요.man newusers

관련 정보