После прохождения процедуры аутентификации пользователя система запускает экземпляр командного интерпретатора, который обеспечивает диалоговый режим человека и машины. В качестве интерпретатора командной строки в Linux в основном используется /bin/bash (bash – Bourne Again Shell – «рождённый заново шелл», что является реализацией Unix shell, написанной в 1987 г. Brian Fox для GNU Project).
Небольшое число команд реализовано в самой оболочке, поэтому они называются внутренними. К ним относятся такие команды, как fg, bg, alias, limits, history, echo, jobs и другие. Подавляющее большинство команд являются внешними, и имя введенной команды считается именем какого-либо исполняемого файла.
Исполняемые файлы располагаются в нескольких каталогах: /bin, /sbin, /usr/bin, /usr/sbin и др., хотя запустить процесс можно из любого каталога, на который у пользователя есть права чтения и поиска. Вызывать команды можно, задавая абсолютный путь к ее исполняемому файлу либо используя «короткое» имя файла.
Пример сборки/запуска С++ приложения с помощью make в linux
Найти нужный файл по его короткому имени программе-оболочке помогает переменная окружения PATH. В ней обычно поименованы каталоги /bin, /sbin, /usr/bin, /usr/local/bin, разделенные двоеточием. Для администратора в этом перечне должен быть исключен текущий каталог, обозначаемый одной точкой «.
», поскольку он может привести к случайному запуску опасных программ–двойников. В базовых настройках интерпретатора такой запуск исключен. Тем не менее администратору всегда нужно быть бдительным, и переменные окружения его командной оболочки не должны оставаться без внимания.
Команда обычно состоит из трех частей:
- имени самой команды;
- опций;
- операндов (аргументов).
Источник: studfile.net
Чему эквивалентен запуск программы с в linux
В этой главе мы рассмотрим работу с системой Linux в текстовом режиме, другими словами, с консоли или терминала. Начинающему пользователю может казаться, что он никогда не будет работать в этом режиме, поскольку существует графический режим. Однако это мнение ошибочно, ибо многие действия оказывается быстрее и удобнее выполнять именно в текстовом режиме.
Даже находясь в графическом режиме, вы часто будете открывать окно эмулятора терминала, и выполнять необходимые действия в этом окне. Ведь текстовый режим ОС Linux — это совсем не то, что текстовый режим однозадачной MS-DOS. Поскольку Linux — это многозадачная ОС, уже в текстовом режиме обеспечивается возможность работы в нескольких окнах (о переключении терминалов мы рассказали в разд. 3.3). А для редактирования простого текста или html-файла вовсе не обязательно запускать достаточно тяжеловесную и медленную (особенно на «слабых» компьютерах) графическую оболочку.
5.1. Что такое оболочка?
Как уже упоминалось выше, хотя мы часто говорим, что «пользователь работает с операционной системой», фактически это не верно, поскольку на деле взаимодействие с пользователем организует специальная программа. Существует два вида таких программ — оболочка, или shell , для работы в текстовом режиме (интерфейс командной строки) и графический интерфейс пользователя GUI (Graphical User Interface), организующий взаимодействие с пользователем в графическом режиме.
Инструкции Linux — #17 урок. Запуск любых исполняемых файлов
Сразу надо сказать, что в принципе любая программа в Linux может быть запущена как через оболочку (если запущен X-сервер, см. гл. 6), так и через графический интерфейс пользователя. Запуск программ из оболочки эквивалентен (двойному) щелчку мышкой по иконке программы в GUI.
Передача аргументов программе в текстовом режиме аналогична тому, что мы «бросаем» что-то на иконку программы в графическом. Но, с другой стороны, некоторые программы не приспособлены для запуска через GUI и, соответственно, могут быть исполнены, только из командной строки.
Собственно говоря, название «оболочка» не выдерживает критики. На мой взгляд правильнее было бы называть эту программу командным процессором, как называют command.com в MS DOS, или интерпретатором команд. Но так уж повелось во всех UNIX-системах, что интерпретатор команд для текстового режима называют оболочкой.
Когда-то (в первых UNIX-системах) это была программа с именем sh , которое было сокращением от shell. Потом были разработаны несколько ее улучшенных вариантов, в частности, Bourne shell — расширенная версия sh , написанная Стивом Борном (Steve Bourne). В рамках проекта GNU (проект Р.Столлмана по разработке свободного ПО, см.
www.gnu.org) была создана оболочка bash , название которой расшифровывается как Bourne-again shell, т. е. «снова оболочка Борна». По-английски в этом названии просматривается еще и игра слов, связанная с тем, что Bourne звучит как borne (рождаться, рожденный), и получается «заново рожденная shell». Оболочка bash была написана Брайеном Фоксом (Brian Fox — основной разработчик) и Четом Рэми (Chet Ramey). Именно bash мы и будем далее рассматривать, и всюду ниже, где говорится об оболочке вообще, вы смело можете считать, что речь идет о bash .
Сама по себе оболочка bash не выполняет никаких прикладных задач. Но она обеспечивает выполнение всех приложений: нахождение вызываемых программ, их запуск и организацию ввода/вывода. Кроме того, оболочка отвечает за работу с переменными окружения и выполняет некоторые преобразования (подстановки) аргументов.
Но главное свойство оболочки, которое делает ее мощным инструментом пользователя — это то, что она включает в себя простой язык программирования. Как давно доказано в математике, любой алгоритм можно построить из пары-тройки основных операций и одного условного оператора. Реализацию условных операторов (а также операторов цикла) и берет на себя оболочка.
Она использует все остальные утилиты и программы (и те, которые имеются в составе операционной системы, и те, что устанавливаются отдельно) как базовые операции поддерживаемого ею языка программирования, обеспечивает передачу им аргументов, а также передачу результатов их работы другим программам или пользователю. В результате получается очень мощный язык программирования. И в этом основная сила и одна из существенных функций оболочки.
Прежде чем читать дальше этот раздел, вернитесь ненадолго к разд. 3.4 и еще раз просмотрите основные комбинации клавиш, используемые для управления вводом в текстовом режиме. Вспомните по крайней мере то, как пользоваться клавишами +, +, и клавишами со стрелками.
Предыдущий раздел | Оглавление | Следующий раздел |
Источник: citforum.ru
Как запустить внешнюю программу из текущей на языке С linux
Суть проблемы: есть два взаимодействующих сервера. Первый открывает и биндит порты, второй коннектится к ним. Запускаются сейчас в отдельных терминалах. Как можно из первого сервера открыть и забиндить порты, а потом запустить второй? Пробовала fork, и внутри вот так использовать execl: внутри функции open_port
if(fork() == 0)< // Child process execl(«python3», «my_second_server.py», 0); exit(0); >else < // Parent process code for connection and bind >
Но кажется второй так и не запустился..
Отслеживать
задан 1 мар 2019 в 14:04
1 1 1 бронзовый знак
Смотрим прототип функции: execl(, arg0, file, arg1, . (char *)0) . shell path = «python3» — вопросов нет. arg0 = «python3» полный путь исполняемого файла . file = «my_second_server.py» — скармливаем скрипт питону. Получаем execl(«python3», «python3», «my_second_server.py», (char *)0);
1 мар 2019 в 14:20
execl нужно передавать полный путь до исполняемого файла (например, /usr/bin/python3 ), для поиска имени в PATH подобно оболочке используй execlp() , также нулевым аргументом должно идти имя программы, например, python3 . кроме того удостоверься, что буть к самому скрипту правильный. и, в третьих, добавляй контроль ошибок к каждому системному вызову — оно поможет определить, в чём проблема.
Источник: ru.stackoverflow.com