майонезная пидрила, маринованная креветка, морепродукт слизнявый, быдло парашное, туалетный бачок с Old Spice, торт Прага
Представь, что ты пишешь программу и тебе нужно прочитать данные. Неважно, откуда: с SSD-диска, флешки, сетевой папки, из оперативной памяти или вообще из датчика температуры процессора. В Linux для всего этого ты будешь использовать одну и ту же системную функцию read().
Как ядро понимает, что в одном случае нужно дернуть контроллер диска, а в другом — считать данные из оперативы? За эту магию отвечает VFS — Виртуальная файловая система. Это одна из самых красивых подсистем Linux, которая реализует знаменитый принцип «все есть файл».
Если говорить простыми словами, VFS — это гигантский слой абстракции, очень похожий на интерфейсы в объектно-ориентированном программировании. VFS не умеет сама записывать байты на магнитные диски. Вместо этого она предоставляет единый интерфейс для пространства пользователя, а внутри общается с драйверами конкретных файловых систем (ext4, btrfs, NTFS) или псевдофайловых систем (procfs, sysfs).
Когда ты вызываешь функцию open(), запрос идет не напрямую к диску, а в VFS. Она смотрит на путь к файлу и понимает, к какой именно файловой системе этот путь относится.
Вся магия VFS держится на четырех главных структурах данных в памяти ядра:
1. Суперблок (superblock). Содержит общую информацию о конкретной примонтированной файловой системе: ее тип, размер, статус и права доступа.
2. Инод (inode). Описывает конкретный объект: файл, папку или устройство. В иноде хранятся метаданные: размер, права доступа, владельцы, время изменения и физические адреса блоков на диске. Но важный нюанс: в иноде нет имени файла.
3. Дентри (dentry) или элемент каталога. Это клей, который связывает человеческие имена файлов с их инодами. Благодаря dentry ядро быстро строит дерево каталогов. Они активно кэшируются в памяти, чтобы Linux не шуршал диском каждый раз, когда ты просто переходишь по папкам.
4. Объект файла (file). Создается в памяти только тогда, когда процесс открывает файл. Он хранит текущую позицию чтения/записи и режим доступа (только чтение, запись и т.д.).
Благодаря такой структуре Linux абсолютно все равно, с чем работать.
Хочешь узнать температуру процессора? Читаешь файл /sys/class/thermal/thermal_zone0/temp. VFS видит, что этот путь относится к виртуальной файловой системе sysfs, и вместо чтения физического сектора диска дергает функцию драйвера материнской платы. Драйвер опрашивает датчик и возвращает тебе текстовую строку с температурой.
Хочешь отправить данные в сеть? Пишешь в сокет, который для VFS выглядит как обычный файловый дескриптор, просто за ним скрывается сетевой стек ядра.
Именно VFS делает Linux невероятно гибким. Разработчикам прикладного софта не нужно думать о железе, секторах и разметке дисков, а создателям драйверов не нужно изобретать свои способы передачи данных в программы. Все просто работают с файлами.
📍 Подпишись на создателей: https://t.me/linuxexe
Как ядро понимает, что в одном случае нужно дернуть контроллер диска, а в другом — считать данные из оперативы? За эту магию отвечает VFS — Виртуальная файловая система. Это одна из самых красивых подсистем Linux, которая реализует знаменитый принцип «все есть файл».
Если говорить простыми словами, VFS — это гигантский слой абстракции, очень похожий на интерфейсы в объектно-ориентированном программировании. VFS не умеет сама записывать байты на магнитные диски. Вместо этого она предоставляет единый интерфейс для пространства пользователя, а внутри общается с драйверами конкретных файловых систем (ext4, btrfs, NTFS) или псевдофайловых систем (procfs, sysfs).
Когда ты вызываешь функцию open(), запрос идет не напрямую к диску, а в VFS. Она смотрит на путь к файлу и понимает, к какой именно файловой системе этот путь относится.
Вся магия VFS держится на четырех главных структурах данных в памяти ядра:
1. Суперблок (superblock). Содержит общую информацию о конкретной примонтированной файловой системе: ее тип, размер, статус и права доступа.
2. Инод (inode). Описывает конкретный объект: файл, папку или устройство. В иноде хранятся метаданные: размер, права доступа, владельцы, время изменения и физические адреса блоков на диске. Но важный нюанс: в иноде нет имени файла.
3. Дентри (dentry) или элемент каталога. Это клей, который связывает человеческие имена файлов с их инодами. Благодаря dentry ядро быстро строит дерево каталогов. Они активно кэшируются в памяти, чтобы Linux не шуршал диском каждый раз, когда ты просто переходишь по папкам.
4. Объект файла (file). Создается в памяти только тогда, когда процесс открывает файл. Он хранит текущую позицию чтения/записи и режим доступа (только чтение, запись и т.д.).
Благодаря такой структуре Linux абсолютно все равно, с чем работать.
Хочешь узнать температуру процессора? Читаешь файл /sys/class/thermal/thermal_zone0/temp. VFS видит, что этот путь относится к виртуальной файловой системе sysfs, и вместо чтения физического сектора диска дергает функцию драйвера материнской платы. Драйвер опрашивает датчик и возвращает тебе текстовую строку с температурой.
Хочешь отправить данные в сеть? Пишешь в сокет, который для VFS выглядит как обычный файловый дескриптор, просто за ним скрывается сетевой стек ядра.
Именно VFS делает Linux невероятно гибким. Разработчикам прикладного софта не нужно думать о железе, секторах и разметке дисков, а создателям драйверов не нужно изобретать свои способы передачи данных в программы. Все просто работают с файлами.
📍 Подпишись на создателей: https://t.me/linuxexe
🔐 Linux security: проверь SSH-доступ
Минимальный чек-лист для сервера:
1. Отключить вход root по SSH:
PermitRootLogin no
2. Отключить парольный вход, если используешь ключи:
PasswordAuthentication no
3. Проверить, кто вообще может логиниться:
AllowUsers your_user
После изменения конфига не закрывай текущую SSH-сессию сразу. Сначала открой вторую и проверь вход.
Так ты не заблокируешь сам себя из-за опечатки.
📍 Подпишись на создателей: https://t.me/linuxexe
Минимальный чек-лист для сервера:
1. Отключить вход root по SSH:
PermitRootLogin no
2. Отключить парольный вход, если используешь ключи:
PasswordAuthentication no
3. Проверить, кто вообще может логиниться:
AllowUsers your_user
После изменения конфига не закрывай текущую SSH-сессию сразу. Сначала открой вторую и проверь вход.
Так ты не заблокируешь сам себя из-за опечатки.
📍 Подпишись на создателей: https://t.me/linuxexe
На какой ОС вы сидите прямо сейчас?
Anonymous Poll
50%
Linux (Arch, Ubuntu, Debian...)
0%
Windows (чистая или с WSL)
0%
macOS (для работы и жизни)
50%
Dual-boot (Linux + Windows)
0%
Экзотика (BSD, Haiku и др.)
Вы когда-нибудь пробовали редактировать длинную команду в терминале, используя только стрелочки на клавиатуре? Тот еще мазохизм. Одно неловкое движение, и вы случайно стираете половину сложного bash-скрипта или длинного curl-запроса с десятком заголовков.
Есть скрытая фича, которая экономит кучу нервов и времени, но о ней почему-то знают немногие.
В следующий раз, когда вы поймете, что ваша команда в терминале разрастается до размеров романа, просто нажмите комбинацию:
Зажмите Ctrl и по очереди нажмите X, а затем E.
Магия! Ваш терминал мгновенно откроет текущую команду в полноценном текстовом редакторе. Обычно это Vim или Nano, в зависимости от того, что настроено в системе по умолчанию.
Здесь вы можете спокойно редактировать текст: копировать, вставлять, использовать поиск, разбивать команду на несколько строк для читаемости. Как только вы закончите, просто сохраните файл и выйдете из редактора. В Vim это :wq, в Nano — Ctrl+O и Ctrl+X.
Сразу после выхода отредактированная команда автоматически выполнится в терминале.
Как это настроить под себя?
По умолчанию система открывает тот редактор, который прописан в переменной окружения EDITOR. Если у вас открывается неудобный дефолтный редактор, это легко исправить. Просто добавьте в свой файл конфигурации (.bashrc или .zshrc) строчку:
export EDITOR="nano"
Вместо nano можно вписать vim, mcedit или даже "code --wait", если хотите редактировать команды в VS Code.
Этот лайфхак особенно спасает, когда нужно быстро набросать цикл for прямо в консоли или когда вы скопировали огромную команду из документации и хотите быстро поправить в ней параметры перед запуском. Больше никакого бесконечного зажатия стрелочки влево.
Пользуетесь этой фичей или по старинке мучаете стрелочки и Ctrl+A / Ctrl+E? Делитесь своими любимыми хоткеями для терминала в комментариях, соберем базу полезных шорткатов.
📍 Подпишись на создателей: https://t.me/linuxexe
Есть скрытая фича, которая экономит кучу нервов и времени, но о ней почему-то знают немногие.
В следующий раз, когда вы поймете, что ваша команда в терминале разрастается до размеров романа, просто нажмите комбинацию:
Зажмите Ctrl и по очереди нажмите X, а затем E.
Магия! Ваш терминал мгновенно откроет текущую команду в полноценном текстовом редакторе. Обычно это Vim или Nano, в зависимости от того, что настроено в системе по умолчанию.
Здесь вы можете спокойно редактировать текст: копировать, вставлять, использовать поиск, разбивать команду на несколько строк для читаемости. Как только вы закончите, просто сохраните файл и выйдете из редактора. В Vim это :wq, в Nano — Ctrl+O и Ctrl+X.
Сразу после выхода отредактированная команда автоматически выполнится в терминале.
Как это настроить под себя?
По умолчанию система открывает тот редактор, который прописан в переменной окружения EDITOR. Если у вас открывается неудобный дефолтный редактор, это легко исправить. Просто добавьте в свой файл конфигурации (.bashrc или .zshrc) строчку:
export EDITOR="nano"
Вместо nano можно вписать vim, mcedit или даже "code --wait", если хотите редактировать команды в VS Code.
Этот лайфхак особенно спасает, когда нужно быстро набросать цикл for прямо в консоли или когда вы скопировали огромную команду из документации и хотите быстро поправить в ней параметры перед запуском. Больше никакого бесконечного зажатия стрелочки влево.
Пользуетесь этой фичей или по старинке мучаете стрелочки и Ctrl+A / Ctrl+E? Делитесь своими любимыми хоткеями для терминала в комментариях, соберем базу полезных шорткатов.
📍 Подпишись на создателей: https://t.me/linuxexe
🛠 Инструмент дня: ripgrep
Если ты до сих пор ищешь по проекту через grep -R, попробуй rg.
Пример:
rg "TODO|FIXME"
ripgrep быстрый, по умолчанию уважает .gitignore и удобно показывает контекст. Для больших репозиториев разница чувствуется сразу.
Полезные варианты:
rg -n "pattern" — с номерами строк
rg --files — список файлов проекта
rg -t py "async def" — искать только в Python-файлах
Один из тех инструментов, после которых назад возвращаться не хочется.
📍 Подпишись на создателей: https://t.me/linuxexe
Если ты до сих пор ищешь по проекту через grep -R, попробуй rg.
Пример:
rg "TODO|FIXME"
ripgrep быстрый, по умолчанию уважает .gitignore и удобно показывает контекст. Для больших репозиториев разница чувствуется сразу.
Полезные варианты:
rg -n "pattern" — с номерами строк
rg --files — список файлов проекта
rg -t py "async def" — искать только в Python-файлах
Один из тех инструментов, после которых назад возвращаться не хочется.
📍 Подпишись на создателей: https://t.me/linuxexe
💡 Bash/Zsh: !! и !$
Две короткие подстановки, которые реально ускоряют работу:
!! — повторить предыдущую команду
!$ — взять последний аргумент предыдущей команды
Пример:
mkdir /tmp/test-project
cd !$
Вторая команда превратится в:
cd /tmp/test-project
А если забыл sudo:
sudo !!
Терминал любит тех, кто знает его маленькие трюки.
📍 Подпишись на создателей: https://t.me/linuxexe
Две короткие подстановки, которые реально ускоряют работу:
!! — повторить предыдущую команду
!$ — взять последний аргумент предыдущей команды
Пример:
mkdir /tmp/test-project
cd !$
Вторая команда превратится в:
cd /tmp/test-project
А если забыл sudo:
sudo !!
Терминал любит тех, кто знает его маленькие трюки.
📍 Подпишись на создателей: https://t.me/linuxexe
🔐 Linux security: проверь SSH-доступ
Минимальный чек-лист для сервера:
1. Отключить вход root по SSH:
PermitRootLogin no
2. Отключить парольный вход, если используешь ключи:
PasswordAuthentication no
3. Проверить, кто вообще может логиниться:
AllowUsers your_user
После изменения конфига не закрывай текущую SSH-сессию сразу. Сначала открой вторую и проверь вход.
Так ты не заблокируешь сам себя из-за опечатки.
📍 Подпишись на создателей: https://t.me/linuxexe
Минимальный чек-лист для сервера:
1. Отключить вход root по SSH:
PermitRootLogin no
2. Отключить парольный вход, если используешь ключи:
PasswordAuthentication no
3. Проверить, кто вообще может логиниться:
AllowUsers your_user
После изменения конфига не закрывай текущую SSH-сессию сразу. Сначала открой вторую и проверь вход.
Так ты не заблокируешь сам себя из-за опечатки.
📍 Подпишись на создателей: https://t.me/linuxexe
🧩 Как systemd запускает сервисы простыми словами
systemd читает unit-файлы, понимает зависимости и запускает сервисы в нужном порядке.
Например, если приложению нужна сеть, unit может указать:
After=network-online.target
Главные команды:
systemctl status nginx — состояние сервиса
systemctl restart nginx — перезапуск
journalctl -u nginx -f — живые логи
systemd не просто «запускает демоны». Он ещё следит за процессами, логирует, рестартит при падении и помогает понять, почему сервис не поднялся.
📍 Подпишись на создателей: https://t.me/linuxexe
systemd читает unit-файлы, понимает зависимости и запускает сервисы в нужном порядке.
Например, если приложению нужна сеть, unit может указать:
After=network-online.target
Главные команды:
systemctl status nginx — состояние сервиса
systemctl restart nginx — перезапуск
journalctl -u nginx -f — живые логи
systemd не просто «запускает демоны». Он ещё следит за процессами, логирует, рестартит при падении и помогает понять, почему сервис не поднялся.
📍 Подпишись на создателей: https://t.me/linuxexe