Linux username @ server исчезает после входа в систему как root

2005
random

На моем сервере linux я вошел в систему как пользователь root для доступа к некоторым файлам: su root ... После проверки файлов я снова вошел в систему под своим основным именем пользователя su . В окне моего терминала теперь отображается имя сервера ~: вместо имени пользователя @ сервер ~: слева от командной строки. Можно ли как-нибудь вернуть это в нормальное состояние?

3

6 ответов на вопрос

12
Ry4an Brase

Выполните несколько exitкоманд. Вы su rootзапустили подоболочку, где вы root, а вы su userзапустили другую. Печатание exitзакончит те подоболочки и вернет вас туда, где вы начали - на один уровень глубже.

Это просто вывело меня из моего удаленного соединения ... но я думаю, что я в недолговечности. Есть ли какая-либо команда для просмотра всех запущенных мной оболочек? 14 лет назад 0
С "echo $ SHLVL" вы можете увидеть уровень подоболочки. Mark van Lent 14 лет назад 2
6
Michael Aaron Safyan

Вам просто нужно изменить подсказку. Вы можете использовать следующую команду:

экспорт PS1 = "\ u @ \ h \ w:" 

Я лично предпочитаю следующее в качестве подсказки, но это только я:

export PS1 = "[\ u @ \ h \ w] \ $" 

Вы можете предотвратить изменение вашего приглашения, добавив оператор в соответствующие файлы bashrc. См. Также Bash Shell PS1: 10 примеров для того, чтобы сделать ваш Linux быстрым, как Анджелина Джоли, для получения дополнительной информации о PS1.

Почему меняющиеся пользователи меняют мою подсказку? Это кажется скорее обходным путем, чем исправлением. 14 лет назад 0
Поскольку в приглашении будет указано, кем вы в данный момент пользуетесь, например, приглашение будет выглядеть как root @ myserver: когда вы работаете от имени пользователя root или someuser @ myserver: когда вы используете учетные данные пользователя someuser. Luke 14 лет назад 0
Дэвид: Запросы не являются глобальными; Они зависят от пользователя. Поэтому изменение пользователей может изменить ваше приглашение. В частности, пользователь root часто имеет очень простую общую подсказку. То, что Майкл предложил здесь, является правильным способом решения вашей проблемы; Это совсем не обходной путь. 14 лет назад 0
Поскольку они зависят от пользователя, зачем переходить от имени пользователя root, чтобы изменить приглашение для пользователя «Давид». Я понимаю, что когда я нахожусь в суб-оболочке для пользователя root, у меня будет другое приглашение, но как только я выйду из этой оболочки, я не понимаю, почему это изменит приглашение для пользователя Давид. Разве вы не сказали, что они независимы друг от друга? Я определенно новичок в Linux, и я был бы признателен, если бы кто-то мог объяснить ошибку в моей логике здесь. 14 лет назад 0
Хотя этот ответ верен в отношении того, как изменить приглашения bash, он упускает из виду тот факт, что для «переключения назад» на своего собственного пользователя после `su`, вы обычно просто хотите` выйти` из `su`-оболочки, а не запускать другой один. 14 лет назад 1
1) Подсказка регулируется переменными ENV (как указано выше). 2) `su` запускает подоболочку и стирает ее родительские переменные ENV. 3) дочерняя подоболочка наследует переменные ENV из сценария инициализации для пользователя, для которого оболочка работает как (david). Kent Fredric 14 лет назад 0
5
earl

suпереключает пользователей, порождая новую (под) оболочку. Поэтому, когда вы вошли в систему, вы запустили оболочку. Получив первый suдоступ к root, вы запускаете подоболочку как root. Рядом suс вашим пользователем начался еще один подоболочек - обратите внимание, что на данный момент у вас работает три оболочки. Таким образом, вместо su-ing для вашего пользователя из roothell, exit-ing обратно в вашу оболочку входа решит ваши проблемы.

Если вы pstreeустановили, pstree -hпокажет вам графическое представление того, что происходит.

Это гласит: -sshd --- sshd --- sshd --- bash --- pstree. Когда я вхожу в корневую вложенную оболочку, я получаю: -sshd --- sshd --- sshd --- bash --- su --- bash --- pstree. Так как в первом чтении есть только один bash, я был бы прав, если бы предположил, что я не в суб-оболочке? 14 лет назад 0
Именно так. Таким образом, чтобы выйти из ненужного подоболочки, просто "выходите", пока не останется только один "bash". 14 лет назад 0
4
Greg Hewgill

Ваш запрос, как правило, задается одним из файлов запуска вашей оболочки, который не запускается при переходе suот пользователя root к пользователю. Если вы используете bash, man bashв разделе INVOCATION может быть полезным. Есть несколько файлов запуска, которые может прочитать bash, включая, но не ограничиваясь:

  • /etc/profile
  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile
  • ~/.bashrc

PS1Переменная окружения просто переменная окружения, и может или не может получить набор в зависимости от того, какая комбинация из вышеперечисленных файлов выполняется.

Команда suимеет -l(или --login) переключатель, который может быть сокращен до того, -что делает новую оболочку оболочкой входа в систему. Это, вероятно, то, что вы хотите:

su - david 

Я всегда использую suс этой опцией.

Правильно. Простое su не будет вызывать файлы запуска, тогда как su - будет. Я не знал Су - это сокращение от Су-л! Спасибо Грегу за информацию. alok 14 лет назад 0
также, для людей 'sudo', sudo -i * очень * удобен Kent Fredric 14 лет назад 0
1
Jim Schubert

если это оболочка bash, попробуйте:

source ~/.bashrc 

если это не работает, запустите echo $PS1и посмотрите, что изменилось.

, ~ / .bashrc делает то же самое Robert Swisher 14 лет назад 0
1

suсамо по себе не создает новый сеанс оболочки. Вот почему он не настраивает оболочку, как обычно. тем не мение,

su - 

начнется новый сеанс входа

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