将用户添加到系统 *仅当它不存在时*

tar*_*eld 60 users

我一直在运行useradd {user}将用户添加到我的系统的命令,尽管我计划在自动化环境中运行它,并且它最终可能会再次运行,即使用户已经存在。

有没有办法让我只有在用户不存在的情况下才能运行它?用户没有主文件夹。

Pet*_*r.O 81

id -u somename 当用户不存在时返回非零退出代码。

您可以非常简单地对其进行测试...(&>/dev/null只是抑制正常输出/警告)

id -u somename &>/dev/null || useradd somename 
Run Code Online (Sandbox Code Playgroud)

  • 以可移植的方式:“id -u somename >/dev/null 2>&1 || useradd somename” (4认同)

seb*_*szw 22

尝试这个:

useradd {user} || echo "User already exists."
Run Code Online (Sandbox Code Playgroud)

甚至这个:

useradd {user} || true
Run Code Online (Sandbox Code Playgroud)


Aar*_*own 8

除非您只有少数系统,否则您问错了问题。答案根本就不是运行 useradd,而是将这项工作留给像 puppet 或 Chef 这样的配置管理解决方案。这将允许您的用户定义集中,并防止您运行 for 循环并使用 ssh 与 root 用户一起配置您的系统。您将始终拥有处于已知配置状态的系统。

木偶文档可在http://docs.puppetlabs.com 上获得

以人偶为例:

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}
Run Code Online (Sandbox Code Playgroud)

  • Puppet 是一个很棒的项目,但是您无法对 OP 真正要求的内容做出假设:) (7认同)
  • 如果用户不存在,Chef 只​​会添加用户。这就是幂等性,所以我不明白这个问题(现在 1.5 年了)。 (2认同)

Nik*_*ley 5

useradd如果用户已经存在,则不会再次添加该用户,它旨在确保 uid 号和 uid 登录名是唯一的。如果您计划运行一个批处理,请确保使用的 uid 是唯一的;useradd会抱怨有问题的条目,您需要捕获错误/stderr 以查看哪些用户帐户有问题进入帐户系统 ( /etc/passwd, group, shadow)。