Linux для чайника
19.6K subscribers
86 photos
4 files
79 links
Linux
- Разбор утилит / инструментов
- Новости / факты
- Опросы для проверки знаний, навыков
и многое другое.

Только по вопросам сотрудничества: @altmainf

Регистрация в перечне РКН https://clck.ru/3EpL9L
Download Telegram
Как происходит завершение процесса в Linux

Управление всеми процессами в ОС происходит с помощью сигналов. Обычно сигналы передает система, но пользователь также может их передавать с помощью специальных команд.

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

Основные сигналы:
 • SIGINT - самый безобидный сигнал завершения, означает Interrupt (Ctrl+C). 
 • SIGQUIT - сигнал, сообщающей программе, что ей нужно завершиться и она может выполнить корректное завершение или проигнорировать сигнал (Ctrl+/).
 • SIGHUP - сообщает процессу, что соединение с управляющим терминалом разорвано, отправляется, в основном, системой при разрыве соединения с интернетом;
 • SIGTERM - немедленно завершает процесс, но обрабатывается программой, поэтому позволяет ей завершить дочерние процессы и освободить все ресурсы;
 • SIGKILL - немедленно завершает процесс и обрабатывается ядром. Поэтому ресурсы и дочерние процессы остаются запущенными.
Ставим пароль на GRUB

1. Генерация хэш-пароля
За данное действие отвечает утилита:
grub-mkpasswd-pbkdf2 

А затем два раза ввести будущий пароль для GRUB. Полученный хэш – это длинная строка, которая начинается с grub.pbkdf2. Ее нужно скопировать и куда-нибудь сохранить.

2. Изменить настройки 
Теперь нужно назначить супер-пользователя для GRUB. Это удобно делать через файл /etc/grub.d/00_header, отредактировав его содержимое. Удобнее сначала открыть текстовый документ, куда все было сохранено, и вставить команду следующего вида:
cat << EOF
set superusers="user_name"
password_pbkdf2 user_name хэш-пароль
EOF
Вместо user_name во второй и третьей строке укажите предпочтительное имя супер-пользователя GRUB, а также замените хэш пароль на свой.

Теперь выполните:
sudo nano /etc/grub.d/00_header

Пролистайте его содержимое до самого конца и на новой строке вставьте ранее подготовленную команду из 4 строк, которая сохранена в текстовом документе. Сохраните изменения.

3. Обновить конфигурацию
sudo update-grub

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

No such file or directory
Пытались получить доступ к несуществующему файлу. Поскольку ввод/вывод в Unix не делает различий между файлами и каталогами, это сообщение об ошибке появляется везде. Вы получите его, если попытаетесь выполнить чтение несуществующего файла, или при переходе в отсутствующий каталог, или попробуете записать файл в несуществующий каталог и т. д.

File exists
В данном случае, возможно, пытались создать файл, который уже существует. Это часто бывает, когда вы создаете каталог, имя которого уже занято каким-либо файлом

Not a directory, Is a directory
Эти сообщения возникают, когда вы пытаетесь использовать файл в качестве каталога или каталог в качестве файла.

No space left on device
На жестком диске закончилось свободное пространство.

Permission denied
Эта ошибка возникает, когда вы пытаетесь выполнить чтение или запись, указав файл или каталог, к которым вам не разрешен доступ. Либо пытаетесь запустить файл, для которого не установлен бит выполнения.

Operation not permitted
Обычно возникает, когда пытаетесь завершить процесс, владельцем которого не являетесь.

Segmentation fault, Bus error
Суть ошибки сегментации состоит в том, что разработчик программы, которую вы только что запустили, где-то ошибся. Программа пыталась получить доступ к области памяти, к которой ей не разрешено обращаться, в результате ОС завершила работу программы. Подобно ей, ошибка шины означает, что программа пыталась получить доступ к памяти недолжным образом.Если вы получаете одну из этих ошибок, то, вероятно, вы передали на ввод программы какие-либо неожиданные для нее данные.
Это может быть опасно для ОС линукс

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

 2. Объединение раздела с мусорными данными
/dev/random в Linux может создавать мусорные данные. Объедините это с командой dd и вашим разделом, и вы получите коктейль Молотова, чтобы поджечь ваш раздел.

 3. Открытие своей системы для всех
В Linux все является файлом, и каждый файл имеет определенные разрешения. Команда chmod -R 777/ предоставляет всем доступ ко всем файлам в корневом разделе. Это означает, что каждый, кто использует систему, имеет права на чтение, запись и выполнение. Это не хорошо для вашей системы.
APT (Advanced Packaging Tool)

Консольная утилита, выполняющая роль «поисковика» и загрузчика пакетов из репозиториев. 

Установка скачанных пакетов производится утилитой DPKG. 

Список репозиториев хранится в файле «/etc/apt/sources.list» и может быть изменён пользователем в любой момент для установки или обновления программы, не входящей в базу дистрибутива.  

Изначально APT разрабатывался только для работы с пакетами DEB, использующихся в Debian и родственных ОС (Ubuntu, Linux Mint). Позже в него была добавлена поддержка rpm-файлов. Благодаря этому, установить софт привычным образом можно даже в дистрибутивах RED HAT и его производных (Fedora, CentOS и др.).

Для упрощения работы с APT можно использовать консольные оболочки APTITUDE или Synaptic.
Valgrind 

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

Самый популярный из этих инструментов называется Memcheck. Он может обнаруживать многие ошибки, связанные с памятью, которые распространены в программах C и C++ и могут привести к сбоям и непредсказуемому поведению.

Чтобы запустить memcheck с подробным детектором утечек памяти, воспользуйстесь командой:
valgrind --leak-check=yes ./myprog

Чтобы установить valgrind на Ubuntu:
sudo apt-get update
sudo apt-get -y install valgrind
Дистрибутив Pop!_OS

Pop!_OS разработан компанией System76, которая специализируется на производстве компьютеров и серверов с предустановленным Linux.


Основные преимущества Pop!_OS
1. Оптимизация для разработчиков: Pop!_OS включает в себя множество инструментов для программирования, таких как редакторы кода, компиляторы и библиотеки. Поддержка Python, JavaScript, C++, Go и других языков программирования присутствует "из коробки".

2. Оптимизация для геймеров:
Поддержка Steam и Lutris: Pop!_OS предлагает встроенную поддержку игровых платформ Steam и Lutris, что позволяет запускать как нативные игры для Linux, так и игры, работающие через Proton.

3. Поддержка оборудования и периферии:
Pop!_OS поддерживает широкий спектр оборудования и периферийных устройств, что делает его идеальным выбором для использования на ноутбуках, настольных ПК и серверах.
Настройка и использование среды разработки Eclipse

Eclipse — это мощная среда разработки (IDE), которая используется для написания кода на различных языках программирования, включая Java, C++, Python и многие другие.

Установка Eclipse на Linux:
- Перейдя на официальный сайт Eclipse, выберите версию, которая подходит для ваших нужд. Например, для разработки на Java выберите "Eclipse IDE for Java Developers".
- Скачайте установочный файл (обычно это tar.gz файл для Linux).
- Откройте терминал и перейдите в директорию, куда был загружен установочный файл, например:
cd ~/Downloads

- Распакуйте скачанный архив в каталог /opt:
sudo tar -xvzf eclipse-*.tar.gz -C /opt/

- Создайте символическую ссылку для удобного запуска:
sudo ln -s /opt/eclipse/eclipse /usr/local/bin/eclipse


Теперь можно запустить Eclipse, введя в терминале команду:
eclipse
По общепринятому соглашению люди, которые создают и поддерживают консольное ПО в Linux, параллельно пишут сложноструктурированные руководства, называемые man-файлами.

Когда устанавливается программа для Linux, ее mаn-файл почти всегда устанавливается вместе с ней и его можно просмотреть в оболочке командной строки, набрав слово man, а затем имя команды. Даже у команды man есть mаn-файл.

Выполнив: man man можно увидеть:
NAME в котором содержится краткое введение.
SYNOPSIS который предлагает подробный обзор синтаксиса.
DESCRIPТION предоставляет более подробное описание программы, которое обычно включает в себя список аргументов командной строки и флаги. Если вам повезет, вы также найдете несколько полезных примеров.
Использовать Emacs

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

Установка Emacs
В большинстве дистрибутивов Linux Emacs доступен в стандартных репозиториях. Установите его с помощью пакетного менеджера:

Для Debian/Ubuntu:
sudo apt update
sudo apt install emacs


Для Fedora:
sudo dnf install emacs


Для Arch Linux:
sudo pacman -S emacs
Для определения, что задействует система BIOS или UEFI, поможет утилита efibootmgr.

Если появился список целей загрузки, значит, в системе применяется UEFI. Если же придет сообщение, что переменные EFI не поддерживаются, — применяется BIOS.

Кроме того, можно проверить, есть ли в системе файл /sys/firmware/efi. Если это так, она использует интерфейс UEFI.
Установка PyCharm для Python-разработки

PyCharm — это одна из самых популярных интегрированных сред разработки (IDE) для Python. Она предоставляет множество инструментов и функций, которые делают процесс разработки более эффективным и удобным.

Установка PyChar:
- Перейдите на официальный сайт JetBrains и выберите версию PyCharm, которую хотите установить. Существует два варианта: Community (бесплатная) и Professional (платная).
- Скачайте установочный файл (tar.gz) для Linux.
- Откройте терминал и перейдите в директорию, куда был загружен установочный файл:
cd ~/Downloads

- Распакуйте скачанный архив:
tar -xvzf pycharm-community-*.tar.gz

- Переместите распакованную папку в удобное место, например, в /opt:
sudo mv pycharm-community-*/ /opt/pycharm

- Запустите PyCharm:
/opt/pycharm/bin/pycharm.sh
Что представляет собой файл ELF?

ELF — это сокращение от Executable and Linkable Format (формат исполняемых и связываемых файлов) и определяет структуру бинарных файлов, библиотек, и файлов ядра. Спецификация формата позволяет операционной системе корректно интерпретировать содержащиеся в файле машинные команды. 

Файлы ELF предназначены для исполнения и линковки. В зависимости от назначения, они содержат необходимые сегменты и секции. Ядро ОС просматривает сегменты и отображает их в память. Секции просматриваются линкером, который создаёт исполняемый файл или разделяемый объект.

Файлы ELF очень гибкие и поддерживаются различные типы CPU, машинные архитектуры, и операционные системы. Также он расширяемый, каждый файл сконструирован по-разному, в зависимости от требуемых частей. Путём использования правильных инструментов, вы сможете разобраться с назначением файла, и изучать содержимое бинарных файлов. Можно просмотреть функции и строки, содержащиеся в файле. Хорошее начало для тех, кто исследует вредоносные программы, или понять, почему процесс ведёт себя (или не ведёт) определённым образом.
Расширение функциональности ядра 

достигается 2-мя различными способами: 
 
1. Статически
Мы вносим собственные изменения в основное дерево исходных кодов ядра Linux, после чего производится пересборка ядра. В итоге мы получаем некоторую частную модификацию ядра. 
Преимущество: в добавляемом коде доступны все имена объектов ядра (вызовы функций, экземпляры данных). Таким способом сборщики дистрибутивных образов патчат официальное ядро, включая туда дополнения, которые они находят нужными. 

 2. Динамически
Код оформляется в формате динамически подгружаемого модуля. При выполнении системы модуль динамически загружается и становится неотъемлемой частью кода ядра. Всё связывание кода модуля производится по абсолютным адресам имён в ядре, поэтому модуль может быть собран только под конкретную версию и модификацию ядра. Ограничением этого способа является то, что коду модуля доступны только те объекты, которые явно объявлены как экспортируемые.
Установка IntelliJ IDEA на Linux

IntelliJ IDEA — это интегрированная среда разработки (IDE) от JetBrains, которая поддерживает множество ЯП, включая Java, Kotlin, Groovy и другие. Предоставляет обширные возможности для разработки, включая интеллектуальное автодополнение кода, мощный отладчик и интеграцию с системами контроля версий.

Установка IntelliJ IDEA:
- Идем на официальный сайт JetBrains и выбираем версию IntelliJ IDEA, которую хотите установить. Существует два варианта: Community (бесплатная) и Ultimate (платная).
- Качаем установочный файл (tar.gz) для Linux.
- Открываем терминал и переходим в директорию, куда был загружен установочный файл:
cd ~/Downloads
- Распаковываем скачанный архив:
tar -xvzf ideaIC-*.tar.gz
- Перемещаем распакованную папку в удобное место, например, в /opt:
sudo mv idea-IC-*/ /opt/intellij
- Запускаем IntelliJ IDEA:
/opt/intellij/bin/idea.sh
Установка Visual Studio Code для разработки на Linux

Visual Studio Code (VS Code) — это редактор исходного кода, созданный Microsoft.

Установка Visual Studio Code:
Перейдите на официальный сайт Visual Studio Code и выберите версию для вашей операционной системы (обычно это .deb для Debian/Ubuntu).

Далее для Debian/Ubuntu:
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg

sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/

sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

sudo apt install apt-transport-https

sudo apt update

sudo apt install code


После установки, запустите VS Code из меню приложений или с помощью команды: code
Наблюдаем за командами

Если вам необходимо следить за командами с изменяющимися выводимыми данными, используйте команду watch.

Например, чтобы следить за средней загрузкой, выполняем:
watch "cat /proc/loadavg"
Каждые две секунды watch будет запускать команду cat. (Для завершения выполнения команды нажмите сочетание клавиш CTRL+C).

Чтобы увеличить частоту обновления до 10 секунд, выполняем:
watch -n 10 "ls -l"

Чтобы выделить разницу между обновлениями на экране, выполните:
watch -d "ls -l"

Для выполнения выделения необходимо, чтобы файлы изменялись.
Установка Java Development Kit на Linux

Java Development Kit (JDK) - необходимый инструмент для разработки и запуска Java-приложений. Рассмотрим, как установить JDK на дистрибутив Ubuntu.

1. Обновите список пакетов:
sudo apt update

2. Установите OpenJDK:
Для установки OpenJDK версии 11:
sudo apt install openjdk-11-jdk -y
или версии 17:
sudo apt install openjdk-17-jdk -y

Далее провести проверку, что все установлено:
java -version

Вывод должен содержать информацию об установленной версии.
Создание RAID-массива

Создание RAID-массива выполняется с помощью программы mdadmс ключом --create.

Также нужно указать опцию --level в зависимости от того, какого уровня будет RAID-массив (чтобы создать массив 5 уровня --level=5).

С помощью ключа --raid-devices указываются устройства, поверх которых будет собираться RAID-массив.

mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/hd1 /dev/hd2 /dev/hd3

Чтобы убедиться, что RAID-массив проинициализирован корректно можно просмотрев файл /proc/mdstat. В этом файле отражается текущее состояние RAID-массива.

cat /proc/mdstat
Команда xargs

Возможность объединения нескольких команд Linux в терминале и использования их в качестве конвейера, когда каждая следующая команда получает вывод предыдущей - очень мощный и гибкий инструмент. Но команды можно объединять не только так. С помощью утилиты xargs вывод предыдущей команды можно передать в аргументы следующей.

Синтаксис команды:
команда1 | xargs опции команда2 аргументы

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

С помощью этой команды можно например вывести все имена файлов из папки ~/folder:
ls ~/folder | xargs -t -L1 echo

-t — используется, чтобы подробнее понять, что происходит
-L1 — указывает сколько строк надо передавать в одну команду