我如何对“/etc/passwd”UID 进行排序?

我如何对“/etc/passwd”UID 进行排序?

过去几天我一直在为这个小项目绞尽脑汁,下面是它的进展情况......

我需要整理多台服务器的所有 UID,以便所有用户在其 中都具有相同的 UID /etc/passwd。显然,我正在尝试为此找到合适的脚本,这样我就不必手动执行此操作。

如果我有 1 台具有正确 UID 的正确服务器,有人可以推荐一个可管理的脚本来将其他服务器 /etc/passwd 与正确的服务器同步吗?

我尽量使用

awk -F ':' '{print$1,$3}' /etc/passwd  

然后我可以使用diff或将更新的文件与旧文件sort进行比较。passwdpasswd

答案1

grawity 在他的评论中提出了正确的想法...如果它必须是一个脚本,那么它需要非常复杂才能在不重启的情况下工作...就像将所有 uid 更改为某个非常高的值,然后使用 usermod 更改为正确的基数

使用 python 会更容易...而且我认为现在大多数 Linux 发行版都已将其作为标准包含在内。如果您需要一个可以完成这项工作的 python 脚本,请说出来。


#!/usr/bin/env python
import subprocess, shlex


newlistolists = []
with open('/root/masterpasswd', 'r') as newetcpass:
    for line in newetcpass:
        alist = line.split(':')
        newlistolists.append(alist[:])

for entry in newlistolists:
    cmd = 'usermod -o -u ' + entry[2] + ' ' + entry[0]
    thecmd = shlex.split(cmd)
    subprocess.Popen(thecmd)

#insert additional logic for setting groups, shells, etc with relevant commands
#you need to do some error handling too, but it's a fast ugly UID set script

仅包含您想要在 /root/masterpasswd 中更改的用户名

相关内容