Що таке оболонки для входу та не входу?


78

Кажуть, що параметри для оболонки без входу для переходу у .bashrcфайл та налаштування оболонки для входу переходять у .profileфайл.

Що насправді означає оболонки для входу та не входу в систему?

Поясніть, не використовуючи технічний жаргон якомога далі.

Відповіді:


83

Простіше кажучи:

  • Якщо ви відкриєте оболонку або термінал (або переключитесь на один), і він попросить вас увійти (Ім'я користувача? Пароль?), Перш ніж він надасть вам підказку, це оболонка для входу.
  • Якщо він не працює (як gnome-terminal ) і дозволяє вам використовувати його відразу, це оболонка без входу.

Якщо ви звичайний користувач Ubuntu Desktop, єдиною оболонкою для входу є ... ваш робочий стіл (ви вводите пароль, щоб увійти, правда;)? Ну, технічно це оболонка для входу, яка запускає графічний інтерфейс, але це входить в жаргон. І так, він прочитає налаштування в.profile

Єдиний раз , коли ви (звичайний користувач), ймовірно , побачить оболонку входу в системі, яка виглядає як шелл, якщо у вас виникли якісь - то проблеми з робочим столом , і ви перейдіть на віртуальний термінал з Ctrl+ Alt+ F1ярликом.


Інші загальні випадки наявності оболонки для входу включають:

  • віддалений доступ до комп'ютера через ssh(або локально підключившись ssh localhost)
  • імітуючи початкову оболонку входу за допомогою bash -l(або sh -l)
  • імітуючи початкову rootоболонку входу за допомогоюsudo -i
    • або для іншого не- користувачаsudo -u username -iroot
  • автентифікація як іншого некористувача rootз (та їх паролем)su - username
  • за допомогою sudo loginкоманди для переключення користувача

Якщо я запускаю IDE Eclipse з терміналу, він відкривається, як очікувалося, але якщо я спробую відкрити його, натиснувши на піктограму Eclipse, він не в змозі розпізнати розташування Java (якщо інше PATH для Java не встановлено у файлі .profile). Це означає, що для натискання піктограми Eclipse потрібна оболонка для входу, чому?
ДУКЕ

2
@DUKE, Ні, це означає, що змінні середовища потрібно встановлювати по- різному, коли ви використовуєте робочий стіл / GUI порівняно з істинною консольною системою, призначеною лише для командного рядка. Покладіть свій PATH тощо у ~/.pam_environment(лише змінні, жодних команд bash!), Вийдіть із системи, увійдіть у систему та спостерігайте за тим, як усе магічно відображається на робочому столі, а також у gnome-терміналі!
Останній

1
Вхід через ssh не викликає оболонку входу. Він не завантажується /etc/profile, /etc/profile.dабо ~/.profile.
xuhdev

Дивіться це питання .
xuhdev

@xuhdev Вхід через ssh викликає оболонку входу та завантажує / etc / profile, /etc/profile.d та ~ / .bash_profile.
MichaelZ

9

Я не думаю, що правильну відповідь можна дати без "технічного жаргону". Оскільки це питання є першим, що з'являється в Google для запиту "що таке оболонка для входу", я надаю більш правильну відповідь нижче:

Оболонка для входу - це просто оболонка, про яку було сказано, що оболонка для входу. Це не означає оболонку, яка з’являється після входу в систему, хоча зазвичай програма, яка входить до вас, повідомляє оболонку, що вона запускається як оболонка для входу. Існують такі способи сказати оболонці, що вона повинна бути вхідною:

  1. Запуск оболонки з -lабо --loginаргументом припускаючи , що він знає про це (я не знаю ні снарядів , які не знають -l, але --loginпідтримується тільки кілька оболонок).
  2. Запуск оболонки із argv[0]встановленим -{some_string}рівнем (тобто з HYPHEN-MINUS, який передбачив звичайну argv[0]або якусь іншу рядок). Це те, що роблять ssh і su: su просто працює з виконуваним файлом -suas argv[0](привіт всім, хто думає, argv[0]має щось спільне з поточним запущеним ім'ям виконавця), ssh запускає zsh, -zshколи користувач встановив /bin/zshсвою оболонку.

Логічність оболонки абсолютно не має нічого спільного з тим, щоб хто-небудь запитав вас про пароль або виконував якусь іншу процедуру аутентифікації. Деякі програми, такі як ssh або login (або деякі емулятори терміналів, такі як urxvt), запускають оболонки як вхідні дані, використовуючи, argv[0]що починається з HYPHEN-MINUS. Деякі з них, такі як su або sudo (або zsh: див. -Модифікатор попередньої команди, описаний у розділі PRECOMMAND MODIFIERS in man zshmisc), не роблять цього за замовчуванням, але можуть так сказати. У деяких є єдиний варіант сказати оболонці, щоб бути вхідним, використовуючи свій аргумент (тобто bash -l): ssh з аргументом команди (який явно повідомляє ssh, що потрібно запускати на віддаленому кінці).

Як правило, краще спочатку ознайомитися з документацією програми, що використовується для виклику оболонки, щоб визначити, чи буде оболонка вхідною, а вдруге виконати деякі тести, щоб визначити, чи додаток запустить оболонку входу (наприклад, додавши echoв .profile).


Мене цікавить другий варіант: як я можу насправді змінити argv [0] перед (або після) викликом bash? Чи можна це зробити з командного рядка?
VeryHardCoder

@VeryHardCoder Це залежить від програми, яку ви використовуєте для запуску команди. У коді C це робиться шляхом прямого постачання argv[0]однієї з exec*функцій, природної та неминучої: ви завжди постачаєте обидві argv[0] і шлях до команди фактично виконується при використанні exec*функцій, навіть якщо ви ніколи не хочете argv[0]відрізнятися від запуску команд. Інші мови надають свої способи. Конкретно bash дозволяє використовувати exec -a new_argv0 bash, але це, звичайно, замінить поточну працюючу оболонку тим, що ви execредагували, тому вам може знадобитися використовувати (exec -a -zsh zsh)
subshell

Добре, зрозумів! Насправді це можна зробити навіть більш простим способом: (exec -l bash) ...
VeryHardCoder

1
Яка функціональна різниця між ними? Це просто булевий прапор?
Олексій

@Alexey Основна функціональна відмінність - це набір файлів конфігурації, які використовуються при запуску. $0, і, можливо, також встановлено щось інше (змінна, налаштування тощо), щоб в файлі конфігурації була виявлена ​​логічність оболонки, але хто турбує насправді це виявити, щоб це не змінило? Це все, що я знаю.
ZyX
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.