Linux для системных администраторов Windows: Как запускать приложения, работающие под Linux

Запуск Linux-приложений из командной строки и с рабочего стола

Основное предназначение Linux®-сервера – это исполнение приложений. Вне зависимости от того, запускается ли ваше новое приложение с рабочего стола или из командной строки, эта статья поможет применить ваш опыт в Microsoft® Windows® для быстрого изучения различных аспектов запуска приложений в ОС Linux®.

Трейси Бост, консультант и преподаватель, Свободный писатель

Author photo - Tracy BostТрейси Бост - опытный разработчик программного обеспечения и проектировщик систем. Он специализируется на интеграции корпоративных приложений. Был сопредседателем рабочей группы по бизнес-правилам Организации по поддержке стандартов ипотечной отрасли (MISMO) и сопредседателем секции промышленных стандартов на симпозиуме RuleML2010. Работал в различных отраслях, в том числе в ипотеке, недвижимости и некоммерческом секторе.



18.10.2012

Предварительные требования

Чтобы извлечь максимальную пользу от этой статьи, вы должны обладать опытом работы с оконными приложениями в среде Windows. Я также предполагаю, что читатель уже обладает базовыми знаниями об использовании рабочего стола Linux. Желательно, чтобы у вас имелась работающая Linux-система, на которой можно было бы исследовать идеи и примеры, представленные в этой статье.


Обзор

Другие статьи из этой серии

Познакомьтесь с другими статьями из серииLinux для системных администраторов Windows.

Иногда первоначальный запуск приложения на ОС Linux требует небольших дополнительных усилий. Некоторые приложения, например, серверные службы, могут не устанавливаться в качестве служб, и их придется запускать из командной строки. Для учетной записи пользователя, которая будет использоваться для запуска приложений, необходимо установить полномочия на запуск файлов приложений (флаг x).


Запуск приложений из пространства пользователя

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

Доступ к пространству ядра по умолчанию имеет только пользователь root. В ОС Linux пользователь root – это суперпользователь, которого можно сравнить с учётной записью администратора в Windows. Запуск приложений от имени пользователя root может представлять угрозу с точки зрения безопасности и поэтому не рекомендуется.

Для запуска многих серверных служб требуются полномочия root. Однако после того как служба запущена, пользователь root обычно передает её под контроль учетной записи службы. Технически, учетные записи служб в Linux – это обычные учетные записи пользователей. Их основное отличие заключается в том, что учетные записи служб применяются только для запуска конкретной службы и не предназначены для того, чтобы кто-то использовал их для входа в систему.


Настройка полномочий

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

В большинстве дистрибутивов Linux параметр umask равен 022, что означает, что по умолчанию для нового файла установлены полномочия 644. Эти числовые значения расшифровываются как – 4 – чтение, 2 – запись, 1 – исполнение. Так что загрузка приложения с полномочиями по умолчанию - 644 - говорит о том, что владелец файла обладает правами на чтение и запись по отношению к нему, в то время как группа, владеющая файлом, и все остальные пользователи обладают правами только на чтение.

Чтобы предоставить всем пользователям права на запуск файла, необходимо воспользоваться командной chmod a+x. Параметр а означает все (all), символ + - означает добавить (add), а x означает выполнить (execute). Кроме того, если приложение — это серверная служба, необходимо убедиться, что только авторизованные учетные записи могут использоваться для запуска службы.

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

Если говорить более конкретно, то также можно настроить список управления доступом (access control list - ACL) с правами для исполняемого файла, что позволит определенному пользователю или группе запускать приложение. Используйте утилиту setfacl для установки прав с помощью ACL.

Для приложений, которые должны запускаться от имени пользователя root, например, как серверных служб, доступно несколько вариантов. В таблице 1 приведены различные способы, позволяющие пользователям запускать сервисные службы, требующие полномочий root.

Таблица 1. Таблица 1. Варианты запуска приложений, требующих полномочий root
СпособОписание
от имени пользователя rootНе рекомендуется для серверных служб. Допускается для приложений, когда пользователь уже знает пароль root и возможная компрометация приложения не является проблемой.
setUIDНе рекомендуется по соображениям безопасности. Команда setUID позволяет обычному пользователю запускать файлы от имени другого пользователя, например, root.
sudoОбщеизвестная и общепринятая практика. Команда sudo предоставляет пользователю или группе права на запуск файла, который в другом случае потребовал бы полномочий root. При этом пользователю не требуется знать пароля root.
учетная запись обычного пользователя с правом на работу с файламиУстановить разрешение на запуск файла для пользователя-владельца, группы-владельца или всем остальным. Это стандартный способ предоставления прав для запуска приложения пользователям, которым не требуются полномочия root.
учетная запись обычного пользователя с полномочиями в ACLРеже используемый, но также жизнеспособный способ, когда нежелательно давать пользователю права через sudo или изменять права на доступ к файлу. Применив к файлу команду setfacl, можно предоставить конкретному пользователю или группе пользователей право на запуск данного файла.

Запуск приложения из командной строки

Запуск приложений из командной строки является стандартной операцией в администрировании Linux-серверов. Многие приложения содержат сценарии оболочки (аналогичные .bat-файлам в Windows), которые запускают приложения и выполняют другие задачи, например, настройку переменных среды и передачу процессов другим пользователям. Например, для работы приложения может быть необходима виртуальная Java™-машина (JVM). В данном случае сценарии оболочки настраивают соответствующие переменные среды, а затем выполняют команду java для запуска JAR-архива или class-файла. Аналогично обстоит дело и для приложений, использующих Perl, Python и даже C# (да, скомпилированные C#-приложения можно запускать под Linux!).

Обычные учетные записи и команды, требующие полномочий root

Обратите внимание, что в листингах, приведенных в этой статье, каждая команда начинается с символа $ или #. Эти символы в оболочках Linux имеют разное значение. Символ $ в приглашении оболочки означает, что пользователь обладает стандартными полномочиями, а символ # говорит о том, что пользователь обладает полномочиями root (администратора). Для запуска команд, которые приведены в листингах с использованием символа #, вам потребуется sudo-доступ или прямой доступ к учетной записи root.

Стандартный способ запуска приложений из командной строки или приглашения оболочки — это команда ./. Вводя в Linux точку (.) и прямую черту (/), вы сообщаете среде, что хотите запустить файл в качестве исполняемого процесса. Например, чтобы запустить исполняемый файл myapp, используется команда ./myapp. Также вы можете указать перед именем файла интерпретатор языка, на котором он был написан, например:

  • sh
  • php
  • python
  • perl
  • java

Часто упакованные приложения уже содержат сценарии оболочки для настройки переменных среды и предоставляют путь к интерпретатору необходимого языка с помощью символов #!, например, #!/usr/bin/python. Я рекомендую ознакомиться и с подобным подходом.

В листинге 1 приведен стандартный сценария catalina.sh, используемый для запуска сервера приложений Apache Tomcat с помощью ./ подхода. Затем для запуска сервера используется sh-подход. Так как в данном случае используется стандартный порт 8080, то никаких специальных изменений для запуска службы от имени обычного пользователя вносить не потребуется.

Листинг 1. Листинг 1. Запуск приложения из командной строки
$ ./catalina.sh start 
Using CATALINA_BASE:   /opt/apache-tomcat-7.0.26
Using CATALINA_HOME:   /opt/apache-tomcat-7.0.26
Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.26/temp
Using JRE_HOME:        /usr
Using CLASSPATH:   /opt/apache-tomcat-7.0.26/bin/bootstrap.jar:
	/opt/apache-tomcat-7.0.26/bin/tomcat-juli.jar
$ ./catalina.sh stop

.....................................................................
$ sh catalina.sh start 

Using CATALINA_BASE:   /opt/apache-tomcat-7.0.26
Using CATALINA_HOME:   /opt/apache-tomcat-7.0.26
Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.26/temp
Using JRE_HOME:        /usr
Using CLASSPATH:   /opt/apache-tomcat-7.0.26/bin/bootstrap.jar:
	/opt/apache-tomcat-7.0.26/bin/tomcat-juli.jar

Рассмотрим стандартный HTTP Web-сервер. На платформе Linux любой порт с номером меньше 1024 считается привилегированным, и такие порты может открывать только пользователь root. Так как по умолчанию Web-серверы используют порт 80, то для запуска такого процесса необходимы полномочия root. Как упоминалось выше, с точки зрения безопасности не рекомендуется запускать службы от имени пользователя root. Правильным подходом будет запустить службу от имени root и передать её под управление учетной записи обычного пользователя или специальной учетной записи для данной службы.

К счастью, у большинства серверных служб имеются сценарии для выполнения подобной операции. Можно собрать Web-сервер Apache из исходного кода, запустить его от имени пользователя root и передать управление потоками httpd пользователю apache.

В листинге 2 запускается стандартная сборка Web-сервера Apache 2. Процесс установки выполняет несколько действий, включая преобразование команды apachectl в исполняемый файл. Так как этот процесс использует порт 80, он запускается с полномочиями root. Однако, как показывает команда ps, процессы httpd выполняются под управлением учетной записи apache.

Листинг 2. Листинг 2. Запуск Web-сервера Apache
# cd /usr/local/apache2/bin
# apachectl start
#ps aux | grep httpd
apache   23094  0.0  0.3  11784  1912 ?        S    10:41   0:00 /usr/sbin/httpd -k start
apache   23095  0.0  0.3  11784  1912 ?        S    10:41   0:00 /usr/sbin/httpd -k start
apache   23096  0.0  0.3  11784  1912 ?        S    10:41   0:00 /usr/sbin/httpd -k start
apache   23097  0.0  0.3  11784  1912 ?        S    10:41   0:00 /usr/sbin/httpd -k start
apache   23098  0.0  0.3  11784  1912 ?        S    10:41   0:00 /usr/sbin/httpd -k start

Запуск приложений в фоновом режиме

Некоторые установленные программы могут быть не так дружелюбны, как Web-сервер Apache. За исключением ситуаций, когда вы разбираетесь со сбоями в работе программы или хотите получать подробную информацию о её работе, вы скорее всего предпочтете, чтобы после запуска она работала в фоновом режиме. В противном случае приложение будет остановлено в момент, когда будет закрыта оболочка. Такое поведение, очевидно, не подходит для серверных служб, если служба будет останавливаться каждый раз, когда вы закрываете терминал с оболочкой или выходите из системы.

Если приложение запустить в фоновом режиме, оно продолжит работать даже после того, как вы закроете окно оболочки. Вы можете запустить приложение в фоновом режиме, добавив символ & в конец команды, используемой для запуска приложения. Например, можно открыть файл в редакторе vi, запущенном в фоновом режиме, с помощью команды vi /etc/sysconfig/network &, так как символ & открывает файл /etc/sysconfig/network и удерживает его открытым в фоновом режиме. Можно также воспользоваться утилитой nohup, которая позволяет процессам продолжать работу даже после того, как вы выйдете из системы:

nohup vi /etc/sysconfig/network  &

В листинге 3 файл открывается для редактирования в редакторе vi и переводится в фоновый режим.

Листинг 3. Листинг 3. Запуск приложения в фоновом режиме
# vi /etc/sysconfig/network &
[1] 24940
# jobs
[1]+  Stopped   vi /etc/sysconfig/network

Чтобы увидеть список приложений, работающих в фоновом режиме, используется команда jobs. Каждой задаче, выполняющейся в фоновом режиме, присваивается последовательный номер, начиная с 1. Задаче, показанной в листинге 3, был установлен номер 1, а 29940 — это идентификатор процесса (PID). Приложение можно перевести в обычный режим с помощью команды fg, указав при этом номер определенного задания. В этом примере пользователь не использует процесс, поэтому он отображается в состоянии Stopped (остановлен). Однако команда fg 1 переключит терминал обратно в процесс редактирования файла, сделав его активным.


Запуск приложений с рабочего стола

Запуск приложений с графическим интерфейсом пользователя (graphical user interface – GUI) с рабочего стола в Linux не сильно отличается от аналогичного действия в Windows. В основном вам потребуется понять, как именно приложения группируются в меню в вашем конкретном менеджере оконного интерфейса (GNOME, KDE и т.д.). В Linux имеется множество оконных приложений, предназначенных для выполнения различных задач. Некоторые из них являются "родными" приложениями Linux, в то время как другие, как разработанные на C# и использующие общую среду исполнения, могут быть мультиплатформенными, подобно приложениям на основе .NET Framework. Также в Linux можно запускать и ваши любимые Windows-приложения с помощью различных виртуальных сред, например, Wine.

"Родные" Linux-приложения

Как правило, можно найти Linux-аналог для почти любого Windows-приложения. Запуск "родных" Linux-приложений с рабочего стола выполняется крайне просто. Также как и в Windows, обычно достаточно найти нужное приложение в соответствующем меню и щелкнуть кнопкой мыши по его пиктограмме, чтобы оно запустилось.

Перед запуском приложений, которые требуют полномочий root, будет предложено ввести пароль root. В принципе это аналогично опции Run as Administrator (запустить от имени администратора) в Windows. В остальных случаях все приложения будут запускаться в пространстве пользователя, относящемся к учетной записи, которой вы воспользовались для входа в систему.

В Windows вы можете помещать на рабочий стол ярлыки (shortucts), используемые для быстрого запуска программ. В Linux имеются аналогичные ярлыки (только они называются загрузчики - launchers), которые можно помещать на панель или рабочий стол. При щелчке левой кнопкой мыши по загрузчику он запускает соответствующую программу.

На рисунке 1 показаны два загрузчика для Web-браузера Mozilla Firefox на рабочем столе GNOME. Первый загрузчик расположен на панели быстрого доступа, а второй на рабочем столе.

Рисунок 1. Рисунок 1. Загрузчики приложений на рабочем столе и на панели быстрого доступа
Рисунок 1. Загрузчики приложений на рабочем столе и на панели быстрого доступа

Mono

Множество Windows-приложений было разработано с использованием технологии .NET Framework. Mono – это open source реализация технологии .NET, работающая на различных платформах, включая Linux. На самом деле на сайте Mono написано, что Mono – это реализация языка программирования C# и стандартной среды исполнения CLR (Common Language Runtime), бинарно совместимая с .NET. В данный момент этот проект поддерживается сообществом Xamarin.

На платформе Linux вы можете запускать приложения, разработанные в инфраструктуре .NET или Mono, точно так же, как в Windows. Однако напомню, что в Linux существуют параметр umask и стандартные полномочия для работы с файлами. Так что вам всё равно потребуется предоставить необходимые права для доступа к файлу, чтобы Linux позволил запустить его.

Некоторые мультиплатформенные приложения, разработанные в Mono, например, F-Spot, можно установить прямо на рабочий стол Linux, и они будут располагаться в одном меню вместе с "родными" приложениями GNOME. F-Spot – это open-source приложение для работы с фотографиями. Несмотря на то, что оно написано на C#, оно отображается как родное приложение GNOME. И если создать для него загрузчик, то его можно будет запускать простым щелчком по ярлыку точно так же, как в Windows.

На рисунке 2 показано размещение Mono-приложения F-Spot и продемонстрировано, как вы можете создать для него загрузчики на рабочем столе или соответствующей панели.

Рисунок 2. Рисунок 2. Создание загрузчика для F-Spot
Рисунок 2. Создание загрузчика для F-Spot

Wine

Среда Wine позволяет запускать Windows-приложения на Linux и других операционных системах. С её помощью вы можете устанавливать и запускать эти приложения точно так же, как в Windows. Wine все ещё находится в процессе активной разработки, и не все Windows-программы могут быть с ней совместимы. Если ваше приложение было скомпилировано для операционной системы Windows и при этом может работать под управлением Wine, то, скорее, всего это обычное оконное приложение, а не серверное ПО. Не забудьте проверить в документации Wine информацию о возможности запуска вашего приложения под Linux, так как Wine поддерживает далеко не все приложения.

При использовании Wine в Linux в домашнем каталоге вашей учетной записи создается скрытый каталог, эмулирующий среду Windows, как показано в листинге 4.

Листинг 4. Листинг 4. Скрытый каталог Wine, эмулирующий среду исполнения Windows
$ cd /home/tbost/.wine/drive_c/windows
$ls
cf8e.tmp
command
explorer.exe
Fonts
help
hh.exe
inf
Installer
ls.txt
Microsoft.NET
notepad.exe
pwd.txt
regedit.exe
rundll.exe
system
system32
system.ini
temp
twain_32.dll
twain.dll
winhelp.exe
winhlp32.exe
win.ini
winsxs

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

В качестве примера рассмотрим программу Camstudio – open source инструмент для записи и редактирования видео с экрана компьютера. В данный момент Camstudio не предлагает версии программы для операционной системы Linux. Однако, используя Wine, я установил Windows-версию на рабочий стол Linux. Wine-приложения обычно сгруппированы в меню Applications (приложения) -> Wine -> Programs (программы), как показано на рисунке 3.

Рисунок 3. Рисунок 3. Запуск Windows-приложения под Linux с помощью Wine
Рисунок 3. Запуск Windows-приложения под Linux с помощью Wine

Заключение

Другие статьи в этой серии

Ознакомьтесь с другими статьями из серии "Linux для системных администраторов Windows".

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

Ресурсы

Научиться

Получить продукты и технологии

  • Узнайте больше о запуске Windows-приложений на платформе Linux c помощью Wine.
  • Узнайте, как запускать приложения, написанные для инфраструктуры .NET, с помощью технологии Mono.

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=841169
ArticleTitle=Linux для системных администраторов Windows: Как запускать приложения, работающие под Linux
publish-date=10182012