Последнее изменение: 01.05.2019

Сегодня в статье разберем пример , как можно запустить какую либо программу из терминала в дистрибутивах Linux.

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

Бывает так, что после установки программы, она не отображается в меню и естественно не может быть открыта обычным способом.

Запускаем программу через терминал

Чтобы запустить программу из терминала, достаточно ввести название команды на английском языке в нижнем регистре (прописными буквами) и нажать Enter. Для примера введите в терминал команду:

Должно открыться окно с часами:

Но если вы закроете терминал, то закроется и окно с программой. Чтобы этого не произошло, нужно после названия программы ввести разделительный символ «&» и команду на закрытие терминала — exit, следующим образом:

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

Чтобы ввести программы, состоящие из нескольких слов, например такие как: Центр приложений — software center; Дополнительные настройки — gnome tweak tool; Ubuntu Tweak — ubuntu tweak и т.п., необходимо чтобы в названии команды не было пробелов между словами. В данном случае необходимо вводить дефис (маленькую чёрточку) между словами, т.е. команды должны быть монолитными на открытие приложений в терминале.

Скопируйте и выполните следующие команды на открытие данных приложений:

Но данные приложения закроются с закрытием терминала. А приложения введённые с дополнительными параметрами будут продолжать работать, хотя терминал с открытием приложения, закроется:

Можно открыть несколько приложений одной командой, объединив их через разделительный знак «&»:

Если есть вопросы, то пишем в комментариях и не забываем проголосовать за статью.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

По сути операционная система состоит из ядра и огромного набора программ, которые предназначены для выполнения различных задач, обслуживания системы и удовлетворения потребностей пользователя. Почти все взаимодействие пользователя и операционной системы выполняется с помощью программ. Поэтому новичкам важно понять как запустить программу на Linux, что происходит во время запуска и какие есть способы запуска.

Дальше мы рассмотрим виды программ, их запуск программ на Linux различными способами и другие полезные для новичков вещи, опытным пользователям это все и так уже известно.

Виды программ в Linux

Перед тем, как мы перейдем к запуску программ, нужно сначала понять что представляет из себя программа. В Linux программы отличаются от других файлов только тем, что для них установлен флаг исполняемости. Я уже подробно писал об этом в статье что такое исполняемость поэтому не буду повторяться.

Все программы можно поделить на несколько типов:

  • Бинарные программы — содержат инструкции процессору уже готовые к выполнению, большинство программ находятся в таком формате, они быстрые и выполняются сразу же системой;
  • Программы на байт-коде — это уже не процессорные инструкции, а инструкции определенной виртуальной машины, которая может их выполнять, без виртуальной машины такие команды не могут быть выполнены. Такие программы потребляют больше ресурсов, но тоже достаточно быстрые, их преимущество в том, что они могут выполняться без изменения везде где может работать виртуальная машина. К таким программам можно отнести программы на Java.
  • Скриптовые программы — эти программы состоят из набора команд в виде обычного текста, которые выполняет специальный интерпретатор. Такие программы более медленные, но зато они проще в разработке и их код можно легко и быстро изменить.

А теперь перейдем к запуску программ.

Запуск программ в терминале

Изначально в операционных системах Unix и Linux не было графического интерфейса, поэтому программы запускались командами из терминала. Сейчас это тоже возможно и достаточно активно используется опытными пользователями. Синтаксис запуска программы выглядит таким образом:

/путь/к/файлу/программы параметры

Параметры указываются только, когда они нужны, но всегда оболочка должна знать полный путь к программе. Все что после имени программы и пробела — это параметры. Вы, наверное, уже заметили, что обычно мы не указываем полный путь при выполнении программ. Это было бы очень долго и неудобно.

Разработчики придумали обходной путь. Была создана переменная PATH, в которой хранятся все пути к папкам где обычно находятся программы — /bin, /sbin, /usr/bin, /usr/sbin и так далее. Вы можете посмотреть ее содержимое командой:

Когда вы набираете имя программы система ищет исполняемый файл с таким именем по всем папкам из PATH и если находит — то выполняет. Если же такого файла нет, то выдается сообщение — command not found. Таким образом, чтобы запустить одну из системных программ достаточно набрать имя ее исполняемого файла, например:

И можно передать параметры после пробела:

Когда программа находится не в этих каталогах, нужно указать к ней полный путь:

Если же вы хотите запустить программу через терминал ubuntu, которая находится в текущей папке, то ситуация будет немного другой. Система выполняет только поиск по папкам из переменной PATH, в текущей директории она не ищет. Поэтому, если вы наберете имя исполняемого файла, то получите ошибку. Нужно указывать полный путь, как вы помните путь к текущей папке будет ./:

Иногда возникает необходимость передать программе, какие-либо особые переменные окружения. Например, переменная EDITOR указывает какой текстовый редактор нужно использовать по умолчанию. Вы можете указать имя переменной и ее значение перед именем команды используя синтаксис:

имя_переменной = значение команда

По умолчанию эта команда открывает настройки утилиты 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=

Система выведет PID, уникальный идентификатор программы, который вы потом можете использовать чтобы закрыть ее командой kill:

Как запустить скрипт в Linux

Мы уже говорили, что программы делятся на бинарные и интерпретируемые. Раньше мы говорили только про бинарные программы. Для запуска интерпретируемых нужен непосредственно интерпретатор, к таким программам относятся написанные на таких языках, как Java, Python, Perl, Ruby, PHP, NodeJS и многих других. Синтаксис запуска такой программы отличается:

интерпретатор /путь/к/файлу/программы параметры

Разные интерпретаторы ведут себя по разному, поэтому лучше сразу указывать полный путь к программе. Python обычно подхватывает скрипты из текущей папки без указания полного пути:

А Java программы нужно запускать так:

java -jar program.jar

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

Или же просто набрать путь к скрипту:

Оболочка сама определяет свои скрипты по флагу исполняемости и выполняет их. Если флаг исполняемости не установлен, то его стоит добавить:

sudo chmod u+x ./script.sh

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

Запуск программ Linux в графическом интерфейсе

Намного удобнее запускать программы через графический интерфейс. Если консольные программы так запускать невозможно, то для всех графических утилит существуют ярлыки, которые вы можете найти в главном меню системы:

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

Точно так же работает запуск скриптов в графическом интерфейсе. Вы можете найти все ярлыки из меню в каталоге /usr/share/applications/. Любую программу можно запустить двойным щелчком отсюда. Но давайте посмотрим что находится внутри ярлыка, для этого откройте его в текстовом редакторе:

Кроме всего прочего, в строке Exec указана команда, которая выполняет запуск программы linux, когда вы делаете двойной клик на ярлыке. Вы можете взять один из существующих ярлыков и сделать на его основе свой. Здесь указано просто имя программы. Но важно заметить, что лучше указывать полный путь в таких местах, как ярлыки, скрипты, cron и так далее это уменьшит количество ошибок, поскольку вы не можете знать проверяет ли система в этом случае PATH или ищет программу только в текущем каталоге. Теперь вы знаете все о том как запустить программу на linux.

Выводы

В этой статье мы рассмотрели как запустить программу через терминал ubuntu или в других дистрибутивах Linux. Несмотря на то, что это кажется очень простой темой, тут есть свои интересные моменты, которые могут быть полезны. Но вы о них уже знаете. Если у вас остались вопросы, спрашивайте в комментариях!

Некоторые приложения с графическим интерфейсом запускаются корректно через командную строку терминала, но некоторые — нет, и они заставляют терминал ждать завершения приложения. Даже тогда некоторые не «выпускают» командную строку.

Таинственный суффикс амперсанда & , кажется, заставляет терминал переводить процесс в фоновый режим (но я не уверен, что там происходит).

Есть ли способ запустить приложение через Терминал, чтобы не было эффекта «зависания», как запуск чего-либо через Alt + F2 ? [113 ]

Я бы хотел, чтобы командная строка снова была доступна немедленно, без чего-либо еще в фоновом режиме и печати в терминале.

11 ответов

Что касается других вещей, то, что сказали другие люди, тоже будет работать. Я фанат nohup . Но если вам нужен терминал, который вы можете отсоединить, а затем подключить к нему снова, вы можете посмотреть на screen .

  1. Запустите его в терминале, а затем запустите что-то, что продолжает выводить данные. Я использую сервер разработки Django, но irssi или даже watch uptime были бы хорошими примерами.
  2. Убейте терминал и начните новый.
  3. Запустите screen -r и BOOM, вы вернулись.

screen намного больше, и вы можете комбинировать его с byobu для лучшего восприятия терминала. Читайте вокруг.

Загадочный амперсанд "& amp;" суффикс, кажется, заставляет терминал переводить процесс в фоновый режим . (но я не уверен, что там происходит).

Да, и часто это то, что вы хотите. Если вы забыли использовать & amp ;, вы можете приостановить программу с помощью ctrl-z, а затем поместить ее в фоновом режиме с помощью команды bg — и продолжать использовать эту оболочку.

Процесс ‘stdin, stdout и stderr все еще подключен к терминалу; вы можете перенаправить их из / в / dev / null или из любого другого файла (например, сохранить где-нибудь журнал вывода), по желанию:

Вы можете увидеть процесс в заданиях, вернуть его на передний план (команда fg) и отправьте ей сигналы (команда kill).

Некоторые графические программы отсоединяются от терминала; в этом случае, когда вы запускаете команду «обычно», вы заметите, что она запускает графическую программу и «выходит».

Вот короткий скрипт , вы можете поместить его в

/ bin , который я назвал runbg:

Я смотрю программа ($ prog) перед перенаправлением, чтобы можно было сообщать об ошибках в ее поиске. Запустите его как «runbg your-command args . »; вы все еще можете перенаправить stdout / err в файл, если вам нужно сохранить результат где-нибудь.

За исключением перенаправлений и обработки ошибок, это эквивалентно ответу htorque .

Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & amp;!.

Это сработало для меня:

Как полагали многие, стоит подумать о nohup. Но nohup все еще остается открытым на терминале и отображает активность программы на терминале, что раздражает. Вы можете просто закрыть терминал после этого, чтобы избежать этого. Я обнаружил очень простой обходной путь, который я использую.

И это все. Он открывает Gedit и закрывает терминал при запуске Gedit. Поскольку gedit сейчас не связан с терминалом, он остается активным.

Откройте терминал, введите экран , введите команду, которую хотите запустить, закройте терминал. Программа должна продолжаться в сеансе GNU Screen .

nohup — это программа, запускающая данную команду с игнорируемыми сигналами зависания, так что команда может продолжить работу в фоновом режиме после завершения родительского процесса. См. man-страницу

Предположим, что gedit — это программа, которую вы хотите запускать отдельно (она называется «отреченный», «распутанный», «разъединенный»). Существуют различные способы, в зависимости от того, что именно вы хотите сделать:

Программа уже запущена

Disown:

disown -h — это путь, если вы хотите это сделать с уже запущенной программой (т. е. если вы забыли nohup ). Сначала вы должны остановить его, используя Ctrl + Z . Затем вы можете вставить в скобу, используя bg [jobId] (например, bg 1 ). Вы получаете список запущенных заданий с их идентификатором, используя jobs . После этого вы можете отсоединить его от терминала, используя disown -h %[jobId] . Пример терминальной сессии:

Программа еще не запущена

nohup

nohup не всегда присутствует на всех машинах. Если вы знаете, что хотите разъединить заранее, вы должны использовать:

Возможно, вы захотите перенаправить вывод оболочки, а ваша программа — источник псевдо-ввода, поэтому: nohup ./myprogram > foo.out 2> bar.err . Вы хотите перенаправить вывод, чтобы он не раздражал его или использовал его позже. Нулевой ввод может помочь предотвратить взлеты в ssh и тому подобное.

Subshell:

Вы можете добиться аналогичного эффекта с помощью

Скобки открывают новую подоболочку для запуска gedit. >/dev/null 2>&1 перенаправляет вывод оболочки в никуда (подавляя выход). И & в конце ставит процесс на задний план.

Терминальное мультиплексирование

Также терминальное мультиплексирование с использованием экрана или byobu . Вы в основном запускаете программу в собственном терминале. Я действительно могу рекомендовать Бёбу и по другим причинам. Ниже приведен список сочетаний клавиш, которые могут пригодиться для ваших первых шагов:

  • F2 Создать новое окно
  • F3 Перейти к следующему окну
  • F4 Перейти к предыдущему окну
  • F6 Отделить из сеанса и выхода из системы
  • Shift-F6 Отключиться от сеанса, но не выходить из системы
  • F7 Войдите в режим прокрутки / поиска [ 1132]
  • Ctrl-F5 Переподключить любые сокеты или агенты SSH / GPG
  • Shift-F2 Разделить экран по горизонтали
  • Ctrl-F2 Разделить экран по вертикали
  • Shift-F3 Переместить фокус на следующее разделение
  • Shift-F4 Переместить фокус на предыдущее разделение
  • Shift-F5 Свернуть все разделы
  • F5 Обновить все уведомления о состоянии
  • F8 Переименовать текущее окно
  • F9 Запустить ch Меню настройки Byobu
  • F12 Клавиша Escape экрана GNU
  • Alt-Pageup Прокрутка назад по истории этого окна [1144 ] Alt-Pagedown Прокрутка вперед по истории этого окна
  • Ctrl-a -! Включение или выключение всех сочетаний клавиш Byobu

[ 1126] Демон at и другие

at — это полезный маленький инструмент для запуска команды в запланированное время. Можно «неправильно использовать», чтобы отсоединить команду от оболочки:

Также вы можете посмотреть на setsid и start-stop-daemon , но других методов должно быть достаточно.