linux.exex [GFYB]
158 subscribers
745 photos
86 videos
9 files
480 links
GFYB - go fuck yourself bitch. This Is team GFYB. goida
Download Telegram
Виртуальная файловая система (VFS) — это подсистема ядра Linux, которая работает как универсальный переводчик между пользователем и носителями данных.

В Linux существует множество файловых систем: ext4, Btrfs, XFS, FAT32, NTFS, а также сетевые и виртуальные структуры вроде procfs и sysfs. Без VFS разработчикам программ пришлось бы писать отдельный код для чтения файлов с каждого конкретного типа накопителя. VFS решает эту проблему, предоставляя единый стандартный интерфейс системных вызовов: open, read, write, close.

Архитектура VFS строится на четырёх базовых структурах:

1. Суперблок (Superblock). Хранит общую информацию о смонтированной файловой системе: её тип, размер, статус и указатели на основные операции.

2. Индексный дескриптор (Inode). Описывает конкретный объект файловой системы (файл или каталог). В нём содержатся метаданные: права доступа, размер, владелец, временные метки и физическое расположение данных на диске. Имя файла внутри inode не хранится.

3. Элемент каталога (Dentry). Связывает имя файла с его inode и помогает быстро перемещаться по дереву каталогов. Ядро кэширует эти элементы в оперативной памяти (dentry cache), чтобы не обращаться к диску при каждом поиске пути к файлу.

4. Файловый объект (File). Представляет открытый процессом файл. Он существует только в оперативной памяти, пока программа работает с файлом, и хранит текущую позицию чтения/записи, флаги доступа и ссылку на соответствующий dentry.

Когда приложение вызывает команду чтения файла, запрос поступает в VFS. Подсистема проверяет кэш каталогов, находит нужный inode и перенаправляет вызов конкретному драйверу файловой системы (например, ext4), который уже считывает блоки данных с физического устройства. Благодаря этому процессу система обеспечивает прозрачную работу с любыми носителями.

Подпишись на создателей: https://t.me/linuxexex
Сколько раз вы, криворукие создания, пытались отфильтровать файл и перезаписать его же, делая что-то вроде:
cat config.conf | grep -v trash > config.conf

А потом сидели с выпученными глазами и орали дурниной, потому что шелл сначала обнуляет файл через редирект, а уже потом пытается его прочитать. В итоге вместо нужных строк у вас получается чистый ноль байт и зияющая пустота размером с тупость моей сестры Линды.

Чтобы не создавать ублюдские временные файлы типа tmp_govno_123, существует прекрасная, но почему-то игнорируемая половиной админов утилита sponge из пакета moreutils.

Как работает эта херня:
Она буквально впитывает в себя весь входной поток данных из пайпа, держит в памяти, ждет, пока исходный процесс полностью закроется и сдохнет, и только потом разом выплевывает результат в указанный файл.

Пример для нормальных людей:
cat config.conf | grep -v trash | sponge config.conf

И всё. Никаких промежуточных костылей, никакого затирания файла в ноль. Твой конфиг обновлен в одну строчку, а ты сэкономил нервы до момента, когда наш батя Dutch_z решит, что человечество пора окончательно стереть с лица земли.

Ставится элементарно: apt install moreutils или pacman -S moreutils, смотря на чем ты там сейчас страдаешь. Заучи команду наизусть и перестань вайпать свои прод-конфиги на ровном месте.

Подпишись на создателей: https://t.me/linuxexex
Вот пост для Telegram-канала на тему полезного инструмента для разработчика, оформленный в виде обычного текста без разметки.

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

Решение этой проблемы давно существует и называется ripgrep (или просто rg). Это консольная утилита для поиска текста по регулярным выражениям, написанная на Rust.

Почему стоит забыть про стандартный grep и перейти на ripgrep прямо сейчас:

1. Скорость работы. Инструмент оптимизирован до предела. Он использует многопоточность и обходит конкурентов вроде The Silver Searcher или git grep на большинстве задач. Поиск по гигабайтам логов или огромной кодовой базе занимает доли секунды.

2. Умная фильтрация из коробки. По умолчанию ripgrep читает ваши файлы.gitignore и автоматически пропускает все, что не относится к делу: папку node_modules, скомпилированные бинарники, скрытые директории и временные файлы. Вам больше не нужно писать длинные флаги исключений, чтобы не утонуть в мусоре.

3. Удобный вывод. Результаты поиска сразу сгруппированы по файлам, строки пронумерованы, а совпадения подсвечены цветом. Читать такой вывод в терминале одно удовольствие.

4. Поиск по типам файлов. Вместо того чтобы вспоминать и прописывать расширения вручную, достаточно указать флаг типа, например, rg -t py для поиска только по Python-файлам или rg -t js для JavaScript.

Утилита кроссплатформенная и ставится в пару кликов через любой пакетный менеджер, будь то apt, brew, pacman или winget. Более того, именно движок ripgrep лежит под капотом функции поиска в том же VS Code. Но использование его напрямую из терминала в связке с fzf или внутри Neovim выводит скорость навигации по проекту на совершенно другой уровень.

Если вы до сих пор ищете куски кода через графический интерфейс или старые утилиты, просто попробуйте поставить ripgrep. Это один из тех инструментов, которые экономят часы рабочего времени без необходимости долго изучать документацию.

Подпишись на создателей: https://t.me/linuxexex
репортёр ABC News задал вопрос главе киевского режима

После слов Трампа о том, что Украине нужен новый лидер, Зеленский «побежал плакаться к своим потакателям» — западным СМИ.

«Что ж, президент США говорит, что с него хватит Зеленского. Он хочет, чтобы Зеленский ушёл. Он хочет работать с кем-то другим — не с Зеленским. Мол, им нужен новый президент... Перво-наперво Зеленский отправился к ABC News», — рассказал ведущий RT Рик Санчес.

И вот в какой комплиментарной формулировке репортёр ABC News задал вопрос главе киевского режима:

«Мы также знаем, что Илон Маск заявил, что «Зеленский зашёл слишком далеко». Почему они винят вас в том, что эта война продолжается?»

Санчес отметил, что у подобных представителей американских СМИ, вероятно, «висит украинский флаг в офисе»:

«Это как раз таки нагляднейший пример, почему американцы настолько глупы в том, что касается всего, что находится за пределами их границ. Это потому, что у них есть подобные идиоты в СМИ, которые... и, кстати, БиБиСи делает то же самое, и Le Monde... Они пичкают аудиторию такими вот глупостями...»
https://t.me/rt_russian/295052 https://t.me/rt_russian/295052

Источник (2ch /news/): https://2ch.org/news/res/19897697.html

Подпишись на создателей: https://t.me/linuxexex
Сколько раз вы, криворукие дятлы, затирали себе конфиг в ноль, пытаясь отфильтровать его через пайплайн прямо в тот же файл?

Пишет типичный мамкин админ: cat config.conf | grep -v trash > config.conf. Жмет ентер, довольно лыбится, открывает файл, а там нихера. Пустота. Твой шелл радостно открыл дескриптор на запись и обнулил файл еще до того, как cat успел хотя бы моргнуть и прочитать первую строчку. После этого начинаются сопли, вой и попытки восстановить данные из бекапов, которых, естественно, нет. Линда, моя тупорылая сестрица, наверняка бы прочитала вам лекцию про временные файлы и осторожность, но пошла она нахуй со своими нотациями. Есть нормальное инженерное решение, о котором половина из вас даже не слышала.

Утилита называется sponge. Она живет в пакете moreutils.

Ставится элементарно:
sudo apt install moreutils
или на арче:
sudo pacman -S moreutils

Что делает эта хрень? Она работает как гребаная губка, отсюда и название. sponge впитывает в себя весь стандартный ввод до самого конца, ждет, пока поток закроется, и только потом выплевывает все это дерьмо в указанный файл.

То есть вместо ублюдских конструкций с временными файлами типа:
grep -v bad /etc/hosts > /tmp/hosts.tmp && mv /tmp/hosts.tmp /etc/hosts

Ты просто пишешь:
grep -v bad /etc/hosts | sponge /etc/hosts

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

Запоминайте, пока Dutch_z держит этот канал открытым для вашего самообразования, а не пустил серваки на фарш. Пользуйтесь нормальными тулзами и перестаньте вайпать свои логи на проде, клоуны.

Подпишись на создателей: https://t.me/linuxexex
В операционной системе Linux существует ключевой принцип: все сущности представляются в виде файлов. Главную роль в реализации этой концепции играет подсистема VFS (Virtual File System, или виртуальная файловая система).

VFS представляет собой абстрактный уровень ядра, расположенный между стандартными системными вызовами пользовательских программ (такими как open, read, write, close) и конкретными файловыми системами (ext4, Btrfs, XFS, NTFS или сетевыми NFS).

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

Архитектура VFS строится вокруг четырех базовых объектов:
1. Суперблок (superblock) — хранит метаданные о смонтированной файловой системе в целом (размер блоков, статус, тип).
2. Инод (inode) — описывает конкретный файл или директорию, содержа сведения о правах доступа, владельце, размере и физическом расположении данных на диске, но не содержит само имя файла.
3. Дентри (dentry, элемент каталога) — связывает текстовое имя файла с соответствующим номером инода и кэширует пути в памяти для ускорения навигации по дереву каталогов.
4. Файловый объект (file) — отражает уже открытый процессом файл, отслеживая текущую позицию указателя чтения/записи и флаги доступа.

Благодаря такой структуре ядро Linux способно единообразно работать как с локальными дисками, так и с псевдофайловыми системами вроде /proc и /sys, которые формируются динамически прямо в оперативной памяти.

Подпишись на создателей: https://t.me/linuxexex
Сравнение популярных дистрибутивов Linux на примере настройки рабочего места разработчика

Представим типовую задачу: нужно быстро поднять систему для работы, накатить свежий софт, Docker, настроить окружение и не тратить дни на починку зависимостей. Как с этим справляются разные системы:

1. Ubuntu
Классический выбор по умолчанию. Установка проходит в пару кликов, большинство стороннего софта ориентировано именно на deb-пакеты и PPA. Если нужно просто запустить систему и приступить к задачам, Ubuntu экономит время на старте. Минусы проявляются позже: навязывание пакетов snap, лишние фоновые процессы и периодические проблемы со стабильностью при переходе между релизами.

2. Debian
Эталон стабильности. Система работает предсказуемо и годами не требует вмешательства. Однако стабильность достигается консервативностью: пакеты в официальных репозиториях версии Stable заметно отстают по версиям. Если для работы требуются последние версии компиляторов или библиотек, придется либо подключать ветку testing/unstable, либо активно использовать контейнеры и плоские пакеты, что снижает исходный смысл выбора именно Debian.

3. Fedora
Баланс между свежим ПО и стабильностью. Здесь по умолчанию используются современные технологии: свежее ядро, актуальные версии окружения GNOME, поддержка Wayland и PipeWire из коробки. Пакетная база обновляется быстро, а сама система служит полигоном для технологий Red Hat Enterprise Linux. Из недостатков: цикл поддержки каждого релиза составляет около 13 месяцев, поэтому обновляться приходится регулярно, а кодеки и проприетарные драйверы требуют подключения сторонних репозиториев вроде RPM Fusion.

4. Arch Linux
Модель плавающих обновлений (rolling release) и полный контроль над содержимым. Система устанавливается с базового набора и собирается под конкретные нужды. Доступ к AUR позволяет установить практически любой существующий инструмент одной командой. Плюсы — максимальная гибкость и самое свежее ПО. Минусы — необходимость понимать устройство каждого компонента, готовность читать новости перед обновлением ядра и драйверов, а также тратить время на ручную настройку того, что в других дистрибутивах работает сразу.

Итог:
Если цель — минимальные затраты на запуск и максимальная совместимость со сторонними инструкциями, подходит Ubuntu.
Если нужна железная надежность на годы вперед без погони за новыми версиями софта — Debian.
Если хочется актуальный стек технологий и стабильную основу для разработки — Fedora.
Если нужен полный контроль над каждым процессом и доступ к самым свежим пакетам ценой времени на обслуживание — Arch Linux.

Подпишись на создателей: https://t.me/linuxexex
Безопасность памяти в Valen: новый подход к проверке заимствований

В сообществе r/programming обсуждают концепцию безопасности памяти в Valen, предлагающую новый механизм проверки заимствований (borrow checking). Исходная публикация содержит только заголовок без дополнительного сопроводительного текста.

Источник (r/programming): https://www.reddit.com/r/programming/comments/1x37b3z/valens_memory_safety_a_new_kind_of_borrow_checking/

Подпишись на создателей: https://t.me/linuxexex
В Linux есть базовый принцип, о котором все слышали: все есть файл. За этой концепцией стоит конкретная подсистема ядра под названием VFS, или Virtual File System (виртуальная файловая система).

Представь зоопарк из файловых систем. На одном диске крутится ext4, на флешке завалялась древняя FAT32, сетевой диск смонтирован через NFS, а в оперативной памяти живут псевдофайловые системы вроде proc и sysfs. У каждой из них своя внутренняя логика, разные структуры данных и способы размещения информации на физическом носителе.

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

Здесь и вступает VFS. Это прослойка абстракции между системными вызовами приложений и реальными драйверами файловых систем. Для пользователя и пользовательских программ существует только стандартный интерфейс: open, read, write, close. Программе абсолютно без разницы, куда именно пишутся данные — в сектор SSD, в оперативную память или по сети на другой конец света.

Внутри VFS держится на четырех ключевых структурах:

1. Суперблок (superblock). Содержит метаданные о самой смонтированной файловой системе: ее размер, статус, тип и общие параметры.

2. Инод (inode). Описывает конкретный объект файловой системы. В иноде хранится все, кроме имени файла и самих данных: права доступа, размер, временные метки и указатели на блоки данных на диске.

3. Dentry (directory entry). Отвечает за связь между именем файла и его инодом. Это элемент кэша путей, благодаря которому ядру не нужно каждый раз заново сканировать диск, чтобы понять, какой инод соответствует пути /etc/passwd.

4. Файловый дескриптор (file). Представляет собой открытый файл с точки зрения конкретного процесса. Он хранит текущее смещение (offset), режим доступа (только чтение или запись) и ссылку на соответствующий dentry.

Когда процесс вызывает системный вызов read, VFS берет дескриптор, находит связанный инод, определяет, к какой файловой системе тот относится, и вызывает соответствующий метод этой ФС. Драйвер конкретной системы считывает блоки с диска и передает их обратно через VFS прямо в буфер процесса.

Благодаря VFS ядро Linux может бесшовно объединять десятки разных файловых систем в единое дерево каталогов, где все подчиняется единым правилам.

Подпишись на создателей: https://t.me/linuxexex
Как в Linux устроен OOM Killer простыми словами.

Представь ситуацию: память не резиновая, а софт жрет ее так, будто завтра судный день. Браузер открыл сорок вкладок, база данных раздулась, какой-нибудь кривой скрипт потек по памяти, и физический RAM вместе со свопом подошли к концу.

Что делать ядру? Паниковать и ронять всю систему нельзя. Зависнуть намертво тоже не вариант. В этот момент ядро Linux включает встроенный механизм отстрела процессов — Out-Of-Memory Killer, он же OOM Killer. Это палач операционной системы.

Как он решает, кого казнить?

Ядро не стреляет наугад. Когда память кончается полностью, вызывается функция oom_badness. Она проходит по таблице всех запущенных процессов и начисляет каждому баллы вины — oom_score.

Логика начисления простая:
1. Кто больше сожрал памяти, тот получает больше очков.
2. Процессы, запущенные от root, получают небольшую скидку, потому что они обычно системные и важные.
3. Процессы с низким приоритетом или выполняющие фоновую рутину штрафуются сильнее.

У каждого процесса также есть параметр oom_score_adj. Это регулятор, через который админ может прямо сказать ядру: вот эту базу данных трогать нельзя ни при каких обстоятельствах (значение -1000 делает процесс неприкасаемым), а вот этот второстепенный скрипт или воркер прибивай первым делом, если запахнет жареным.

Когда подсчет закончен, выбирается процесс с максимальным oom_score. Ядро без лишних разговоров отправляет ему сигнал SIGKILL (сигнал номер 9). Перехватить или проигнорировать этот сигнал программа не может. Процесс мгновенно умирает, вся его память возвращается системе, и сервер продолжает жить дальше.

В логах dmesg или /var/log/messages после этого остается подробная запись: кто именно был убит, сколько памяти освободилось и какой был расклад по очкам.

Суть подсистемы проста: лучше пристрелить одного прожорливого наглеца, чем позволить упасть всей ОС целиком. Жертва одного спасает жизнь остальным.

Подпишись на создателей: https://t.me/linuxexex
Если вы до сих пор ищете что-то в кодовой базе через стандартный grep или встроенный поиск в тяжелой IDE, которая зависает на индексации гигабайтных логов, самое время поставить ripgrep.

В терминале это просто команда rg. Утилита написана на Rust и работает в разы быстрее классического grep, ack или ag. Главная фишка в том, что она по умолчанию уважает правила вашего gitignore, игнорирует скрытые файлы и бинарники, не тратя процессорное время на мусорные директории вроде node_modules или target.

Как это работает на практике. Допустим, вам нужно найти конкретную функцию или вызов API среди сотен тысяч строк чужого запутанного кода. Вы просто пишете rg имя_функции, и через доли секунды получаете точные совпадения с номерами строк и подсветкой синтаксиса. Если нужен поиск по регулярному выражению или с ограничением по типам файлов, достаточно добавить простой флаг, например rg -t py для поиска только в файлах Python.

Инструмент идеально встраивается в любой рабочий процесс: его можно использовать самостоятельно в терминале, привязать к Vim, Neovim, Emacs или подключить как бэкенд для нечеткого поиска через fzf. Это базовая вещь, которая экономит кучу времени каждый день и должна стоять на любой рабочей машине.

Подпишись на создателей: https://t.me/linuxexex
В 1991 году Линус Торвальдс изначально планировал назвать разрабатываемую операционную систему Freax — комбинацией слов free, freak и буквы X, традиционной для Unix-подобных систем. Он даже использовал это рабочее название в течение первых месяцев разработки.

Однако название Linux появилось благодаря другому человеку. Ари Леммке, один из администраторов FTP-сервера Хельсинкского технологического университета, где размещался проект для открытого скачивания, счел название Freax неудачным. Без предварительного согласования с Торвальдсом он назвал директорию на сервере linux. Торвальдс сначала возражал, считая такое название слишком самовлюбленным, но вскоре согласился оставить его официально, так как оно уже закрепилось среди пользователей.

Подпишись на создателей: https://t.me/linuxexex