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

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

Регистрация в перечне РКН https://clck.ru/3EpL9L
Download Telegram
Отрезаем расширение у файла.

Стандартный способ — использовать утилиту basename, который отрезает весь путь слева, а если указать дополнительный параметр, то дополнительно отрежет справа и суффикс.

Например пишем file.txt и суффикс .txt
basename file.txt .txt
Получаем: file

Но можно обойтись внутренними преобразованиями в bash 
filename=file.txt; echo ${filename%.*}
Получаем: file

Или наоборот, отрезать имя файла и оставить только расширение:
filename=file.txt; echo ${filename##*.}
Получаем: txt
Чтобы каждый раз не мониторить завершение какого-либо долгого процесса, к примеру, бэкапа или сборки пакетов, можно применить звуковой сигнал по его завершении.

Пример псевдокода:
some_long_command; echo $'\a'

• ; - отделяет команды друг от друга.
• echo $'\a' - подаст звуковой сигнал.
Сочетание команд find и grep

Комбинация этих команд позволяет искать файлы с помощью find, а затем искать определенное содержимое в этих файлах с помощью grep.

Найти определенный текстовый шаблон в файлах в каталоге и его подкаталогах:
find /path/to/search -type f -exec grep -H "pattern" {} +

Найдите файлы, измененные в пределах временного диапазона, а затем выполните поиск внутри них:
find /path/to/search -type f -mtime -7 -exec grep -H "pattern" {} +

Найти файлы с расширением .txt и затем найти в них шаблон:
find /path/to/search -type f -name "*.txt" -exec grep -H "pattern" {} +
Анализ логов с агрегацией и сортировкой

Условие:
Есть лог веб-сервера access.log в формате:
IP - - [date] "METHOD URL HTTP/1.1" STATUS SIZE
Пример:
192.168.1.10 - - [01/Feb/2026:10:12:34] "GET /api/users HTTP/1.1" 200 1234

Задача:
Вывести топ-5 IP, которые сделали больше всего запросов с кодом 500.

Решение:
awk '$9 == 500 {print $1}' access.log \
| sort \
| uniq -c \
| sort -nr \
| head -5


• awk '$9 == 500 {print $1}'
• • $9 — HTTP-код
• • $1 — IP-адрес
• sort — обязательная подготовка для uniq
• uniq -c — считаем количество повторений
• sort -nr — числовая сортировка по убыванию
• head -5 — топ-5
Контроль активности пользователя

Чтобы мониторить действий пользователей в системе, можно использовать два приложения — psacct или acct.

Они предоставляют отличный способ отслеживать, что делают пользователи, какие команды они запускают, сколько ресурсов они потребляют, как долго пользователи активны в системе. Еще одна замечательная особенность в том, что она дает общие ресурсы, потребляемые такими службами, как Apache, MySQL, FTP, SSH и т.д.

Команды для мониторинга действий процесса:
 ⁃ ac — выводит статистику пользовательских входов/выходов (время подключения) в часах.
 ⁃ lastcomm — печатает информацию о ранее выполненных командах пользователя.
 ⁃ accton — используются для включения/выключения процесса учета.
 ⁃ sa — суммирует информацию о ранее выполненных командах.
 ⁃ last и lastb — показывают список последних зарегистрированных пользователей.

Пакет psacct доступен только для дистрибутивов на основе rpm (RHEL, CentOS и Fedora), а acct — для Ubuntu, Debian и Linux Mint.
Получить всю информацию о компонентах компьютера можно с помощью команды lshw

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

Поэтому следует немного отфильтровать поток, запустив: sudo lshw -short или sudo lshw -businfo, чтобы увидеть список классов устройств, которые дальше можно передать утилите.

Пример вывода информации с конкретными классами:
sudo lshw -short -class bus -class cpu 

Вывод можно преобразовать в форматы HTML, XML или JSON, к примеру:
sudo lshw -html -class storage > log.html 

Чтобы убрать из вывода информацию, такую как IP адреса и серийные номера, можно добавить параметр -sanitize
Изменения владельца файла или директории

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

С этим может помочь команда chown.

Чтобы предоставить пользователю с именем name возможность распоряжаться файлом file.txt:
chown name file.txt

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

В результате команды:
chown name:group file.txt
владельцем file.txt станет пользователь с именем name, а группой его владельцев — group.
Создаем файл устройства

В качестве примера рассмотрим процесс создания дополнительного файла loop-устройства.

Для начала следует получить список доступных в системе файлов loop-устройств: ls -al /dev | grep loop

Далее представим, что команда ls вывела 15 файлов loop-устройств (от loop0 до loop14). Исходя из этого, следует создать файл с именем loop15:
mknod -m 0777 /dev/loop15 b 7 17

где -m - флаг, задающий права доступа
0777 - права доступа
/dev/loop15 - название /dev файла
b - обозначение блочного устройства
идентификатор 7 - фиксирован для всех файлов loop-устройств
вспомогательный идентификатор 15 - указывает на номер файла loop-устройства.
Вывести размер папки

Рассмотрим, как вывести размер всей папки и размер без учета вложенных папок.

Допустим, у вас есть какая-то папка folder. Тогда команда для вывода ее размера выглядит следующим образом:
sudo du -sh /home/dir/to/some/folder

-s – выводить только размер самой папки, без вложенных подпапок.
-h – выводить информацию в привычном виде. Речь о единицах измерения (K – килобайт, M – мегабайт и т. д.).

Также вы можете посмотреть общий размер только самих файлов в папке, без учета содержимого подпапок. Для этого используется опция -S:
sudo du -sSh /home/dir/to/some/folder
Если открыть окно терминала и ввести несколько команд, а после открыть второе окно, то история команд bash во втором окне не будет содержать команд из первого. К тому же, если закрыть первый терминал, а затем второй, то история команд из первого терминала будет перезаписана вторым.

Так происходит из-за того, что история команд записывается только при закрытии терминала, а не после каждой команды. Это можно исправить.

Отредактируем файл .bashrc

добавив в него строки:

shopt -s histappend

PROMPT_COMMAND='history -a'

Так история команд будет добавляться к старой, а не перезаписывать ее, и запись будет происходить каждый раз в момент отображения подсказки bash.
Команда curl

curl утилита командной строки для передачи данных с или на сервер. С помощью curl вы можете загружать или выгружать данные, используя один из поддерживаемых протоколов, включая HTTP, HTTPS, SCP, SFTP и FTP

Запрос страницы
curl google.com
Команда напечатает исходный код google.com в окне вашего терминала.

Скачивание файла
curl -O https://domain.com/testzip.tar.gz

Получение заголовка HTTP
Если вы хотите посмотреть, какие заголовки отдает сервер, то можно использовать опцию -I. Она позволяют получить заголовок без тела документа.
curl -I https://www.google.com


Измерение продолжительности соединения 
Можно использовать опцию -w для отображения информации в stdout после завершения передачи. Узнаем общее время, которое потребовалось для успешного выполнения запроса:
curl -w "%{time_total}\n" -o /dev/null -s www.test.com
Если ввести в терминал bind -p, то можно увидеть все доступные быстрые команды, дёргающие определенные функции.

Команда bind - это встроенная команда оболочки Bash. Используется для установки привязок клавиш и переменных к функциям.
Команда pstree показывает дерево процессов — то есть какие процессы запустили другие процессы.

Удобнее, чем обычный ps, потому что видно иерархию.

Базовое использование: pstree

Пример вывода:

systemd─┬─NetworkManager
├─sshd─┬─sshd───bash───pstree
│ └─sshd───bash
└─cron


Что это значит:
• systemd — главный процесс системы (PID 1)
• он запустил:
- NetworkManager
- sshd
- cron
• sshd запустил bash
• из bash запустили pstree
То есть видно кто чей родитель.

Полезные опции:
• Показать PID процессов: pstree -p
• Показать пользователей: pstree -u
• Показать аргументы процессов: pstree -a
• Дерево конкретного процесса: pstree <PID>
• Подсветка текущего процесса: pstree -h
Команда patchelf

Предупреждение: с помощью команды легко внести изменения, которые могут привести к нестабильной работе программ, поэтому ее следует использовать осторожно!

patchelf — утилита для изменения динамических свойств исполняемых файлов и динамических библиотек в формате ELF.

Основные возможности patchelf:
1. Изменение RPATH: RPATH и RUNPATH — это поля в ELF-файлах, указывающие динамическому загрузчику, где искать динамические библиотеки.
patchelf --set-rpath /new/path/to/library myprogram

2. Установка интерпретатора: Интерпретатор — это программа, которая исполняется для запуска ELF-файлов.
patchelf --set-interpreter /new/path/to/interpreter myprogram

3. Изменение имени сонама: Сонам (soname) — это имя, которым динамическая библиотека идентифицируется при динамическом связывании.
patchelf --set-soname newsoname.so mylibrary.so
Команда shred в Linux используется для безопасного удаления файлов, многократно перезаписывая их случайными данными, чтобы усложнить восстановление. Она входит в пакет GNU Core Utilities.

Базовый синтаксис: shred [опции] файл

Основной пример: shred secret.txt
Файл secret.txt будет несколько раз перезаписан случайными данными.
По умолчанию:
• выполняется 3 прохода перезаписи
• файл не удаляется, только портится содержимое.

Полезные опции:

1. Удалить файл после перезаписи
shred -u secret.txt
• -u (--remove) — удалить файл после завершения.

2. Задать количество проходов
shred -n 10 secret.txt
• -n — число перезаписей (например 10).

3. Последний проход нулями
shred -z secret.txt
• -z — записывает нули на последнем проходе, чтобы файл выглядел как обычный очищенный.

4. Показать процесс
shred -v secret.txt
• -v — verbose, показывает прогресс.
____________________

shred не всегда гарантирует уничтожение данных, если используется:

• журналируемая файловая система (например ext4, Btrfs)
• SSD-диски
• snapshot-системы
Это связано с тем, что данные могут храниться в других физических блоках.
Команда entr

Мониторит файлы на изменения и запускает заданную команду, когда файл изменился.

Название расшифровывается как Event Notify Test Runner. Часто используют с .py, .js, .c и другими файлами для автоматического запуска скриптов или сборки проектов.

Основной синтаксис:
ls <файлы> | entr <команда>
• ls <файлы> — список файлов, за которыми следим.
• <команда> — команда, которая выполняется при изменении любого из файлов.

Примеры использования:

1. Перезапуск Python-скрипта при изменении файла
ls *.py | entr python3 script.py
Каждый раз, когда любой .py файл изменяется, script.py автоматически запускается.

2. Автоматическая сборка C-программы
ls *.c | entr gcc -o program *.c && ./program
Компилирует и запускает программу при изменении исходников.


3. Очистка экрана перед выполнением команды
ls *.log | entr -c tail -n 10 logfile.log

Полезные флаги:

• -c — очистка экрана перед выполнением команды;
• -p — перезапуск команды при изменении файла (по умолчанию);
• -r — перезапуск оболочки.
Создание MBR-разделов с помощью fdisk

Важно перед началом
• Все операции могут удалить данные на диске.
• Убедись, что выбран правильный диск (
/dev/sda, /dev/sdb и т.д.).

1. Посмотреть список дисков: lsblk или sudo fdisk -l

2. Запустить fdisk для нужного диска: sudo fdisk /dev/sdX
(замени sdX на нужный диск, например /dev/sdb)

3. Создать новую MBR таблицу:
Внутри fdisk нажми: o

4. Создать раздел:
Нажми: n
Далее:
• Выбери тип:
• p — primary (основной)
• e — extended (расширенный, если нужно больше 4 разделов)
• Укажи номер раздела (обычно 1)
• Укажи первый сектор (Enter — по умолчанию)
• Укажи размер (например +10G)

5. Изменить тип раздела (если нужно)
Нажми: t
И выбери код:
• 83 — Linux
• 82 — swap
• 07 — NTFS
Список всех типов: L

6. Проверить результат: p

7. Сохранить изменения: w
Отмена (если передумал): q

8. Обновить таблицу разделов:
Иногда нужно: sudo partprobe
___________________
Быстрый пример:
sudo fdisk /dev/sdb
o
n
p
1
<Enter>
+5G
w
diff и cmp — сравнение файлов

Команда diff
служит для сравнения двух файлов. Формат вызова команды:
diff параметры файл1 файл2

В выводе команды отличающиеся строки помечаются символами:
□ строка из первого файла помечается символом <;
□ строка из второго файла — символом >.

полезные параметры команды diff:
-b Игнорируются пробельные символы в конце строки
-В Игнорируются пустые строки
-е Используется при создании сценария для редактора ed. Этот сценарий пре вращает первый файл во второй
-w Игнорируются пробельные символы
-у Вывод в два столбца
-r Используется для сравнения файлов в подкаталогах. Вместо первого файла указывается первый каталог, вместо второго файла — соответственно, второй каталог.


Команда cmp также служит для сравнения двух файлов: если файлы идентичны, то ничего не выводит, а вот если файлы отличаются, то cmp выводит номер строки и номер символа в строке, откуда начинается различие.

Команда cmp более универсальна, поскольку она может использоваться для сравнения как текстовых, так и двоичных файлов. В отличие от нее, команда diff и ее аналоги умеют сравнивать только текстовые файлы.
Формат вызова команды сmp следующий:
cmp [параметры] файл1 файл2

полезные параметры команды cmp
:
-с Вывод отличающихся символов
-i n Игнорировать первые n символов
-l Вывод позиций всех отличий, а не только первого
-s Не выводить информацию на экран, при этом код возврата будет следующим:
0 — файлы одинаковые;
1 — файлы отличаются;
2 — ошибка при открытии одного из файлов
nftables

Утилита командной строки для управления брандмауэром в Linux, которая заменяет устаревшую команду iptables.

Примеры использования:

1. Создание таблицы и цепочки:
Создать таблицу:
nft add table inet mytable
Создать цепочку в таблице:
nft add chain inet mytable mychain

2. Добавление правил:
Добавить правило для разрешения доступа из конкретного IP-адреса:
nft add rule inet mytable mychain ip saddr 192.168.1.100 accept
Добавить правило для блокировки порта:
nft add rule inet mytable mychain tcp dport 22 drop
Добавить правило для перенаправления порта: nft add rule inet mytable mychain tcp dport 80 redirect to :8080

3. Удаление правил:
Удалить правило:
nft delete rule inet mytable mychain handle 5
Удалить все правила из цепочки:
nft flush chain inet mytable mychain

4. Сохранение и загрузка правил:
Сохранить правила в файл:
nft list ruleset > myfile.nft
Загрузить правила из файла:
nft -f myfile.nft
Команда stat

Используется для отображения подробной информации о файле или файловой системе.

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

Если вы хотите увидеть подробную информацию о файле, расположенном в текущем каталоге:
stat file.txt

Чтобы проверить статус файловую систему где находится файл:
stat -f /home

Параметр -t используется для отображения информации в базовом формате:
stat -t file.txt

Чтобы получить информацию о файле, на который указывают ссылки, нам нужно будет использовать параметр -L:
stat -L file.txt