Что такое nix система
Чем Linux отличается от UNIX, и что такое UNIX-подобная ОС?
UNIX (не стоит путать с определением «UNIX-подобная операционная система») — семейство операционных систем (Mac OS X, GNU/Linux).
Первая система была разработана в 1969 в Bell Laboratories, бывшей американской корпорации.
UNIX-подобная ОС
UNIX-подобная ОС (иногда используют сокращение *nix) — система, образованная под влиянием UNIX.
Слово UNIX используется как знак соответствия и как торговая марка.
Консорциум The Open Group обладает торговой маркой «UNIX», но наиболее известен как сертифицирующий орган для торговой марки UNIX. Недавно на The Open Group был пролит свет в связи с публикацией спецификации «Single UNIX Specification», стандартов которым должна удовлетворять ОС чтобы гордо называться Unix.
Вот здесь вы можете взглянуть на генеалогическое древо UNIX-подобных операционных систем.
Linux
Linux — общее название UNIX-пободных операционных систем, которые разработаны в рамках проекта GNU (проект по разработке СПО). Linux работает на огромном множестве архитектур процессора, начиная от ARM заканчивая Intel x86.
Наиболее известными и распространенными дистрибутивами являются Arch Linux, CentOS, Debian. Также существует много «отечественных», российских дистрибутивов — ALT Linux, ASPLinux и другие.
Возникает довольно много споров об именовании GNU/Linux.
Сторонники «open source» используют термин «Linux», а сторонники «free software» — «GNU/Linux». Я предпочитаю первый вариант. Иногда для удобства представления термина GNU/Linux используют написания «GNU+Linux», «GNU-Linux», «GNU Linux».
В отличие от коммерческих систем (MS Windows, Mac OS X) Linux не имеет географического центра разработки и определенной организации, которая владела бы системой. Сама система и программы для нее — результат работы огромных сообществ, тысяч проектов. Присоединиться к проекту или создать свой может каждый!
Вывод
Подводя итог, я могу сказать, что отличия между Linux и UNIX очевидны. UNIX — намного более широкое понятие, фундамент для построения и сертификации всех UNIX-подобных систем, а Linux — частный случай UNIX.
Unix-подобная операционная система
Unix-подобная операционная система
UNIX-подобная операционная система (иногда сокр. *nix) — система, которая образовалась под влиянием UNIX. Термин включает свободные/открытые операционные системы, образованные от UNIX компании Bell Labs или эмулирующие его возможности, коммерческие и запатентованные разработки, а также версии, основанные на исходном коде UNIX. Нет стандарта, определяющего термин, и допустимы различные точки зрения о том, считать ли определённый продукт UNIX-подобным или нет.
Содержание
Термин «UNIX-подобный» и торговая марка UNIX
The Open Group обладает торговой маркой UNIX и ведёт дела Single UNIX Specification, где слово UNIX используется как знак соответствия. Они не приветствуют употребление термина «UNIX-подобный» и считают, что это злоупотребление их товарным знаком. Руководство группы требует использования заглавных букв в названии UNIX или в другом случае отдельно от остального текста, одобряют использование слова UNIX как прилагательного в сочетании с такими словами, как «система», и не одобряют написание через дефис (относится к английскому тексту). Наиболее близкий термин, который они сочли бы корректным, был бы UNIX system-like. [1]
С 2007 года ведётся спор между Wayne R. Gray и The Open Group, в котором обсуждается использование слова UNIX как торгового знака. [2] По словам Trademark Trial and Appeal, Board Grау со своей компанией требует от The Open Group предоставить ему документацию для их требований к торговой марке.
Также, в 2007 году The Open Group настояла на том, чтобы немецкий Университет Касселя не использовал «UNIK» в качестве сокращения. [3]
Категории
Деннис Ритчи, один из создателей UNIX, выразил своё мнение, что UNIX-подобные системы, такие как Linux, являются де-факто UNIX-системами. Эрик Рэймонд предложил разделить UNIX-подобные системы на 3 типа:
Генетический UNIX Системы, исторически связанные с кодовой базой AT&T. Большинство, но не все коммерческие дистрибутивы UNIX-систем подпадают под эту категорию. Так же, как и BSD-системы, которые являются результатами работы университета Беркли в поздних 1970-х и ранних 1980-х. В некоторых из этих систем отсутствует код AT&T, но до сих пор прослеживается происхождение от разработки AT&T. UNIX по товарному знаку или бренду Эти системы, в основном коммерческого характера, были определены The Open Group как соответствующие Единой спецификации UNIX, и им разрешено носить имя UNIX. Большинство этих систем — коммерческие производные кодовой базы System V в той или иной форме (например, Amiga UNIX), хотя некоторые (например, z/OS компании IBM) заслужили торговую марку через слой совместимости с POSIX, не являясь по сути UNIX. Многие старые UNIX-системы не подходят под это определение. UNIX по функциональности В целом, любая система, поведение которой примерно соответствует спецификации UNIX. К таким системам можно отнести Linux и Minix, которые ведут подобно UNIX-системе, но не имеют генетических связей с кодовой базой AT&T. Большинство свободных/открытых реализаций UNIX, являясь генетическим UNIX или нет, подпадают под ограниченное определение этой категории в связи с дороговизной сертификации The Open Group, которая стоит несколько тысяч долларов.
Cygwin, не являясь операционнной системой, предоставляет UNIX-подобную среду в Microsoft Windows; также существуют сервисы Microsoft Windows для UNIX.
Развитие UNIX-подобных систем
UNIX-системы начали появляться с поздних 1970-х и ранних 1980-х. Много проприетарных версий, таких как Idris (1978), Coherent (1983), и UniFlex (1985), ставили целью обеспечить нужды бизнеса функциональностью, доступной обученным пользователям UNIX.
Когда AT&T разрешила коммерческое лицензирование UNIX в 1980-х, множество разработаных проприетарных систем основывались на этом, включая AIX, HP-UX, IRIX, Solaris, Tru64, Ultrix и Xenix. Это во многом вытесняло проприетарных клонов. Растущая несовместимость между системами привела к созданию стандартов взаимодействия, в том числе POSIX и Единой спецификации UNIX.
Между тем, в 1983 году был запущен проект GNU, благодаря которому удалось сделать операционную систему, которую все пользователи компьютера могли свободно использовать, изучать, исправлять, пересобирать. Различные UNIX-подобия разрабатывались аналогично GNU, часто с теми же основными компонентами. Они прежде всего служили дешёвым замещением UNIX и включали 4.4BSD, Linux и Minix. Некоторые из них послужили основой для коммерческих UNIX-систем, таких как BSD/OS и Mac OS X. Примечательно, что Mac OS X 10.5 (Leopard) сертифицирован Единой спецификацией UNIX. [4]
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.
Nix как менеджер зависимостей для C++
В последнее время много разговоров идет о том, что для C++ нужен свой пакетный менеджер подобный pip, npm, maven, cargo и т.д. Все конкуренты имеют простой и стандартизированный механизм подключения нестандартной библиотеки. В C++ же все действуют как умеют: кто-то прописывает в README список пакетов для Ubuntu, CentOS и других дистрибутивов, кто-то использует git submodule и скрипты для их сборки, кто-то использует CMake ExternalProject, кто-то копирует все исходники в один гигантский репозиторий, кто-то делает образ Docker или Vagrant.
Чтобы решить проблему был даже создан стартап — biicode, но он обанкротился и его будущее неизвестно. Взамен появился conan, дополняя зоопарк конкурентов — nuget, cget, hunter, cpm, qpm, cppget, pacm и даже gradle for c++.
Меня не устраивал ни один из перечисленных способов. Я было начал писать пакеты для Conan, но столкнулся с большим числом хаков, неразвитым API, отсутвием гайдлайнов и, как следствие, низкой вероятностью переиспользования чужих пакетов. И тут вспомнилось, что когда-то мне очень понравились идеи пакетного менеджера в NixOS. И подумал — а зачем плодить пакетный менеджер специально для C++, если те же задачи решает обычный пакетный менеджер? Нужно только чтобы он был достаточно гибким и простым в части описания пакета. И Nix идеально подошел на эту роль.
Итак, что дал нам Nix:
Что такое Nix
Таким образом, «пакет» (здесь он называется derivation) в Nix — это функция, а «зависимости» — это аргументы этой функции. Что же такое репозиторий ( NixPkgs )? Это тоже функция, у которой нет аргументов, которая возвращает множество пакетов. Получается ли, что для использования репозитория нужно собрать все 7344 пакета? Нет! Nix — ленивый язык, а это значит ничего не будет вычисляться, пока оно явно не потребуется. А «потребовать» пакет можно утилитами.
Минимальное окружение
Итак, прежде чем использовать Nix его нужно установить. Для этого можно либо использовать целый дистрибутив Linux (NixOS), либо установить пакетный менеджер отдельно для вашей любимой ОС (поддерживается Linux и MacOS). Все воздействия Nix будут ограничены каталогом /nix и файлами в домашнем каталоге (
/.nix-profile хранятся симлинки на пакеты, которые запросил пользователь. Нам же нужно настроить окружение не для пользователя, а для проекта. Для этого используем утилиту nix-shell : она выполняет данное на вход выражение Nix и запускает bash шелл, в котором доступен результат (и только он). Проверяем:
Окружение для сборки пакета
Здесь мы написали функцию, которая на вход принимает репозиторий (а если параметр не задан — импортирует стандартный nixpkgs ) и возвращает «пакет» окружения нашего проекта. Добавим в него свежие CMake, Boost и Google Test из репозитория NixOS:
Здесь buildInputs — зависимости, которые необходимы для сборки. Зачем еще nativeBuildInputs? Все дело в том, что Nix поддерживает кросс-компиляцию. И здесь мы говорим, что пакеты buildInputs должны быть собраны target тулчейном, а nativeBuildInputs нужно собрать обычным host тулчейном. Есть еще propagatedBuildInputs — он добавляет зависимость всем пользователям пакета.
Собираем зависимость, которой нет в nixpkgs
Теперь мы хотим добавить в наш проект cppformat. Сначала ищем его в nixpkgs :
Пусто. Придется писать собственное выражение. Благо это всего 10 строчек. Добавим их в «let»:
Модифицируем пакет из репозитория
Иногда нужный пакет в репозитории есть, но собран не так, как нам хочется. Нужно собрать его определенную версию, наложить патч, использовать определенные флаги. Nix позволяет это сделать без необходимости копипастить код из репозитория:
Модифицируем пакет в репозитории
Интеграция с сторонними пакетными менеджерами и платформами
Интегрируем Nix в YouCompleteMe
YouCompleteMe — пожалуй самый популярный движок автодополнения кода для C++, который не является частью IDE. Он вышел из Vim, но уже есть порты для Atom и, возможно, других редакторов. Если раньше разработчики должны были конфигурировать его самостоятельно под свою систему, то теперь мы можем сделать это универсально:
Заключение
Nix — одновременно гибкий, удобный и простой пакетный менеджер, который построен на принципах функционального программирования и претендует на роль пакетного менеджера для всего. Особенно он может быть удобен C/C++ программистам, т.к. позволяет заполнить пустующую у данного языка нишу. Используя его, можно патчить и добавлять библиотеки в проект не вызывая боль и ненавистить у коллег. А новичек, прибывший в команду, не будет тратить свои первые рабочие дни на сборку проекта.
Теоретический минимум *nix-based-систем для WebDev-падавана
Помни: сила рыцаря-джедая — это сила Вселенной.
Но помни: гнев, страх — это всё ведет на темную сторону Силы.
Как только ты сделаешь первый шаг по темному пути,
ты уже не сможешь с него свернуть…
Добрый день, уважаемый галактический сенат! На связи снова Денис Мельский, и сегодня на повестке дня — определение теоретического минимума познания *nix систем для юного падавана web-мастерства.
Хотелось бы начать с того, что все мы прекрасно знаем: на 67.4 % наши любимые интернеты крутятся на *nix-based-серверах, а в жизни среднестатистического web-разработчика в вакууме — так и на все 90 %.
Для любителей пруфов — welcome.
Т. ч. в нашем ремесле без знания *nix-систем никак. Давайте проведем экскурс в мир *nix и поймем, какими знаниями должен обладать юный падаван.
Предлагаю рассмотреть три юниорских степени познания дзена управлением шайтан-машиной ака *nix-сервак на примере всеми любимой ubuntu.
1-й юниорский
Начнем с самых азов — забудьте про GUI, только консоль, только хардкор ^_^!
Несколько красивых консолей в xmonad для повышения мотивации.
Наше приключение начинаем с того, что надо добраться до консоли (в случае SSH-подключения мы там будем сразу). Кстати, если вы windows user, вам поможет волшебная программка putty.
Если же вы уже в линуксе и вы его поставили, верю, что сможете найти там консоль и как в нее попасть. Если же нет, вот мануал на примере ubuntu с самыми популярными DWM. Там же найдете описание базовых команд консоли. Рассмотрим сей список поподробнее и немного сгруппируем.
Давайте посмотрим на структуру файловой системы.
Да, не пугайтесь, привычных C: и D: тут нету, всё идет от корня (/).
/ | Корневая директория, содержащая всю файловую иерархию. |
/bin/ | Основные системные утилиты, необходимые и в однопользовательском режиме, и при обычной работе всем пользователям (cat, ls, cp). |
/boot/ | Загрузочные файлы (в том числе, файлы загрузчика, ядро и т. д.). Часто выносится в отдельный раздел. |
/dev/ | Основные файлы устройств системы (например, физические устройства: sata-винчестеры /dev/sda, видеокамеры или TV-тюнеры /dev/video или псевдоустройства, например, «черные дыры» /dev/null, /dev/zero). |
/etc/ | Общесистемные конфигурационные файлы и файлы конфигурации установленных программ (имя происходит от et cetera). |
/home/ | Содержит домашние директории пользователей, которые, в свою очередь, содержат персональные настройки и данные пользователя. Часто размещается на отдельном разделе. |
/lib/ | Основные библиотеки, необходимые для работы программ из /bin/ и /sbin/. |
/media/ | Точки монтирования для сменных носителей (CD-ROM, DVD-ROM, flash-диски). |
/opt/ | Дополнительное ПО. |
/proc/ | Виртуальная файловая система, представляющая состояние ядра операционной системы и запущенных процессов в виде каталогов файлов. |
/root/ | Домашняя директория пользователя root. |
/sbin/ | Основные системные программы для администрирования и настройки системы, например, init, iptables, ifconfig. |
/tmp/ | Временные файлы (см. также /var/tmp). |
/usr/ | Вторичная иерархия для данных пользователя; содержит большинство пользовательских приложений и утилит, используемых в многопользовательском режиме. Может быть смонтирована по сети только для чтения и быть общей для нескольких машин. |
/var/ | Изменяемые файлы: файлы регистрации (log-файлы), временные почтовые файлы, файлы спулеров. |
/var/cache/ | Данные кэша приложений. Сюда скачиваются пакеты перед установкой в систему, здесь же они какое-то время хранятся. |
/var/lib/ | Информация о состоянии. Постоянные данные, изменяемые программами в процессе работы (базы данных, метаданные пакетного менеджера и т. п.). |
/var/log/ | Различные файлы регистрации (log-файлы). |
/var/www/ | Директория веб-сервера Apache, всё, что находится внутри, транслируется им в интернет (конфигурация по умолчанию) |
Теперь мы узнали, как выглядит файловая система *nix.
Nano
MCEdit
Чип и Дейл спешат на помощь! В любой непонятной ситуации вводите man %commandName%, и восхитительная утилита man в *nix-системах вам расскажет как работает та или иная команда (программа) в bash.
Если вы потерялись в файловой системе, поможет команда pwd.
Теперь давайте обозначим еще некоторые особенности этого семейства OS.
*nix-системы отличаются регистрозависимостью т. е. file.txt и File.txt — разные файлы. И директории /uploads и /Uploads — тоже разные директории.
Еще несколько важных отличий:
В PHP-разработке для ликвидации этих проблем кроссплатформености рекомендуется использовать PHP_EOL для новой строки в консоли и DIRECTORY_SEPARATOR для правильных слешей.
В контексте обсуждения файловой системы и фич linux давайте рассмотрим интересную фичу — симлинки (symlinks). Если объяснить по-простому — это ярлыки, как в всем известной windows, только тут ярлык может быть и на другой сервер, и на директорию, и на файл. Отличие от ярлыков в windows в том, что тут ярлыки используют не только на рабочем столе, а во всей файловой системе. По поводу этого есть хорошая статья на вики en.wikipedia.org/wiki/Symbolic_link и немного синтаксиса с вики debian вдогонку: wiki.debian.org/SymLink.
Почему многие developer-ы любят *nix-системы? Да потому что они стандартизированы системой стандарта POSIX, что их все роднит и помогает спокойно мигрировать из одной стандартизированной OS в другую (и разработчику, и юзеру. Тема раскрыта тут: en.wikipedia.org/wiki/POSIX.
Основное отличие *nix-систем — их многопользовательский подход. Из этого следует логический вывод: если есть много пользователей, надо разграничивать их сферы влияния. Один из основных инструментов для этого — права к файлам и директориям.
Обозначения прав идут в буквенном или цифровом формате.
Нашел потрясающую картинку, которая объясняет всю суть происходящего.
Добавлю, что в жизни веб-разработчика всегда нужно помнить о правах в linux, поскольку имеет место обыденная ситуация: разрабатывали под windows, задеплоили и внезапно (!) ничего не работает. В целом ничего страшного в них нету, но keep in mind.
P. S. Советую хорошо разобраться в этом моменте, поскольку ставить 777 на весь проект тоже не очень секьюрно.
Для пользователей системы существует режим стандартных правил для создаваемых ими файлов — umask. От него зависит, с какими правами будут создаваться файлы этого пользователя по умолчанию.
Почитать здесь: ru.wikipedia.org/wiki/Umask.
Я вскользь упомянул о наличии пользователей и групп в *nix-системах, но еще есть административный пользователь — root.
Root-юзер помогает вам делать многое: инсталлить софт, маунтить (https://help.ubuntu.com/community/Mount) разделы, разруливать права на файлы и папки где вашего обычного юзера не хватает, и т. п.
Для этого есть волшебная команда sudo. Более подробно предлагаю ознакомиться здесь: help.ubuntu.ru/wiki.
Под рутом надо быть очень аккуратными. Особенно на лайв-серверах. Особенно удаляя что-то через консоль.
Раз уж мы вспомнили о лайв-серверах, у них бывает такое свойство — заканчивается память.
Сначала проверяем, что у нас с ОЗУ, для этого подойдет top/htop.
Давайте также вспомним замечательную тулзу — ps. Она выводит отчет о работающих процессах. Удобна еще и несколькими триками:
Если проблема в ОЗУ, смотрим, что у нас потребляет больше, чем надо, и делаем kill, или же, если это нужные процессы, — думаем дальше :).
Если же заканчиваются ресурсы харда и нечего удалить, на помощь приходят архиваторы. Основной архиватор в мире linux — tar. Вот небольшой гайд по сабжу, которого в повседневной жизни вам должно хватить с головой: help.ubuntu.ru/wiki/tar.
Стоит добавить, что в консоли есть варианты работы с несколькими программами одновременно — утилита GNU Screen: help.ubuntu.ru/wiki/screen.
В целом на этом можно и закончить первую степень посвящения, но обрадую немного тех, кто очень боится консоли: есть консольный 2-панельный классический файловый менеджер — Midnight commander.
Это dotfiles — спрятанные файлы, просто по ls их не видно, можно увидеть через ls –la. Зачастую это системные файлы или файлы программ (иногда — настройки). И тут тоже вики хорошо раскрывает тему: en.wikipedia.org/wiki/Hidden_file_and_hidden_directory.
2-й юниорский
Первый юниорский нам поможет сделать что-то, но для повседневных задач web-developer’а этого мало, так что давайте пойдем дальше осваивать уровень, которого нам хватит для резолва ежедневных задач.
Первое, о чём надо упомянуть на этом уровне — пакетный менеджер aptitude (разбираем на примере ubuntu, да и в целом debian-based systems).
С его помощью можем устанавливать и удалять программы в й системе, подробнее рекомендую почитать, как говорится, на сайте производителя: help.ubuntu.ru/wiki/apt.
Следующая повседневная задача — установка lamp (linux apache php mysql)-сервера.
Вы не поверите, но после установки сервера на Windows в Ubuntu это делать просто и приятно, буквально в несколько команд: help.ubuntu.com/community/ApacheMySQLPHP
Конечно же, нам пригодятся Virtual Hosts. Файл хостов находится по адресу /etc/hosts, а хосты надо редактировать под рутом.
Пришло время упомянуть базовые команды Apache.
Включаем модули в apache, в том числе, модуль PHP (если ставим руками) — a2enmod %moduleName%.
Рестарт сервера — sudo service apache2 restart.
Вернемся к хостам. В apache, да и в nginx система хостов не очень сложная, но, как показывает практика, лучше рассказать, чтобы не видеть потом огромные и ужасные httpd.conf/nginx.conf.
Хосты, которые настроены и существуют (но не факт, что включены!) лежат отдельными файликами в папке /etc/apache2/sites-available. А хосты, которые используются и активны в данный момент, лежат симлинками в папке /etc/apache2/sites-enabled.
In real life выглядит все так: мы создаем файл конфига для нового хоста в sites-available, потом командой a2ensite %hostName% apache создает симлинк в папке sites-enabled, тем самым активируя хост. Обратная процедура — a2dissite.
Когда вы делаете это руками или просто пишете в файл основнового конфига, где-то плачет один котик, ну, или собачка — кому кого больше жаль :).
Ещё распространенная задача — поднять https. Хороший мануал здесь:
help.ubuntu.ru/wiki/apache_%D0%B8_https.
Картинка, обьясняющая суть того, зачем нам https.
Если вас всё ещё терзает вопрос зачем эта вся секьюрность, советую почитать на тему секьюрности для разработчиков хороший мануал: www.owasp.org/index.php/PHP_Security_Cheat_Sheet — тут на примере PHP, но многое актуально для всех Web разработчиков.
Также при работе с lamp старайтесь закрывать использование exec (выполнение команд в консоли OS через php) www.php.net/manual/ru/function.exec.php.
На уровне php это потенциальный пробел в вашей защите.
Добавлю часто встречающуюся задачу — закрытие сервера для незалогиненных пользователей методами веб-сервера, как на этом скрине.
Сделать так очень просто через htpasswd, вот пример: doc.norang.ca/apache-basic-auth.html.
Пришло время упомянуть о базах данных. В нашем юниорском забеге будем рассматривать MySql. В целом по вопросам Database Administration написано очень много книг и очень многое появляется с опытом, но некоторые базовые вещи просто необходимы.
Первое — конфиг живет по адресу /etc/mysql/my.cnf, заходить в гости, как обычно, под рутом.
Перезапустить «моську» можно командой sudo service mysql restart.
Если вы что-то не то сделали с правами своего рута или просто потеряли пароль рута от mysql, сбросить его и задать новый можно командой sudo dpkg-reconfigure mysql-server-5.5 (или 5.6), в общем, подставите нужную версию :).
Перейдем к следующему животрепещущему вопросу в жизни веб-девелопера:
Хоббит SQL-дампы — туда и обратно.
Для бекапа базы в sql-файл используется прекрасная команда mysqldump со следующим синтаксисом:
А если база большая и VPN-коннект не самый быстрый, можно сразу сжать в архив наш дамп следующей командой:
Теперь давайте разберем накатку базы (условие: базы не существует, накатка с нуля).
Основной синтаксис будет такой:
Здесь database — база данных, к которой назначаем права пользователю username с паролем password, а % указывает на то, что пользователь может прийти не только с локалхоста, а откуда угодно.
Эти команды на респекте собрал отсюда: saradmin.ru/?p=792.
Node JS мы также можем установить в две команды “sudo apt-get install nodejs” “sudo apt-get install npm”.
Node-проекты заводить обычно легко, что-то в духе node server.js
Хочу поделиться интересной тулзой nodemon — она дает нам намного больше возможностей в области девелопмента на nodeJS, т. к. следит за изменениями в файлах проекта и перезапускает сервер автоматически:
nodemon.io
Далее рекомендую ознакомиться с работой в консоли самых популярных в мире web development VCS — git и svn. Мануалов по ним очень много разных и хороших, думаю, подберете на свой вкус ;).
3-й юниорский
Вот мы и подобрались к 3-му юниорскому! Довольно неплохой уровень, после которого уже идет хардкор, но тут еще ничего страшного тоже нет, всё достаточно интересно и весело.
Начинается опыт реального подъема серверов с фулстеком (lamp + ftp(s) + ssh) по ситуации, с прикруткой CI-систем, также интересен опыт подъёма хостинг-систем типа Virtualmin / WebMin.
В реальной эксплуатации не рекомендуется оставлять чистый ftp-сервер, лучше использовать SFTP (ftp over ssh) для секьюрности.
help.ubuntu.ru/wiki/webmin
Интересен опыт с nginx вместо apache — отличный мануал можно найти тут: help.ubuntu.ru/wiki/nginx-phpfpm.
Также дополню хорошей онлайн-тулзой которая трансформирует rewrite-правила из apache в формат nginx: winginx.com/ru/htaccess.
Еще на этом уровне не нужно бояться BASH-скриптинга и знать, что такое sed и grep. Основы рекомендую почитать тут:
help.ubuntu.com/community/Beginners/BashScripting
Хороший левел — знание vim или emacs. Очень холиварная тема, но не упомянуть нельзя.
Если временами вы очень скучаете по некоторым программам из windows, или у вас есть специфичный софт, который все-таки нужен и аналог никак не можете найти (что же такое страшное вам нужно?!), есть wine — wine is not an emulator.
IE В Ubuntu («работает» еще веселее, чем в нативной среде обитания).
Это действительно не эмулятор windows, а набор библиотек, чтобы заводить виндовые програмы под никсами. Есть база данных, какие программы и даже игры поддерживает wine — appdb.winehq.org.
Давайте затронем сетевую тему, первым в гостем нашей студии станет netstat (network statistics), встречайте! Тулза поможет нам посмотреть статистику сетевой активности, открытые порты, наши сетевые интерфейсы и т. д.
Примеры использования: putty.org.ru/articles/netstat-linux-examples.html.
Спасибо, netstat.
Следующий наш гость — Iptables, встречайте!
IPtables — стандартный интерфейс управления работой брандмауэра.
Базовая информация: en.wikipedia.org/wiki/Iptables
Спасибо, Iptables!
И в заключение сетевой темы давайте позовем нашего хедлайнера — nmap. Поприветсвуем гостя nmap!
Очень известная утилита в области сетевой безопасности, видеть ее мы могли в десятках фильмов ;).
nmap.org/movies
Спасибо nmap за столь увлекательную историю и счастливое детство.
Предлагаю перейти на немного advanced level MySQL-тюнинга — PIMP MY DB.
В живых проектах очень важно держать MySQL в боевом состоянии, настроенным на максимальную стабильность и производительность, в противном случае получаем очень неприятный bottleneck.
DB Tuning можно условно разделить на две части:
Оптимизация структуры базы данных (нормализация/денормализация, foreign keys, indexes и т. д.).
Оптимизация настроек сервера DB.
Про оптимизацию структуры базы данных написано немало гайдов и мануалов, и серебряной пули тут не существует. Всегда смотрим на конкретный проект и индивидуальные проблемы. Explain в помощь :).
ruhighload.com/post habrahabr.ru/post/108418
В вопросе тюнинга и оптимизации настроек DB очень преуспела компания Percona — MySQL-форк. Рекомендую познакомиться с ними поближе.
Из базового набора для тюнинга у них есть тулкит и визард настройки вашего сервера.
Также известная тулза — mysqltuner (http://mysqltuner.com/).
Для тестирования нагрузки на MySQL есть интересная тулза sysbench. Почитать про нее можно тут: ruhighload.com/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql.
Добавим в наше приключение немного стильных, модных и молодежных технологий — CI.
Wiki: Непрерывная интеграция (англ. Continuous Integration) — практика разработки ПО, которая заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем.
На практике это очень удобный софт, позволяющий собирать билды, прогонять все виды тестов, делать минификацию js/css, следить за качеством кода, деплоить, итп.
Самые популярные — Jenkins, Travis, TeamCity.
P. S. Клевая тулза Guake —выезжающая консолько в стиле quake.