nix сервера что это
Nix: Что это и с чем это употреблять?
Мы в Typeable хотели опубликовать небольшой цикл статей о том, как Nix нам помогает (и немного мешает) в разработке. Но, проведя немножко времени в поисках похожего материала здесь, с удивлением обнаружили, что на Хабре нет толкового введения в Nix, на которое можно было бы сослаться.
Статья от @snizovtsev подойдёт как хорошее введение при разработке на C++, но это не совсем то введение, которое мне хотелось бы видеть. Поэтому я решил написать его сам 🙂
Файлы к этой статье можно найти здесь.
Где это всё взять?
Помимо NixOS, где ничего делать не нужно, Nix можно установить на любой (или почти любой) дистрибутив Linux. Для этого достаточно запустить следующую команду:
Дальше установочный скрипт сам всё сделает. После недавних изменений в MacOS, установка в ней немного осложнилась, раньше было достаточно команды выше. Про установку в последних версиях MacOS можно прочесть здесь.
Язык Nix
Когда речь идёт о Nix, часто имеют в виду две разные сущности: Nix как язык и nixpkgs как репозиторий пакетов, в том числе составляющий основу NixOS. Начнём с первого.
Nix — функциональный ленивый язык с динамической типизацией. Синтаксис во многом похож на языки семейства ML (SML, OCaml, Haskell), поэтому у тех, кто с ними знаком, особых проблем возникнуть не должно.
Начать знакомство с языком можно просто запустив интерпретатор.
Отдельного синтаксиса для объявления функций в Nix нет. Функции задаются через присваивание, так же как и другие значения.
Как и в языках, повлиявших на Nix, все функции каррированы.
Помимо примитивных типов, таких как числа и строки, Nix поддерживает списки и словари (attribute sets в терминологии Nix).
При загрузке файлов или модулей в REPL, Nix ожидает, что результатом вычисления модуля будет множество, элементы которого будут импортированы в текущую область видимости.
fac.nix с использованием with :
Сборка программ
Сборка программ и отдельных компонентов — это основная функция языка Nix.
derivation — функция, так же принимающая словарь с параметрами сборки: name — имя пакета, builder — сборочный скрипт, src — исходный код, system — система или список систем, под который возможна сборка данного пакета.
Сборка программ, продвинутая версия
Оригинал скрипта находится здесь.
mkDerivation — функция, создающая derivation с этим скриптом и заодно заполняющая другие поля.
Те читатели, кто раньше писал скрипты для сборки пакетов в Arch Linux или Gentoo, могут увидеть здесь крайне знакомую структуру. Как и в других дистрибутивах, сборка разбита на фазы, присутствует перечисление зависимостей ( buildInputs ) и так далее.
Заключение
В этой статье я попытался описать самые базовые части работы с Nix как языком для сборки кода. В следующих статьях я планирую показать, как мы применяем Nix в Typeable, а также как это делать лучше не стоит. Stay tuned!
Также, гораздо более подробное введение в Nix опубликовано на сайте самого проекта под названием Nix pills.
2.3. Базовые сведения о работе в *nix-системах
Информационные системы предприятий не мыслятся сегодня без серверов, работающих на одном из клонов *nix-систем.
Linux-мифы
Бесплатные операционные системы и прикладные программы являются серьезным конкурентом коммерческим продуктам. На большинстве рабочих мест можно безболезненно перейти на программы с открытым кодом. Естественно, что вокруг этой проблемы существует много рекламных спекуляций, призванных внушить пользователям и руководителям определенные представления о «правильном» пути.
Автор не ставит целью дать подробную инструкцию по работе с Linux-системами. Открытых источников очень много, и во многом они лучше того, что я смог бы предложить читателю. Постараемся просто объективно сравнить основные характеристики коммерческого и бесплатного продуктов и познакомить читателей с другим классом операционных систем, чтобы каждый смог самостоятельно составить собственное мнение о быстро развивающихся продуктах.
Современные операционные системы и прикладные программы, особенно самые массовые, строятся, прежде всего, на стандартах. Как Linux, так и Windows могут использовать одинаковые сетевые протоколы, единую пользовательскую базу (сервер с учетными записями пользователей может быть как на основе Linux, так и Windows) и т. п.
Естественно, что полной тождественности различных продуктов быть не может. Возникающие проблемы носят, прежде всего, психологический характер. Когда я решил сменить обозреватель Интернета (в то время это был вынужденный шаг, поскольку производительности моего компьютера не хватало для работы в Internet Explorer), то несколько дней меня не покидало чувство дискомфорта и желание вернуться в привычную среду. Сейчас я уже ни за что не откажусь от работы в Firefox: эта программа мне кажется более удобной и предоставляет большие возможности. Существенно меньшие неудобства были связаны с переходом к OpenOffice.
Сегодня в распоряжении пользователей большое количество разнообразных дистрибутивов Linux на любой вкус. Их легко найти и скачать из сети Интернет. Дистрибутивы для серверов и рабочих станций отличаются только набором программ, вы легко можете установить дополнительные пакеты и использовать, например, рабочую станцию в качестве сервера.
Для работы сервера Linux графический интерфейс излишен. И администраторы, приобретшие даже незначительный опыт работы, стараются выполнять большинство операций именно в режиме командной строки. Тем не менее, графический интерфейс в данной операционной системе также присутствует, и вы можете использовать его для настроек так же, как делали это в Windows.
В то же время, использование командной строки имеет ряд преимуществ. Во-первых, команды очень легко автоматизировать, используя пакетные файлы. Во-вторых, графический интерфейс сам может быть причиной ошибок, кроме того, на оформление затрачиваются серьезные ресурсы системы. В-третьих, использование текстовых файлов конфигурации программ позволяет очень легко переносить настройки с одной системы на другую, а для резервирования системы в большинстве случаев достаточно сохранить несколько текстовых файлов.
- Примечание
Не случайно, что и базовая функциональность нового сервера от Microsoft — Windows Server 2008 — предполагает отказ от графического интерфейса и работу исключительно в режиме командной строки.
Безопасность в Linux и Windows
Очень много разговоров ведется о безопасности работы в операционных системах. При этом приводятся различные данные, которые должны показать преимущество той или иной операционной системы. Сейчас очень популярны цифры о количестве обнаруженных уязвимостей и сроках их устранения, причем в зависимости от критериев оценки лидером «становится» то одна, то другая система. Можно рассматривать количество обнаруженных уязвимостей, можно оценивать степень их опасности и сроки реагирования разработчика. Любая такая оценка будет объективной, но насколько она отражает реальную жизнь?
Я бы советовал больше прислушиваться к мнению практикующих администраторов, сопровождающих системы на Linux. Для однажды установленной операционной системы и запущенного на ней программного обеспечения сам факт перезагрузки уже является нештатной ситуацией. Компьютер с Linux просто всегда работает и выполняет возложенные на него задачи.
- Примечание
При освоении Linux необходимо сразу заставить себя отказаться от практики перезагрузок компьютера: в отличие от Windows, это не приносит никакого эффекта. Причины практически любых проблем нужно искать в системных настройках.
Несколько моментов, о которых следует знать пользователям Linux
В Интернете представлен весьма большой объем документации по настройке Linux, и если возникла та или иная проблема, скорее всего, вы найдете необходимые рекомендации простым поиском в Сети. Здесь упомянем только несколько основных моментов, которые нужно учесть администраторам, имеющим опыт работы только в Windows.
Собственно сам Linux — это только ядро. Остальное — это приложения и службы, которые вы устанавливаете. Нечетные номера версий — экспериментальные, четные (2.8 и т. п.) представляют собой стабильные сборки.
В Linux не принято хранить файлы «где придется». Есть достаточно четкая структура размещения информации (см. табл. 2.3 в разд. «Структура папок Linux” далее в этой главе), поэтому, например, все пользовательские данные будут находиться только в папке соответствующего личного профиля.
Состав доступных команд зависит от учетной записи, под которой выполнен вход в систему. Если вы не видите в списке требуемой команды, попробуйте переключиться на учетную запись root.
Работу в консоли существенно облегчит использование программы MidNight Commander — mc (рис. 2.12). Программа практически повторяет интерфейс и возможности Norton Commander, с которого начиналась вся работа на компьютерах под управлением операционной системы DOS. При помощи программы mc можно осуществлять любые файловые операции (копировать, переименовывать, удалять, создавать папки и т. д.), редактировать файлы, просматривать архивы, установочные пакеты и т. п. MidNight Commander по умолчанию не устанавливается, но входит в большинство дистрибутивов Linux. Думаю, что вы не пожалеете, если будете использовать возможности данной программы.
Рис. 2.12.
Программа MidNight Commander
В Linux расширения имен файлов не используются для ассоциации выполняемых операций. Исполняемым может быть любой файл, необходимо только предоставить ему соответствующее разрешение. Кстати, это повышает безопасность системы.
Команды в Linux чувствительны к регистру. Например, ключи R и r могут обозначать различные операции.
В Linux не принято подключать жесткие диски под именами логических дисков (C, D, E и т. д.). Обычно диски монтируются: добавляются в качестве новой папки в определенное место файловой структуры.
Так же, как и в Windows, в Linux создаются пользователи, которых можно объединять в группы. Учетные записи могут быть как локальными, так и храниться централизованно (и использоваться на нескольких компьютерах). В Linux есть один «суперпользователь», которому разрешено все. Его имя — root. Работа от имени этой учетной записи не приветствуется. Текущие операции выполняются с правами обычного пользователя, в случае операции, требующей административных прав, система запрашивает пароль учетной записи root (и обычно сохраняет его некоторое время в памяти для удобства последующих административных операций).
Структура папок Linux
Linux предполагает четкую структуру расположения папок и файлов. В табл. 2.3 приведены наиболее «значимые» папки системы.
Таблица 2.3.
Типовая структура папок в Linux
Папка с программами редактирования и проверки структуры диска, а также изменения состояния системы
Содержит записи, соответствующие устройствам, подключенным к системе
Папка программ работы с учетными записями. В этой же папке хранятся программы демонов
В этой папке находится основная часть файлов локальной конфигурации системы
Скрипты запуска системы. Часто указывают, в свою очередь, на папки /etc/rc?.d (? — цифра от 0 до 6, соответствует уровню запуска)
Домашняя папка пользователя username
Папка с общими программами; доступна только для чтения
В эту папку должны устанавливаться прикладные программы
Папка, в которую обычно копируется справочная документация по установленным программам
Папка с программными библиотеками
Обычно используется для подключения устройств (диски, CD-ROM и т. д.)
Папка, в которой обычно размещаются устанавливаемые программы, имеющие большой объем
Папка для хранения специальных файлов, формируемых ядром системы
Папка для изменяемых данных. Содержит, в том числе, папки журналов системы
Текстовый редактор vi
Если используется графическая оболочка, то для редактирования файлов применяются программы типа OpenOffice, Gedit и аналогичные, работающие в графическом режиме. Однако в аварийных ситуациях, когда нужно восстанавливать систему, а обычно такие операции выполняются в нервной обстановке и при отсутствии времени, работать можно только в консоли.
В Linux существует очень мощный текстовый редактор, который запускается командой vi (в терминале). Умение пользоваться им может оказаться очень полезным.
Редактор можно запустить сразу с открытием файла. Для этого после vi нужно через пробел указать имя файла.
Текстовый редактор vi имеет два режима работы: командный и редактирования. При открытии файла вы попадаете в командный режим, в котором можно выполнять такие операции, как поиск, замена, сохранение файла, вызов внешней команды и т. п.
Чтобы начать ввод текста, следует перейти в режим редактирования. Например, чтобы ввести символ в текущей позиции, надо нажать сначала на клавишу i и только потом начать набор. Если нажать клавишу а, то символы будут вводиться справа от позиции курсора и т. п. Обычной ошибкой пользователей, начинающих работу в vi, является попытка удаления символов или перемещения курсора в режиме редактирования. В этом случае редактор набирает спецсимволы, поэтому приходится выходить в командный режим, удалять ошибочный ввод, перемещаться в нужную точку текста и снова входить в режим редактирования.
В редакторе доступно много команд, они подробно описаны в Интернете. Упомяну лишь самые основные, которые позволят выполнить простейшие операции с текстом (табл. 2.4).
Таблица 2.4.
Команды текстового редактора vi
Добавить. Переход в режим ввода текста справа от курсора
Вставить. Переход в режим ввода текста слева от курсора
Клавиши перемещения курсора
Перемещение курсора по документу. Для перемещения курсора используются также четыре расположенные в ряд клавиши (влево), (вниз), (вверх) и (вправо). Можно использовать их вместе с цифрами: например, ввод команды 9k переместит курсор на 9 строк вверх
Перемещение на одну страницу вперед/назад
Переход на последнюю строку документа
Переход на строку с номером n
Удаление символа над курсором
Удаление слова, в котором находится курсор
Удаление символов, начиная с текущего, до конца слова; ввод команды 4dw приведет к удалению четырех слов
Удаление символов, начиная с текущего, до конца строки
Копирует текущее слово в буфер
Копирует текущую строку в буфер
Вставляет содержимое буфера после курсора
Поиск символов слово вперед
Поиск символов слово назад
Замена сочетания символов, указанного в строке поиск, на сочетание, указанное в строке замена, во всем тексте документа
Отмена последней операции (можно отменить несколько шагов)
Восстановление последней отмененной операции
Сохранение файла и выход из режима редактирования
То же, что и :wq — сохранение файла и выход
Выход из редактора (операция выполнится, только если все внесенные изменения сохранены)
Выход без сохранения изменений
Выполнение внешней команды (command)
Вывод информации об имени редактируемого файла и текущей позиции в нем
Выполнение команд с правами другого пользователя
Помимо переключения на суперпользователя эта же команда, введенная с указанием какой-либо другой учетной записи в качестве параметра, позволяет переключиться на нее, если далее по запросу системы ввести ее имя и пароль: su — userl
- Примечание
При переходе от суперпользователя к другому пользователю пароль вводить не требуется.
Прикладные программы в Linux
Операционная система — это только «основа», позволяющая работать в прикладных программах, ради которых и включают компьютер. Сегодняшний Linux включает в себя большое количество бесплатного прикладного программного обеспечения. Это текстовые и графические редакторы, аудио- и видеопроигрыватели, утилиты записи CD/DVD, почтовые клиенты и обозреватели Интернета, серверы баз данных и т. п.
Программы для Linux доступны обычно в двух вариантах: в исходных кодах и в пакетах, полностью подготовленных для автоматической установки. При наличии предварительно скомпилированного пакета именно его и устанавливают. Преимущество этого варианта в том, что при установке автоматически добавляются и необходимые библиотеки (те, которые должны быть установлены для нормальной работы программы, иначе называют зависимостями).
Установочные пакеты хранятся в депозитариях. Для того чтобы добавить новую программу в систему, достаточно выполнить простейшую команду. Например, для установки программы в Ubuntu:
Эта команда загрузит из Интернета необходимый установочный пакет и все зависимости и выполнит установку.
Установочные пакеты не всегда существуют для конкретной версии Linux. В этом случае нужно выполнить установку из исходных кодов. Этот процесс несколько более трудоемкий, поскольку требует ручной установки отсутствующих библиотек и предварительной установки программного обеспечения для компиляции.
На портале http://SourceForge.net вы можете найти тысячи проектов, среди которых есть и программы управления предприятием (ERP-системы), CRM-системы, системы электронного документооборота и т. п.
Среди коммерческого программного обеспечения можно отметить тенденцию постоянного увеличения числа вендоров, разрабатывающих свои продукты как для систем на основе Windows, так и для использования в Linux. Если примерами крупных западных разработчиков уже вряд ли кого удивишь (например, для системы документооборота Documentum можно выбрать любую платформу и клиента, причем ее версия для Linux характеризуется большей надежностью и повышенной производительностью), то пример российской фирмы 1С, выпустившей версию своей программы для Linux, говорит о многом.
Кроссплатформенный запуск программ
Существуют как коммерческие, так и бесплатные проекты, позволяющие запускать Windows-программы на Linux-системах. Наиболее известный бесплатный пакет — это Wine (www.winehq.org).
Под Wine работают не все программы. Но пользователям в свое время удавалось запустить в этом пакете даже программу 1С.
Второе решение запуска Windows-программ состоит в использовании виртуальной машины. Вы устанавливаете виртуальную машину, в которой запускаете операционную систему Windows и проблемное приложение. Данный способ гарантированно позволит продолжать использовать прикладную программу, но потребует приобретения лицензионной копии Windows.
Существует возможность запускать и Linux-программы под Windows. Интересующихся читателей можно отослать к ресурсам Интернета.
Установка Linux
Установка Linux и ее первоначальная настройка не составляют никакой сложности. Операции выполняются в графической среде при помощи мастера установки (рис. 2.13), который в процессе инсталляции запрашивает основные параметры (часовой пояс, раскладку клавиатуры, путь установки и т. п.). Если какие-то параметры вам не понятны, можно просто согласиться с вариантом, предложенным мастером по умолчанию.
Рис. 2.13.
Установка Linux происходит в графическом режиме
Многовариантная загрузка
На одном компьютере можно использовать несколько операционных систем. Лучше всего устанавливать их на различные логические диски. Но часто желание попробовать новую операционную систему возникает, когда компьютер уже используется и свободных дисков нет.
Можно воспользоваться возможностями Windows 7 и уменьшить разделы жесткого диска для того, чтобы создать новый раздел и установить систему на него. Но установщики Linux позволяют сами изменить конфигурацию разделов существующей системы без потери данных. Мастер установки предложит создать на существующем диске новый раздел, при этом вы можете указать желаемый объем нового раздела (по умолчанию обычно предлагается использовать половину имеющегося свободного пространства). Операция займет некоторое время (зависит от объема жесткого диска), после чего установка Linux продолжится.
Естественно, что подобный вариант действий возможен только тогда, когда первой установленной системой была Windows. Современные установщики Linux «знают» практически все используемые операционные системы других вендоров.
- Примечание
После установки Linux на раздел Windows и последующей загрузки Windows система предупредит о возможных неисправностях диска и предложит выполнить его проверку. При этом возможна и перезагрузка Windows (после установки новых устройств). Это стандартная реакция системы на изменение раздела диска. Данные не потеряны, надо просто один раз согласиться на выполнение предложенных шагов.
Тестирование Linux на виртуальной машине
Если вы хотите предварительно протестировать систему Linux и ознакомиться с ней, то можно воспользоваться ее установкой на виртуальную машину. Можно, конечно, использовать виртуальную машину от Microsoft, но это не самый лучший вариант для Linux-гостевой системы. Я бы рекомендовал проводить эксперименты в среде Oracle VirtualBox.
2 Можно не использовать дефис в качестве параметра: в этом случае вы также получите права администратора, но параметры окружения (например, текущая папка) останутся прежними. При вводе дефиса команда переведет вас в новое окружение.
Полезные *NIX команды для веб-разработчика
Russian (Pусский) translation by Anton L (you can also view the original English article)
Зачем *NIX и зачем вообще нужно открывать консоль?
Согласно статистике W3Techs, 68% веб-сайтов используют Unix, веб-сайтов операционную систему, которых удалось определить. Это значит, что будучи веб-разработчиком, ваш код скорее всего работает на одном из Linux серверов. И вам не помешает знать, как настраивать и отлаживать ваш код на Unix и Linux системах. Давайте же разберёмся, что вам понадобиться для комфортного использования командной строки.
Основы
Стандартная *NIX команда состоит из трёх частей:
Перенаправление Ввода/Вывода (I/O) и пайплайны (Pipelines)
Большинство *NIX команд для взаимодействия используют текстовый ввод и вывод, посредством перенаправления вывода вы можете добавить результат команды в файл, а также передать вывод одной команды, как ввод другой, используя пайплайны. К примеру, мы можем добавить результат команды ls в текстовый файл:
Основные команды
Чтобы запустить такие команды, как сохранение конфигурации и перезагрузка процесса, вам нужно выполнить их от имени супер пользователя. Для этого перед командой укажете sudo :
Если вы хотите выполнить несколько команд от имени супер пользователя, используйте команду su для переключения пользователей.
Обратите внимание: Ради безопасности и для предотвращения случайного выполнения значимых команд, которые могут повлиять на работу системы, не используйте sudo и su без веской на то причины.
К более реальным примерам
Основы навигации
Ниже, три основные команды для навигации по файловой системе:
Вот пример использования этих команд с итоговым результатом в терминале:
Поиск файлов
Найти все файлы с размером больше 500-от мегабайт:
Управление файлами и папками
Есть пять основных команд для управления папками и файлами в *NIX системах:
Изменение прав доступа
Чтение файлов
Если вы хотите выбрать необходимые строки при выводе результата в консоль, воспользуйтесь grep :
Как вы можете заметить, grep отлично сочетается с пайплайнами. Последняя команда в примере выше, выведет все строки содержащие слова “shutting down” из файлов с логами.
Редактирование файлов
Ниже будут перечислены три самых популярных текстовых редактора, с которыми можно взаимодействовать в консоли:
Сравните их и выберете редактор, который подходит вам:
Архивы
Иногда есть необходимость создать резервную копию и сжать некоторые данные на сервере.
Для создания архива используйте следующие команды:
Разархивировать интересующие вас файлы, можно следующими командами:
Периодическое выполнение задач
В выводе выше, нам показан пример cron таблицы. Можно заметить, что каждая строчка относится к времени выполнения: минута, час, день месяца, месяц и день недели. В каждом поле может находиться значок звёздочки, являющийся значением для данного поля. Также есть возможность указать множества и временные промежутки, используя запятые и дефисы. Указав после временного промежутка слэш, вы тем самым пропускаете числовые значения в этом промежутке. В данном примере, первая команда будет запускаться каждые пять минут, вторая команда запустится с понедельника по пятницу в 15:00.
Мониторинг Производительности
Команда top показывает информацию о системе, а также предоставляет мониторинг запущенных процессов в реальном времени. Нажмите Shift-M для сортировки процессов по потреблению памяти, Shift-P для сортировки программ в зависимости от нагрузки на процессор.
История Командной Строки
Заключение
Использование консоли не такой сложный процесс, как вы можете подумать. Принципы работы Unix и Linux систем довольно легко понять, благодаря простому дизайну и замечательной документации. Надеюсь эта статья поможет вам почувствовать себя комфортно при работе с командной строкой и вы открыли для себя новые команды, которые пригодятся при создании и поддержке веб-приложений.
Если хотите поделиться своей любимой командой или у вас имеются вопросы, воспользуйтесь комментариями расположенными под этой статьёй.