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

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

Регистрация в перечне РКН https://clck.ru/3EpL9L
Download Telegram
Yocto Project — набор инструментов, шаблонов и методов для создания кросс-платформенных встраиваемых Linux-дистрибутивов.

Проект поддерживается Linux Foundation и предоставляет средства для создания полностью настраиваемых дистрибутивов Linux для встраиваемых систем.


Преимущества Yocto Project:
- Поддержка различных архитектур и платформ.
- Возможность добавления и удаления слоев метаданных.
- Полный контроль над процессом сборки и конфигурацией.
- Активное сообщество разработчиков и обширная документация.
Buildroot — набор скриптов, упрощающих процесс создания встраиваемой Linux-системы из исходного кода.

Основан на системе сборки makefile и включает в себя систему menuconfig, аналогичную используемой в Linux.


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

Buildroot также включает несколько готовых конфигураций для Raspberry Pi и Beaglebone.
menuconfig в контексте настройки ядра Linux

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


Для использования menuconfig сначала нужно установить необходимые пакеты, если они еще не установлены. В Debian/Ubuntu это можно сделать так:
sudo apt install libncurses-dev


Далее загрузите и распакуйте исходный код ядра:
wget <ссылка на архив>
tar -xvf <название архива>
cd <название папки, в которую извлечены файлы>


Теперь моэно запустить menuconfig из каталога с исходным кодом ядра:
make menuconfig

Эта команда откроет интерфейс menuconfig.
Виртуальное окружение Virtualenv

Virtualenv — инструмент, который позволяет создавать изолированные виртуальные окружения для проектов. Это полезно для управления зависимостями и предотвращения конфликтов между пакетами различных проектов.

Чтобы установить virtualenv, выполните:
sudo apt update
sudo apt install python3 python3-pip -y
pip3 install virtualenv


Чтобы создать виртуальное окружение, перейдите в директорию вашего проекта:
cd /path/to/your/project

а затем введите команду:
virtualenv myenv

Здесь myenv — это название вашего виртуального окружения. Вы можете выбрать любое другое название.

Для активации виртуального окружения выполните команду:
source myenv/bin/activate


Для выхода из виртуального окружения выполните команду:
deactivate
Ping

Утилита ping - это очень простой инструмент для диагностики сети. Она позволяет проверить доступен удаленный хост или нет. Для этого утилита проверяет, может ли хост отвечать на сетевые запросы с помощью протокола ICMP.

Синтаксис:
ping опции адрес_узла

Формат команды ping очень прост. В качестве адреса узла можно передавать как ip адрес, так и доменное имя. 

Опции: 
-4 - использовать только ipv4 (по умолчанию);
-6 - использовать только ipv6;
-b - разрешить ping широковещательного адреса;
-с - количество пакетов, которые нужно отправить;
-D - выводить время в виде UNIX timestamp;
-f - режим флуда, в этом режиме пакеты передаются без задержек, может использоваться для совершения DoS атак на отдельные узлы. Количество точек, которые выводит утилита обозначает количество потерянных пакетов;
-i - интервал в секундах между отправкой пакетов;
-I - использовать этот сетевой интерфейс для отправки пакетов;
-l - режим перегрузки, отправляется очень много пакетов и система не следит за ответными пакетами;
-n - не получать домены для ip адресов;
-r - игнорировать таблицы маршрутизации и отправить пакет на указанный интерфейс;
-s - размер одного пакета;
Команда head

Команда head выводит начальные строки из одного или нескольких файлов. (по умолчанию — 10)  

Синтаксис:
head опции файл

Опции:
 ⁃ -c — позволяет задавать количество текста не в строках, а в байтах. 
 ⁃ -n — показывает заданное количество строк вместо 10, которые выводятся по умолчанию. 
 ⁃ -q — выводит только текст, не добавляя к нему название файла.
 ⁃ -v — перед текстом выводит название файла.

Чтобы вывести первые 10 строк на экран:
head file.txt

Вывести всего 2 строки:
head -n 2 file.txt

Также можно вывести одновременно получить вывод двух файлов:
head file1.txt file2.txt
Отображения диалоговых окон прямо внутри терминала

Вы всегда задавались вопросом, как во время установки генерировались эти красивые всплывающие сообщения терминала? Конечно же, с помощью whiptail! 

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

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

Чтобы отобразить простое поле ввода «да» или «нет» в командной строке с помощью whiptail:
whiptail --yesno "Do you like this channel?" 10 40
Использование файла, как файла подкачки.

Создаем пустой файл и инициализируем его для подкачки:

dd if=/dev/zero of=swap_file bs=1024k count=num_mb

Здесь параметр swap_file задает имя нового файла подкачки, а параметр num_mb — желаемый размер в мегабайтах.

mkswap swap_file
Эта команда помещает в данный файл сигнатуру области подкачки.

swapon swap_file
Регистрируется область с помощью ядра

Для удаления файла из активного пула ядра, используется команда swapoff
Удаление файла с помощью shred

Когда вы в последний раз удаляли файл в Linux? Как ты сделал это? Вы использовали rm, а затем забыли об этом? Если в этом файле были какие-либо конфиденциальные данные, то стоило дважды подумать, прежде чем использовать rm. 

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

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

Используя shred, вы можете быть уверены, что данные будут удалены в максимально возможной степени:
shred -u <file>
Перезапись существующего файла оператором редиректа (>) может стать катастрофой, если у вас нет резервной копии.
(Знакомо?)

Для защиты от несчастных случаев поможет опция:
set -C
Которая запрещает такую перезапись. Теперь
echo какой_то_текст > file
Выдаст ошибку: bash: file: cannot overwrite existing file

В случае необходимости можно обойти защиту с помощью оператора >|

Опция set -С отменится при выходе из консоли.
(Как отменить опцию в текущей сессии, честно, понятия не имею ..)
Процессами-зомби в Linux называют процессы, находящиеся в неопределенном состоянии. Это — ребята, которые завершили свою работу, но по каким-то причинам остались незаконченными.

Отследить такие процессы можно с помощью команды: ps -al

Команда ps с опциями -al возвращает сведения обо всех процессах в системе, включая то, в каком состоянии обработки они находятся. Состояние Z указывает на то, что процесс перешел в категорию процессов-зомби.

Для конкретики вывода можно воспользоваться командой gawk. После передачи вывода команды ps по каналу в команду gawk остается только извлечь данные из полей $2 и $4, в которых указаны идентификаторы процессов и состояние их обработки. Однако на данном этапе задача состоит в выявлении только процессов-зомби, поэтому необходимо выделить в выводе информацию лишь об этих процессах, для чего можно применить команду grep .
Требуемая команда может выглядеть следующим образом:
ps -al | gawk '{print $2,$4}' | grep Z
Команда less

Команда less позволяет перематывать текст не только вперёд, но и назад, осуществлять поиск в обоих направлениях, переходить сразу в конец или в начало файла.

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

Открыть файл можно, выполнив следующую команду:
less some_filename.txt

Команда имеет множество опций, чтобы оптимизировать отображение текста и сделать работу с утилитой более удобной.
Весь список опций можно посмотреть:
man less

Пример: в тексте часто встречаются множественные пустые строки. Поэтому к команде less стоит всегда добавлять опцию -s — она удаляет лишние пустые строки:
less -s some_textfile.txt
Возможности команды find для продвинутых

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

Примеры:
Удалить все файлы .tmp в текущем каталоге:
find . -type f -name "*.tmp" -exec rm {} \;

Изменить права доступа всех найденных файлов на 644:
find /путь/к/папке -type f -exec chmod 644 {} \;

Скопировать все файлы .jpg, найденные в текущем каталоге, в другой каталог:
find . -type f -name "*.jpg" -exec cp {} /путь/к/папке \;

Запустить собственный скрипт для каждого найденного каталога:
find /путь/к/папке -type d -exec ./myscript.sh {} \;
Справка по важным спец. символам bash

; Отделение команд друг от друга

: Команда оболочки, ничего не делает

. Запуск оболочки без собственного командного подпроцессора (.file соответствует исходному файлу)

# Ввод комментария

#!/bin/sh Идентификация оболочки, в которой будет выполняться программа

& Выполнение команды в фоновом режиме (com &)

&& Выполнение одной команды в зависимости от результата другой (com1 && com2)

&> Переадресация стандартного вывода и ошибок (соответствует >&)

| Создание программных каналов (com1 | com2)

|| Выполнение одной команды в зависимости от результата другой (com1 || com2)

* Джокерный символ для имен файлов (любое количество символов)

? Джокерный символ для имен файлов (любой символ)

[abc] Джокерный символ для имен файлов (любой символ из abc)

[ expression ] Сокращенный вариант записи test expression

(...) Выполнение команд в той же оболочке ((сom1; сom2))

{...} Группирование команд

{ , , } Объединение нескольких последовательностей символов (a{1,2,3} → a1 a2 a3)

{a..b} Объединение нескольких последовательностей символов (b{4..6} → b4 b5 b6)

~ Сокращенное обозначение домашнего каталога

> Переадресация вывода в файл (com > file)

>> Переадресация вывода и добавление его в существующий файл

>& Переадресация стандартного вывода и ошибок (соответствует &>)

2> Переадресация стандартного вывода ошибок

< Переадресация ввода из файла (com < file)

<< end Переадресация ввода из активного файла до завершения

$ Обозначение переменных (echo $var)

$! Номер PID последнего процесса, запущенного в фоновом режиме

$$ PID актуальной оболочки

$0 Имя выполняемого в данный момент сценарного файла оболочки

$1–$9 Первые девять параметров, переданных команде

$# Количество параметров, переданных программе оболочки 

$* или $@ Совокупность всех переданных параметров

$? Возвращаемое значение последней команды (0=OK или номер ошибки)

$(...) Подстановка команд (echo $(ls))

${...} Различные специальные функции для обработки последовательностей символов

$[...] Арифметические вычисления (echo $[2+3])

"..." Предотвращение интерпретации большинства специальных символов

'...' Предотвращение интерпретации всех специальных символов

`...` Подстановка команд (echo `ls`)
Collectl — инструмент для мониторинга производительности 

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

Примеры использования:
Отобразить статистику для всех подсистем:
collectl --all

Чтобы вывести сводную информацию об использовании ЦП:
collectl -sc

Чтобы собрать данные о памяти:
collectl -sm

Чтобы собрать информацию о сети:
collectl -sn
Команда cat (сокр. от concatenate) вываливает содержимое файла в окно терминала. Это намного быстрее чем открывать файл в редакторе, а также исключает случайное изменение файла. Чтобы просмотреть содержимое файла some_file, нужно запустить следующую команду находясь в соответствующей папке.

cat some_file

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

cat some_file | less

С помощью этой команды можно прокрутить файл вперед и назад с помощью клавиш вверх и вниз, клавиш PgUp и PgDn или Home и End. Чтобы выйти из less нужно ввести q
Для просмотра сообщений ядра используем команду
journalctl -k

Команда покажет все сообщения ядра для текущей загрузки.

Такую команду можно комбинировать с опцией -b, чтобы просмотреть сообщения ядра во время предыдущей загрузки:
journalctl -k -b -2

Но бывает такое, что в некоторых системах boot logging отключен и вместо лога предыдущих загрузок получаем сообщение: "Specifying boot ID has no effect, no persistent journal was found"

Исправляем ситуацию так:
В файле /etc/systemd/journald.conf параметр  Storage выставляем в persistent - Storage=persistent
И перезапускаем сервис командой:
systemctl restart systemd-journald

Должно сработать:
journalctl -k -b -0 - текущая загрузка
journalctl -k -b -1 - предыдущая
journalctl -k -b -2 - предыдущая предыдущая
journalctl -k -b -n - и т. д.
Чуть-чуть аналогии с Windows

Аналог /dev/null — это устройство nul. Причём оно присутствует в каждой папке. Это тянется со времён старых версий DOS'а, когда не было папок.

Аналоги /dev/ttyS0, /dev/ttyS1, /dev/ttyS2, /dev/ttyS3 — это com1, com2, com3, com4 (но в винде есть ещё com5 и т. д.). Это устройства serial console, они же COM-порты, они же последовательные порты.

Аналог /dev/tty — это con, от слова console. Причём con — это аналог именно /dev/tty, а не /dev/console, так как в Windows у каждого окна командной строки con свой. ( Помните эти старые приколы, что в Windows нельзя создать файл или папку с именем con? Потому что у Билла Гейтса было прозвище con, то есть ботаник. Но можно изъеб....ся, по другому это не назовешь, сделав mkdir \\.\c:\con )
Четыре основных области системы за которые отвечает ядро.

- Процессы. Ядро отвечает за то, каким процессам разрешен доступ к центральному процессору.

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

- Драйверы устройств. Ядро выступает в качестве интерфейса между аппаратными средствами (например, жестким диском) и процессами. Как правило, управление аппаратными средствами выполняется ядром.

- Системные вызовы и поддержка. Обычно процессы используют системные вызовы для взаимодействия с ядром.
Файл формата RPM

Файл RPM является специальным средством поиска, загрузки и установки пакетов с программами. 

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

Изначально расширение RPM, было разработано для Red Hat Linux, но спустя некоторое время, данный формат файла стали использовать и на остальных дистрибутивах Linux. 

Данное расширение файла, можно преобразовывать в другие форматы, такие как .deb, которые будут применяться в ОС Debian. 

Чтобы открыть файл, имеющий расширение .rpm в рамках Linux, потребуется наличие соответствующего программного обеспечения, например официального приложения Red Hat Package Manager либо Alien. 

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