D
в четвертых средствах столбца, что процесс в настоящее время занят системным вызовом. Это состояние системы обычно длится в течение очень короткого времени, таким образом, необычно наблюдать его. Наблюдение D
имеет тенденцию указывать на любого медленный ввод-вывод (например, в сетевой файловой системе) — который ps
не делает — или что-то не так в ядре или с аппаратными средствами.
Или Вы наблюдаете ошибку ядра, или некоторая часть Ваших аппаратных средств перестала работать. Для знания больше первый шаг находится в нахождении файлов журнала. Ваша система выполняет BusyBox, и Ваш снимок экрана показывает, что это работает syslogd
без параметров, таким образом, все системные журналы находятся в /var/log/messages
. Существует хороший шанс, что этот файл содержит некоторый признак того, что идет не так, как надо. Если Вы нуждаетесь в помощи, интерпретируя журналы, редактируете их в свой вопрос (или поднимите их онлайн где-нибудь, если они являются слишком большими).
Проблема здесь, как это часто бывает, в различных типах оболочки:
Когда вы открываете эмулятор терминала (например, gnome-terminal
), вы запускаете так называемую интерактивную оболочку без входа в систему .
Когда вы входите в систему из командной строки или запускаете такую команду, как su имя пользователя
или sudo -u имя пользователя
, вы запускаете интерактивный вход в систему оболочка.
Итак, в зависимости от того, какой тип оболочки вы запустили, читаются разные наборы файлов запуска. Из man bash
:
When bash is invoked as an interactive login shell, or as a non-inter‐
active shell with the --login option, it first reads and executes com‐
mands from the file /etc/profile, if that file exists. After reading
that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
in that order, and reads and executes commands from the first one that
exists and is readable. The --noprofile option may be used when the
shell is started to inhibit this behavior.
Другими словами, ~ / .bashrc
игнорируется оболочками входа в систему.Поскольку вы используете параметр -i
для sudo
, файлы запуска для оболочки входа пользователя читаются (из man sudo
):
-i, --login
Run the shell specified by the target user's password data‐
base entry as a login shell. This means that login-specific
resource files such as .profile or .login will be read by the
shell.
Итак , вы можете
вместо этого определить функцию в пользовательском ~ / .profile
или ~ / .bash_profile
. Имейте в виду, что ~ / .profile
игнорируется, если существует ~ / .bash_profile
. Также имейте в виду, что ~ / .bash_profile
специфичен для bash, поэтому я бы использовал вместо него .profile
, просто убедитесь, что ~ / .bash_profile
не существует .
Источник ~ / .nvm / nvm.sh
из ~ / .profile
.
@terdon уже добавил несколько хороших деталей по этому поводу, поэтому я не буду повторять это здесь. Повторяю, причина проблемы, скорее всего, кроется в несколько странном поведении bash
при вызове в качестве оболочки входа в систему, поскольку он не создает автоматически .bashrc
и вместо этого ищет только ~ / .bash_profile
, ~ / .bash_login
или ~ / .profile
.
Обычно в один из этих файлов профиля добавляют код для получения .bashrc
. По умолчанию у меня есть следующий код в ~ / .profile
:
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
Из комментариев ниже я думаю, что лучшим решением, вероятно, является удаление [-z "$ PS1 "] && вернуть строку
из .bashrc
и оставить все остальное как есть.