Как стать автором
Поиск
Написать публикацию
Обновить
63.39

*nix *

Хаб про UNIX-подобные операционные системы

Сначала показывать
Порог рейтинга
Уровень сложности

Каталог каталогов

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров3.5K

Каĸ часто Вы просматриваете содержимое ĸаталога в Linux, BSD*, MacOS? Возможно ĸаждый день, или даже час. А задумывались ли вы над тем, ĸаĸ появились ĸаталоги . и .. ? Каĸово происхождение их названий? В один из вечеров за написанием ĸода я этим заинтересовался и стал исĸать.

Читать далее

Lua-скриптинг в mpv-плеере

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.4K

Недавно у меня возникла необходимость непременно вырезать фрагмент из видео без перекодирования, и, разочаровавшись в очередной раз в LosslessCut, я отправился искать альтернативы.

На Reddit-е я наткнулся на пост, где утверждалось, что для этого можно использовать скрипт mpv-cut, который работает без внешнего графического интерфейса и дополнительных программ.

При ближайшем рассмотрении mpv-cut оказался скриптом на lua, который позволял вырезать кусок из видео прямо в процессе просмотра в плеере mpv. Я как-то не предполагал, что mpv-плеер при всей своей минималистичности поддерживает скрипты, которые позволяют расширять его функциональность. И решил это дело тщательно разъяснить.

Читать далее

Операционная система в 1 000 строках кода (часть 5)

Уровень сложностиСредний
Время на прочтение21 мин
Количество просмотров7.8K

Это завершающая часть проекта по написанию собственно ОС. Здесь мы реализуем дисковый ввод/вывод и файловую систему, а также вкратце подведём итоги и наметим дальнейшие шаги на пути доработки системы.

▍ Навигация по частям


Читать дальше →

Операционная система в 1 000 строк кода (часть 4)

Время на прочтение14 мин
Количество просмотров4.7K

Перед вами четвёртая часть серии, посвящённой написанию собственной ОС. Здесь мы реализуем и запустим собственный исполняемый файл в пространстве пользователя, а также системные вызовы для вывода символов на экран и их считывания при вводе на клавиатуре.

Навигация по частям


Читать дальше →

О механизмах безопасности OpenSSH: разбираем уязвимости 2024 года

Время на прочтение23 мин
Количество просмотров5.5K

Прошлый год интересно проходил для SSH. Весной — бэкдор в xz-utils (CVE-2024-3094), в результате эксплуатации которого были скомпрометированы системы с systemd. В июле — критически опасная уязвимость «состояния гонки» для систем на базе glibc, получившая название regreSSHion. Спустя еще неделю была опубликована схожая проблема, получившая идентификатор CVE-2024-6409. А в августе — еще одна, уже специфичная для FreeBSD, CVE-2024-7589.

Как заявляют исследователи, успешная эксплуатация «состояний гонки» позволяет получить RCE (удаленное выполнение кода) на подверженных системах. Более того, regreSSHion — главный баг, ставящий под угрозу безопасность множества SSH-серверов с glibc. Интересно, что эксплуатация уязвимости не требует особой конфигурации сервера (проблема актуальна и для конфигурации по умолчанию). При этом публичного PoC нет до сих пор. Мы решили разобраться в вопросе: так ли страшны эти «состояния гонки», так ли критически опасны? И какие механизмы в sshd призваны не допустить эксплуатации этой уязвимости или хотя бы уменьшить ущерб в случае успешной атаки?

Читать далее

Эмулятор NES в каждый проект! [0x01]

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров2.7K

Итак, мне удалось дойти до этого момента, и эмулятор начинает писать в неправильную область PPU, что конечно же портит всё выполнение.

Читать далее

Эмулятор NES в каждый проект! [0x00]

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров6.6K

Добро пожаловать дорогой читатель. Сегодня я расскажу о проекте, который я разрабатываю некоторое время. Это эмулятор NES. Создаю его в виде библиотеки, чтобы можно было добавить его в свою сборку эмулятора, игры или залить в микроконтроллёр. В целом, меня тянет именно в электронику, которую я мечтаю постичь уже не один год. Сама разработка игр для NES меня не очень интересует, да и в игры я не особо люблю поиграть, а вот создавать какие-то сложные вещи мне хочется всё больше и больше, чем возиться с простыми задачами. До этого я начал разрабаывать эмулятор i386 intel процессора, но понял, что не хватает сил продолжать проект и нужно выбрать что-то более простое, и это простое как мне казалось, была разработка эмулятора NES. И так я начал его разработку.

Первым делом я нашел документацию и принялся расписывать в switch case ... опкоды. В отличии от i386 здесь каждый опкод имел один байт, что упрощало разработку. Начал этот проект в октябре 2024 года, а потом забросил. Когда вновь занялся им, то я почувствовал, что у меня пропало такое ощущение, когда тебе неинтересен проект, потому что он скучный в разработке. Это ощущение пропало и я просто начал писать и писать код. В первый день я написал все case в switch, а потом понял, что это будет медленно работать. Тогда я думал так, в switch выборка идет по бинарному поиску, но я не был уверен в том, будет ли такой же вестись поиск, если числа будут перемешаны в case.

На следующий день я решил переписать это творчество так, чтобы любой опкод выполнялся всего лишь вот так.

Читать далее

Операционная система в 1 000 строк кода (часть 3)

Уровень сложностиСредний
Время на прочтение28 мин
Количество просмотров9K

Перед вами третья часть серии статей, в которой мы пишем собственную небольшую ОС. В этой части мы реализуем аллокатор памяти, механизм её адресации с использованием таблицы страниц, а также переключение контекста и некоторые другие элементы системы.

▍ Навигация по вышедшим частям


Читать дальше →

Операционная система в 1 000 строках кода (часть 2)

Уровень сложностиСредний
Время на прочтение18 мин
Количество просмотров11K

Продолжаем серию статей, посвящённую написанию собственной минималистичной ОС. В прошлой части мы познакомились со всеми вводными компонентами проекта и поставили общие цели. В этой же мы реализуем загрузку ядра, вывод строки Hello World!, механизм паники ядра, а также некоторые функции управления памятью и работы со строками.

▍ Навигация по вышедшим частям


Читать дальше →

Кросскомпилируем под macOS с OSXCross

Время на прочтение7 мин
Количество просмотров679

Давно интересовал вопрос возможности кросскомпиляции под macOS. Как оказалось, на самом деле это не составит особых проблем.

В этой статье мы установим тулчейн, а так же кросскомпилируем пару учебных примеров на языках C и Rust. В качестве host будет выступать Ubuntu 24.04 на amd64, а в качестве target - macOS 14 (Sonoma) на Apple Silicon.

Читать далее

Простой и универсальный способ чтения логов в терминале

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров22K

Существует достаточно много решений для локального и удаленного чтения и сбора логов с различных систем, но некоторые из них могут быть сложны в своей конфигурации и достаточно тяжеловесные для мониторинга одного или двух микросервисов, особенно, если не стоит вопрос удаленного хранения логов. У меня есть небольшой проект, который в процессе своей работы пишет логи, по этому на примере него расскажу, какие решения для их чтения использовал, и к чему в итоге пришел.

Читать далее

Операционная система в 1 000 строках кода (часть 1)

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров38K

Всем привет! В этой небольшой книге (серии статей, — прим. пер.) мы с нуля, шаг за шагом, напишем скромную ОС.

▍ Навигация по частям



Вы можете насторожиться, услышав, что разработка ОС или ядра, в частности, их базовых функций на удивление проста. Даже система Linux, которая воспринимается как масштабный опенсорсный проект, на стадии версии 0.01 включала всего 8 413 строк кода. Сегодня ядро Linux действительно огромно, но начиналось оно, как и типичный хобби-проект, с крохотной базы кода.

В рамках предстоящей серии статей мы на языке С реализуем базовое переключение контекста, страничное распределение памяти, режим пользователя, командную оболочку, драйвер дискового устройства и операции чтения/записи. И хотя такой объём работы может показаться масштабным, всё это уместится всего в 1 000 строк кода.

Но сразу предупрежу — процесс окажется не так прост, как выглядит на первый взгляд. Самой сложной частью создания собственной ОС является отладка. И мы не сможем использовать для этого printf, пока её не реализуем. Здесь вам потребуется освоить различные техники и приёмы отладки, которые в разработке ПО вы никогда не использовали. В частности, начиная «с нуля», вы будете встречать сложные этапы вроде процесса загрузки и страничной организации памяти. Но не пугайтесь, «отлаживать ОС» мы тоже научимся!

Чем сложнее отладка, тем больше радости от получения рабочего продукта. Так что приглашаю вас погрузиться в захватывающий мир разработки операционных систем!
Читать дальше →

Как я случайно купил последний в мире прототип игрового смартфона и доработал его до ума

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров17K

В своём блоге я время от времени рассказываю о различных устройствах, предназначенных для разработчиков портативных гаджетов - девкитах, инженерных прототипах и т.п. Недавно я ковырял китайские барахолки в поисках интересных девайсов для будущих статей и мой взор привлёк весьма интересный игровой смартфон на очень редком процессоре всего за 1.000 рублей. Изучив информацию в сети, я узнал что устройство было разработано небольшим стартапом для локального рынка Китая, а когда телефон приехал ко мне... оказалось, что это не серийное устройство, а редчайший инженерный прототип, о которых в сети нет никакой информации. В сегодняшней статье мы с вами узнаем: почему этот прототип вероятно последний в мире, что из себя представляет смартфон и что у него "под капотом", а также пофиксим некоторые баги в прошивке, которые не успели поправить разработчики устройства. Интересно? Тогда жду вас под катом!

Читать далее

Ближайшие события

Я решил, что обнаружил баг…

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров15K

Я работал над совершенствованием эмулятора DOS и внезапно обнаружил, что достаточно тривиальная операция работает неправильно. Когда просишь COMMAND.COM сделать следующее:

echo AB> foo.txt
echo CD>> foo.txt

то вместо ABCD в файл foo.txt записывается ABBC.

Я проверил и убедился, что fwrite() действительно передаются правильные данные, но хитрость в том, что действия COMMAND.COM не так просты, как можно подумать:

  • Открываем foo.txt
  • Записываем «AB»
  • Закрываем foo.txt
  • Открываем foo.txt
  • Выполняем поиск на один байт назад от конца файла
  • Считываем один байт
  • Записываем «CD»
  • Закрываем foo.txt

Такая сложность нужна, потому что COMMAND.COM хочет учесть случай, когда файл заканчивается символом Ctrl-Z (в нашем случае его нет): в этом случае Ctrl-Z необходимо удалить. Почему-то последовательность «поиск-чтение-запись» работала странно. Но почему?
Читать дальше →

Iomega home media drive — восстановление и открытие чакр

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.7K

Лет 15 назад мною в подарок моей будущей супруге было куплено такое устройство — «Сетевое хранилище Iomega Home Media Network Hard Drive». В принципе, нормальная железяка, но она не нашла своего места. Главная проблема заключалась в том, что по самбе хранилище работало неоправданно медленно, а веб‑интерфейс — это не для ежедневного использования.

Так и валялось оно без дела, а когда я, спустя годы, попытался его включить, выяснилось, что диск приказал долго жить.

Спустя ещё пару лет было решено, что негоже вещи кануть в Лету, не оставив следа. Ну а заодно, как водится, можно хорошенько поковыряться во внутрянке, авось чего интересного выяснится.

Читать далее

GNU/Linux/nvme-cli/Kingston/firmware

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров3.9K

О чем эта статья

Вендор NVMe дисков предоставлял пригодные для обновления прошивки под ОС GNU/Linux, но это изменилось.

В статье разбираюсь с новым форматом прошивок и возвращаю возможность обновления.

Читать далее

Подинтерфейсная настройка dhcp на роутере Eltex NTP-RG-1402G

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров4K

Однажды мне потребовалось заставить сделать роутер Eltex NTP-RG-1402G-W то, чего он не хотел и даже не мог. Читаем о том, как зайти в него так глубоко, как только возможно и получить над ним власть, ограниченную только вашими знаниями.

Читать далее

Сравнение Bash и Python при написании скриптов в Linux

Уровень сложностиСредний
Время на прочтение24 мин
Количество просмотров35K

Sh (от shell) является обязательным командным интерпретатором для UNIX‑совместимых систем по стандарту POSIX. Однако по возможностям он ограничен, поэтому зачастую вместо него используются более богатые возможностями командные интепретаторы, такие как Bash или Ksh. Ksh обычно используется в операционных системах семейства BSD, в то время как Bash — в операционных системах семейства Linux. Командные интерпретаторы облегчают решение мелких задач, связанных с работой с процессами и файловой системой. В данной статье будут рассматриваться операционные системы Linux, поэтому речь пойдёт о Bash.

Python, в свою очередь, является полноценным интерпретируемым языком программирования, и он также нередко используется для написания скриптов или решения мелких прикладных задач при работе с операционной системой. Современную UNIX‑подобную систему сложно представить как без Sh, так и без Python, если только это не устройство с минималистичной ОС вроде маршрутизатора. Например, в Ubuntu Oracular пакет python3 удалить не получится хотя бы потому, что от него зависит пакет grub‑common, от которого, в свою очередь зависят пакеты grub2-common и, соответственно, grub‑pc, то есть непосредственно загрузчик операционной системы. Таким образом, Python 3 можно смело использовать как замену Bash в случае необходимости.

Читать далее

Конвертация корневой файловой системы BTRFS в подтом

Уровень сложностиСредний
Время на прочтение2 мин
Количество просмотров1.6K

При активной работе с настройкой Linux повышается риск потери данных - информации и настроек, на восстановление которых потребуется не мало времени и рутинной работы в случае сбоя.

Для быстрого восстановления можно использовать возможности файловой системы BTRFS, которая позволяет легко создавать снимки файловой системы.

К сожалению, при установке некоторых современных дистрибутивов (например Ubuntu 24.04 и 24.10) нет возможности создать разные подтома в рамках одной файловой системы BTRFS для того, чтобы поместить в них корневой и другие разделы, например /home. Как правило, установщик позволяет создать файловую систему BTRFS и установить в нее корневой раздел, но при такой конфигурации нет возможности воспользоваться полезной утилитой Timeshift. Для работы Timeshift необходимо, чтобы корневой раздел был помещен в отдельный подтом файловой системы BTRFS. Это можно исправить, создав необходимый подтом и перенастроив загрузчик, чтобы он загружал систему из него.

Перенесем корневой раздел в подтом и перенастроим Grub, чтобы Linux загружался из подтома файловой системы BTRFS.

Читать далее

Программирование в машинных кодах

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров9.9K

Я остался под впечатлением от прочитанной первой или второй главы про хакерство в книге Криса Касперского «Техника отладки программ без исходных текстов».

Хоть я и знал о том, что раньше писали в машинных кодах, но когда Крис так подал интересно материал, что я замотивировался сделать небольшой компьютер эмулятор, который бы позволял обрабатывать мой машинный код. Тут дело проще чем кажется, так как я решил взять всего 16 инструкций для этого дела. Плюс ко всему я как‑то давно мечтал сделать hex редактор на ncurses, но каждый раз не было смысла его делать просто так, а теперь сделал.

Инструкция храниться в старшем полубайте, вот их битовые обозначения.

Читать далее

Вклад авторов