UNIX, *NIX, GNU/LINUX — непонятные для вас термины?
В сфере IT часто упоминают данные термины. К примеру, можно услышать, что Android основан на ядре Linux. Что Mac OS это UNIX система, а Linux это UNIX подобная система. Давайте разберёмся, что это все значит.
Семейство операционных систем, основанных на определенных идеях. Например, таких как:
• Для конфигурации системы используется простые текстовые файлы.
• Широкое использование командной строки.
• Использование конвейеров – выполнение последовательности команд.
К середине 70-х получил широкое распространение. Персональных компьютеров еще не было и Unix разрабатывался для использования на серверах. На тот момент распространялся он бесплатно, и каждая организация могла адаптировать ее под свои нужды. Из-за этого в скором времени начали появляться разновидности этой операционной системы. В том, числе и коммерческие.
Появление коммерческих версий UNIX тормозило развитие ОС. Фирмы, продающие свои дистрибутивы, запрещали распространять их исходные коды. Другие программисты не могли воспользоваться уже сделанным и начинали реализовывать функцию или программу заново. Кроме того, каждая фирма вносила в ПО собственные изменения. В результате программы, написанные в одной системе, не могли работать в другой; то есть Unix’ы стали несовместимы.
Для того, чтобы решить эти проблемы начали заниматься стандартизацией системы, что влекло свои проблемы. Не все хотели ужимать свои наработки под определенные стандарты, к тому же это стоило довольно дорого. Так появился термина UNIX подобная система или *NIX: система, не использующая зарегистрированные коды UNIX, но соблюдающая ее идеологии, принципы построения. Один из них — проект GNU.
Проект GNU расшифровывается как GNU Not UNIX. Создан энтузиастами, для которых было важно развитие открытого программного обеспечения. Проектом создано множество свободно распространяемых программ. Единственное чего не хватало проекту GNU, чтобы стать полноценно свободной операционной системой, так это ядра.
В начале 90-х Линус Торвальдс изучал Minix – Unix-подобную операционную систему. Его не устроили скромные возможности учебной системы. Тогда он начал создавать собственную. К концу лета 1991 года появился сырой вариант ядра Linux.
Важно понимать, что ядро операционной системы не является полноценной OC, с точки зрения пользователя. Ядро обеспечивает взаимодействие системных и прикладных программ с аппаратной частью компьютера, управляет распределением памяти и процессорного времени между работающими программами.
Так как проекту GNU до полноценной системы не хватало только ядра, Linux оказался как нельзя кстати. Ядро обросло многочисленным ПО из проекта GNU и превратилось в полноценную операционную систему GNU/Linux. Чаще ее называют просто Linux.
В UNIX были заложены удачные концепции построения операционной системы. Из-за этого появилось множество дистрибутивов как с платной, так и с бесплатной лицензией. На основе UNIX появились такие продукты как Linux, Android, Mac OS.
Nix: Что это и с чем это употреблять?

Мы в Typeable хотели опубликовать небольшой цикл статей о том, как Nix нам помогает (и немного мешает) в разработке. Но, проведя немножко времени в поисках похожего материала здесь, с удивлением обнаружили, что на Хабре нет толкового введения в Nix, на которое можно было бы сослаться.
Статья от @snizovtsev подойдёт как хорошее введение при разработке на C++, но это не совсем то введение, которое мне хотелось бы видеть. Поэтому я решил написать его сам 🙂
Где это всё взять?
Помимо NixOS, где ничего делать не нужно, Nix можно установить на любой (или почти любой) дистрибутив Linux. Для этого достаточно запустить следующую команду:
Дальше установочный скрипт сам всё сделает. После недавних изменений в MacOS, установка в ней немного осложнилась, раньше было достаточно команды выше. Про установку в последних версиях MacOS можно прочесть здесь.
Язык Nix
Когда речь идёт о Nix, часто имеют в виду две разные сущности: Nix как язык и nixpkgs как репозиторий пакетов, в том числе составляющий основу NixOS. Начнём с первого.
Nix — функциональный ленивый язык с динамической типизацией. Синтаксис во многом похож на языки семейства ML (SML, OCaml, Haskell), поэтому у тех, кто с ними знаком, особых проблем возникнуть не должно.
Начать знакомство с языком можно просто запустив интерпретатор.
$ nix repl Welcome to Nix version 2.3.10. Type :? for help. nix-repl>
Отдельного синтаксиса для объявления функций в Nix нет. Функции задаются через присваивание, так же как и другие значения.
nix-repl> "Hello " + "World!" "Hello World!" nix-repl> add = a: b: a + b nix-repl> add 1 2 3
Как и в языках, повлиявших на Nix, все функции каррированы.
nix-repl> addOne = add 1 nix-repl> addOne 3 4
Помимо примитивных типов, таких как числа и строки, Nix поддерживает списки и словари (attribute sets в терминологии Nix).
nix-repl> list = [ 1 2 3 ] nix-repl> set = < a = 1; b = list; >nix-repl> set < a = 1; b = [ . ]; >nix-repl> set.b [ 1 2 3 ]
Значения в локальной области видимости можно задать через выражение let. in . Для примера, простая функция, реализующая факториал, как это принято делать в других статьях по функциональному программированию.
let fac = n: if n == 0 then 1 else n * fac (n - 1); in
Директива inherit вносит или «наследует» термин из текущей области видимости и даёт ему такое же имя. Пример выше эквивалентен записи let fac = . in < fac = fac; >.
$ nix repl fac.nix Welcome to Nix version 2.3.10. Type :? for help. Loading 'fac.nix'. Added 1 variables. nix-repl> fac 3 6
При загрузке файлов или модулей в REPL, Nix ожидает, что результатом вычисления модуля будет множество, элементы которого будут импортированы в текущую область видимости.
Для загрузки кода из других файлов в Nix есть функция import , принимающая путь к файлу с кодом и возвращающая результат выполнения этого кода.
let mul = a: b: a * b; in
let multMod = import ./mul.nix; fac = n: if n == 0 then 1 else multMod.mul n (fac (n - 1)); in
Хотя присваивание модуля в отдельную переменную — довольно частая практика, в данном случае это выглядит несколько нелепо, правда? В Nix есть директива with , добавляющая в текущую область видимости все имена из множества, переданного в качестве параметра.
fac.nix с использованием with :
with import ./mul.nix; let fac = n: if n == 0 then 1 else mul n (fac (n - 1)); in
Сборка программ
Сборка программ и отдельных компонентов — это основная функция языка Nix.
В случае работы с пакетами, основным инструментом, про который нужно знать, является Derivation . Сам по себе Derivation — это специальный файл, содержащий рецепт для сборки в машинно-читаемом виде. Для компиляции программы на C, выводящей «Hello World!», derivation выглядит примерно следующим образом:
Derive([("out","/nix/store/1nq46fyv3629slgxnagqn2c01skp7xrq-hello-world","","")],[("/nix/store/60xqp516mkfhf31n6ycyvxppcknb2dwr-build-hello.drv",["out"])],["/nix/store/wiviq2xyz0ylhl0qcgfgl9221nkvvxfj-hello.c"],"x86_64-linux","/nix/store/r5lh8zg768swlm9hxxfrf9j8gwyadi72-build-hello",[],[("builder","/nix/store/r5lh8zg768swlm9hxxfrf9j8gwyadi72-build-hello"),("name","hello-world"),("out","/nix/store/1nq46fyv3629slgxnagqn2c01skp7xrq-hello-world"),("src","/nix/store/wiviq2xyz0ylhl0qcgfgl9221nkvvxfj-hello.c"),("system","x86_64-linux")])
Как видно, в этом выражении содержится путь к результату сборки, который получится в итоге, а также пути к исходным файлам, скрипту сборки, и метаданные: имя проекта и платформа. Стоит так же заметить, что пути к исходникам начинаются с /nix/store . При сборке, Nix копирует всё нужное в эту директорию, после чего сборка происходит в изолированном окружении (sandbox). Таким образом достигается воспроизводимость сборки всех пакетов.
Разумеется, никто в здравом уме руками писать такое не станет! Для простых случаев, в Nix есть встроенная функция derivation , принимающая описание сборки.
< pkgs ? import <> >: derivation < name = "hello-world"; builder = pkgs.writeShellScript "build-hello" '' $/bin/mkdir -p $out/bin $/bin/gcc $src -o $out/bin/hello -O2 ''; src = ./hello.c; system = builtins.currentSystem; >
Давайте попробуем разобрать этот пример. Весь файл представляет собой определение функции, которая берёт один параметр — словарь, содержащий поле pkgs . Если оно не было передано при вызове этой функции, используется значение по умолчанию: import <> .
derivation — функция, так же принимающая словарь с параметрами сборки: name — имя пакета, builder — сборочный скрипт, src — исходный код, system — система или список систем, под который возможна сборка данного пакета.
writeShellScript — функция из nixpkgs , принимающая имя для скрипта и код и возвращающая путь к исполняемому файлу. Для многострочного текста в Nix есть альтернативный синтаксис с двумя парами одинарных кавычек.
С помощью команды nix build , этот рецепт для сборки можно запустить и получить работающий бинарник.
$ nix build -f ./simple-derivation/default.nix [1 built] $ ./result/bin/hello Hello World!
При запуске nix build , в текущей директории создаётся символическая ссылка result , указывающая на созданный в /nix/store пакет.
$ ls -l result lrwxrwxrwx 1 user users 50 Mar 29 17:53 result -> /nix/store/vpcddray35g2jrv40dg1809xrmz73awi-simple $ find /nix/store/vpcddray35g2jrv40dg1809xrmz73awi-simple /nix/store/vpcddray35g2jrv40dg1809xrmz73awi-simple /nix/store/vpcddray35g2jrv40dg1809xrmz73awi-simple/bin /nix/store/vpcddray35g2jrv40dg1809xrmz73awi-simple/bin/hello
Сборка программ, продвинутая версия
derivation — достаточно низкоуровневая функция, на базе которой в Nix построены куда более мощные примитивы. Для примера, можно рассмотреть сборку широко известной утилиты cowsay .
< lib, stdenv, fetchurl, perl >: stdenv.mkDerivation rec < version = "3.03+dfsg2"; pname = "cowsay"; src = fetchurl < url = "http://http.debian.net/debian/pool/main/c/cowsay/cowsay_$.orig.tar.gz"; sha256 = "0ghqnkp8njc3wyqx4mlg0qv0v0pc996x2nbyhqhz66bbgmf9d29v"; >; buildInputs = [ perl ]; postBuild = '' substituteInPlace cowsay --replace "%BANGPERL%" "!$/bin/perl" \ --replace "%PREFIX%" "$out" ''; installPhase = '' mkdir -p $out/ install -m755 cowsay $out/bin/cowsay ln -s cowsay $out/bin/cowthink install -m644 cowsay.1 $out/man/man1/cowsay.1 ln -s cowsay.1 $out/man/man1/cowthink.1 install -m644 cows/* -t $out/share/cows/ ''; meta = with lib; < description = "A program which generates ASCII pictures of a cow with a message"; homepage = "https://en.wikipedia.org/wiki/Cowsay"; license = licenses.gpl1; platforms = platforms.all; maintainers = [ maintainers.rob ]; >; >
Оригинал скрипта находится здесь.
stdenv — специальный derivation , содержащий правила сборки для текущей системы: нужный компилятор, флаги и прочие параметры. Основное содержимое — гигантских размеров скрипт на баше под названием setup , который и выступает в роле скрипта builder из нашего простого примера выше.
$ nix build nixpkgs.stdenv $ find result/ result/ result/setup result/nix-support $ wc -l result/setup 1330 result/setup
mkDerivation — функция, создающая derivation с этим скриптом и заодно заполняющая другие поля.
Те читатели, кто раньше писал скрипты для сборки пакетов в Arch Linux или Gentoo, могут увидеть здесь крайне знакомую структуру. Как и в других дистрибутивах, сборка разбита на фазы, присутствует перечисление зависимостей ( buildInputs ) и так далее.
Заключение
В этой статье я попытался описать самые базовые части работы с Nix как языком для сборки кода. В следующих статьях я планирую показать, как мы применяем Nix в Typeable, а также как это делать лучше не стоит. Stay tuned!
Также, гораздо более подробное введение в Nix опубликовано на сайте самого под названием Nix pills.
NixOS: Основные преимущества функциональной операционной системы 1 мин для чтения


Добавить в избранное
Главное меню » NixOS » NixOS: Основные преимущества функциональной операционной системы

NixOS — это функциональная операционная система, основанная на уникальной концепции управления пакетами и конфигурацией. В этой статье мы рассмотрим основные преимущества использования NixOS .
- Декларативная конфигурация: В NixOS конфигурация системы описывается декларативно с использованием Nix-языка. Это позволяет определить все аспекты системы, включая пакеты, настройки, сервисы и многое другое, как «состояние» системы. Это делает конфигурацию системы предсказуемой и воспроизводимой.
- Атомарные обновления: Обновления и изменения в NixOS применяются атомарно. Это означает, что вы либо применяете все изменения, либо ни одного. Это гарантирует, что система всегда будет находиться в целостном состоянии, и у вас не возникнет проблем с неполными или несовместимыми обновлениями.
- Изоляция пакетов: Каждый пакет в NixOS устанавливается в изолированной среде, называемой Nix-песочница. Это означает, что зависимости пакетов не мешают друг другу, и вы можете иметь различные версии пакетов для разных приложений, не беспокоясь о конфликтах.
- Откат к предыдущей конфигурации: Если после обновления что-то идет не так, вы всегда можете легко откатиться к предыдущей рабочей конфигурации. Это обеспечивает безопасность и уверенность в том, что даже после неудачного обновления можно быстро вернуть систему в работоспособное состояние.
- Функциональные пакеты: В NixOS пакеты управляются функционально. Это означает, что пакеты являются неизменяемыми и репрезентируются конкретной версией. Это обеспечивает стабильность и устраняет проблемы, связанные с пересекающимися зависимостями.
- Надежность и безопасность: Изоляция пакетов, декларативная конфигурация и функциональный подход к управлению пакетами способствуют улучшению надежности и безопасности системы. Возможность воспроизвести системное состояние делает диагностику и устранение ошибок более простыми.
- Сообщество и поддержка: Несмотря на то что NixOS может показаться не таким популярным, как некоторые другие дистрибутивы Linux, у него активное и преданное сообщество. Вы найдете поддержку и помощь в разрешении проблем в официальной документации, на форумах и в чатах.
- Подход к разработке: NixOS предоставляет уникальный подход к разработке и развертыванию программного обеспечения. Вы можете легко создавать виртуальные окружения для разработки, а также обеспечивать воспроизводимость окружения на разных этапах разработки.
- Расширяемость и модульность: NixOS поставляется с концепцией модулей конфигурации, которые позволяют легко добавлять и настраивать различные аспекты системы. Это делает систему гибкой и позволяет адаптировать ее под различные нужды.
- Экосистема Nix: Помимо самой операционной системы, экосистема Nix включает в себя Nix Package Manager и Nixpkgs — коллекцию пакетов для различных языков программирования и приложений. Это делает NixOS идеальным выбором для разработчиков, исследователей и тех, кто ценит стабильность и надежность.
Читать Как защитить SSH-сервер в Ubuntu 20.04 от базового до расширенного
Заключение
NixOS предлагает уникальный подход к управлению системой, который приносит множество преимуществ, таких как декларативная конфигурация, функциональное управление пакетами и устойчивость системы. Несмотря на небольшую популярность, NixOS обладает активным сообществом и продолжает привлекать тех, кто ценит инновации и надежность в операционных системах.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
11 основных консольных команд *nix, которые должен знать каждый разработчик

Командная строка, во многом, делает нашу жизнь несколько проще, так как благодаря ей мы можем автоматизировать некоторые повседневные задачи и сделать работу более простой. Вместо того, чтобы щёлкать по графическому интерфейсу (GUI), мы можем быстро запустить несколько команд, которые выполнят все нужные задачи.
Unix shell — это интерпретатор командной строки или оболочка, которая предоставляет пользовательский интерфейс для работы из командной строки для Unix-подобных операционных систем. Shell является одновременно интерактивным языком команд и языком скриптов, и он используется операционной системой для управления работой системы с использованием встроенных скриптов оболочки.
Любая операционная система на базе Linux или Mac имеет командную строку, доступную по умолчанию, именуемую как «Терминал». Командная строка (CLI) позволяет нам легко создавать, перемещать, удалять, переименовывать файлы, сортировать данные и перемещаться по папкам, просматривая содержимое.
Без лишних слов, вот 11 применений командной строки, которые сделают вашу жизнь проще.
Повысьте свою продуктивность с помощью этих консольных команд
1. grep
grep "some string" file
Unix команда grep предназначена для поиска. Эта команда ищет строку в файлах по шаблону. Она также ищет шаблоны, разделенные символами перехода на новую строку, и печатает в консоли каждую строку, соответствующую этому шаблону.

Например, выполним команду grep, чтобы найти в файле все совпадения со строкой json
Опция -i позволяет нам искать строку в данном файле без учета регистра. Он соответствует словам типа «JSON», «JsoN» и «Json».
Мы так же можем получить количество строк, которое соответствует данной строке/шаблону указав флаг -c (count).
grep -c "json" index.js

Эта команда подсчитывает, сколько раз в файле было найдено совпадение со строкой json
Вот, кстати, забавный и интересный комикс посвящённый команде grep , который я нашел в интернете (на английском).

Кроме того, есть вариант вызова программ egrep и fgrep что тождественно вызову grep -E и grep -F соответственно. Эти варианты устарели, но предусмотрены для сохранения обратной совместимости.
Можете детальнее познакомиться с grep на странице документации.
2. ls
Unix команда ls выводит список файлов и каталогов по текущему активному пути. Если путь представляет собой файл, ls отображает информацию о файле в соответствии с указанными параметрами. Если путь является папкой, ls отображает информацию о файлах и подпапках в нём.

Используя команду ls , выводим список всей файлов и папок в текущей директории
Возможно, вы заметили, что файлы на скриншоте отображаются серым цветом, а папки — голубоватыми. Это здорово помогает отличать папки от файлов при просмотре из консоли.
3. pwd

Выводи полный путь к текущей активной директории
Команда pwd — это утилита командной строки для печати текущего рабочего каталога. Вывод выведет полный системный путь текущего рабочего каталога в консоль. По умолчанию команда pwd игнорирует символические ссылки, хотя полный физический путь к текущему каталогу может быть показан с опцией.
4. cat

Отображает содержимое указанного файла
Unix команда cat имеет три функциональные способности в контексте текстового файла:
- Отображение содержимого файла
- Объединение копий
- Создание новых файлов
Самым распространенным случаем использования cat является чтение содержимого файлов, и, к слову, cat часто является наиболее удобной программой для подобных целей.
В следующем примере стандартный вывод cat перенаправляется с помощью оператора перенаправления вывода (который представлен угловой скобкой, направленной вправо > ) в файл somefile2 :
cat somefile > somefile2

Создание и копирование содержимого файлов с помощью cat
5. echo
echo "some text"
Команда echo в Linux используется для отображения строки текста/строки, переданной в качестве аргумента. Команда echo является встроенной, она, в основном используется в shell-скриптах и пакетных файлах для вывода текста состояния на экран или в файл.

Вы можете передавать этой функции как заданный текст, так и результат из переменной.
6. touch
touch
Команда touch используется для создания файла без какого-либо содержимого. Команда touch может использоваться, когда у пользователя на момент создания файла ещё нет данных о его содержимом.

Создание нового файла с помощью функции touch
Обратите внимание, на изображении выше мы использовали команду touch для создания файла, а cat — для его просмотра. Поскольку только созданный файл test.txt пуст, команда cat ничего не возвращает.
Есть несколько ключевых различий между cat и touch :
- cat — используется для создания файла с содержимым.
- touch — создаёт пустой файл, без содержимого. Помните, что файл, созданный с помощью touct — пуст. Эта команда полезна, когда у пользователя нет данных содержимого файла во время его создания.
7 mkdir
mkdir
Как вы уже догадались, команда mkdir создаёт новую папку по текущему активному пути. Вместо того, чтобы создавать новую папку через редактор или в графическом интерфейсе, используйте эту команду.

Создание новой папки командой mkdir
Обратите внимание, что мы можем просмотреть содержимое каталога с помощью предыдущей команды ls.
7.1 rm
Команда rm выполняет удаление папки или файла.

Удаление файла/папки командой rm
По умолчанию команда rm не удаляет папки. Для того, чтобы удалить папку командой rm нужно указать дополнительно флаг -rf .
rm -rf
Запомните, что для удаления папки нужно передавать дополнительный флаг
Эта команда удаляет каталог безвозвратно, независимо от того, содержит ли каталог внутри файлы/папки, или нет.
7.2 rmdir
rmdir
Команда rmdir удаляет именно папку, если в неё нет никакого содержимого.

Удаление пустой папки командой rmdir
8. tail
tail
Команда tail читает файл и выводит его последнюю, завершающую часть («хвост»).

Выводим последние строчки содержимого файла
Команда tail полезна при просмотре отчетов о сбоях или длинных журналов логов. Вот пример его полезности при работе с файловыми логами:
# tail /var/log/messages Mar 20 12:42:22 hameda1d1c dhclient[4334]: DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x280436dd) Mar 20 12:42:24 hameda1d1c avahi-daemon[2027]: Registering new address record for fe80::4639:c4ff:fe53:4908 on eth0.*. Mar 20 12:42:28 hameda1d1c dhclient[4334]: DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x280436dd) Mar 20 12:42:28 hameda1d1c dhclient[4334]: DHCPACK from 10.76.198.1 (xid=0x280436dd) Mar 20 12:42:30 hameda1d1c avahi-daemon[2027]: Joining mDNS multicast group on interface eth0.IPv4 with address 10.76.199.87. Mar 20 12:42:30 hameda1d1c avahi-daemon[2027]: New relevant interface eth0.IPv4 for mDNS. Mar 20 12:42:30 hameda1d1c avahi-daemon[2027]: Registering new address record for 10.76.199.87 on eth0.IPv4. Mar 20 12:42:30 hameda1d1c NET[4385]: /sbin/dhclient-script : updated /etc/resolv.conf Mar 20 12:42:30 hameda1d1c dhclient[4334]: bound to 10.76.199.87 -- renewal in 74685 seconds. Mar 20 12:45:39 hameda1d1c kernel: usb 3-7: USB disconnect, device number 2
9. wget
wget
GNU Wget — это бесплатное программное обеспечение для получения файлов по HTTP, HTTPS, FTP и FTPS — наиболее широко используемых интернет-протоколов. Это неинтерактивный инструмент командной строки, поэтому его легко вызывать из скриптов, CRON-задач, терминала без поддержки X-Windows и т.д.
Мы ещё раньше разбирали работу с этой программой, рассматривая основные опции и возможность парсинга и сохранения сайтов с её помощью.

Сохраняем главную страницу всеми нами любимого сайта
GNU Wget обладает множеством функций, облегчающих получение больших файлов или выкачивание всего веб-сайта или FTP-сайта. Wget обладает такими преимуществами, в том числе:
- Может возобновить прерванные загрузки, используя REST и RANGE
- Может использовать шаблоны имени файла и рекурсивно скачивать каталоги, воссоздавая зеркальную структуру папок на локальной машине
- Опционально преобразует абсолютные ссылки скачиваемых документов в относительные, чтобы загруженные документы могли ссылаться друг на друга и корректно отображаться локально
- Кроссплатформенность: работает в большинстве UNIX-подобных операционных систем, а также в Microsoft Windows
- Поддерживает HTTP прокси
- Поддерживает HTTP куки
- Поддерживает постоянное HTTP-соединение
- Автоматическая / фоновая работа
- Использует локальные временные метки файлов, для определения необходимости повторной загрузки документа при выкачивании в зеркальной структуре.
В одной из прошлыъ статей мы ужа рассматривали работу с Wget, и его пользу при парсинге сайтов. Советую ознакомиться с этой статьей подробнее по ссылке.
10. find
find path -name
Команда find позволяет быстро найти файл или папку. Это полезно, когда вы работаете над большим проектом с сотнями файлов и папок.

Поиск файла с названием CallbackApiService.php
Поиск файлов определенного типа
Команда find также позволяет вам искать файлы в каталоге (и его подкаталогах) конкретного типа. Например, следующая команда будет искать все файлы с расширением .js в вашем текущем рабочем каталоге.
find . -name "*.js"

Поиск всех файлов с расширением .js в директории
11. mv
Команда mv перемещает файлы или каталоги из одного места в другое. Команда mv поддерживает перемещение отдельных файлов, или, одновременно, нескольких файлов и каталогов.

Перемещаем файл в другую папку
Резюме
Спасибо за чтение этой статьи, надеюсь, вы узнали что-то новое. Оставайтесь голодными и жадными к новым знаниям! В этой статье я рассмотрел основные unix команды терминала, которые каждый день используются при разработке, или деплое на сервер.
Я создал для вас небольшой справочник команд unix, которые обязан знать каждый разработчик, администратор, или обычный пользователь *unix-овых систем. Этот справочник покрывает все аспекты реального пользования операционной системой, и содержит: unix команды для копирования, создания, удаления и фильтра файлов.

В серці. Назавжди.
Вчора у мене помер однокласник. А сьогодні бабуся. І хто б міг уявити, що цей рік принесе війну, смерть товариша, та смерть члена сім’ї? Це боляче. Проте це добре нагадування про те, як швидко тече час. І як його ціна збільшується кожної марно витраченої секунди. І я не скажу щось
20 мая 2022 г. 1 min read

Ось такий він, руський мир
«Руський мир» — звучить дуже сильно та виправдовуюче. Гарна обгортка виправдання слабкості, аморальності та нікчемності своїх дійсних намірів. Руський мир, який дуже солодко звучить для всіх, хто хоче закрити очі на факт повномасштабної війни. Дуже добре виправдання вбивства для купки звірів. Втім, це ж росія, в якій все виглядає логічно
16 апр. 2022 г. 3 min read

Перехват запросов и ответов JavaScript Fetch API
Перехватчики — это блоки кода, которые вы можете использовать для предварительной или последующей обработки HTTP-вызовов, помогая в обработке глобальных ошибок, аутентификации, логирования, изменения тела запроса и многом другом. В этой статье вы узнаете, как перехватывать вызовы JavaScript Fetch API. Есть два типа событий, для которых вы можете захотеть перехватить HTTP-вызовы: