Я на самом деле подозреваю, что вас укусила широко обсуждаемая ошибка повреждения ext4 в ядре 3 и 4. Посмотрите на этот поток,
http://bugzilla.kernel.org/show_bug.cgi?id=89621 .
Существует больше потоков об ошибке, я только что нашел это еще интереснее.
Если другие серверы имеют одинаковый уровень обновлений и версий, я бы предложил ряд обновлений безопасности/пакетов.
-121--145200-
Поскольку оболочка запускается без hup
, она получает сигнал SIGHUP
при закрытии сеанса и отправляет его всем процессам в конвейере. Поскольку вторая команда mysql
снова выполняется без nohup
, она прекращает работу и отправляет SIGPIPE
в nohup mysqldump
, что, в свою очередь, заканчивается.
Попробуйте
nohup sh -c 'mysqldump -hxxx -Pxxx -uxxx -pxxx --dump-slave --include-master-host-port --apply-slave-statements -f -q -A -E -R | mysql -hxxxx -Pxxxx -uxxxx -pxxxx' &
-121--166105-
Отличие состоит в том, что один из них является списком, а другой - последовательностью. {1,2,3}
расширяется до трех конкретных элементов: 1
, 2
и 3
. {1.. 3}
расширяется до списка чисел от одного до трех. В этом конкретном случае они одинаковы и можно использовать одно из двух. Файл . *
будет расширен до всех файлов и каталогов в текущем каталоге, имя которого начинается с файла .
. Если имеется только файл .1
, file.2
и file.3
, то это также эквивалентно двум другим.
Что касается проблем, то я не понимаю, почему. Вы можете думать о
$ cat file.* > file.txt
cat: file.txt: input file is output file
Это, однако, совершенно другой вопрос. Единственная другая проблема, о которой я могу думать, это то, что ваша оболочка может не перечислить файлы в правильном порядке. Например:
$ touch file1 file11 file2
$ echo file*
file1 file11 file2
Для решения этой проблемы можно использовать zsh
вместо bash
(подробнее см. здесь ):
% echo f*(n)
file1 file2 file11
В целом, три подхода не совпадают. Это зависит от того, что ты хочешь сделать. В тех случаях, когда три возвращают один и тот же выход, да, можно использовать любой из них. Это не имеет значения. Все эти расширения выполняются оболочкой и происходят до того, как они передаются любой команде, использующей их.
Ладно, переходим к исходному коду!
Программаutil-linux
пользователя login
уже занята к моменту появления приглашения для входа в систему. Начнем там , точнее в файле login-utils/login.c
.
Теперь login
отвечает за подсказку login
, поскольку она генерируется вloginpam_get_prompt
и регистрируется в PAM вinit_loginpam
. Затем функцияloginpam_auth
вступает во владение, и управление переходит к функцииpam_authenticate
PAM. Это означает, что login
просто определяет подсказку для имени пользователя и все.
Для PAM тогда :то, что нас интересует, явно происходит вpam_authenticate
:
The pam_authenticate function is used to authenticate the user. The user is required to provide an authentication token depending upon the authentication service, usually this is a password, but could also be a finger print.
Теперь теневая -аутентификация (/etc/passwd
,/etc/shadow
)обрабатывается модулем pam_unix
. Мой дистрибутив (Arch )предоставляет PAM через пакет pam
, что означает, что наше путешествие продолжается к linux -pam.org и его исходному коду .modules/pam_unix/pam_unix_auth.c
кажется хорошим местом для начала. Модули PAM предоставляют свой механизм аутентификации через функцию pam_sm_authenticate
, которую мы находим здесь . Пароль (или «токен аутентификации», см. выше ), извлекается с помощью вызова функции PAM pam_get_authtok
. Он объявлен в заголовочном файле security/pam_ext.h
, так что мы идем дальше.
extern int PAM_NONNULL((1,3))
pam_get_authtok (pam_handle_t *pamh,
int item,
const char **authtok,
const char *prompt);
В этих рассуждениях нет ничего многообещающего, но хорошо... Давайте посмотрим определение . pam_unix
передал NULL
вместо аргумента prompt
и PAM_AUTHTOK
вместо item
, так что мы получаем здесь . Теперь этот жестко закодированный PAM_PROMPT_ECHO_OFF
, переданный pam_prompt
, просто не выглядит хорошо для меня...
retval = pam_prompt (pamh, PAM_PROMPT_ECHO_OFF, &resp[0], "%s", PROMPT);
Кстати, пароль PROMPT
также жестко запрограммирован(здесь ), так что моя мечта о более экзотическом запросе пароля исчезает... Впрочем, давайте перейдем к функции pam_prompt
. Фактическое приглашение происходит здесь , где PAM вызывает функцию диалога, выбранную несколькими строками выше . Беглый взгляд на функции pam_get_item
иpam_set_item
знакомит нас со структурой pam_conv
, определенной здесь .
Теперь найти информацию о функции диалога PAM по умолчанию было намного сложнее, чем следовало бы (Я думаю ). Куда бы я ни посмотрел, структура оставалась неинициализированной и pam_unix
, похоже, не определяет свою собственную. Однако мне удалось найти общую функцию misc_conv
, которая передает PAM_PROMPT_ECHO_OFF
наread_string
и... здесь , где PAM деактивирует входную обратную связь.
Заключение:отсутствие обратной связи по паролю жестко запрограммировано. Очень жаль. Немного покопавшись, я нашел эту проблему на GitHub и эту ветку Arch BBS . Судя по всему, эта функция была доступна еще тогда, когда PAM не был стандартом для аутентификации. Я предполагаю, что имеет смысл не реализовывать это снова -безопасность и все -, но вы знаете, вариант был бы хорош.
В общем, я только что заказал себе новую клавиатуру.