useradd: невозможно создать каталог

Оператор glob ~ filter (and-not) применяет фильтр в качестве отрицательного сопоставления с шаблоном к результату всего glob.

Это позволяет, например:

grep foo ./**/*~*/.svn/*(.mh-1)

.

Здесь вам потребуется:

echo tdir/*~tdir/xx

Или:

echo tdir/*~*/xx

Или:

echo tdir/(*~xx)

Или используйте вместо него оператор отрицания ^ :

echo tdir/^xx
6
16.05.2017, 03:50
2 ответа

Код useradd вызывает библиотечную функцию mkdir для (попытки) создания указанного каталога. useradd проверяет код возврата, но только на то, что он не равен нулю; в этом случае я подозреваю, что mkdir возвращает ENOENT -- компонент каталога в имени пути не существует или является оборванной символической ссылкой, поскольку родительский каталог (/opt/atlassian) не существовал или имел был удален во время ваших попыток добавить пользователя.

Как отмечают Kusalananda/roaima, самое простое решение здесь — создать структуру родительского каталога перед вызовом useradd:

  1. sudo mkdir -p /opt/atlassian
  2. sudo /usr/sbin/useradd --create- home --home-dir /opt/atlassian/bitbucket --shell /bin/bash atlbitbucket
5
27.01.2020, 20:27

Команды, которые вы используете для создания пользователя и его домашнего каталога, смогут создать домашний каталог только в том случае, если непосредственный родительский домашний каталог уже существует. Это не удастся, если он не сможет найти родительскую папку, в которой должен находиться домашний каталог, или если домашний каталог уже существует.

Это означает, что

$ mkdir -p /some/dir/myhome
$ useradd --home-dir /some/dir/myhome ...

не будет работать, поскольку /some/dir/myhome существует, тогда как

$ rm -rf /some/dir
$ useradd --home-dir /some/dir/myhome ...

не будет выполнено, поскольку /some/dir не существует.

Просто убедитесь, что каталог, в котором будет создан домашний каталог, существует, т.е. в вашей ситуации

mkdir -p /opt/atlassian
5
27.01.2020, 20:27

Теги

Похожие вопросы