Додайте користувача до системи * лише якщо його не існує *


47

Я запускав useradd {user}команду для додавання користувачів до моєї системи, хоча я планую запустити це в автоматизованому середовищі, і це може закінчитися запуском знову, навіть якщо користувач вже існує.

Чи є спосіб я запустити це, лише якщо користувача ще не існує? У користувача немає домашньої папки.


adduserяк правило, кращий у системах Debian / Ubuntu.
Faheem Mitha

@FaheemMitha В автоматизованих сценаріях, мабуть, краще використовувати більш послідовні useradd.
Хлопець із капелюхом

Відповіді:


69

id -u somename повертає ненульовий код виходу, коли користувача не існує.

Ви можете перевірити це досить просто ... ( &>/dev/nullпросто придушує нормальний вихід / попередження)

id -u somename &>/dev/null || useradd somename 

1
Портативно: "id -u somename> / dev / null 2> & 1 || useradd somename"
Трістан

13

спробуйте це:

useradd {user} || echo "User already exists."

або навіть це:

useradd {user} || true

Це зберігає чек, оскільки він виходить з ладу, якщо користувач вже існує.
CoverosGene

8

Якщо у вас є лише невелика кількість систем, ви задаєте неправильне запитання. Відповідь - не запускати useradd взагалі, а замість цього залиште цю роботу в управлінні конфігурацією, як лялька чи шеф-кухар. Це дозволить централізувати ваші користувацькі визначення та не допустити запуску циклів та використання 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,
}

4
Лялька - це чудовий проект, але ви не можете робити припущення про те, що насправді просить ОП :)
rahmu

1
ОП пояснила мету дуже чітко - автоматизована і може бути запущена знову, хоча користувач існує (idempotency). Це точні випадки використання інструменту управління конфігурацією. Коли хтось не усвідомлює, що інструменти для вирішення цих проблем вже існують, вони, як правило, задають питання, які передбачають вирішення дуже конкретної, вузько зосередженої проблеми, коли є більш широка концепція, яку можна зрозуміти.
Аарон Браун

Я вже використовую шефа.
tarnfeld

1
Шеф-кухар додаватиме користувачів, лише якщо користувача не існує. Ось в чому полягає ідентичність, тому я не розумію питання (зараз уже 1,5 року).
Аарон Браун

4

useradd не додасть користувача ще раз, якщо він уже існує, він має намір переконатися, що номер uid та idid логін є унікальними. Якщо ви плануєте запускати партію, переконайтесь, що використовувані посібники унікальні; useradd скаржиться на проблемні записи, і вам потрібно буде зафіксувати помилки / stderr, щоб побачити, які облікові записи користувачів мали проблеми з потраплянням в облікові системи (/ etc / passwd, group, shadow).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.