![새로운 "/etc/skel" 파일로 이전 사용자를 "usermod"하는 방법은 무엇입니까?](https://linux55.com/image/13296/%EC%83%88%EB%A1%9C%EC%9A%B4%20%22%2Fetc%2Fskel%22%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EC%9D%B4%EC%A0%84%20%EC%82%AC%EC%9A%A9%EC%9E%90%EB%A5%BC%20%22usermod%22%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
/etc/skel
Debian 및 Ubuntu 설치에 대한 새 콘텐츠로 기존 사용자를 "업데이트" 하고 싶습니다 . 스크립트 작성이 가능합니다..
find /home -maxdepth 1 -mindepth 1 -type d | while read homedir; do
user="$(stat -c%U $homedir)"
su -c 'tar -cf- -C /etc/skel . | tar -vxf- -C $HOME' $user
done
...하지만 더 나은 방법을 아는 사람이 있는지 궁금합니다.
답변1
/etc/skel
이와 같은 스크립트를 사용하여 사용자 디렉터리의 파일을 업데이트할 수 있습니다.
#!/bin/sh
#
getent passwd |
while IFS=: read -r username x uid gid gecos home shell
do
if [ ! -d "$home" ] || [ "$username" == 'root' ] ## || [ "$uid" -lt 1000 ]
then
continue
fi
tar -cf - -C /etc/skel . | sudo -Hu "$username" tar --skip-old-files -xf -
done
노트
- 이미 존재하는 파일은 의도적으로 업데이트하지 않지만, 사용자가 삭제한 파일은 인식하지 못하지만 다시 넣어서 다시 만들려는 경우
root
파일이 전혀 업데이트되지 않습니다- UID가 1000 미만인 시스템 계정도 제외하려면
##
삭제하세요 .if ...conditions...
원본 파일을 사용할 수 있는 경우 다른 접근 방식은 사용자 파일이 변경되지 않은 경우에만 업데이트하고, 그렇지 않으면 함께 설치하는 것입니다(Debian의 *.dpkg-dist
접근 방식과 유사). 그러나 이를 위해서는 를 사용하는 것과는 다른 접근 방식이 필요합니다 tar
.
답변2
FreeBSD를 사용하여 이 문제를 발견한 사람은 다음 명령을 사용하십시오.
비밀번호 사용자 모드사용자-중
그것을 할 것입니다. 이 명령의 일부로 다른 뼈대 디렉터리를 선택할 수도 있습니다.-k dir