Centos 7 как запустить приложение
На самом деле это круто, когда работа мотивирует изучать что-то новое и постоянно развиваться. Тем более, ребята подготовили неплохие конспекты и даже тем, кто с терминалом был "на вы" при минимальных усилиях разобраться в происходящем оказалось не очень сложно.
Глядя на эти конспекты, мне стало немного грустно - работа имеет свойство меняться, а терять такую крутую подборку не хотелось бы. Да и формат меня местами не устраивал. В итоге было решено переработать материал в такую простыню-шпаргалку, частично используя материалы для подготовки к тестированию, частично - расширяя своими заметками.
В этом посте осуществлена попытка собрать необходимый минимум полезных команд, часто используемых при решении типовых задач в ОС Linux, в частности - дистрибутивов Red Hat Enterprise Linux / Cent OS 7.
Структура каталогов
Основные каталоги и структура файловой системы Linux регламентируются FHS - Filesystem Hierarchy Standard. FHS поддерживается Free Standards Group — некоммерческой организацией, в составе которой находятся крупные разработчики программного и аппаратного обеспечения, такие как HP, Red Hat, IBM и Dell.
/ - корень
Главный каталог, по сути - файловая система Linux. Только root может менять и читать файлы в этом каталоге.
/bin (binaries) - бинарные файлы пользователей
Содержит исполняемые файлы, которые можно использовать когда не подключен каталог /usr. В основном - общие команды, например cat / ls / ps и др.
/boot — файлы загрузчика
Cодержит ядро и другие файлы, используемые при загрузке системы.
/dev (devices) - файлы устройств
В Linux все устройства являются файлами в каталоге /dev. Инициализируется при запуске системы - сканируются подключенные устройства и для них создаются специальные файлы.
/dev/null - псевдоустройство, в которое можно записать все что угодно и оно исчезнет навсегда.
Используя его, можно, например подавить вывод на stdout:
/dev/shm - раздел файловой системы, размещенный в оперативной памяти
Может быть использован для увеличения производительности приложений. При перезагрузке информация в разделе стирается.
/etc (etcetera) - конфигурационные файлы
Здесь хранятся конфигурационные файлы всех установленных в системе программ, скрипты запуска и завершения системных демонов, монтирования файловых систем и авторазгрузки программ.
/home — домашние директории пользователей
В этой папке хранятся домашние каталоги всех пользователей. В них они могут хранить свои личные файлы, настройки программ и т д.
/lib (library) — системные библиотеки
Содержит файлы системных библиотек, которые используются исполняемыми файлами в каталогах /bin и /sbin.
Библиотеки имеют имена файлов с расширением *.so и начинаются с префикса lib*. Например, libncurses.so.5.7. Папка /lib64 в 64 битных системах содержит 64 битные версии библиотек из /lib.
/media — съёмные носители
В этот каталог система монтирует все подключаемые внешние накопители — флешки, оптические диски и другие носители информации.
/mnt (mount) — точки монтирования
В этот каталог могут быть смонтированы внешние или дополнительные файловые системы.
/opt (optional applications) — дополнительные приложения
В эту папку устанавливаются проприетарные программы, игры или драйверы.
/proc (process) — информация о процессах
Содержит информацию о запущенных процессах, обновляемую в реальном времени. Также там есть информация об использовании системных ресурсов (/proc/cpuinfo, /proc/meminfo, /proc/uptime).
/run — процессы
Еще один каталог, содержащий PID файлы процессов, похожий на /var/run, но в отличие от него, он размещен в TMPFS, а поэтому после перезагрузки все файлы теряются.
/sbin (system binaries) - системные исполняемые файлы
Также как /bin содержит исполняемые файлы, доступные на ранних этапах загрузки, но здесь - программы, выполняемые только с правами суперпользователя - системные утилиты.
/srv (server) — сервер
В этом каталоге содержатся файлы серверов и сервисов. Например, могут содержаться файлы веб-сервера apache.
/sys (system) — информация о системе
Назначение каталогов Linux из этой папки — получение информации о системе непосредственно от ядра. Это еще одна файловая система, организуемая ядром и позволяющая просматривать и изменить многие параметры работы системы, например, работу swap, контролировать кулеры и многое другое.
/tmp (temp) — временные файлы
В этом каталоге содержатся временные файлы, созданные системой, любыми программами или пользователями. Все пользователи имеют право записи в эту директорию.Файлы удаляются при каждой перезагрузке.
/usr — (user applications) программы пользователя
/usr/bin — исполняемые файлы
Содержит исполняемые файлы различных программ, которые не нужны на первых этапах загрузки системы, например, музыкальные плееры, графические редакторы, браузеры и так далее.
/usr/lib— библиотеки
Содержит библиотеки для программ из /usr/bin или /usr/sbin.
/usr/local — пользовательские программы, библиотеки и настройки
Содержит файлы программ, библиотек, и настроек созданные пользователем. Например, здесь могут храниться программы собранные и установленные из исходников и скрипты, написанные вручную.
/usr/sbin — системные исполняемые файлы
Содержит двоичные файлы программ для системного администрирования, которые нужно выполнять с правами суперпользователя. Например, таких как Gparted, sshd, useradd, userdel и т д.
/var (variable) — изменяемые файлы
Содержит постоянно изменяемые файлы, генерируемые процессами во время работы. Здесь есть системные журналы, кеши, базы данных и т.п.
/var/log - файлы логов
Содержит большинство логов всех установленных в операционной системе программ.
/var/lib — базы данных
Содержит файлы баз данных, пакеты и т.п.
/var/lock - блокировки
Файлы, расположенные здесь, означают, что ресурс, файл или устройство занято и не может быть использовано другим процессом.
/var/run — PID процессов
Содержит идентификаторы процессов, которые могут использоваться для взаимодейстия между программами. В отличие от /run данные сохраняются после перезагрузки.
Пользователи и группы
ОС UNIX предлагает базовые средства защиты и совместного использования файлов на основе отслеживания пользователя и группы, владеющих файлом, трех уровней доступа (для пользователя-владельца, для пользователей группы-владельца, и для всех остальных пользователей) и трех базовых прав доступа к файлам (на чтение, на запись и на выполнение). Базовые средства защиты процессов основаны на отслеживании принадлежности процессов пользователям.
Для отслеживания владельцев процессов и файлов используются числовые идентификаторы. Идентификатор пользователя и группы - целое число (обычно) в диапазоне от 0 до 65535. Присвоение уникального идентификатора пользователя выполняется при заведении системным администратором нового регистрационного имени. Среди пользователей системы выделяется один пользователь - системный администратор или суперпользователь, обладающий всей полнотой прав на использование и конфигурирование системы. Это пользователь с идентификатором 0 и регистрационным именем root.
Учетные записи пользователей, как и большинство другой информации о конфигурации системы UNIX, по традиции, представлена в виде текстовых файлов: /etc/passwd, /etc/group и /etc/shadow (в системах с теневым хранением паролей).
Основные команды для работы с пользователями и группами (часть команд указанных ниже будет требовать sudo для выполнения):
В современных дистрибутивах Linux вместо root аккаунта для администрирования как правило используется утилита sudo (substitute user and do), позволяющая выполнить команду от лица пользователя root.
Все настройки sudo находятся в файле /etc/sudoers. Здесь можно настроить очень много параметров, начиная от кому будет позволено выполнять команды от имени суперпользователя и заканчивая ограничением набора доступных команд. Неправильный синтаксис, добавленный в этот файл, может полностью нарушить распределение прав между пользователями. Потому для работы с этим файлом используется утилита visudo, которая открывает файл в обычном текстовом редакторе, но во время сохранения файла проверяет его синтаксис. Это позволяет избежать ошибок в конфигурации.
Работа с файловой системой: навигация, создание-перемещение-удаление файлов, ссылки
Основные команды, используемые для навигации по файловой системе из окна терминала, создание, перемещение и удаление файлов и каталогов:
В ОС Linux существует два вида ссылок.
Жесткие ссылки привязываются к иноду, таким образом, файл присутствует в системе под несколькими разными именами. Файл существует до тех пор, пока с его инодом связано хотя бы одно имя. Понятия «жёсткая ссылка на файл» и «имя файла» являются синонимами.
Жесткие ссылки могут быть только на файлы, не на директории. Также нельзя создать жесткую ссылку на файл в другой файловой системе (у каждой ФС свой набор инодов).
Cимволические ссылки (или симлинки) - специальный вид файла, который ссылается на другой файл по имени, а не напрямую на инод. Симлинки не предохраняют файл от удаления. Если файл удалить, то симлинк на него станет нерабочим (или битым).
При работе с большим количеством файлов бывает удобно использовать маски - т.н. wildcards.
Wildcard "*" соответствует нулю или большему количеству символов:
Wildcard "?" заменяет один любой символ:
Шаблон "[]" позволяет явно указать набор символов - будут найдеты совпадения, содержащие один из указанных в скобках символов. Также в можно указать диапазон символов (для этого используется символ –/дефис) или несколько диапазонов подряд, тогда шаблон будет совпадать с одним любым символом из этого диапазона:
Управление процессами и потоками, отправка сигналов, kill
Процесс (process) — некая виртуальная среда, инкапсулирующая в себе ресурсы (открытые файлы, файлы отображенные в память. ) и их дескрипторы, потоки и т.д. Каждый процесс имеет как минимум один поток. Также каждый процесс имеет свое собственное виртуальное адресное пространство и контекст выполнения, а потоки одного процесса разделяют адресное пространство процесса. Некоторые приложения могут создавать несколько процессов одновременно.
Каждому процессу в системе назначаются числовые идентификаторы PID (Process Identifier) в диапазоне от 1 до 65535 и идентификаторы родительского процесса PPID (Parent Process Identifier).
Сигнал в операционных системах семейства Unix - асинхронное уведомление процесса о каком-либо событии.
Когда сигнал послан процессу, операционная система прерывает выполнение процесса, при этом, если процесс установил собственный обработчик сигнала, операционная система запускает этот обработчик, передав ему информацию о сигнале, если процесс не установил обработчик, то выполняется обработчик по умолчанию.
SSH и передача файлов
SSH (Secure Shell) — защищенный протокол для удаленного доступа к компьютерам. В *nix-подобных системах (Linux, macOS) ssh-клиент обычно установлен по умолчанию и подключаться можно напрямую из терминала. Для подключения нужно указать адрес сервера и, опционально, имя пользователя и порт.
Простейший вариант - подключение по паролю. В таком случае система будет запрашивать пароль каждый раз при подключении.
Для подключения без ввода пароля можно использовать ключи: приватный (закрытый) и публичный (открытый). Эти ключи связаны друг с другом таким образом, что зашифровав информацию одним ключом, расшифровать ее можно только другим.
Для создания ключей необходимо выполнить команду:
Опционально можно ввести passphrase.
Будут созданы два файла:
/.ssh/id_rsa — приватный ключ.Его нельзя никому передавать.
/.ssh/id_rsa.pub — публичный ключ. Можно спокойно распространять.
Для загрузки публичного ключа на сервер нужно выполнить на локальной машине команду:
Другой вариант - добавить на удаленной машине в файл
/.ssh/authorized_keys содержимое публичного ключа.
Для более удобной работы с ключами можно добавить ключ к ssh-агенту. После этого для него больше не будет спрашиваться passphrase (если был задан) и не нужно будет вводить ключ вручную — он будет автоматически использован при соответствующем подключении.
ssh-agent привязан к сессии. Поэтому, например, если перезагрузить компьютер, то ключи нужно будет добавлять в агент заново.
Протокол SSH можно использовать для передачи файлов на удалённый сервер и загрузки их оттуда.
Перенаправление ввода/вывода
Можно организовать конвейер (pipe) выполняемых команд.
В примере выше вывод команды cat, т. е. текст из файла myfile, будет направлен на вход команды grep, которая выделит только строки, содержащие слово "Linux". Вывод команды grep будет, в свою очередь, направлен на вход команды wc -l, которая подсчитает число таких строк. Статус выхода из канала совпадает со статусом выхода, возвращаемым последней командой.
Работа с текстовыми файлами, find и grep
less - программа для просмотра содержимого текстовых файлов с возможностью его прокрутки. Умеет искать текст по шаблону и подсвечивать результат. Быстро работает с файлами больших размеров, т.к. не нуждается в чтении всего файла перед стартом.
После открытия текстового файла внутри утилиты можно набирать разные команды (они отображаются в левом нижнем углу), рассмотрим некоторые из них.
Для вызова справки внутри утилиты воспользуйтесь клавишей h.
Поиск внутри утилиты:
В режиме поиска:
tail - утилита, выводящая несколько последних строк файла, head - несколько первых строк.
Отображение последних 10 строк файла:
По умолчанию tail выводит именно 10 последних строк.
iconv - преобразование кодировки файла
Find — команда для поиска файлов и каталогов на основе специальных условий.
Команда grep - поиск по шаблону в файле.
Информация о размерах файлов и директорий, свободном пространстве
Для того, чтобы получить информацию о доступном в системе пространстве, можно использовать утилиту df (disk free):
Для оценки занимаемого файлом или директорией дискового пространства используется утилита du (disk usage):
Переменные окружения
Переменные окружения в Linux - специальные переменные, определенные оболочкой и используемые программами во время выполнения. Могут быть определены как системой, так и пользователем. Переменные являются парамти ключ - строковое значение. Несколько значений разделяются двоеточием, если в значении присутствует пробел - нужно использовать кавычки.
Существует три типа переменных окружения:
- локальные переменные окружения (environmental variables) - определены только для текущей сессии, будут безвозвратно стерты по ее завершении. Вывести текущие переменные окружения - команда printenv или env без параметров
- пользовательские переменные окружения (shell variables) - определяются для конкретного пользователя и устанавливаются при входе в систему или удаленном подключении. Хранятся в файлах конфигурации .bashrc, .bash_profile, .bash_login, .profile и других, размещенных в директории пользователя. Для просмотра используется команда set.
- системные переменные окружения - доступны всем пользователям, загружаются при старте системы из файлов /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.
Конфигурационные файлы переменных окружения:
- .bashrc - переменные конкретного пользователя, загружается каждый раз при создании пользователем терминального сеанса
- .bash_profile - загружается каждый раз при удаленном подключении по SSH
- /etc/environment - файл для работы с переменными окружения на системном уровне, будут доступны всем пользователям системы, в том числе при удаленном подключении
- /etc/bashrc - выполняется для всех локальных пользователей при создании сессии в терминале
- /etc/profile - выполняется для всех удаленных пользователей при открытии терминала
Команды для работы с переменными окружения:
Работа с сетью
Основные команды для работы с сетью:
Адаптер lo (loopback) в выводе ifconfig используется системой для обращения к самой себе.
Работа со службами
В RHEL7 для управления службами в операционной системе используется утилита systemd, приносящая концепцию юнитов.
Юниты находятся в конфигурационных файлах, расположенных в директориях (указаны по возрастанию приоритета):
- /usr/lib/systemd/system/ - юниты из установленных покетов RPM
- /run/systemd/system/ - юниты, созданные в рантайме
- /etc/systemd/system/ - юниты, созданные и управляемые системным администратором с помощью команды systemctl enable.
Юниты содержат информацию о системных сервисах, прослушиваемых сокетах, сохраненных снапшотах состояний системы и других обьектах, относящихся к системе инициализации.
Типы юнитов systemd:
- .service – системный сервис,
- .target — группа юнитов systemd,
- .automount – точка автомонтирования файловой системы,
- .device – файл устройства, распознанного ядром,
- .mount – точка монтирования файловой системы,
- .path – файл или директория в файловой системе,
- .scope – процесс, созданный извне,
- .slice – группа иерархически организованных юнитов, управляющая системными процессами,
- .snapshot – сохраненное состояние менеджера systemd,
- .socket – сокет межпроцессного взаимодействия,
- .swap – свап-устройство или свап-файл (файл подкачки),
- .timer – таймер systemd.
Основные команды для работы со службами:
Менеджер пакетов YUM
Менеджер пакетов YUM - высокоуровневое решение по управлению RPM-пакетами. Основные преимущества YUM:
- хранение пакетов в централизованных репозиториях с определяющими зависимости метаданными. Если для установки одного пакета нужно докачать пакеты из других репозиториев - YUM будет об этом знать заранее
- автоматически разрешаются взаимосвязи между пакетами как при установке (докачать нужное) так и при удалении (удалить ставшее ненужным)
Systemd – менеджер системы и сервисов в операционной системе Linux. При разработке eго стремились спроектировать обратно совместимым со скриптами инициализации SysV init и предоставить полезные функции, такие, как параллельный запуск системных сервисов во время загрузки, активацию демонов по требованию, поддержку снепшотов состояния системы и логику управления сервисами, основанную на зависимостях. В CentOS 7 systemd заменяет Upstart как систему инициализации по умолчанию.
В этой статье мы рассмотрим процесс управления сервисами в systemd для пользователя CentOS 7. Эти знания будут полезны и в других дистрибутивах, ведь systemd уже давно используется в Fedora и планируется в Ubuntu 14.10 и Debian 8. Хорошо это или нет — оставим за кадром.
В процессе чтения статьи вы можете попробовать systemd на классических VPS и облачных VPS от Infobox. Мы стремимся своевременно добавлять поддержку современных ОС, чтобы вы могли использовать последние технологии для более эффективной работы. Сама идея написания статьи родилась после очередного вопроса пользователей об использовании сервисов в CentOS 7.
Введение
- /usr/lib/systemd/system/ – юниты из установленных пакетов RPM.
- /run/systemd/system/ — юниты, созданные в рантайме. Этот каталог приоритетнее каталога с установленными юнитами из пакетов.
- /etc/systemd/system/ — юниты, созданные и управляемые системным администратором. Этот каталог приоритетнее каталога юнитов, созданных в рантайме.
- .service – системный сервис
- .target — группа юнитов systemd
- .automount – точка автомонтирования файловой системы
- .device – файл устройства, распознанного ядром
- .mount – точка монтирования файловой системы
- .path – файл или директория в файловой системе
- .scope – процесс, созданный извне
- .slice – группа иерархически организованных юнитов, управляющая системными процессами
- .snapshot – сохраненное состояние менеджера systemd
- .socket – сокет межпроцессного взаимодействия
- .swap – Свап-устройство или свап-файл (файл подкачки)
- .timer – таймер systemd
Основные функции systemd в CentOS 7
Управление сервисами
В предыдущих версиях CentOS использовалась SysV или Upstart. Скрипты инициализации располагались в директории /etc/rc.d/init.d/. Такие скрипты обычно писались на Bash и позволяли администратору управлять состоянием сервисов и демонов. В CentOS 7 скрипты инициализации были заменены сервисными юнитами.
По способу использования сервисные юниты .service напоминают скрипты инициализации. Для просмотра, старта, остановки, перезагрузки, включения или выключения системных сервисов используется команда systemctl. Команды service и chkconfig по-прежнему включены в систему, но только по соображениям совместимости.
При использовании systemctl указывать расширение файла не обязательно.
- systemctl start name.service – запуск сервиса.
- systemctl stop name.service — остановка сервиса
- systemctl restart name.service — перезапуск сервиса
- systemctl try-restart name.service — перезапуск сервиса только, если он запущен
- systemctl reload name.service — перезагрузка конфигурации сервиса
- systemctl status name.service — проверка, запущен ли сервис с детальным выводом состояния сервиса
- systemctl is-active name.service — проверка, запущен ли сервис с простым ответом: active или inactive
- systemctl list-units --type service --all – отображение статуса всех сервисов
- systemctl enable name.service – активирует сервис (позволяет стартовать во время запуска системы)
- systemctl disable name.service – деактивирует сервис
- systemctl reenable name.service – деактивирует сервис и сразу активирует его
- systemctl is–enabled name.service – проверяет, активирован ли сервис
- systemctl list-unit-files --type service – отображает все сервисы и проверяет, какие из них активированы
- systemctl mask name.service – заменяет файл сервиса симлинком на /dev/null, делая юнит недоступным для systemd
- systemctl unmask name.service – возвращает файл сервиса, делая юнит доступным для systemd
Работаем с целями (targets) Systemd
Предыдущие версии CentOS с SysV init или Upstart включали предопределенный набор уровней запуска (runlevels), которые представляли специфичные режимы для операций, пронумерованные от 0 до 6. В CentOS 7 концепция уровней запуска была заменена целями systemd.
Файлы целей systemd .target предназначены для группировки вместе других юнитов systemd через цепочку зависимостей. Например юнит graphical.target, использующийся для старта графической сессии, запускает системные сервисы GNOME Display Manager (gdm.service) и Accounts Service (accounts–daemon.service) и активирует multi–user.target. В свою очередь multi–user.target запускает другие системные сервисы, такие как Network Manager (NetworkManager.service) или D-Bus (dbus.service) и активирует другие целевые юниты basic.target.
В CentOS 7 присутствуют предопределенные цели, похожие на стандартный набор уровней запуска. По соображениям совместимости они также имеют алиасы на эти цели, которые напрямую отображаются в уровнях запуска SysV.
- poweroff.target (runlevel0.target) – завершение работы и отключение системы
- rescue.target (runlevel1.target) – настройка оболочки восстановления
- multi–user.target (runlevel2.target, runlevel3.target, runlevel4.target) – настройка неграфической многопользовательской системы
- graphical.target (runlevel5.target) – настройка графической многопользовательской системы
- reboot.target (runlevel6.target) – выключение и перезагрузка системы
Для определения, какой целевой юнит используется по умолчанию, полезна следующая команда: systemctl get–default.
Для просмотра всех загруженных целевых юнитов воспользуйтесь командой systemctl list-units --type target, а для просмотра вообще всех целевых юнитов командой: systemctl list-units --type target --all.
Для изменения цели по умолчанию поможет команда systemctl set-default name.target.
Для изменения текущей цели: systemctl isolate name.target. Команда запустит целевой юнит и все его зависимости и немедленно остановит все остальные.
Выключение и перезагрузка системы
В CentOS 7 systemctl заменяет значительное количество команд управления питанием. Прежние команды сохранены для совместимости, но рекомандуется использовать systemctl:
systemctl halt – останавливает систему
systemctl poweroff – выключает систему
systemctl reboot – перезагружает систему
Управление systemd на удаленной машине
Systemd позволяет управлять удаленной машиной по SSH. Для управления используйте команду:
systemctl --host user_name@host_name command, где user_name – имя пользователя, host_name – имя хоста, которым осуществляется удаленное управление, а command – выполняемая команда systemd.
Типичный systemd .service
Этот раздел поможет вам, если вам необходимо быстро сделать поддержку управления сервисом из systemd. Подробная информация о всех параметрах файла .service есть в соответствующем разделе документации по systemd.
Давайте посмотрим на секцию [Unit]. Она содержит общую информацию о сервисе. Такая секция есть не только в сервис-юнитах, но и в других юнитах (например при управлении устройствами, точками монтирования и т.д.). В нашем примере мы даем описание сервиса и указываем на то, что демон должен быть запущен после Syslog.
В следующей секции [Service] непосредственно содержится информация о нашем сервисе. Используемый параметр ExecStart указывает на исполняемый файл нашего сервиса. В Type мы указываем, как сервис уведомляет systemd об окончании запуска.
Финальная секция [Install] содержит информацию о цели, в которой сервис должен стартовать. В данном случае мы говорим, что сервис должен быть запущен, когда будет активирована цель multi–user.target.
Это минимальный работающий файл сервиса systemd. Написав свой, для тестирования скопируйте его в /etc/systemd/system/имя_сервиса.service. Выполните команды systemctl daemon-reload. Systemd узнает о сервисе и вы сможете его запустить.
Дополнительная информация
Заключение
В этой статье мы научились управлять сервисами CentOS 7. Конечно, это далеко не единственная функция systemd и другие ее стороны будут рассмотрены в будущем. Сама ОС практически со времени релиза доступна на классических VPS и облачных VPS от Infobox. Попробуйте systemd прямо сейчас. Эти знания будут полезны в связи с переходом многих дистрибутивов на systemd.
Если вы обнаружили ошибку в статье, автор ее с удовольствием исправит. Пожалуйста напишите в ЛС или на почту о ней.
В случае, если вы не можете оставлять комментарии на Хабре, можно написать их в блоге Сообщества InfoboxCloud или в нашей группе в Facebook.
Вся сила Linux в использовании терминала. Это такая командная оболочка, где вы можете выполнять различные команды, которые будут быстро и эффективно выполнять различные действия. Ну впрочем, вы наверное это уже знаете. Для Linux было создано множество скриптов, которые выполняются в различных командных оболочках. Это очень удобно, вы просто объединяете несколько команд, которые выполняют определенное действие, а затем выполняете их одной командой или даже с помощью ярлыка.
2. Как работают скрипты.
В Linux почти не используется расширение файла для опережения его типа на системном уровне. Это могут делать файловые менеджеры и то не всегда. Вместо этого, используются сигнатуры начала файла и специальные флаги. Система считает исполняемыми только те файлы, которым присвоен атрибут исполняемости.
3. Как запустить sh скрипт из командной строки?
Допустим у вас есть скрипт hello.sh состоящий из одной команды.
Чтобы его запустить, надо зайти в каталог, где расположен скрипт, набрать название интерпретатора sh и первым параметров указать ваш файл hello.sh.
Чтобы каждый раз не указывать интерпретатор в терминале, можно сделать скрипт исполняемым.
Для этого необходимо:
1. Указать интерпретатор внутри файла.
Содержимое скрипта hello.sh получается таким:
2. Сделать наш файл исполняемым.
Чтобы выполнить скрипт в указанной оболочке, нужно установить для него флаг исполняемости. Для этого используется команда chmod +x и имя файла скрипта:
Запуск скрипта sh в Linux:
Или полный путь от корня:
Теперь вы можете выполнить:
А если нам нужно запустить скрипт на php, то выполните:
Вот так все просто здесь работает.
Так можно запустить скрипт как фоновый процесс, используйте символ & :
Главное меню » Операционная система CentOS » Как установить и управлять программным обеспечением на CentOS 7
Установка и управление программным обеспечением на сервере Linux под управлением CentOS в качестве операционной системы довольно легко. Вы можете сделать это, используя менеджер пакетов под названием yum. Прежде всего, подключиться к CentOS VPS через SSH и проверить, являются ли некоторые из установленных пакетов в вашей системе доступные для обновления. Вы можете сделать это с помощью следующей команды:
Вывод команды покажет вам пакеты, которые имеют доступные обновления, и вы должны обновлять их как можно скорее. Вы можете обновить пакеты один за другим, и вы можете обновить все пакеты сразу же с помощью команды:
Менеджер пакетов yum позволяет искать пакет и получить больше информации о нем, прежде чем устанавливать его на вашей системе. Менеджер пакетов будет проверять разрешенные репозитории в вашей системе и будет искать для пакета в своих базах данных. Чтобы проверить, какие репозитории включены в вашей системе, вы можете выполнить команду:
Чтобы получить список всех хранилищ, включая те, которые отключены вы можете использовать следующую команду:
Выход должен быть аналогичен приведенному ниже:
Вывод должен быть похож на следующий:
Чтобы получить список всех установленных пакетов в вашей системе вместе с их версией и их хранилищами, вы можете использовать следующую команду:
Менеджер пакетов также удалит пакеты, которые зависят от него.
PS. Если вам понравился этот пост, пожалуйста, поделитесь им с друзьями в социальных сетях с помощью кнопок на левой стороне поста или просто оставьте комментарий ниже. Заранее благодарю.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Node.js – это платформа JavaScript для программирования общего назначения, которая позволяет быстро создавать сетевые приложения. Данная платформа работает в Linux, OS X, FreeBSD и Windows. Приложения Node.js можно запускать в командной строке, но данное руководство продемонстрирует, как запустить приложение в качестве сервиса (в таком случае приложение сможет автоматически перезагружаться вместе с сервером или при сбое и будет безопасно для использования в производственной среде).
Данное руководство поможет подготовить среду Node.js к производству на сервере CentOS 7. Приложение Node.js будет управляться PM2 и предоставит пользователям безопасный доступ при помощи обратного прокси-сервера Nginx.
Примечание: Аналогичный мануал для Ubuntu – по этой ссылке.
Требования
В данном руководстве используется два сервера CentOS 7. Они называются:
- App: сервер, на котором нужно установить Node.js, приложение Node.js и PM2.
- Web: на этом сервере будет установлен веб-сервер Nginx, обратный прокси-сервер приложения.
Руководство можно выполнить и на одном сервере, но в таком случае нужно внести несколько изменений в настройки. Просто используйте адрес localhost (127.0.0.1)вместо закрытого IP-адреса сервера app.
Также для выполнения нужны:
- Не root пользователь с доступом к sudo.
- Домен, направленный на внешний IP-адрес сервера.
Установка Node.js
Для начала нужно установить Node.js на сервер app.
Установите пакет git, от которого зависит npm:
sudo yum install git
Откройте страницу загрузки Node.js и найдите ссылку Linux Binaries (.tar.xz). Скопируйте ссылку в буфер.
Откройте домашний каталог и загрузите Node.js:
Распакуйте архив в каталог node:
mkdir node
tar xvf node-v*.tar.gz --strip-components=1 -C ./node
Удалите ненужный архив Node.js:
Теперь нужно настроить глобальный prefix для npm, который будет использоваться при создании символьных ссылок. В данном случае это /usr/local.
mkdir node/etc
echo 'prefix=/usr/local' > node/etc/npmrc
Теперь можно переместить бинарные файлы node и npm в каталог /opt/node:
sudo mv node /opt/
Передайте права на файл пользователю root:
sudo chown -R root: /opt/node
Создайте символьные ссылки файлов node и npm и поместите их в /usr/local/bin:
sudo ln -s /opt/node/bin/node /usr/local/bin/node
sudo ln -s /opt/node/bin/npm /usr/local/bin/npm
Обратите внимание: /usr/local/bin по умолчанию исключается из PATH при использовании sudo. Чтобы изменить это, откройте sudoers:
Найдите строку Defaults secure_path и добавьте в конец :/usr/local/bin.
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin :/usr/local/bin
Сохраните и закройте файл.
Убедитесь, что установка Node прошла успешно:
Команда вернёт версию программы.
Создание приложения Node.js
Примечание: Копируя код, не забудьте указать свой IP-адрес вместо условных данных.
Чтобы приложение Node.js обслуживало запросы, поступающие с прокси-сервера (web), используйте интерфейс частной сети сервера app. Чтобы узнать IP-адрес сервера app, введите:
Скопируйте вывод (внутренний IP), он пригодится в дальнейших настройках.
Код приложения Hello World
Создайте приложение Node.js и откройте его в текстовом редакторе (в руководстве файл называется hello.js):
Вставьте в файл следующий код. Замените APP_PRIVATE_IP_ADDRESS внутренним IP-адресом сервера app. При необходимости можно заменить номер порта (он должен быть от 1024 и больше).
Сохраните и закройте файл.
Тестирование приложения
Чтобы протестировать приложение, запустите следующую команду на сервере app:
Примечание: Запуская Node.js таким образом, вы блокируете дополнительные команды. Команды будут доступны после остановки приложения (Ctrl-C).
Чтобы протестировать приложение, откройте новый терминал и подключитесь к серверу web:
Если на экране появился следующий вывод, приложение работает правильно:
Если такой вывод не появился, убедитесь, что приложение Node.js запущено и правильно настроено (слушает правильный адрес и порт).
Остановите приложение, нажав Ctrl+C.
Установка PM2
Теперь нужно установить PM2. Это менеджер процессов Node.js. PM2 предоставляет простой способ управления и демонизации приложений.
Установку можно выполнить при помощи пакетного менеджера npm на сервере app:
sudo npm install pm2@latest -g
Управление приложением с помощью PM2
Менеджер процессов PM2 очень прост в использовании. Рассмотрим основы его работы.
Запуск приложения
Для запуска приложений в фоновом режиме используется команда pm2 start:
pm2 start hello.js
Также эта команда добавит приложение в список процессов PM2, который выводится на экран при запуске каждого приложения:
Как видите, PM2 автоматически устанавливает App name (имя файла без расширения .js) и PM2 id. Также PM2 предоставляет другую информацию: PID процесса, текущее состояние, использование памяти.
Запущенное с помощью PM2 приложение будет автоматически перезапускаться в случае ошибок или сбоев, однако автоматический запуск приложения нужно настроить отдельно. Для этого существует подкоманда startup.
Эта команда генерирует и настраивает сценарий запуска менеджера PM2 и всех его процессов вместе с загрузкой сервера. Также нужно указать платформу (в данном случае это systemd).
sudo pm2 startup systemd
На экране появится следующий вывод:
[PM2] Generating system init script in /etc/systemd/system/pm2.service
[PM2] Making script booting at startup.
[PM2] -systemd- Using the command:
su root -c "pm2 dump && pm2 kill" && su root -c "systemctl daemon-reload && systemctl enable pm2 && systemctl start pm2"
[PM2] Dumping processes
[PM2] Stopping PM2.
[PM2] All processes have been stopped and deleted
[PM2] PM2 stopped
[PM2] Done.
Теперь приложение pm2 будет автоматически запускаться вместе с сервером.
Другие функции PM2 (опционально)
PM2 предоставляет множество других функций, которые позволяют управлять или просматривать информацию о приложениях. Обратите внимание, что запуск PM2 без каких-либо аргументов отобразит страницу справки, на которой можно найти подробные примеры использования PM2.
Остановить приложение можно при помощи команды:
pm2 stop example
Чтобы перезапустить приложение, введите:
pm2 restart app_name_or_id
Список приложений, управляемых PM2, можно просмотреть при помощи следующей подкоманды:
Подробную информацию о конкретном приложении можно получить с помощью подкоманды info:
pm2 info example
Подкоманда monit показывает данные процесса PM2: состояние приложения, использование CPU и памяти:
Теперь нужно настроить обратный прокси.
Nginx как обратный прокси-сервер
Итак, приложение запущено и прослушивает localhost. Теперь нужно настроить доступ к нему. Установите Nginx как обратный прокси-сервер.
Примечание: Если Nginx уже установлен, скопируйте блок location в файл виртуального хоста (убедитесь, что скопированные настройки не конфликтуют с уже существующими настройками).
Перейдите на сервер web. Установите epel-release:
sudo yum install epel-release
Затем установите Nginx.
sudo yum install nginx
Откройте конфигурационный файл в текстовом редакторе:
sudo vi /etc/nginx/nginx.conf
Найдите строку, определяющую location /:
Замените её следующими настройками. Измените директиву server_name (укажите домен или IP) и номер порта (8080), если приложение прослушивает другой порт. Вместо APP_PRIVATE_IP_ADDRESS введите IP-адрес сервера app.
Это отправит запрос приложению hello.js на порт 8080 на внутренний IP сервера app.
Читайте также: