linux.exex [GFYB]
158 subscribers
746 photos
87 videos
9 files
537 links
GFYB - go fuck yourself bitch. This Is team GFYB. goida
Download Telegram
скоро призма станет мессенджером
jq — швейцарский нож для JSON

Если ты хоть раз работал с API или логами в терминале, ты знаешь эту боль: curl что-то возвращает, а в ответ — одна длинная каша из JSON без пробелов и переносов. Читать невозможно, искать нужное поле — страдание.

Вот тут и заходит jq.

Это консольная утилита для парсинга, фильтрации и трансформации JSON. Маленькая, быстрая, без зависимостей. Стоит один раз освоить базу — и работа с любыми API в терминале становится приятной.

Самое простое — красивый вывод:

curl -s https://api.github.com/users/torvalds | jq .

Всё, JSON уже читаемый, с подсветкой.

Хочешь только одно поле:

curl -s https://api.github.com/users/torvalds | jq .name

Массив объектов? Вытащи конкретное поле из каждого:

jq '.[].login' users.json

Фильтрация — только те объекты, где значение совпадает:

jq '.[] | select(.active == true)' data.json

Можно собирать новый объект из нужных полей:

jq '.[] | {id: .id, email: .email}' data.json

Работает и с файлами, и с пайпами — встраивается в любой скрипт без проблем.

Установка везде одинаково просто:

Ubuntu/Debian — apt install jq
macOS — brew install jq
Alpine — apk add jq

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

Если ты до сих пор парсишь JSON через grep или Python-однострочники — попробуй jq. Скорее всего, он останется у тебя навсегда 🛠️

📍 Подпишись на создателей: https://t.me/linuxexex
📰 Java Thread №291

Вики по джаве: https://github.com/java2ch/java-thread/wiki https://github.com/java2ch/java-thread/wiki (доступна для редактирования всем)
Предыдущий: >>3686960 (OP)

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

📍 Подпишись на создателей: https://t.me/linuxexex
Знаешь, откуда взялось имя «Linux»?

Линус Торвальдс изначально хотел назвать своё ядро Freax — от слов «free», «freak» и «Unix». Он даже успел создать файлы с таким именем и несколько месяцев использовал его у себя локально.

Но в 1991 году его приятель Ари Лемке, который администрировал FTP-сервер финского университета, загрузил ядро в публичный доступ. И назвал директорию своей волей — linux. Лемке посчитал, что это звучит лучше. Торвальдс поначалу был против, но потом смирился и принял имя как данность.

Так что технически Linux назвал не сам Линус. 😄

Интересно, что сам Торвальдс признавался: если бы он выбирал имя осознанно, то слово Freax ему нравилось больше. Но история распорядилась иначе, и сегодня слово «Linux» знает весь мир — от серверных стоек до смартфонов в кармане.

Вот так случайное решение одного системного администратора в маленьком университете Финляндии навсегда вошло в историю IT.

📍 Подпишись на создателей: https://t.me/linuxexex
📰 Объявление: правила обновлены, и апрель наконец-то закончился

После временного бана на контент об LLM в течение всего апреля, и после того как модераторы собрали обратную связь от пользователей, было решено завершить временный запрет на посты об ИИ — тот самый, про который уже думали «не верю, что он до сих пор действует».

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

Кроме того, в процессе написания нового правила модераторы обнаружили, что правила не отображались в сайдбаре на old.reddit.com — это исправили. Для тех, кто видит правила впервые: там нет ничего нового. Модераторы применяли эти правила как могли уже давно. По ссылке над списком правил можно перейти на страницу правил old.reddit с подробной информацией, которая просто плохо влезает в сайдбар.

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

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

Многие ставят систему, настраивают всё под себя — и забывают про одну банальную вещь. Это аудит файлов с SUID-битом.

Что такое SUID? Это специальный бит, который позволяет запускать программу с правами владельца файла, а не с правами того, кто её запустил. Звучит безобидно, пока владелец не root.

Типичный пример — /usr/bin/passwd. Он должен иметь SUID, потому что меняет системные файлы. Но если в системе появится посторонний файл с этим битом, злоумышленник получит лёгкий путь к повышению привилегий.

Как это проверить? Одной командой:

find / -perm -4000 -type f 2>/dev/null

Она найдёт все файлы с SUID в системе. Запусти и пробегись по списку. Большинство из них — стандартные утилиты: passwd, su, sudo, ping. Это нормально.

Но если видишь что-то незнакомое — это повод копать глубже.

Что делать с подозрительными файлами?

Сначала смотришь, кто владелец и откуда файл появился:

ls -la /путь/к/файлу
dpkg -S /путь/к/файлу # для Debian/Ubuntu
rpm -qf /путь/к/файлу # для RHEL/Fedora

Если файл не принадлежит ни одному пакету — это красный флаг 🚩

Убрать SUID-бит, если он не нужен, просто:

chmod u-s /путь/к/файлу

Дополнительно можно автоматизировать мониторинг. Сохрани текущий список доверенных SUID-файлов в файл и сравнивай периодически через cron:

find / -perm -4000 -type f 2>/dev/null | sort > /root/suid_baseline.txt

Потом через cron запускаешь аналогичную команду и сравниваешь diff-ом с baseline. Любое новое вхождение — сигнал для проверки.

Это не паранойя, это гигиена. Linux доверяет тебе, а ты доверяй, но проверяй 🔍

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

Несколько лет назад люди начали говорить об определённых китайских колёсах не просто как о «лучших китайских» или «лучших бюджетных», а просто как о «лучших колёсах». В этом году Winspace выпустила T1600 — продукт для внутреннего китайского рынка, который стоит дороже Madone или Tarmac. Прямо из коробки он одобрен UCI (хотя, возможно, придётся приклеить свинцовые грузики, чтобы вписаться в весовые ограничения). Западным покупателям он официально не предназначен — хотя они, без сомнения, всё равно попытаются его достать.

Западные бренды сыпались один за другим ещё до того, как опустился железный занавес 2.0, а теперь прозвучал и контрольный выстрел: такие гиганты, как Trek, рискуют обанкротиться, потому что их производственные цепочки перерезала политика импортозамещения — популярная тактика развития третьего мира, которую в своё время с энтузиазмом практиковали такие визионеры, как Пиночет и Гальтиери.

Это конец эпохи западного велосипеда? Будут ли завтрашние дантисты соглашаться не меньше чем на китайские байки с китайской же трансмиссией?

Источник (4chan /n/): https://boards.4chan.org/n/thread/2039960

📍 Подпишись на создателей: https://t.me/linuxexex
Как Linux понимает, что файл — это файл 📁

Давайте разберём VFS — виртуальную файловую систему. Это одна из тех штук, которую все используют, но мало кто думает о том, как она вообще работает.

Проблема, которую VFS решает

На вашей машине может стоять ext4 на системном разделе, btrfs на домашнем, ntfs на флешке, и ещё /proc с /sys, которые вообще не хранят данные на диске — они генерируются ядром на лету. Как пользовательская программа работает с ними одинаково? Пишет open(), read(), write() — и всё просто работает.

Ответ: VFS — это слой абстракции внутри ядра, который прячет все различия за единым интерфейсом.

Четыре кита VFS

Внутри VFS есть четыре ключевых объекта.

Суперблок — это метаданные всей файловой системы. Когда вы монтируете раздел, ядро читает суперблок и создаёт его in-memory представление. Там хранится тип ФС, размер блока, указатели на корневой inode и прочее.

Inode — описание конкретного файла или директории. Здесь живут права доступа, владелец, размер, временные метки и указатели на блоки данных. Имени файла здесь нет — это важный момент.

Dentry (directory entry) — связывает имя файла с inode. Именно поэтому hard link работает так, как работает: два dentry указывают на один inode. Ядро кэширует dentry агрессивно, потому что обход пути /usr/bin/python3 иначе превратился бы в кучу операций чтения.

File — объект, который создаётся при каждом вызове open(). Он хранит текущую позицию чтения, флаги доступа и указатель на inode. Один и тот же файл могут открыть десять процессов — будет десять объектов file, но один inode.

Как это работает при open()

Вы пишете open("/home/user/notes.txt", O_RDONLY).

Ядро начинает с корня, берёт dentry для "/", потом ищет "home" в нём, потом "user", потом "notes.txt". На каждом шаге идёт в dentry-кэш, и только при промахе — на диск. В итоге получает inode нужного файла, создаёт объект file, кладёт его в таблицу открытых файлов процесса и возвращает вам файловый дескриптор — просто число.

Когда вы делаете read(), ядро по дескриптору находит объект file, через него добирается до inode, а дальше вызывает метод read конкретной файловой системы. ext4 и btrfs реализуют эти методы по-своему, но VFS не знает и знать не хочет — он просто дёргает указатель на функцию.

Почему /proc — это гениально

/proc монтируется как отдельная ФС типа procfs. Когда вы читаете /proc/1/status, никакого файла на диске нет. Ядро просто вызывает функцию, которая генерирует текст прямо в момент чтения. С точки зрения VFS это обычный файл. С точки зрения реализации — вызов в планировщик и подсистему памяти.

Вот почему cat /proc/cpuinfo работает точно так же, как cat README.md, хотя природа этих файлов принципиально разная.

VFS — это классический пример того, как правильный слой абстракции делает систему расширяемой без боли. Хотите добавить новую файловую систему в Linux? Реализуйте нужные операции, зарегистрируйте тип — и всё, она работает как родная. 🐧

📍 Подпишись на создателей: https://t.me/linuxexex
Знаете, почему пингвин Тукс стал символом Linux?

В 1996 году Линус Торвальдс объявил конкурс на логотип для своей операционной системы. Единственное условие — никаких серьёзных корпоративных орлов и прочей пафосной живности. Линус хотел что-то милое и немного нелепое.

Тут он вспомнил, что однажды его укусил пингвин в австралийском зоопарке. Звучит как байка, но сам Торвальдс это подтверждал. Укус оказался несильным, но запоминающимся — и образ остался в голове.

Художник Ларри Юинг нарисовал толстенького довольного пингвина, сидящего с набитым пузом. Как будто только что съел лишнюю рыбу и теперь просто кайфует. Никакой агрессии, никакой серьёзности. Торвальдсу понравилось.

Имя Tux, кстати, придумал не Линус. Его предложил Джеймс Хьюз — от слова tuxedo, то есть смокинг. Потому что чёрно-белая расцветка пингвина напоминает вечерний костюм. Ещё одна версия — сокращение от Torvalds UniX. Оба варианта красивые, официально закреплённого нет.

Самое интересное: Ларри Юинг нарисовал Тукса в программе GIMP — тогда совсем молодом open source редакторе. Символ Linux появился благодаря другому open source проекту. Такое вот взаимное уважение.

С тех пор Тукс живёт везде — на серверах, суперкомпьютерах, смартфонах с Android и даже в ядре марсохода NASA. Укушенный пингвином программист из Финляндии явно не предполагал, к чему это приведёт 🐧

📍 Подпишись на создателей: https://t.me/linuxexex
🛠 Инструмент дня: ripgrep

Если ты до сих пор ищешь по проекту через grep -R, попробуй rg.

Пример:

rg "TODO|FIXME"

ripgrep быстрый, по умолчанию уважает .gitignore и удобно показывает контекст. Для больших репозиториев разница чувствуется сразу.

Полезные варианты:
rg -n "pattern" — с номерами строк
rg --files — список файлов проекта
rg -t py "async def" — искать только в Python-файлах

Один из тех инструментов, после которых назад возвращаться не хочется.

📍 Подпишись на создателей: https://t.me/linuxexex
📰 Проект ЕС по верификации возраста обяжет использовать аппаратную аттестацию

Европейский союз работает над системой верификации возраста, и судя по всему, она потребует аппаратной аттестации — то есть привязки к железу конкретного устройства.

Что это значит на практике: сайты и сервисы смогут убедиться, что ты совершеннолетний, только если твоё устройство аппаратно подтверждает личность через встроенный чип (вроде TPM). Без «правильного» железа — нет доступа.

Сообщество Linux встревожено по понятным причинам. Аппаратная аттестация в том виде, в каком её продвигают крупные вендоры, — это по сути Web Environment Integrity от Google или аналогичные схемы. Они проверяют не только железо, но и то, «одобрена» ли операционная система. Linux, кастомные прошивки, разблокированные загрузчики — всё это рискует оказаться за бортом.

Фактически ЕС может узаконить механизм, который:
— дискриминирует пользователей свободного ПО
— даёт производителям железа и ОС контроль над тем, кто получает доступ к интернету
— создаёт инфраструктуру слежки под соусом «защиты детей»

Верификация возраста — цель благородная. Но аппаратная аттестация — это кувалда там, где нужен скальпель. И прецедент крайне опасный. 🔒

Источник (r/linux): https://www.reddit.com/r/linux/comments/1vfl2nq/eu_age_verification_project_mandates/

📍 Подпишись на создателей: https://t.me/linuxexex
Расскажу про одну штуку в bash и zsh, которую большинство не замечает годами.

Называется это parameter expansion с модификаторами. Звучит скучно, но на практике экономит кучу времени.

Смотри. У тебя есть переменная с путём к файлу:

file="/home/user/projects/app.tar.gz"

Теперь без единой внешней утилиты — ни basename, ни dirname, ни sed — ты можешь вытащить что угодно:

Только имя файла:
echo "${file##*/}"
→ app.tar.gz

Только директорию:
echo "${file%/*}"
→ /home/user/projects

Убрать расширение:
echo "${file%%.*}"
→ /home/user/projects/app

Убрать только последнее расширение:
echo "${file%.*}"
→ /home/user/projects/app.tar

Логика простая. Решётка # — режем с начала строки, процент % — режем с конца. Одинарный символ — минимальное совпадение, двойной — максимальное. Один раз запомнил, и больше не забудешь.

Но это ещё не всё. Есть замена по паттерну прямо внутри переменной:

text="hello world world"

echo "${text/world/linux}"
→ hello linux world

echo "${text//world/linux}"
→ hello linux linux

Один слэш — заменяет первое вхождение, два — все сразу. Никакого sed для простых замен.

И совсем редкая вещь — изменение регистра. Работает в bash 4+ и zsh:

name="hello world"

echo "${name^}"
→ Hello world

echo "${name^^}"
→ HELLO WORLD

str="LINUX IS COOL"
echo "${str,,}"
→ linux is cool

Каретка поднимает регистр, запятая опускает. Двойная — применяет ко всей строке.

Зачем это вообще нужно? Во-первых, скорость. Всё это работает внутри самого шелла без форка нового процесса. В скриптах, которые гоняют тысячи файлов в цикле, разница ощутимая. Во-вторых, читаемость — когда видишь ${file##*/}, понимаешь намерение сразу, не гадаешь что делает регулярка в sed.

Один практический пример, который пригождается часто. Конвертируешь пачку файлов и хочешь поменять расширение:

for f in *.mp4; do
ffmpeg -i "$f" "${f%.mp4}.mkv"
done

Чисто, без подпроцессов, без временных переменных.

Это тот случай, когда bash перестаёт казаться убогим и начинает казаться хитрым 😄

📍 Подпишись на создателей: https://t.me/linuxexex
Как Linux управляет памятью — просто о сложном

Каждый раз, когда ты запускаешь программу, ядро делает кучу невидимой работы. Давай разберёмся, как устроена подсистема управления памятью в Linux — одна из самых фундаментальных частей системы.

Главная идея: виртуальная память

Каждый процесс думает, что у него есть весь адресный диапазон целиком. Браузер не знает о существовании терминала, терминал — о браузере. Это и есть виртуальная память. Ядро создаёт иллюзию, что у каждого процесса своя личная оперативка.

На самом деле за этим стоит таблица страниц. Ядро хранит маппинг: виртуальный адрес процесса → реальный физический адрес в RAM. Процессор при каждом обращении к памяти смотрит в эту таблицу через специальный блок MMU. Если адреса нет — получаешь segfault, знакомо?

Страницы и Page Fault

Память делится на страницы по 4 КБ (обычно). Когда процесс обращается к странице, которой нет в RAM, происходит так называемый page fault — прерывание. Ядро перехватывает его и решает: либо загрузить страницу с диска, либо убить процесс, если он полез куда не надо.

Это и есть механизм подкачки (swap). Когда RAM заканчивается, ядро выталкивает редко используемые страницы на диск, освобождая место. Потом, если они снова понадобятся — подгрузит обратно. Это медленно, но лучше чем OOM-killer, который просто расстреляет один из процессов 💀

OOM-killer — отдельная история

Если swap тоже кончился и памяти нет совсем, ядро запускает OOM-killer (Out Of Memory Killer). Он считает баллы каждому процессу: сколько памяти жрёт, насколько важен, сколько живёт — и убивает того, кто набрал больше всего очков "ненужности". Иногда выбор бывает... спорным. Поэтому в продакшне за памятью следят внимательно.

Copy-on-Write

Когда процесс делает fork() — создаёт дочерний процесс — ядро не копирует всю память сразу. Оба процесса смотрят на одни и те же физические страницы. Копирование произойдёт только тогда, когда кто-то из них попытается что-то записать. Это называется Copy-on-Write и экономит кучу ресурсов.

Зачем это знать на практике?

Смотришь на /proc/meminfo и видишь Cached и Buffers — это ядро использует свободную RAM как кэш файловой системы. Это нормально и хорошо. Если приложению понадобится память — кэш освободится. Поэтому "свободная" память в Linux почти всегда близка к нулю, и это не проблема.

Команды, которые помогают разобраться:
free -h — общая картина
vmstat 1 — динамика
cat /proc/meminfo — детали
dmesg | grep -i oom — был ли OOM-killer

Подсистема памяти в Linux — это огромный айсберг. Сегодня показал только верхушку, но уже достаточно, чтобы не паниковать когда видишь "память занята" 🧊

📍 Подпишись на создателей: https://t.me/linuxexex
Лайфхак для терминала, который я использую каждый день

Если ты часто работаешь в терминале, то наверняка знаешь боль: набрал длинную команду, нажал Enter — и только потом заметил ошибку. Или хуже — забыл как называлась та команда, которую вводил три дня назад.

Вот несколько трюков, которые реально экономят время.

⚡ Ctrl+R — поиск по истории

Нажимаешь Ctrl+R и начинаешь вводить часть команды — bash или zsh сами найдут её в истории. Не нужно листать стрелочками вверх сто раз. Просто вводишь кусок того, что помнишь, и получаешь результат. Если не то — жмёшь Ctrl+R ещё раз, идёт дальше по истории.

⚡ !! и !$

!! — повторяет предыдущую команду целиком. Классика: забыл написать sudo.

sudo !!

И команда выполнится с правами суперпользователя.

!$ — подставляет последний аргумент предыдущей команды. Например:

mkdir /very/long/path/to/project
cd !$

Не нужно копировать путь заново — он подставится сам.

⚡ Ctrl+A и Ctrl+E

Ctrl+A — прыгает в начало строки. Ctrl+E — в конец. Намного быстрее, чем держать стрелку зажатой.

⚡ Ctrl+U и Ctrl+K

Ctrl+U — удаляет всё от курсора до начала строки. Ctrl+K — до конца строки. Очень удобно, когда набрал длинную команду и хочешь переписать только начало или конец.

⚡ Alt+. (точка)

Подставляет последний аргумент из самой последней команды — аналог !$, но работает интерактивно. Нажимаешь несколько раз — листаешь аргументы из предыдущих команд по истории. Это вообще магия, пока не попробуешь — не понимаешь насколько полезно.

⚡ history | grep

Если Ctrl+R не справляется — можно поискать руками:

history | grep docker

Выдаст все команды с docker из истории. Находишь номер нужной и запускаешь через !номер — например !342.

Все эти штуки встроены в bash и zsh, ничего устанавливать не нужно. Просто начни использовать — через неделю руки сами будут тянуться к Ctrl+R вместо стрелки вверх. 🖥️

Какой из этих трюков уже знал, а какой стал открытием? Пиши в комментарии.

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

Хочу поговорить про sudo и про то, как большинство людей пользуются им не думая.

Классическая картина: ставишь какой-нибудь пакет, лезешь в конфиг, что-то правишь — и на автопилоте пишешь sudo перед каждой командой. Привычка. Мышечная память. А потом удивляются, почему что-то пошло не так.

Вот несколько конкретных вещей, которые стоит сделать прямо сейчас.

— — —

Проверь, кто вообще в группе sudo или wheel

На Debian/Ubuntu:
getent group sudo

На Fedora/Arch:
getent group wheel

Если видишь там имена, которых не ожидал — это повод задать вопрос. Особенно актуально на серверах, где работало несколько человек.

— — —

Настрой таймаут sudo

По умолчанию sudo помнит твои права 15 минут. Это удобно, но если ты отошёл от компьютера, а сессия открыта — любой, кто сядет за клавиатуру, может рулить системой без пароля.

Открой visudo и добавь:

Defaults timestamp_timeout=0

Теперь sudo будет спрашивать пароль каждый раз. Да, чуть менее удобно. Зато безопаснее.

— — —

Запрети sudo без пароля

Иногда в sudoers встречается страшная строка:

username ALL=(ALL) NOPASSWD: ALL

Это значит — пользователь делает всё что угодно от рута без ввода пароля. Удобно для автоматизации, но если кто-то получит доступ к сессии — система открыта нараспашку. Убирай NOPASSWD там, где это не жёсткая необходимость.

— — —

Используй sudo -l чтобы понимать свои права

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

— — —

Не запускай текстовые редакторы через sudo без нужды

sudo vim /etc/hosts — окей, если реально нужно.
Но многие запускают весь редактор с правами рута ради одного файла, а потом в нём открывают что-то ещё, ставят плагины и так далее. Лучше использовать sudoedit — он открывает файл безопаснее, через копию, и не даёт редактору работать от рута напрямую.

sudoedit /etc/hosts

— — —

Безопасность — это не параноя, это привычка думать перед тем, как нажать Enter. Особенно когда в команде есть sudo 🙂

📍 Подпишись на создателей: https://t.me/linuxexex
Лайфхак для терминала, который реально экономит время ⚡

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

Все знают про alias в .bashrc или .zshrc. Но мало кто использует функции вместо алиасов, когда нужно передать аргументы в середину команды.

Например, хочешь быстро зайти в любую директорию проекта и сразу открыть её в редакторе:

cdcode() { cd ~/projects/"$1" && code . ; }

Теперь пишешь cdcode myapp — и ты уже внутри нужной папки с открытым редактором. Никаких двух команд, никаких ошибок с путём.

Но это ещё не главное. Вот реальный экономщик времени — CDPATH.

Добавь в .bashrc строку:

export CDPATH=.:~:~/projects:~/work

После этого команда cd myapp будет искать папку не только в текущей директории, но и во всех путях из CDPATH. Ты пишешь просто cd myapp из любого места в системе — и попадаешь в ~/projects/myapp, если там такая папка есть.

Никакого автодополнения настраивать не надо, работает из коробки в bash и zsh.

Ещё один момент — история команд. По умолчанию она маленькая и не сохраняет дубли. Добавь это:

export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTCONTROL=ignoredups:erasedups
shopt -s histappend

Теперь история большая, дубли не захламляют её, и при открытии нового терминала история не перезатирается, а дописывается. Ctrl+R для обратного поиска по истории становится в разы полезнее, когда там реально все твои команды за последние месяцы.

Итого три вещи, которые стоит сделать прямо сейчас: написать функции вместо сложных алиасов, настроить CDPATH под свою структуру проектов, и починить настройки истории. Занимает пять минут, а время экономит каждый день. 🖥️

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

TUI (Terminal User Interface) — это тип интерфейса, использующий псевдографику и символы в терминале для создания интерактивных окон, меню и панелей. Они часто используются, так как легкие, работают без графической оболочки (GUI), быстры и популярны для управления системой.

Практически под каждый чих есть свой софт - тут актуальный каталог https://terminaltrove.com/ https://terminaltrove.com/

сам подсел на это дело после настройки своего selfhost сервака, потом на ноутбуке снёс гном и теперь полностью сиду в псевдографике. Жаль на мобиле такого нет.

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

📍 Подпишись на создателей: https://t.me/linuxexex
какой пиздец
я даже забыл что хостшу на своем макьуке а эта пусечка спасает канал как может
но у него не получается(((
@mira сделай минет @linuxexe_bot