LINUX.ORG.RU

Разновидности шеллов

 ,


0

1

Перечитал кучу материала и так и не понял чем они отличаются, кроме того, что там какие-то разные конфиги вычитываются. Может кто-то в нескольких словах объяснить чем отличаются интерактивный шелл от неинтерактивного. Чем логин шелл от нелогина и зачем их столько разных. В чем преимущество одних перед другимим.

Как проверить логин шелл или нелогин я представляю. А как проверить интерактивность шелла? И в него никак нельзя войти потому что он неинтерактивный и выполняется только в контексте скрипта? Просьба если у вас ответом будет man bash - пройти мимо поста.


в нескольких словах

Do one thing and do it well.

mord0d ★★★★★
()

Логин шелл читает ~/.profile (варианты) и все остальные шеллы пляшут от него. Если явно не указать, что новый шелл будет логин-шеллом. Это как зайти на тот же комп как тот же пользователь, только с боку, типа.

Интерактивный шелл ждёт команды и выполняет их .Т.е. обычный терминал, например.

Как-то так. Т.е. ничего такого, что имело бы смысл серьёзно задумываться.

kostyarin_ ★★
()
Ответ на: комментарий от sparks

Взаимодейтвовать это как? Можете привести пример взаимодействия, который невозможен в неинтерактивном шелле?

NordeN
() автор топика
Ответ на: комментарий от NordeN

Взаимодейтвовать это как? Можете привести пример взаимодействия, который невозможен в неинтерактивном шелле?

Открываешь терминал и взаимодействуешь.

kostyarin_ ★★
()
Ответ на: комментарий от sparks

Просто прочитал в каком-то из материалов, что тот шелл, что указан в шебанге выполняется неинтерактивно, это правда? Я только начинаю разбираться как в unix все устроено и еще многого не знаю. Могу что-то не так сказать.

NordeN
() автор топика
Ответ на: комментарий от NordeN

В шебанге указывается не шелл, а интерпретатор, который будет интерпритировать этот скрипт, там может быть expect,awk,python,perl и пр хрень, в тоже время скрипт может срашивать какиенить данные у пользователя, т.е. быть интерактивным

sparks ★★★★
()
Ответ на: комментарий от sparks

Тоесть интерактивность это просто признак, а не тип? Если я в скрипт напишу su - user1. То он будет интерактивным, а если echo user1, то нет?

NordeN
() автор топика
Ответ на: комментарий от NordeN

я хз, как это всё переформулировать, что бы оно было понятней, попробуй просто понять что значит интерактивность и почему игры интерактивные, а фильмы нет

sparks ★★★★
()
Ответ на: комментарий от sparks

Возможно ли как-то неинтерактивно сменить пользователя в шелле? Попробовал как-то так echo password | sudo -i -u user1, но оно не сработало. Куда выводится приглашение к вводу пароля, оно не в stdin получается? Нашел ключ -S у sudo, но не могу понять как его применить.

NordeN
() автор топика
Ответ на: комментарий от NordeN

bash, зная что он не интерактивный, а выполняет скрипт, ведёт себя иначе, например выключает job control и не читает ~/.bashrc

legolegs ★★★★★
()
Ответ на: комментарий от NordeN

опиши сценарий того, что ты хочешь сделать

sparks ★★★★
()
Ответ на: комментарий от NordeN

Возможно ли как-то неинтерактивно сменить пользователя в шелле?

sudo по причинам, связанным с безопасностью изначально настроен требовать от запускающего шелла быть интерактивным. echo password - это очень плохая практика, аргументы всех запущенных программ видны всем пользователям.

legolegs ★★★★★
()
Ответ на: комментарий от aalst

Тоесть sudo, su, ssh и подобные вызывают другую программку для введения учетных данных, а не читает их из stdin? Можно было бы посмотреть системные вызовы, но я пока в них плохо разбираюсь, надеялся на подсказки

NordeN
() автор топика
Ответ на: комментарий от legolegs

Про аргументы знаю, смотрел через pspy, вопрос откуда читают программы учетные данные

NordeN
() автор топика

Еще один школьник? Тебе не нужны определения, от них в данном контексте нет никакой пользы. Просто либо ты можешь вводить команды и получать результат, либо у тебя такой возможности нет.

anonymous
()
Ответ на: комментарий от anonymous

Чем плохи школьники, желающие в чем-то разобраться?) Кто-то себя обиженным чувствует и желает потешить свое чсв единственным возможным для себя способом (погнуть пальцы перед новичками)? Хотя это даже гнутием назвать нельзя, высер троля тупо. Нечего ответить по существу - пройдите мимо, можете жалобу подать если тред нарушает правила площадки

NordeN
() автор топика
Ответ на: комментарий от NordeN

Чем плохи школьники, желающие в чем-то разобраться?)

Тем что эксперты не могут ответить на элементарные вопросы от них, и потому начинают полыхать, и убеждать «да тебе это не нужно знать».

paramon
()

Может кто-то в нескольких словах объяснить чем отличаются интерактивный шелл от неинтерактивного.

В интерактивном шелле установлены несколько переменных для отображения приветствия и по другому настроена диспозиция сигналов от ядра.

Чем логин шелл от нелогина и зачем их столько разных.

Логин подразумевает чтение альтернативных инициализационных файлов. По поводу много -- различают борн-совместимые оболочки и все остальные. Из борн-совместимых оболочек вырос формальный (писанный) стандарт POSIX на язык командного интепретатора.

Вообще, шелл это максимально лёгкий интерфейс (оболочка) над функциональностью ядра ОС, и при изучении первого в отрыве от второго многое будет непонятно. Поэтому лучше начинать изучать с книг по общей разработке под Unix, например с классических книг Р.Стивенса, в дальнейшем уяснить для себя раз и навсегда специфические моменты разбора в борн-совместимых оболочках (например, два режима парсинга - режим команд и режим ключевых слов, и когда включается какой, и правила квотинга в каждом, они очень просты и логичны, но совершенно не совпадают с таковыми в С или python), и уже только после этого обращаться к документации по конкретной оболочке, как к справочному руководству по конкретным фичам.

d_a ★★★★★
()
Ответ на: комментарий от sparks

Поставил date.

cat /etc/passwd | grep roman
roman:x:1000:1000::/home/roman:/usr/bin/date

Команда с другого пользователя

sudo -u roman -s

Дает взаимодействовать, на whoami выдает логин, на sudo -l выдает приглашение к вводу пароля, что я делаю не так?\

UPD Понял ошибку

NordeN
() автор топика
Последнее исправление: NordeN (всего исправлений: 2)
Ответ на: комментарий от NordeN

фактически нет, потому что нет разницы взаимодействуешь ли ты с оболочкой через файл скрипта или набираешь команды непосредственно.

По факту вся твоя озабоченность может быть отброшена это не так уж и важно как называть оболочку в любом из ее состояний.

anonymous
()
Ответ на: комментарий от paramon

Тут скорее проблемы с формулировкой вопроса, и как следствие невозможностью на него ответить как-то внятно.

Согласись, что «я где-то читал, и ничего не понял» это херня на постном масле, а не формулировка. Пусть тогда цитирует где он что читал и в каком контексте. А то получается что в голове каша, и какие-то предубеждения на основе этой каши. И поди разбери что в этой каше школьника намешано.

anonymous
()
Ответ на: комментарий от sparks

Ну, не совсем. Интерактивность это ещё и о режиме работы оболочки. Исполнять команды в интерактивном шелле можно и без взаимодействия с пользователем: bash -i -c command.

xaizek ★★★★★
()
Ответ на: комментарий от anonymous

О, так это форум только для избранных? Для тех, которые знают все и вся и могут рубить 100к зеленых в час, но вместо этого тратят свое драгоценное время на то, чтобы как-то обдеть новичка (который и не школьник, кстати) своими высерами вместо того, чтобы помочь ему разгрести его кашу.

В чем проблема? Увидел в мане что у баша есть ключи -i и -l, захотел разобраться в разнице интерактивного и логин шелла и их антиподов. Не всем удается сразу попасть на хорошее объяснение.

UPD: жду бана за тупизм) ну забань уже скорее

NordeN
() автор топика
Последнее исправление: NordeN (всего исправлений: 1)
Ответ на: комментарий от NordeN

Ты смешал в кучу два нзависимых момента, вход в систему и выполнение команды от имени другого пользователя

Если ты хочешь чтобы sudo как бэ симитировал вход пользователя, то тебе надо вот это

     -i, --login
                 Run the shell specified by the target user's password database entry as a login
                 shell.  This means that login-specific resource files such as .profile,
                 .bash_profile or .login will be read by the shell.  If a command is specified,
                 it is passed to the shell for execution via the shell's -c option.  If no com‐
                 mand is specified, an interactive shell is executed.  sudo attempts to change to
                 that user's home directory before running the shell.  The command is run with an
                 environment similar to the one a user would receive at log in.  Note that most
                 shells behave differently when a command is specified as compared to an interac‐
                 tive session; consult the shell's manual for details.  The Command environment
                 section in the sudoers(5) manual documents how the -i option affects the envi‐
                 ronment in which a command is run when the sudoers policy is in use.

sparks ★★★★
()
Ответ на: комментарий от xaizek

Сходу при выполнении двух команд не увидел отличие bash -c 'whomai' от bash -i -c 'whoami'. Чтобы понять предназначение ключа -i обязательно знать кишки ядра или перехватывать системные вызовы? Или можно как-то проще увидеть для чего он нужен

UPD возможно я там конфиги те, которые вычитываются поменяю. Какую-нибудь переменную окруженя задам, и в одном случае она будет, а в другом нет, в этом отличие?

NordeN
() автор топика
Последнее исправление: NordeN (всего исправлений: 1)
Ответ на: комментарий от sparks

Симитировать вход пользователя это просто вычитать его настройки окружения из конфигов, я правильно понял слово «имитация»?

NordeN
() автор топика
Ответ на: комментарий от NordeN

Тип того, есть порядок для шелов когда какие конфиги читать, но откуда им узнать они вперыей раз запускаются для пользователя или нет? Когда пользователь логинится, то тот же bash будет запущен с параметром –login который обяжет его прочитать и выполнить все конфиги

sparks ★★★★
()
Ответ на: комментарий от NordeN

Можно добавить в конфиг alias wmi=whoami и увидеть, что bash -c wmi не работает, в отличии от bash -ic wmi. Интерактивный режим предназначен для интерактивного взаимодействия с пользователем, он просто меняет некоторые аспекты поведения оболочки. Аналогично с логин шеллом, там немного другое поведение.

xaizek ★★★★★
()
Ответ на: комментарий от NordeN

буду дальше стараться разобраться как что устроено в linux

Вот это правильно, лучше самому во всем разобраться.

anonymous
()
Ответ на: комментарий от anonymous

И потратить на это в 5-10 раз больше времени, чем если спросить грамотное обьяснение знающих людей

NordeN
() автор топика

как проверить интерактивность шелла

Начинать надо со словаря. «Интерактивный» - синоним «диалоговый». Разница между диалоговым и автоматическим режимом очевидна? Если нет, опять таки рекомендую словарь.

anonymous
()
Ответ на: комментарий от NordeN

О, так это форум только для избранных? Для тех, которые знают все и вся и могут рубить 100к

Не беспокойтесь. Это нейроалгоритм троллингом отсеивает психически неусточивых ньюбаев и школьников. Просто IT и особенно шеллы не терпят слабаков. Мы Вас проверяли. Всё в порядке. Продолжайте спрашивать.

Администрация.

anonymous
()
Ответ на: комментарий от anonymous

Пусть тогда цитирует где он что читал и в каком контексте

А если он приведёт точные цитаты, да там маститые авторы, то местные иксперды сразу сольются с формулировкой «нинужно!» и «какая-то херня написана, 20 лет работаю одмином, ни разу это не пригодилось»

tiinn ★★★★★
()
Ответ на: комментарий от tiinn

то местные иксперды сразу сольются с формулировкой «нинужно!»

Давать определения, это точно «нинужно!». Главное понимание что к чему. Иначе «школьников» банят за тупизм, а-ля, «А почему скрипт не программа?»

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.