Что такое никсы в компьютере
В 1970-х годах в мире появился UNIX — операционная система, из которой растут ноги у большинства современных операционок. Для своего времени это был технологический прорыв, а заложенные там принципы мы используем до сих пор. В этой статье — что же там было такого революционного.
👍 Статья расширяет кругозор и помогает лучше понять информатику, но не имеет прикладной ценности. Если вам нужно что-то прикладное — прочитайте про размеры элементов в CSS.
UNIX-подобные системы
На основе оригинальных версий Юникса появилось много разных операционных систем: BSD, Solaris, HP-UX и даже MacOS, который сделан на основе BSD версии 4.4. Идеи, которые были заложены 50 лет назад, оказались настолько рабочими, что применяются до сих пор.
А ещё есть Linux и его производные — RedHat, Calculate, Ubuntu и ещё сотня дистрибутивов. Многие думают, что Линукс — это развитие Юникса, но на самом деле это полностью самостоятельное и независимое от него семейство операционных систем, хотя и слова похожие. Про Линукс обязательно расскажем в следующей статье.
Мы в Typeable хотели опубликовать небольшой цикл статей о том, как Nix нам помогает (и немного мешает) в разработке. Но, проведя немножко времени в поисках похожего материала здесь, с удивлением обнаружили, что на Хабре нет толкового введения в Nix, на которое можно было бы сослаться.
Статья от @snizovtsev подойдёт как хорошее введение при разработке на C++, но это не совсем то введение, которое мне хотелось бы видеть. Поэтому я решил написать его сам 🙂
Файлы к этой статье можно найти здесь.
Сейчас на сайте
Мода га кэжуал начался в англии в 70-х годах. Кэжуал как стиль одежды представляет собой брендовые вещи (итальянские, английские. ) в которых удобно и практично. НЕ ПУТАТЬ С ОФФНИКАМИ.
значение (2): Уточнение: От англ. by the way.
пример текста: Можно на кайсе с твоего акка разок скатать как нибудь бтв.
значение (2): Уточнение: Соревнования мирового масштаба MLG по популярным играм вроде CS:GO и Dota 2 (Егор Давыдов,)
Уточнение: Эдакий стиль на картиночках и видеороликах с множеством прифотошопленных обрезанных изображений мемов и популярных джпегов. (Kagebunshin, Самара).
пример текста: Ты кого то с первого раза убил? Тогда mlg.
значение (2): Уточнение: Так же обозначает Взаимный Пиар, пользуется большой популярностью среди пользователей социальной сети "Вконтакте". (Kagebunshin,Самара)
Уточнение: Вп - важные переговоры или же взаимный пиар. (Ку-Ку).
значение (3): Уточнение: Взаимоисключающие параграфы - выражение с сайта "Луркмор", ставшее мемом, означает, что один параграф статьи на Лурке противоречит другому..
пример текста: для вп, что значит для важных переговоров.
значение: Человек слушающий к-поп - Korean pop, то есть любитель корейской популярной музыки. (подробнее) (скрыть)
значение: Это значит, что в голове человека происходят некоторые метаморфозы и он говорит всякие несуразицы. (подробнее) (скрыть)
значение (1): На сленге означает «хитрости жизни», «народную мудрость» или полезный совет, помогающий решать бытовые проблемы, экономя тем самым время. (подробнее) (скрыть)
значение: Блэ́к-ме́тал, или просто — блэк, — музыкальный стиль, одно из экстремальных направлений метала. (подробнее) (скрыть)
Жанр зародился в 1980-х как ответвление трэш-метала. Пионерами блэка принято считать английскую группу Venom и шведскую Bathory.
пример текста: Mayhem играют труЪ норвежский блэк метал.
значение (2): Уточнение: Увеличивает значимость чего либо, показывает удивление.
пример текста: Капец уже сколько времени я миду здесь!
значение (2): Лёгкий наркотик, или прямое значение слова.
пример текста: Закрутить дерьмо. Барыжить дерьмом.
значение: Пейринг (Pairing) – определение, не отделимое от фанфиков, описывающих романтические и сексуальные отношения. (подробнее) (скрыть)
Эта строка в шапке позволяет определить, какие два (три и даже больше) персонажа окажутся по ходу действия в постели. M/f и f/m обозначают взаимодействие мужчины с женщиной и женщины с мужчиной. M/m и F/f обозначают соответственно гомосексуальные и лесбийские отношения. Хорошо известных персонажей канона обычно обозначают инициалами.
значение (1): VMP - русскоязычный, многопльзовтельский, комерческий проект на основе компьютерной игры "GTA 5" (подобие SAMP RP проектов). (подробнее) (скрыть)
значение (1): используется для употребления смеха (лол-смешно, лалка-девушка, которая лоханулась ) лол, лалка и т.д. (подробнее) (скрыть)
лалки.
значение (2): Уточнение: Оскорбление, синоним слова "лох, лошок"
Уточнение: Лалка это оскорбление! Лалка девушка которая лохонулась или просто лошок, лох ) (Москва).
пример текста: Ну ты лалка! Лалка.
Ну ,лол.
значение (1): Переводится как смешно, так же ЛАЛКА -смешная Употребляется в смешной, шуточной, глупой ситуации, так же после шуток или смешных рассказов. (подробнее) (скрыть)
значение (2): Уточнение: LOL (также lol или лол; от англ. laughing out loud — громко, вслух смеясь; или laugh out loud — громко, вслух смеяться; или lots of laughs — много смеха) — англоязычный акроним, интернет-мем. Термин используется в сетевом общении главным образом для выражения смеха в письменной форме ©Wikipedia.
пример текста: -Сегодня я упал по среди дороги -Лоол.
Эта строка в шапке позволяет определить, какие два (три и даже больше) персонажа окажутся по ходу действия в постели. M/f и f/m обозначают взаимодействие мужчины с женщиной и женщины с мужчиной. M/m и F/f обозначают соответственно гомосексуальные и лесбийские отношения. Хорошо известных персонажей канона обычно обозначают инициалами.
значение (1): Переводится как смешно, так же ЛАЛКА -смешная Употребляется в смешной, шуточной, глупой ситуации, так же после шуток или смешных рассказов. (подробнее) (скрыть)
значение (2): Уточнение: LOL (также lol или лол; от англ. laughing out loud — громко, вслух смеясь; или laugh out loud — громко, вслух смеяться; или lots of laughs — много смеха) — англоязычный акроним, интернет-мем. Термин используется в сетевом общении главным образом для выражения смеха в письменной форме ©Wikipedia.
пример текста: -Сегодня я упал по среди дороги -Лоол.
значение (2): Уточнение: Так же обозначает Взаимный Пиар, пользуется большой популярностью среди пользователей социальной сети "Вконтакте". (Kagebunshin,Самара)
Уточнение: Вп - важные переговоры или же взаимный пиар. (Ку-Ку).
значение (3): Уточнение: Взаимоисключающие параграфы - выражение с сайта "Луркмор", ставшее мемом, означает, что один параграф статьи на Лурке противоречит другому..
пример текста: для вп, что значит для важных переговоров.
значение (2): Уточнение: Увеличивает значимость чего либо, показывает удивление.
пример текста: Капец уже сколько времени я миду здесь!
значение (1): азаза означает что то смешное это слово говорят в тот момент когда смеяться нельзя но смешно. (подробнее) (скрыть)
значение (2): азазные мысли означает смешные мысли.
значение (3): Уточнение: Бывший некогда популярный мем, перифраз устоявшегося ахаха, обычно упоминается школьниками (polycyhoe).
пример текста: азаза.
значение (2): Уточнение: Соревнования мирового масштаба MLG по популярным играм вроде CS:GO и Dota 2 (Егор Давыдов,)
Уточнение: Эдакий стиль на картиночках и видеороликах с множеством прифотошопленных обрезанных изображений мемов и популярных джпегов. (Kagebunshin, Самара).
пример текста: Ты кого то с первого раза убил? Тогда mlg.
значение (1): На сленге означает «хитрости жизни», «народную мудрость» или полезный совет, помогающий решать бытовые проблемы, экономя тем самым время. (подробнее) (скрыть)
значение (1): Недогруппа состоящая из 4 недоучстников , которые не сравнятся с 1D. (подробнее) (скрыть)
значение (2): Уточнение: Крутая музыкальная группа, созданная Константином Меладзе 22 ноября 2014 года. Имеет большой успех в России и странах СНГ (Jule,Краснодар ).
значение (1): используется для употребления смеха (лол-смешно, лалка-девушка, которая лоханулась ) лол, лалка и т.д. (подробнее) (скрыть)
лалки.
значение (2): Уточнение: Оскорбление, синоним слова "лох, лошок"
Уточнение: Лалка это оскорбление! Лалка девушка которая лохонулась или просто лошок, лох ) (Москва).
пример текста: Ну ты лалка! Лалка.
Ну ,лол.
значение: Если агрессивные люди: человек, делающий какие либо промахи; имеющий малый ум. Если лучшие подруги: человек, который сделал что-то не так (но на это обижаться не стоит). (подробнее) (скрыть)
происхождение: от арийского - ду - двойное, ра - солнце. Но в нашем времени оскорбление.
синонимы: тупая, недоумевающая.
Мода га кэжуал начался в англии в 70-х годах. Кэжуал как стиль одежды представляет собой брендовые вещи (итальянские, английские. ) в которых удобно и практично. НЕ ПУТАТЬ С ОФФНИКАМИ.
Мы в Typeable хотели опубликовать небольшой цикл статей о том, как Nix нам помогает (и немного мешает) в разработке. Но, проведя немножко времени в поисках похожего материала здесь, с удивлением обнаружили, что на Хабре нет толкового введения в Nix, на которое можно было бы сослаться.
Статья от @snizovtsev подойдёт как хорошее введение при разработке на C++, но это не совсем то введение, которое мне хотелось бы видеть. Поэтому я решил написать его сам :)
Ищут сейчас
Некоторые аспекты самостоятельной сборки компьютера
Делая выбор между заказом уже профессионально собранного и оттестированного компьютера и покупкой набора комплектующих и последующей самостоятельной сборкой ПК, мы настоятельно рекомендуем ознакомиться с этим документом.
Плюсы «самособора» известны (экономия, самообразование, развлечение) и обсуждать мы их не будем. Поговорим о некоторых неочевидных минусах.
Каждый компонент современного системного блока (процессор, мат.плата, видеокарта, память, блок питания, жесткий диск, DVD-RW и т.п.) имеет некий входной процент брака для абсолютно новых изделий. Причём от этого не страхуют (а, скорее, усугубляют проблему) ни выбор заведомо более дорогих комплектующих, чем требуется, ни чтение профильных журналов, ни покупка только своего любимого бренда и т.п. Это просто закон индустрии, всегда подтверждаемый статистикой. Для HDD, например, этот процент никогда не опускается ниже 0.5% ни для одной модели ни одного производителя, для мат.плат и видеокарт эти проценты, как правило, выше. Казалось бы, что такого, что с вероятностью 0.5-1.5% купленный вами для сборки ПК HDD окажется неисправен…
А теперь подсчитаем, сделав фантастически оптимистичное предположение (для большей наглядности), что для всех основных составляющих системного блока процент входного брака равен тем самым 0.5% и сделаем подсчёт вероятности того, что хотя бы один из купленных компонентов окажется неисправным.
В жизни всё намного суровее, поскольку реальные компьютеры очень часто состоят из большего количества комплектующих, а по отдельным достаточно популярным среди «энтузиастов» (но не среди крупных производителей компьютеров) позициям входной брак превышает 10% и более.
Ещё одним неприятным моментом является тот факт, что в классическом случае «я купил, собрал, а не работает, что мне теперь делать» для адекватной диагностики и вычисления «виновника» произошедшего зачастую необходим, грубо говоря, ещё один такой же ПК (т.е. использующий совместимые типы памяти и блока питания, а также имеющий аналогичные разъёмы под видеокарту и процессор), а диагностика сводится к проверке купленных комплектующих в заведомом работающем системном блоке либо наоборот, подстановке в новый заведомо исправных.
Такая ситуация достаточно редка (обычно второй ПК в доме, если он есть, оказывается сильно старше или вообще ноутбуком). Поэтому в большинстве случаев поездка в гарантийный отдел предстоит почти со всем, что было куплено. В аналогичной ситуации можно оказаться, когда ПК запустился, но в работе его наблюдаются проблемы, источник которых неочевиден.
Последнее (риск механического повреждения комплектующих), к сожалению, тоже неотъемлемая часть занятий самосбором, чреватая выходом комплектующих из строя с потерей гарантии, поэтому настоятельно советуем использовать рекомендуемые для сборки ПК инструменты, удобное, просторное и хорошо освещённое рабочее место и не пытаться собрать компьютер в состоянии алкогольного опьянения, сильной усталости, сонливости и т.п.
Известен по песне "5 минут назад" есть "двойник" что-то типа плохой стороны Powerpuff luv.
значение (2): Уточнение: русский репер, если взять текст любого его трека то можно выпасть чутка из реальности. (mell0w,ж).
Слова на тему:
UNIX — многопользовательская операционная система
Создатели UNIX Кен Томпсон и Деннис Ритчи (который потом напишет язык C) решили проблему так:
- Есть один центральный компьютер — сервер, на котором выполняются все программы.
- Если кто-то хочет поработать за этим компьютером, то он подключается к нему не напрямую, а через терминал. Терминал — это монитор и клавиатура, которые соединены с сервером. Сам терминал ничего не считает, а только отправляет и получает результаты с сервера.
- Пользователь вводит свой логин и пароль и получает право запускать на сервере программы, которые ему нужны. При этом на сервере может быть запущено одновременно много программ от разных пользователей.
- Сервер помнит, кто на каком терминале зашёл под каким логином, поэтому результаты работы программы он отправляет в нужный терминал.
Со стороны пользователя кажется, что весь сервер в его распоряжении, но на самом деле сервером могут пользоваться одновременно десятки человек и не знать о том, что сервер выполняет что-то ещё. Сейчас это звучит обычно и примитивно, но для того времени это был прорыв.
Операционную систему, которая умеет всё это делать, назвали UNIX — сокращение от Uniplexed Information and Computing Service (единый информационно-вычислительный сервис). Изначально это называлось UNICS, но потом последние две буквы превратились в одну.
Язык Nix
Когда речь идёт о Nix, часто имеют в виду две разные сущности: Nix как язык и nixpkgs как репозиторий пакетов, в том числе составляющий основу NixOS. Начнём с первого.
Nix — функциональный ленивый язык с динамической типизацией. Синтаксис во многом похож на языки семейства ML (SML, OCaml, Haskell), поэтому у тех, кто с ними знаком, особых проблем возникнуть не должно.
Начать знакомство с языком можно просто запустив интерпретатор.
Отдельного синтаксиса для объявления функций в Nix нет. Функции задаются через присваивание, так же как и другие значения.
Как и в языках, повлиявших на Nix, все функции каррированы.
Помимо примитивных типов, таких как числа и строки, Nix поддерживает списки и словари (attribute sets в терминологии Nix).
При загрузке файлов или модулей в REPL, Nix ожидает, что результатом вычисления модуля будет множество, элементы которого будут импортированы в текущую область видимости.
fac.nix с использованием with :
Заключение
В этой статье я попытался описать самые базовые части работы с Nix как языком для сборки кода. В следующих статьях я планирую показать, как мы применяем Nix в Typeable, а также как это делать лучше не стоит. Stay tuned!
Также, гораздо более подробное введение в Nix опубликовано на сайте самого проекта под названием Nix pills.
Что нового появилось в UNIX, чего до неё не было
Вот что впервые появилось именно в UNIX — и в виде идей, и в виде готового кода:
Файловая система с любой глубиной вложенности. Мы сейчас привыкли к папкам, в которых можно создавать другие папки, а в них третьи и так почти до бесконечности. Но до UNIX глубина вложенности была ограничена — нельзя было создать, например, папку внутри другой папки.
Модель работы с файлами. Пользователю раньше нужно было самому предусмотреть формат, размер и физическое размещение файлов на диске. В UNIX это всё взяла на себя операционная система.
Работа с программами напрямую. До UNIX настройку работы всех программ можно было сделать только в командной строке: запустил → компьютер что-то посчитал → показал результат. Если нужно изменить параметры, то это надо было делать через командную строку. В новой системе можно было менять настройки программ прямо внутри них — именно так и устроены сейчас все программы.
Вывод всего как текста. Раньше компьютеры работали с битами и выводили битовые последовательности. Их нужно было отдельно разбивать на нужные фрагменты или использовать встроенные программы для перевода битов в байты, а из них — в текст.
В UNIX единица вывода — это не бит, а байт. А в байт как раз умещается символ текста, а значит, с ним можно работать как с текстом: искать, склеивать с другими, отправлять в файл и так далее.
Регулярные выражения стали использоваться не только в профессиональных задачах, но и как основа для обработки вывода программ.
Язык C. Этот язык появился в UNIX как замена языка B. Но B был интерпретируемым языком (как Python), и для запуска программ нужен был его интерпретатор. Язык C — компилируемый, а значит, готовые программы можно запускать на любом совместимом компьютере, даже если на нём нет компилятора C.
Протокол TCP/IP. До UNIX этот протокол не был популярен, и компьютеры связывались друг с другом по более старому протоколу, который не имел столько возможностей. Теперь благодаря этой операционной системе весь мир пользуется интернетом, построенным на протоколе TCP/IP. Справедливости ради, этот протокол появился не в первой поставке UNIX.
Сборка программ
Сборка программ и отдельных компонентов — это основная функция языка Nix.
derivation — функция, так же принимающая словарь с параметрами сборки: name — имя пакета, builder — сборочный скрипт, src — исходный код, system — система или список систем, под который возможна сборка данного пакета.
Сборка программ, продвинутая версия
derivation — достаточно низкоуровневая функция, на базе которой в Nix построены куда более мощные примитивы. Для примера, можно рассмотреть сборку широко известной утилиты cowsay .
Оригинал скрипта находится здесь.
stdenv — специальный derivation , содержащий правила сборки для текущей системы: нужный компилятор, флаги и прочие параметры. Основное содержимое — гигантских размеров скрипт на баше под названием setup , который и выступает в роле скрипта builder из нашего простого примера выше.
mkDerivation — функция, создающая derivation с этим скриптом и заодно заполняющая другие поля.
Язык Nix
Когда речь идёт о Nix, часто имеют в виду две разные сущности: Nix как язык и nixpkgs как репозиторий пакетов, в том числе составляющий основу NixOS. Начнём с первого.
Nix — функциональный ленивый язык с динамической типизацией. Синтаксис во многом похож на языки семейства ML (SML, OCaml, Haskell), поэтому у тех, кто с ними знаком, особых проблем возникнуть не должно.
Начать знакомство с языком можно просто запустив интерпретатор.
Отдельного синтаксиса для объявления функций в Nix нет. Функции задаются через присваивание, так же как и другие значения.
Как и в языках, повлиявших на Nix, все функции каррированы.
Помимо примитивных типов, таких как числа и строки, Nix поддерживает списки и словари (attribute sets в терминологии Nix).
Значения в локальной области видимости можно задать через выражение let. in . Для примера, простая функция, реализующая факториал, как это принято делать в других статьях по функциональному программированию.
Директива inherit вносит или "наследует" термин из текущей области видимости и даёт ему такое же имя. Пример выше эквивалентен записи let fac = . in < fac = fac; >.
При загрузке файлов или модулей в REPL, Nix ожидает, что результатом вычисления модуля будет множество, элементы которого будут импортированы в текущую область видимости.
Для загрузки кода из других файлов в Nix есть функция import , принимающая путь к файлу с кодом и возвращающая результат выполнения этого кода.
Хотя присваивание модуля в отдельную переменную — довольно частая практика, в данном случае это выглядит несколько нелепо, правда? В Nix есть директива with , добавляющая в текущую область видимости все имена из множества, переданного в качестве параметра.
fac.nix с использованием with :
Где это всё взять?
Помимо NixOS, где ничего делать не нужно, Nix можно установить на любой (или почти любой) дистрибутив Linux. Для этого достаточно запустить следующую команду:
Дальше установочный скрипт сам всё сделает. После недавних изменений в MacOS, установка в ней немного осложнилась, раньше было достаточно команды выше. Про установку в последних версиях MacOS можно прочесть здесь.
Сборка программ, продвинутая версия
Оригинал скрипта находится здесь.
mkDerivation — функция, создающая derivation с этим скриптом и заодно заполняющая другие поля.
Сборка программ
Сборка программ и отдельных компонентов — это основная функция языка Nix.
В случае работы с пакетами, основным инструментом, про который нужно знать, является Derivation . Сам по себе Derivation — это специальный файл, содержащий рецепт для сборки в машинно-читаемом виде. Для компиляции программы на C, выводящей "Hello World!", derivation выглядит примерно следующим образом:
Как видно, в этом выражении содержится путь к результату сборки, который получится в итоге, а также пути к исходным файлам, скрипту сборки, и метаданные: имя проекта и платформа. Стоит так же заметить, что пути к исходникам начинаются с /nix/store . При сборке, Nix копирует всё нужное в эту директорию, после чего сборка происходит в изолированном окружении (sandbox). Таким образом достигается воспроизводимость сборки всех пакетов.
Разумеется, никто в здравом уме руками писать такое не станет! Для простых случаев, в Nix есть встроенная функция derivation , принимающая описание сборки.
Давайте попробуем разобрать этот пример. Весь файл представляет собой определение функции, которая берёт один параметр — словарь, содержащий поле pkgs . Если оно не было передано при вызове этой функции, используется значение по умолчанию: import <> .
derivation — функция, так же принимающая словарь с параметрами сборки: name — имя пакета, builder — сборочный скрипт, src — исходный код, system — система или список систем, под который возможна сборка данного пакета.
writeShellScript — функция из nixpkgs , принимающая имя для скрипта и код и возвращающая путь к исполняемому файлу. Для многострочного текста в Nix есть альтернативный синтаксис с двумя парами одинарных кавычек.
С помощью команды nix build , этот рецепт для сборки можно запустить и получить работающий бинарник.
При запуске nix build , в текущей директории создаётся символическая ссылка result , указывающая на созданный в /nix/store пакет.
Многозадачные компьютеры
Чтобы компьютер работал более эффективно, программисты написали код, который управляет работой всего компьютера — операционную систему.
Первые операционные системы были псевдомногозадачными. Это значит, что они не запускали одновременно несколько программ, а в цикле по очереди брали по одной команде из каждой программы и выполняли их. Так как переключение между командами из разных программ происходит быстро, то создаётся впечатление, что они работают одновременно.
Потом эту проблему тоже решили, и компьютер мог выполнять несколько программ действительно одновременно, чтобы они не мешали друг другу. Так появились многозадачные операционные системы.
Но в то время домашних компьютеров не было, а желающих поработать за университетским компьютером было много, поэтому все работали по очереди. Например, один лаборант работал на нём с часу до двух, второй — с двух до трёх, а научный руководитель работал за компьютером с трёх до шести.
При этом мощности компьютеров уже хватало на то, чтобы с ним мог работать второй пользователь, не замедляя работу первого. А вот операционных систем, которые бы так умели, — не было. И здесь появляется UNIX.
Заключение
В этой статье я попытался описать самые базовые части работы с Nix как языком для сборки кода. В следующих статьях я планирую показать, как мы применяем Nix в Typeable, а также как это делать лучше не стоит. Stay tuned!
Также, гораздо более подробное введение в Nix опубликовано на сайте самого под названием Nix pills.
Как работают в UNIX
Для управления этой системой почти всегда используется командная строка. Есть, конечно, и графический интерфейс для некоторых систем и задач, но штука в том, что UNIX заточен на работу в серверах. А у серверов чаще всего нет ни клавиатуры, ни монитора — только сетевые соединения, через которые пользователи и соединяются с сервером, чтобы им управлять.
Интерфейс командной строки в FreeBSD — Unix-подобной операционной системе
Однозадачные компьютеры
Когда компьютеры только начали появляться, то работали они примерно так:
- Компьютер включался.
- Находил на носителе информации первую команду программы, которую нужно выполнить.
- Выполнял эту команду и переходил к следующей.
- Так происходило, пока в программе не заканчивались шаги или она сама не останавливалась. Тогда специальными командами оператор говорил компьютеру, где найти код для другой программы, или запускал первую программу заново.
Получается, что они работали в однозадачном режиме: работает только одна программа, а для запуска второй нужно остановить первую. По этому принципу до сих пор работают контроллеры в ваших микроволновках и холодильниках, а также контроллеры типа Arduino.
Сначала такой подход всех устраивал, потом стало неудобно.
Как UNIX стал стандартом
С середины 1970-х годов идёт довольно мутная история, в которой компания
AT&T долго и небезуспешно пытается заработать на UNIX, а американские университеты и инженеры-любители делают свою открытую версию. Идёт конкуренция между стандартами, инструментами, поставками и протоколами.
Конкуренция выливается в то, что у UNIX появляется множество более совершенных потомков. Их мы называем Unix-подобными системами.
Можно сказать, что Unix-подобность — это такой набор правил, условностей и стандартов, которых должны придерживаться новые операционки, чтобы сохранять преемственность и некоторую совместимость. То есть такой ГОСТ для операционных систем. Операционка может быть и без ГОСТа, но с ним лучше.
Где это всё взять?
Помимо NixOS, где ничего делать не нужно, Nix можно установить на любой (или почти любой) дистрибутив Linux. Для этого достаточно запустить следующую команду:
Дальше установочный скрипт сам всё сделает. После недавних изменений в MacOS, установка в ней немного осложнилась, раньше было достаточно команды выше. Про установку в последних версиях MacOS можно прочесть здесь.
Теоретический минимум *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.
Чип и Дейл спешат на помощь! В любой непонятной ситуации вводите man %commandName%, и восхитительная утилита man в *nix-системах вам расскажет как работает та или иная команда (программа) в bash.
Если вы потерялись в файловой системе, поможет команда pwd.
Теперь давайте обозначим еще некоторые особенности этого семейства OS.
*nix-системы отличаются регистрозависимостью т. е. file.txt и File.txt — разные файлы. И директории /uploads и /Uploads — тоже разные директории.
Еще несколько важных отличий:
В PHP-разработке для ликвидации этих проблем кроссплатформености рекомендуется использовать PHP_EOL для новой строки в консоли и DIRECTORY_SEPARATOR для правильных слешей.
Основное отличие *nix-систем — их многопользовательский подход. Из этого следует логический вывод: если есть много пользователей, надо разграничивать их сферы влияния. Один из основных инструментов для этого — права к файлам и директориям.
Обозначения прав идут в буквенном или цифровом формате.
Нашел потрясающую картинку, которая объясняет всю суть происходящего.
Добавлю, что в жизни веб-разработчика всегда нужно помнить о правах в linux, поскольку имеет место обыденная ситуация: разрабатывали под windows, задеплоили и внезапно (!) ничего не работает. В целом ничего страшного в них нету, но keep in mind.
P. S. Советую хорошо разобраться в этом моменте, поскольку ставить 777 на весь проект тоже не очень секьюрно.
Под рутом надо быть очень аккуратными. Особенно на лайв-серверах. Особенно удаляя что-то через консоль.
Раз уж мы вспомнили о лайв-серверах, у них бывает такое свойство — заканчивается память.
Сначала проверяем, что у нас с ОЗУ, для этого подойдет top/htop.
Давайте также вспомним замечательную тулзу — ps. Она выводит отчет о работающих процессах. Удобна еще и несколькими триками:
Если проблема в ОЗУ, смотрим, что у нас потребляет больше, чем надо, и делаем kill, или же, если это нужные процессы, — думаем дальше :).
В целом на этом можно и закончить первую степень посвящения, но обрадую немного тех, кто очень боится консоли: есть консольный 2-панельный классический файловый менеджер — Midnight commander.
2-й юниорский
Первый юниорский нам поможет сделать что-то, но для повседневных задач web-developer’а этого мало, так что давайте пойдем дальше осваивать уровень, которого нам хватит для резолва ежедневных задач.
Следующая повседневная задача — установка lamp (linux apache php mysql)-сервера.
Конечно же, нам пригодятся Virtual Hosts. Файл хостов находится по адресу /etc/hosts, а хосты надо редактировать под рутом.
Пришло время упомянуть базовые команды Apache.
Включаем модули в apache, в том числе, модуль PHP (если ставим руками) — a2enmod %moduleName%.
Рестарт сервера — sudo service apache2 restart.
Хосты, которые настроены и существуют (но не факт, что включены!) лежат отдельными файликами в папке /etc/apache2/sites-available. А хосты, которые используются и активны в данный момент, лежат симлинками в папке /etc/apache2/sites-enabled.
In real life выглядит все так: мы создаем файл конфига для нового хоста в sites-available, потом командой a2ensite %hostName% apache создает симлинк в папке sites-enabled, тем самым активируя хост. Обратная процедура — a2dissite.
Когда вы делаете это руками или просто пишете в файл основнового конфига, где-то плачет один котик, ну, или собачка — кому кого больше жаль :).
На уровне 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, а % указывает на то, что пользователь может прийти не только с локалхоста, а откуда угодно.
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) для секьюрности.
Хороший левел — знание vim или emacs. Очень холиварная тема, но не упомянуть нельзя.
Если временами вы очень скучаете по некоторым программам из windows, или у вас есть специфичный софт, который все-таки нужен и аналог никак не можете найти (что же такое страшное вам нужно?!), есть wine — wine is not an emulator.
IE В Ubuntu («работает» еще веселее, чем в нативной среде обитания).
Давайте затронем сетевую тему, первым в гостем нашей студии станет netstat (network statistics), встречайте! Тулза поможет нам посмотреть статистику сетевой активности, открытые порты, наши сетевые интерфейсы и т. д.
И в заключение сетевой темы давайте позовем нашего хедлайнера — nmap. Поприветсвуем гостя nmap!
Очень известная утилита в области сетевой безопасности, видеть ее мы могли в десятках фильмов ;).
Спасибо nmap за столь увлекательную историю и счастливое детство.
Предлагаю перейти на немного advanced level MySQL-тюнинга — PIMP MY DB.
В живых проектах очень важно держать MySQL в боевом состоянии, настроенным на максимальную стабильность и производительность, в противном случае получаем очень неприятный bottleneck.
DB Tuning можно условно разделить на две части:
Оптимизация структуры базы данных (нормализация/денормализация, foreign keys, indexes и т. д.).
Оптимизация настроек сервера DB.
Про оптимизацию структуры базы данных написано немало гайдов и мануалов, и серебряной пули тут не существует. Всегда смотрим на конкретный проект и индивидуальные проблемы. Explain в помощь :).
Добавим в наше приключение немного стильных, модных и молодежных технологий — CI.
Wiki: Непрерывная интеграция (англ. Continuous Integration) — практика разработки ПО, которая заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем.
На практике это очень удобный софт, позволяющий собирать билды, прогонять все виды тестов, делать минификацию js/css, следить за качеством кода, деплоить, итп.
Самые популярные — Jenkins, Travis, TeamCity.
P. S. Клевая тулза Guake —выезжающая консолько в стиле quake.
Где сегодня используется UNIX
В чистом виде UNIX сейчас используется только на серверах и оборудовании связи. Всё дело в том, что для домашнего использования эта система подходит слабо: у неё нет встроенного графического интерфейса и все операции и программы нужно настраивать вручную.
Зато если нужна гарантированная надёжность, производительность и масштабируемость, особенно при сетевых нагрузках, — используют UNIX или производные от неё. Про них сейчас тоже расскажем.
Читайте также:
- Ошибка при восстановлении сжатого аудио или видео premiere pro
- Не могу зайти в яндекс через гугл хром
- Настройка dns в реестре
- Проверьте что в настройках антивируса отключена подмена ssl https сертификата сервера
- Какие записи будут найдены после проведения поиска в текстовом поле компьютер с условием содержит