![我如何对“/etc/passwd”UID 进行排序?](https://linux22.com/image/1290026/%E6%88%91%E5%A6%82%E4%BD%95%E5%AF%B9%E2%80%9C%2Fetc%2Fpasswd%E2%80%9DUID%20%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F%EF%BC%9F.png)
过去几天我一直在为这个小项目绞尽脑汁,下面是它的进展情况......
我需要整理多台服务器的所有 UID,以便所有用户在其 中都具有相同的 UID /etc/passwd
。显然,我正在尝试为此找到合适的脚本,这样我就不必手动执行此操作。
如果我有 1 台具有正确 UID 的正确服务器,有人可以推荐一个可管理的脚本来将其他服务器 /etc/passwd 与正确的服务器同步吗?
我尽量使用
awk -F ':' '{print$1,$3}' /etc/passwd
然后我可以使用diff
或将更新的文件与旧文件sort
进行比较。passwd
passwd
答案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 中更改的用户名