GNU/Linux | Notes
2.41K subscribers
108 photos
8 files
73 links
Open Source, Dotfiles, Debian/Ubuntu, Software, Linux, Scripts, Notes, Terminal, Shell, Gnu, Tools, Games, Fun, Free Software Movement.

Автор: Кирилл Рехов
Почта: krekhov.dev@gmail.com
Кто я: https://xn--r1a.website/krxnotes/246
GitHub: https://github.com/krekhovx
Download Telegram
Что такое Debian Desktop и какие пакеты относятся к Desktop окружению?

Debian Desktop - это рабочее окружение, предназначенное для использования на настольных компьютерах. Оно включает в себя различное программное обеспечение, такое как графические оболочки (например, GNOME, KDE, Xfce), офисные приложения, веб браузеры, мультимедийные приложения и другие инструменты, необходимые для повседневной работы на ПК.

Некоторые пакеты, которые обычно относятся к Debian Desktop, включают в себя:

1. GNOME или KDE (графические оболочки)
2. LibreOffice (офисный пакет)
3. Firefox или Chromium (веб-браузеры)
4. VLC (мультимедийный проигрыватель)
5. GIMP (графический редактор)
6. Thunderbird (почтовый клиент)
7. Любые другие приложения, необходимые для работы и развлечений на рабочем столе

Эти пакеты обычно включены в образы установочных дисков Debian Desktop или доступны для установки из официальных репозиториев Debian.

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

#debian
🐳43👍2
Кодовые имена дистрибутива Debian

Дистрибутивы Debian традиционно называются в честь персонажей из анимационного фильма "История игрушек" (Toy Story) студии Pixar. Вот несколько примеров:
...
Debian 5.0 - Lenny (в честь бинокля Лени)
Debian 6.0 - Squeeze (в честь инопланетных игрушек)
Debian 7.0 - Wheezy (в честь пингвина Визи)
Debian 8.0 - Jessie (в честь Джесси, ковбойки)
Debian 9.0 - Stretch (в честь осьминога Стретча)
Debian 10.0 - Buster (в честь собаки Бастера)
Debian 11.0 - Bullseye (в честь быка по имени Булзай)
Debian 12.0 - Bookworm (в честь книжного червя Букворм)
Debian 13.0 - Trixie (в честь динозавра Трикси)
... и т.д.

а первая версия Debian 1.1 называлась в честь главного героя Базза Лайтера - (Buzz). Забавно не правда ли =) Этот принцип сохранения имен в честь персонажей из "Истории игрушек" является традицией и помогает легко идентифицировать различные версии дистрибутива.

#debian
🥰17👍84❤‍🔥2👎1
Компоненты ядра операционной системы Linux

1. Process Scheduler (SCHED)
Планировщик процессов, отвечает за контроль над доступом процессов к CPU. Обеспечивает такое поведение ядра, при котором все процессы имеют справедливый доступ к центральному процессору.

2. Memory Manager (MM)
Менеджер памяти, обеспечивает различным процессам безопасный доступ к основной памяти системы. Кроме того, MM обеспечивает работу виртуальной памяти, которая позволяет процессам использовать больше памяти, чем реально доступно в системе. Выделенная, но неиспользуемая память вытесняется на файловую систему, и при необходимости - возвращается из неё обратно в память (swapping).

3. Virtual File System (VFS)
Уровень абстракции поверх конкретной реализации файловой системы. Целью VFS является обеспечение единообразного доступа клиентских приложений к различным типам файловых систем.

4. Network Interface (NET)
Сетевые интерфейсы, обеспечивает работу с различными сетевыми стандартами и сетевым оборудованием.

5. Inter-Process Communication (IPC)
Межпроцессное взаимодействие, обмен данными между потоками одного или разных процессов, реализуется посредством механизмов, предоставляемых ядром OC или процессом.

#kernel #theory
94👍3
exec и tee

С помощью exec можно делать замену дескрипторов/процессов.

tee читает из своего stdin и пишет в stdout например, сценарий script.sh:
#!/bin/bash
exec 2> >(tee file.log)
sleep .1
>&1 echo "hello 1"
>&2 echo "hello 2"


Затем выполнить:
$ ./script.sh

Разбор. Здесь два процесса, первый наш исполняемый script.sh, а второй это tee. У первого процесса stderr (2 файловый дескриптор) смотрит в pipe, у второго процесса stdin (1 файловый дескриптор) смотрит тоже в этот pipe, то есть весь stderr сценария будет перенаправляться в tee, который будет записывать это в файл file.log.

Часто с tee командами возникает (freeze shell) tee останавливает появления приглашения PS1, который ожидает EOF в своем stdin, в качестве обходного пути можно сделать sleep .1 как в примере выше.

Перенаправить stdout и stderr в file.txt:
exec &> >(tee file.txt)


Перенаправить stdout в file.txt:
exec 1> >(tee file.txt)


Перенаправить stderr в file.txt:
exec 2> >(tee file.txt)


Для заметки:

&> и >& одинаковы


2>&1 перенаправляет stderr в stdout


>/dev/null перенаправляет только stdout


Другой пример, сценарий main.sh:
#!/bin/bash
>&1 echo "hello 1"
>&2 echo "hello 2"


Трюки без exec, а с tee:
$ ./main.sh 2>&1 | tee logs/file.log
$ ./main.sh 2> >(tee logs/stderr.log)


#shell #utils
53👍2❤‍🔥1
Как перевести скрипт в бинарный формат (ELF)?

Создадим сценарий:
$ echo -e '#!/bin/sh\necho hello\nexit 0' > hello.sh


Установка:
$ apt-get install -y shc


Перевести скрипт в ELF файл:
$ shc -f hello.sh
$ ./hello.sh.x

hello

Удостовериться, что наш сценарий-программа действительно ELF:
$ file hello.sh.x

hello.sh.x: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=0d5954d51e07ffc91fce25485256ef210af3dbcc, for GNU/Linux 3.2.0, stripped

hello.sh.x аналогичен a.out файлу, получился ELF. shc отличный инструмент, чтобы скрыть скрипт в бинарном файле.

#utils #security
9🔥81
Бинарные модули и процессы

Бинарные модули
- это программы, которые уже скомпилированы и хранятся в готовом к выполнению формате для конкретной операционной системы и аппаратной архитектуры. Они ожидают своего запуска, находясь в состоянии пассивного ожидания (на диске).

Процессы - это абстракции ОС, представляющие собой данные бинарные модули в действии, загруженный двоичный код, виртуальная память, ресурсы ядра, такие как открытые файлы, связанный пользователь и т.д. Иными словами, процессы - это выполняющиеся бинарные модули (в памяти компьютера).

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

#theory
6👍4
Какие процессы бывают?

* Пользовательские процессы
(запускаются в режиме пользователя, ограниченные ресурсы).

* Процессы ядра (запускаются в режиме ядра, привилегированные процессы).

* Демоны (работают в фоне).

#theory
12👍3🔥1
Что такое поддержка?

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

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

Например, если в CentOS 8 закончилась поддержка, это означает, что не будут выпускаться обновления безопасности и исправления ошибок для этой версии. В то время как поддержка для CentOS 7, возможно, продолжается, и обновления будут выпускаться.

Например, Debian Bullseye имеет стабильный выпуск и имеет поддержку. Обычно стабильные версии дистрибутивов длятся около 5 лет. Однако это может измениться в зависимости от решения проекта.

#misc #theory
👍432
Как установить скаченный шрифт?

Например, появилось необходимость установить новый шрифт в терминале. Скачиваем шрифт из интернета (обычно с форматом .ttf), затем кладем его в ~/.fonts директорию.

Обновить кэш:
$ fc-cache -fv


Проверить доступность:
$ fc-list | grep "my new font"


Затем в настройках терминала выбрать новый шрифт.

#utils #terminal
13👍6🔥1
Что такое FAQ?

FAQ - это аббревиатура от английского выражения "Frequently Asked Questions", что в переводе на русский язык означает "Часто задаваемые вопросы". FAQ представляет собой список самых часто задаваемых вопросов и ответов на них, который обычно размещается на веб-сайте или в документации к продукту или услуге. Это помогает пользователям быстро найти ответы на свои вопросы без необходимости обращаться к службе поддержки или другим источникам информации.

#misc #theory
🗿106👍5
Что такое upstream?

Процесс клонирования
— это создание собственного репозитория (Б) на основе существующего (А) с целью добавить к продукту какие-то собственные изменения. Это называется fork (клонирование).

Так вот, (Б) — это форк/клон, а (А) — это upstream.

Создатель форка может быть никак не связан с создателями проекта и обычно может вносить изменения в форк, но не в upstream. В upstream он может только предлагать изменения.

Поддержкой upstream занимаются мейнтейнеры (сопровождающие) проекта. Их версия является "канонической", и все изменения, которые они принимают, обычно в конечном счёте попадают в форки, которые от них зависят. В этом смысле они "выше по течению": те изменения, что они принимают, "растекаются вниз" по форкам. Отсюда и название.

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

#git
👍162🔥1
strace

Отследить работу процесса a.out:
$ strace a.out


Вывод в файл log:
$ strace -o my-log a.out


Отслеживание конкретного процесса:
$ strace -p <pid>


Отследить встроенную команду:
$ strace bash -c 'cd /tmp'


Например, команда 'mount -t nfs ...' возвращает отрицательный статус, можно проанализировать вывод утилиты strace:
$ strace -o mount.strace -s1024 -f -i -k -n mount -t nfs <path> <to-path>


Разбор:
-s1024 длина сообщений будет полная, а не обрезанная (32 длиной).
-f отслеживать дочерние процессы (если они будут созданы - fork()).
-i указатель инструкции во время системного вызова.
-k трассировка выполнения отслеживаемых процессов.
-n номера системных вызовов.

Данные трюки я использовал при отладке ПО. Работая системным программистом часто приходилось пользоваться strace. Если strace не работает, можно обратиться к файлу /proc/sys/kernel/yama/ptrace_scope, про него описано в man 2 ptrace.

#kernel #utils
👍2343
Релиз Debian 13 (Trixie)

Ура! Вышел Debian 13 🥳

После 2 лет, 1 месяца и 30 дней разработки проект Debian с гордостью представляет свою новую стабильную версию 13 (кодовое название Trixie).

Trixie будет поддерживаться в течение следующих 5 лет благодаря совместной работе команды безопасности Debian и команды долгосрочной поддержки Debian.

Debian 13 Trixie поставляется с несколькими окружениями рабочего стола, такими как:

* GNOME 48
* KDE Plasma 6.3
* LXDE 13
* LXQt 2.1.0
* Xfce 4.20

Ссылка: https://www.opennet.ru/opennews/art.shtml?num=63702

Ссылка: https://www.debian.org/News/2025/20250809

#debian
Please open Telegram to view this post
VIEW IN TELEGRAM
27❤‍🔥8👍8🎉6😁2
Как смотреть журналы (dmesg и journalctl)

journalctl
- системный журнал (читает /var/log/journal).

Вывод в реальном времени:
$ journalctl -f


Отобразить сегодняшние записи:
$ journalctl -S today


Вывести только err уровень:
$ journalctl -S today -p err


err, warning уровни:
$ journalctl -S today -p 3..4


Показывает журнал конкретного сервиса:
$ journalctl -u <name>.service


dmesg - системный журнал ядра (читает /var/log/kern.log или напрямую из ядра).

less вывод:
$ dmesg -H


Читабельный формат:
$ dmesg -T


Показывает уровень (приоритет):
$ dmesg -x


Вывод в реальном времени:
$ dmesg -w


В сумме:
$ dmesg -HTx


Зачистить dmesg:
$ dmesg -C


#kernel #utils
👍22103❤‍🔥1🤔1
X clipboards

Primary
Старый и традиционный вид буфера. Копирование в Primary: с помощью мыши. Вставка из Primary: Middle click, Shift + insert.

Clipboard
Более современный буфер обмена. Копирование в Clipboard: Ctrl + C. Вставка из Clipboard: Ctrl + V.

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

Работа с буферами обмена через утилиту xsel:

Зачистка clipboard буфера:
$ xsel -b -c


Зачистка primary буфера:
$ xsel -p -c


Вставка в clipboard буфер:
$ echo "this is clipboard" | xsel -b -i


Вставка в primary буфер:
$ echo "this is primary" | xsel -p -i


#utils
👍18
Executable and Linkable Format (ELF)

Файл ELF является выходным файлом компилятора или линкера и имеет двоичный формат. Вместо того чтобы напрямую использовать язык CPU, мы используем ЯП, имеющий стандартные функции. Компилятор транслирует эти функции в объектный код. Этот объектный код затем линкуется в полную программу (с помощью ld). Результатом является двоичный файл, который может быть выполнен на конкретной платформе и конкретном типе CPU. Объектные файлы, библиотеки, дампы ядра, a.out файлы, всё это ELF файлы.

$ file a.out

a.out: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=7478e8fc71c172b058f3633fabcafb3b110c00a0, for GNU/Linux 3.2.0, not stripped

#build #theory
👍7
Компилятор, основные термины

Компилятор распознает язык по расширению файла.

Исходник
Исходный файл содержит код на языке Си, файл оканчиваются на .c, например file.c

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

Результат
Бинарный файл.

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

Кодирование - бинарный код (текст воспроизводится в бинарный код (0/1)).

Декодирование - бинарный код воспроизводится в текст.

Трансляторы:
Компилятор -> СКОРОСТЬ
Интерпретатор -> ГИБКОСТЬ

#build #theory
👍14👎4🦄43
gcc (GNU Compiler Collection)

Получение объектного файла (-с (compile) означает только компиляция - без компоновки):
$ gcc -c main.c


Процесс сборки, получение бинарного файла (-o задает имя исполняемого файла):
$ gcc -o exe a.o b.o


Компиляция одиночного файла:
$ gcc main.c -o program


Поместить отладочную информацию в объектный/исполняемый файл:
$ gcc -g<level>
$ gcc -g3 main.c


Удалить отладочную информацию из ELF файла:
$ strip -s a.out


Различные уровни оптимизации 0-3, 0 - НЕ оптимизировать код:
$ gcc -O0 main.c


-O3 означает оптимизировать код (улучшает его производительность, уменьшает размер кода и т.д.) Даже если программа собрана с -O3, volatile все равно говорит компилятору - НЕ оптимизировать код.

Вывод сообщений о всех предупреждениях или ошибках, возникающих во время компиляции:
-Wall


Дополнительные предупреждения:
-Wextra


Эти флаги служат для поиска библиотек, передается компоновщику:
-L<путь> -l<библ>


Для поиска заголовочных файлов -I/usr/local/include
-I<путь>


В этой команде линкуется (связывается) exe с библиотекой math
gcc -o exe sums.c -lm


Бывают случаи когда нужной библиотеки нет в стандартной библиотеке и компиляцию придется осуществлять с дополнительным флагом, например так:
$ gcc main.c -lpthread


#utils #build
👍1052❤‍🔥2
GNU GPL License и коммерческие компании (продажа)

Если компания взяла программу под GNU GPL лицензией, внесла в неё изменения и начала продавать, но при этом ограничила доступ к своим измененным исходным кодам, она нарушает принципы данной лицензии. GNU GPL обязывает распространять исходный код программы и любые изменения к нему под той же лицензией, чтобы сохранить свободу программы для всех пользователей. Такие действия могут привести к правовым последствиям и претензиям со стороны сообщества свободного программного обеспечения. Для коммерческого ПО открывать исходники всем - это не принято, НО придется бесплатно предоставлять исходники проекта конечным получателям, даже если вы распространяете продукт за деньги. Да, продажа программы лицензией вполне разрешена. Предоставлять исходники можно как вместе с программой, так и отдельно.

#misc #opensource
👍63
Интересные мысли из лекций Ричарда Столлмана

Кто задает инструкции вашему компьютеру? Пользователь или корпорации? В большинстве случаев CPU обрабатывает огромное кол-во инструкций необходимых именно корпорациям, а не пользователю. ПК не подчиняется вашим инструкциям. ПК выполняет пользовательские инструкции в той мере, в которой ему позволяют корпорации. Либо пользователь контролирует программы, либо программы контролируют пользователя. Корпорации превращают пользовательские данные в звонкую монеты, они жадные, и найдут способы как саботировать пользователя и создать из этого прибыль. Большие компании делают большие деньги контролируя пользователей.

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

Хороший пример с человеческим организмом, люди контролируют свое питание, прием жидкости, витаминов, фруктов и т.д, а почему вычисления компьютера нельзя контролировать? Это несправедливо. Корпорации чувствуют власть над пользователями и поэтому злоупотребляют ей, они лучше знают как надо пользователю (видите ли), они постоянно испытывают искушение плохо обращаться с пользователями, таким образом корпорации внедряют различные зловредные функции (шпионаж) и пользователи не смогут это исправить, ведь ПО несвободное. В проприетарном ПО слежка уже является нормой. Windows, Mac OS, Android, IOS, Amazon - главные шпионы. Но люди все равно будут соглашаться на слежку, потому что уже не представляют свою жизнь без этих коммерческих продуктов.

Данные пользователей отправляются на сервер, который контролирует корпорация. Затем корпорация может извлекать от туда данные и делать с ними все что угодно, например, продавать другим компаниям (рекламным) и т.д. Если производитель закрытого ПО закроет свои сервера, пользователь не сможет пользоваться приложениями без них. Потому что данные передаются круглосуточно.

Почему корпорации делают все вышеописанное? Что дает им мотивацию? Прибыль, деньги. На слежке, на контроле пользователей можно делать деньги, и они это отлично понимают. Иногда корпорации творчески притворяются, что уважительно относятся к пользователю, но это не так, это уловка.

Свободное ПО, как правило, честное.
А проприетарное ПО, как правило, вредоносное.

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

#people
👍3174💯4👻2🤪21😁1
Если в /etc/apt/sources.list прописаны несколько deb-src разных релизов (например, sid, bookworm, bullseye, buster и т.д.) и нужно скачать конкретную версию пакета, например, из buster:

1. Узнаём, какие версии пакета доступны:
$ apt-cache madison mc


2. Скачиваем исходники нужной версии (например, 3:4.8.22-1 из buster):
$ apt-get source mc=3:4.8.22-1


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

#debian #utils
👍12🔥52