В чем разница между adduser и useradd?

441

В чем разница между командами adduserи useraddв Ubuntu?

Джо Кабесас
источник
17
Тот же вопрос о
суперпользователе
5
а также в Unix stackexchange (довольно подробный ответ)
xealits
и это хороший вопрос, который остается актуальным. Проблема не в том, что люди задают ее в соответствующих контекстах, а в том, что этот вопрос нужно задавать вообще.
Foo

Ответы:

387

useraddэто родной двоичный файл, скомпилированный с системой. Но, adduserэто Perl-скрипт, который использует useraddбинарный в фоновом режиме.

adduserболее удобный и интерактивный, чем его бэкэнд useradd. Там нет никакой разницы в предоставляемых функциях.

Источник: В чем разница между «adduser» и «useradd»?

Раду Рэдяну
источник
59
Команда add useradd не создаст каталог '/ home / username', но команда adduser выполнит
Deepen
65
useradd с -mопцией создаст домашний каталог.
richsinn
10
Реализация не настолько интересна, семантика есть. Like adduser(8)более удобен для пользователя и по умолчанию создает и настраивает пользователя так, как вы ожидаете. И useradd(8)делать только то, что вы просите, поэтому вы хотите, чтобы домашний каталог был создан, вы должны сказать ему, чтобы создать его для вас.
Андерс
23
Я должен гуглить это каждый раз ... Как я могу помочь себе вспомнить, что есть что?
Квентин Скоусен
11
Для меня @kkhugs «adduser» кажется наиболее интуитивным, потому что это команда, которая звучит как английская, а другая - нет, семантически. Если вы помните его как «наиболее интуитивный» из двух, вы также можете попытаться запомнить его как предпочтительный / более простой.
pzkpfw
146

Всегда используйтеadduserdeluserпри удалении пользователей) при создании новых пользователей из командной строки. (Если вы пишете скрипт, особенно если вы стремитесь к переносимости, вы можете вместо этого использовать утилиты низкого уровня - и adduser/ deluserмогут быть недоступны на всех дистрибутивах, например, на SuSE.)

В useradd, userdelи usermodкоманды низкоуровневых утилит , которые существуют по историческим причинам, в то время как adduser/deluserDo The Right Thing ™. (Я помню, что использовать, думая, что user*следует adduser/deluserв алфавите, и, следовательно, «хуже».)

Согласно соответствующим страницам руководства (в Ubuntu 12.04 Precise Pangolin, то есть в производной системе Debian).

Manpage для adduserговорит:

(Акцент добавлен.)

adduserи addgroupдобавлять пользователей и группы в систему в соответствии с параметрами командной строки и информацией о конфигурации в /etc/adduser.conf. Они дружелюбнее передние концы с инструментами низкого уровня , как useradd, groupaddи usermodпрограммой , по умолчанию выбирает политику Debian UID и совместимое значение GID, создавая домашний каталог с скелетной конфигурацией, запуск пользовательского сценария, и другие возможности. adduserи addgroupможет быть запущен в одном из пяти режимов:

Manpage для useraddговорит:

useraddутилита низкого уровня для добавления пользователей На Debian администраторы обычно должны использовать adduser(8)вместо этого.

Смотрите также: в чем разница между «adduser» и «useradd»? (на SuperUser)

zrajm
источник
6
Я никогда не могу вспомнить, какой из них, так что это моя глупая мнемоника, если она кому-нибудь поможет :) "user" рифмуется с "loser", а "loser" идет последним. Таким образом: adduser, deluser.
Мадс Скьерн
26
Я на самом деле не согласен с « Всегда пользовательadduser »: для автоматических сценариев я бы предпочел, useraddпотому что он всегда есть, неинтерактивный и не специфичный для дистрибутива .
Wernight
2
Я пробовал adduserна openSUSE, а его там нет. (13.2)
cst1992
1
@ cst1992 Вы правы, я отредактировал ответ, чтобы отразить это. Как ни странно, когда я попробовал locate adduserна работе систему SuSE 11, я обнаружил, что там есть adduserman-страница, но нет бинарной (и ни deluserman-страницы, ни команды).
Зрайм
2
На Red Hat/usr/sbin/adduser -> useradd
Левон
17

adduser: добавить пользователя с полным профилем и информацией (пароль, квота, разрешение и т. д.)

useradd: добавить пользователя только с его именем (если вы хотите добавить временного пользователя только с именем, другая информация не требуется)

MandM
источник
1
+1 и добро пожаловать! Я проголосовал за человека, который не смог объяснить свой предыдущий голос. Так держать! Хорошие программисты всегда поднимаются на вершину - (и не голосуют без объяснения причин). :)
Ricalsin
11

Еще одна пара отличий, которые приводят к конкретным сценариям, где использование useradd может быть предпочтительным.

  1. В некоторых новых дистрибутивах, включая Ubuntu 14.4, adduser будет запрашивать такую ​​информацию, как пароль и «gecos» (данные для команды finger). Это означает, что он может быть менее подходящим для вызова из скрипта (кредит: уже упоминалось в комментарии Wernight).

    Подсказки можно подавить, передав нулевые аргументы:

    adduser --disabled-password --gecos "" USER
    
  2. useraddпозволяет передать несколько дополнительных групп для добавления пользователя с помощью этой -Gопции. adduserКажется, требуется, чтобы вы вызывали команду один раз для добавления каждой группы.

AdamS
источник
Не работает на Ubuntu 16.04.
answerSeeker
8

adduserудобнее в том, что он устанавливает домашние папки учетной записи и другие настройки (например, автоматически загружает системную статистику и уведомления при входе в систему), тогда как useraddпросто создает пользователя.

Павел
источник
2
Неправильно. useradd может создать домашний каталог с помощью -m, установить пароль с помощью -p, создать файлы скелетов с помощью -k и добавить пользователя в группу (ы) с помощью -G.
ychaouche
5

Основное отличие заключается в том, что «adduser» создаст домашний каталог и добавит файлы скелета в тот каталог, где «useradd» не будет создавать никаких домашних каталогов и файлов скелета!

попробуй adduser:

Adding user `try' ...
Adding new group `try' (1001) ...
Adding new user `try' (1001) with group `try' ...
Creating home directory `/home/try' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for try
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y

useradd try1:

# ll /home/
total 20
drwxr-xr-x  5 root    root    4096 Oct 26 15:52 ./
drwxr-xr-x 22 root    root    4096 Oct 26 15:47 ../
drwx------  8 ashishk ashishk 4096 Oct 26 15:50 ashishk/
drwxr-xr-x  3 root    root    4096 Oct 14 13:02 .ecryptfs/
drwxr-xr-x  2 try     try     4096 Oct 26 15:52 try/
root@chef-workstation:/home/ashishk#
Ашиш Карпе
источник
Неправильно. Смотрите предыдущий комментарий
ychaouche
0

Я также укажу, что adduserне всегда есть -Mопция, а также не учитывается --systemфлаг, который конкретно говорит :

Обратите внимание, что useradd не будет создавать домашний каталог для такого пользователя, независимо от значения по умолчанию в /etc/login.defs (CREATE_HOME). Вы должны указать опции -m, если вы хотите создать домашний каталог для системной учетной записи.

Если вы пытаетесь создать системного пользователя без домашнего каталога, используйте useradd --system -M.

blockloop
источник