По сути операционная система состоит из ядра и огромного набора программ, которые предназначены для выполнения различных задач, обслуживания системы и удовлетворения потребностей пользователя. Почти все взаимодействие пользователя и операционной системы выполняется с помощью программ. Поэтому новичкам важно понять как запустить программу на Linux, что происходит во время запуска и какие есть способы запуска.
Дальше мы рассмотрим виды программ, их запуск программ на Linux различными способами и другие полезные для новичков вещи, опытным пользователям это все и так уже известно.
Содержание статьи
- Виды программ в Linux
- Запуск программ в терминале
- Запуск программ от имени другого пользователя
- Как запустить программу в фоне
- Как запустить скрипт в Linux
- Запуск программ Linux в графическом интерфейсе
- Выводы
Виды программ в Linux
Перед тем, как мы перейдем к запуску программ, нужно сначала понять что представляет из себя программа. В Linux программы отличаются от других файлов только тем, что для них установлен флаг исполняемости. Я уже подробно писал об этом в статье что такое исполняемость поэтому не буду повторяться.
Все программы можно поделить на несколько типов:
- Бинарные программы - содержат инструкции процессору уже готовые к выполнению, большинство программ находятся в таком формате, они быстрые и выполняются сразу же системой;
- Программы на байт-коде - это уже не процессорные инструкции, а инструкции определенной виртуальной машины, которая может их выполнять, без виртуальной машины такие команды не могут быть выполнены. Такие программы потребляют больше ресурсов, но тоже достаточно быстрые, их преимущество в том, что они могут выполняться без изменения везде где может работать виртуальная машина. К таким программам можно отнести программы на Java.
- Скриптовые программы - эти программы состоят из набора команд в виде обычного текста, которые выполняет специальный интерпретатор. Такие программы более медленные, но зато они проще в разработке и их код можно легко и быстро изменить.
А теперь перейдем к запуску программ.
Запуск программ в терминале
Изначально в операционных системах Unix и Linux не было графического интерфейса, поэтому программы запускались командами из терминала. Сейчас это тоже возможно и достаточно активно используется опытными пользователями. Синтаксис запуска программы выглядит таким образом:
/путь/к/файлу/программы параметры
Параметры указываются только, когда они нужны, но всегда оболочка должна знать полный путь к программе. Все что после имени программы и пробела - это параметры. Вы, наверное, уже заметили, что обычно мы не указываем полный путь при выполнении программ. Это было бы очень долго и неудобно.
Разработчики придумали обходной путь. Была создана переменная PATH, в которой хранятся все пути к папкам где обычно находятся программы - /bin, /sbin, /usr/bin, /usr/sbin и так далее. Вы можете посмотреть ее содержимое командой:
echo $PATH
Когда вы набираете имя программы система ищет исполняемый файл с таким именем по всем папкам из PATH и если находит - то выполняет. Если же такого файла нет, то выдается сообщение - command not found. Таким образом, чтобы запустить одну из системных программ достаточно набрать имя ее исполняемого файла, например:
ls
И можно передать параметры после пробела:
ls /
Когда программа находится не в этих каталогах, нужно указать к ней полный путь:
/usr/local/bin/ls1
Если же вы хотите запустить программу через терминал ubuntu, которая находится в текущей папке, то ситуация будет немного другой. Система выполняет только поиск по папкам из переменной PATH, в текущей директории она не ищет. Поэтому, если вы наберете имя исполняемого файла, то получите ошибку. Нужно указывать полный путь, как вы помните путь к текущей папке будет ./:
./helloworld
Иногда возникает необходимость передать программе, какие-либо особые переменные окружения. Например, переменная EDITOR указывает какой текстовый редактор нужно использовать по умолчанию. Вы можете указать имя переменной и ее значение перед именем команды используя синтаксис:
имя_переменной=значение команда
Например:
EDITOR=nano visudo
По умолчанию эта команда открывает настройки утилиты sudo в редакторе Vim, но с этой переменной окружения настройки откроются в редакторе nano.
Запуск программ от имени другого пользователя
Вы уже знаете как запустить программу в терминале linux, а что насчет других пользователей? В Windows достаточно часто используется запуск программ от имени администратора чтобы программа могла получить больше прав доступа в системе. В Linux для этого используется утилита sudo. Ее имя можно расшифровать как switchuserdo - изменить пользователя и выполнить. По умолчанию утилита выполняет команду от имени суперпользователя root:
sudo команда
sudo whoami
Но с помощью опции -u можно выполнить программу от имени любого пользователя, зарегистрированного в системе:
sudo -u имя_пользователя команда
sudo -u postgres whoami
Команда whoami (кто я) выводит имя текущего пользователя.
Как запустить программу в фоне
Иногда возникает необходимость запустить долго выполняющуюся программу в терминале так, чтобы она не мешала дальше работать. Для этого можно использовать запуск программы в фоновом режиме linux:
имя_программы &
Например:
dd if=/dev/zero of=~/file count=100000 &
Система выведет PID, уникальный идентификатор программы, который вы потом можете использовать чтобы закрыть ее командой kill:
kill 18110
Как запустить скрипт в Linux
Мы уже говорили, что программы делятся на бинарные и интерпретируемые. Раньше мы говорили только про бинарные программы. Для запуска интерпретируемых нужен непосредственно интерпретатор, к таким программам относятся написанные на таких языках, как Java, Python, Perl, Ruby, PHP, NodeJS и многих других. Синтаксис запуска такой программы отличается:
интерпретатор /путь/к/файлу/программы параметры
Разные интерпретаторы ведут себя по разному, поэтому лучше сразу указывать полный путь к программе. Python обычно подхватывает скрипты из текущей папки без указания полного пути:
python hellowrld.py
А Java программы нужно запускать так:
java -jar program.jar
Для файлов интерпретируемых программ флаг исполняемости необязательный, поскольку они передаются в виде параметра основной программе. Только Bash скрипты составляют исключение. Вы можете запустить скрипт интерпретатором:
bash script.sh
Или же просто набрать путь к скрипту:
./script.sh
Оболочка сама определяет свои скрипты по флагу исполняемости и выполняет их. Если флаг исполняемости не установлен, то его стоит добавить:
sudo chmod u+x ./script.sh
Поэтому то и для большинства интерпретируемых программ созданы простые sh скрипты которыми их можно быстро запустить.
Запуск программ Linux в графическом интерфейсе
Намного удобнее запускать программы через графический интерфейс. Если консольные программы так запускать невозможно, то для всех графических утилит существуют ярлыки, которые вы можете найти в главном меню системы:
Кроме того, вы можете запустить программу из файлового менеджера, двойным кликом мышью, но тогда для нее обязательно должен быть установлен флаг исполняемости.
Точно так же работает запуск скриптов в графическом интерфейсе. Вы можете найти все ярлыки из меню в каталоге /usr/share/applications/. Любую программу можно запустить двойным щелчком отсюда. Но давайте посмотрим что находится внутри ярлыка, для этого откройте его в текстовом редакторе:
Кроме всего прочего, в строке Exec указана команда, которая выполняет запуск программы linux, когда вы делаете двойной клик на ярлыке. Вы можете взять один из существующих ярлыков и сделать на его основе свой. Здесь указано просто имя программы. Но важно заметить, что лучше указывать полный путь в таких местах, как ярлыки, скрипты, cron и так далее это уменьшит количество ошибок, поскольку вы не можете знать проверяет ли система в этом случае PATH или ищет программу только в текущем каталоге. Теперь вы знаете все о том как запустить программу на linux.
Выводы
В этой статье мы рассмотрели как запустить программу через терминал ubuntu или в других дистрибутивах Linux. Несмотря на то, что это кажется очень простой темой, тут есть свои интересные моменты, которые могут быть полезны. Но вы о них уже знаете. Если у вас остались вопросы, спрашивайте в комментариях!
"sduo -u postgres whoam" - исправьте здесь ошибку в sudo.
Статья легко читается, спасибо.
Можно добавить вариант запуска "долгоиграющих" скриптов.
$./script.sh | at now
Что обозначает %F в примере с ярлыком выше (audacity %F), или %u в команде "firefox %u" при запуске firefox?
> По умолчанию утилита выполняет команду от имени суперпользователя root:
sudo команда
команда sudo выполняет команду не от имени суперпользователя root, а с правами root.
Остается окружение текущего пользователя.
От имени суперпользователя надо выполнить команду
sudo -s команда
Скажите пожалуйста, как реализовать следующее.
У меня есть версия программы портабл, на зашифрованном диске.
Мне нужно запускать несколько копий этой программы с разными параметрами.
Раньше я делал это просто разместив ярлыки на рабочем столе (каждый со своим набором параметров).
Но сейчас есть идея скрыть эти ярлыки запуска на то же зашифрованный диск, чтобы было минимум следов использования программы в системе.
Получается, нужно создать ярлыки в папке. Но как их создать в папке? Простое копирование с рабочего стола в папку ничего не дает - ярлык превращается просто в текстовый файл.
Как быть?
Используйте bash скрипты. Если скрипту дать права на выполнение, его можно будет запускать двойным кликом мышкой по файлу.
Здравствуйте. Я так сделал скрипт, но у меня он сразу не запускается, а выходит окошко с кнопками Запустить в терминале, показать, отменить, запустить
Как понимать, когда программа запускается таким образом (с точкой) из терминала:
programname .
Точка - скорее всего, текущая директория в этом случае.
Или я дурак или вы слишком умные! Уже месяц, с утра до ночи, читаю статьи и смотрю Ютуб и нигде не нашел ответ! Уже отбило все охоту переходить на Линукс. Объясните мне начинающему, доступным языком, как открыть скачанные при помощи терминала программы ( фото,видео редакторы, браузеры...). Скачались нормально и что дальше??? Как открыть? Какой командой? Если не трудно напишите пример. Заранее благодарен!
Ну вроде как в меню должен значок появиться, через него и открывать:)
Скажите, пожалуйста, а как запустить файл через ссылку на него из командной строки? При наборе ./имя_ссылки - не найден файл или директория.
Попробуйте дать ссылке права на выполнение.
Статья для программистов. Простому пользователю не дала ничего. Как не знал, как открыть скачанные программы, так и не знаю!!!
Как запустить из терминала программу с .so библиотекой?
Путь к папке с библиотекой можно указать через переменную окружения LD_LIBRARY_PATH. Более подробно есть в инструкции по компиляции wine из исходников, там они как раз рассказывали как запускать Wine собранный в папке. Ссылку сейчас не найду.
Спасибо за статью! Сам с недавних пор перешел на Линукс, изучаю. Материал огонь!
Если в разных каталогах (в том числе перечисленных в path) - есть разные программы с одинаковым именем - то как понять, какая из них запустится, если, находясь, скажем, в домашнем каталоге - запускаешь её по имени исполняемого файла?
методика подачи материала неудовлетворительная , непоследовательная , предыдущее разниться с последующим это касается скриншот примеров неужели трудно мух отделить от котлет и объяснить толково и доходчиво как в линукс применительно к астре орёл запустить программу не с репозитария согласен с Владимиром : Статья для программистов. Простому пользователю не дала ничего. Как не знал, как открыть скачанные программы, так и не знаю!!! Нет плохих учеников есть плохие учителя возможно обидел не принимай близко к сердцу с уважением Александр
Админ. Как и предыдущий читатель статьи по имени Владимир спрашиваю и я: - ДЛЯ КОГО СТАТЬЯ. Тема называется "Как запустить программу на Linux?" Подобные вопросы задают не знающие. Знающим спрашивать нет необходимости. Может статья и познавательна (с Вашей точки зрения). Но мне (и как я понял многим) абсолютно ничего не понятно. КАК запустить программу, которая запускается только в терминале, путь к которому не известен.
Всё то, что написано вверху не приводит ни к чему.
Для примера, программа youtube-dl. Как я понял эта программа запускается через Python. Python есть, Python pip есть, youtube-dl установлен с файлового менеджера. Но терминал не находит эту программу, а в некоторых случаях пишет, что команда не найдена. Поэтому ещё раз предыдущий вопрос "Как запустить программу?"
Для кого всё это??? Ищешь Нужную информацию, чтобы изучить Linux, а попадаешь на вот такие стены, как эта статья. Скорее всего остальные темы, на этом сайте, такие же.
MASAMA1 АПРЕЛЯ, 2021 Ответить
Для кого всё это???
Да типо попонтоваться, - Глядите, какой я умный...
Доброго времени суток, уважаемые!
Чтобы запустить скаченную программу в терминале . Нужно набрать ИМЯ_ПРОГРАММЫ. Например : $ cmus, где cmus имя программы.
А как можно запустить терминал с параметром который сразу выполнит команду?
Например мне нужно чтобы выполнялось отключение тачпада xinput set-prop 13 "Device Enabled" 0 и желательно чтобы после выполнения команды терминал не надо было вручную закрывать.
Открыть терминал и выполнить команду можно с помощью опции -e:
gnome-terminal -e 'bash -c "echo losst; bash"'
А мне всё понятно, хоть я и новичок. Спасибо автору за статью.
Может я не в тему, но...
Я установил программу локального перевода, называется "Glate" и добавил ее в автозагрузку. НО она не хочет запускаться. Появляется сообщение: " не нахожу системный трей ". При этом, программа запускается из командной строки и просто по клику на ярлыке.
Кто подскажет, где искать причину? и как заставить программку запускаться при старте системы?
У меня UBUNTU-23.10
Удивительно содержательная статья. Никакой конкретики. Даже не понятно, что ты искал командой РАТН? А какое отношение имеет команда ls к снимкам экрана?
Полностью согласен с предыдущими коментами Александра, masama. - статью ни о чем.