如何使用新的“/etc/skel”文件“usermod”老用户?

如何使用新的“/etc/skel”文件“usermod”老用户?

我想用/etc/skelDebian 和 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 发现这个问题的人,命令

密码用户模式用户-m

将会做到这一点。请注意,您还可以选择不同的骨架目录作为此命令的一部分。-k dir

相关内容