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

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

Регистрация в перечне РКН https://clck.ru/3EpL9L
Download Telegram
Команды обновления

apt:
apt update: обновляет список пакетов ПО.
apt upgrade: обновляет пакеты ПО до последней версии.
apt dist-upgrade: обновляет пакеты ПО до последней версии и удаляет устаревшие пакеты.

yum:
yum update: обновляет пакеты ПО до последней версии.
yum upgrade: обновляет пакеты ПО до последней версии и удаляет устаревшие пакеты.

dnf:
dnf update: обновляет пакеты ПО до последней версии.
dnf upgrade: обновляет пакеты ПО до последней версии и удаляет устаревшие пакеты.

zypper:
zypper update: обновляет пакеты программного обеспечения до последней версии.
zypper upgrade: обновляет пакеты программного обеспечения до последней версии и удаляет устаревшие пакеты.

Решение проблем

• Если получаете ошибку при обновлении пакетов ПО, попробуйте использовать команду apt --fix-broken install или yum --fix-broken.
• Если получаете ошибку при установке пакета ПО, попробуйте использовать команду apt --fix-missing install или yum --fix-missing.
• Если получаете ошибку при удалении пакета ПО, попробуйте использовать команду apt --purge remove или yum --purge.
Используем systemd для создания пользовательской службы

Условие: Создать пользовательскую службу, которая будет запускать скрипт /home/user/myscript.sh при старте системы.

Решение:

Создайте файл службы:
sudo nano /etc/systemd/system/myscript.service

Запишите в файл:
[Unit]
Description=My custom script

[Service]
ExecStart=/bin/bash /home/user/myscript.sh
Restart=always

[Install]
WantedBy=multi-user.target


Активируйте службу:
sudo systemctl enable myscript.service
sudo systemctl start myscript.service


Пояснение:

• [Unit]: раздел для описания службы.
• [Service]: определяет команды для запуска службы.
• ExecStart: путь к исполняемому файлу или скрипту.
• Restart=always: служба будет перезапущена в случае сбоя.
• [Install]: указывает, при каких условиях служба должна быть активирована.
Автоматизация обновлений

Задача: Напишите Bash-скрипт, который будет автоматически обновлять систему и очищать ненужные пакеты.

Решение:

#!/bin/bash
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y


Пояснение: Этот скрипт обновляет список пакетов, устанавливает обновления и удаляет ненужные пакеты с подтверждением (-y).
Парсинг логов с использованием awk

Задача: Из файла /var/log/auth.log выведите все IP-адреса, которые пытались подключиться к SSH, и подсчитайте, сколько раз каждый IP встречается.

Решение:

awk '/Failed password/ {print $(NF-3)}' /var/log/auth.log | sort | uniq -c | sort -nr


Пояснение:
awk ищет строки с "Failed password" и выводит поле с IP (обычно предпоследнее поле). Затем сортируем, считаем уникальные вхождения и сортируем по убыванию.
Отслеживание изменений в каталоге

Задача: Используйте inotifywait для мониторинга каталога /tmp/watchdir и выводите сообщение при любом изменении.

Решение:

inotifywait -m /tmp/watchdir -e create -e modify -e delete |
while read path action file; do
echo "Файл $file в $path был $action"
done


Пояснение:
inotifywait с опцией -m следит за событиями создания, изменения и удаления файлов в каталоге. Цикл выводит подробности о событии.
Рекурсивное переименование файлов

Задача: Переименуйте все .txt файлы в каталоге /docs и подкаталогах, добавив префикс old_.

Решение:

find /docs -type f -name "*.txt" -exec bash -c 'mv "\$0" "$(dirname "\$0")/old_$(basename "\$0")"' {} \;


Пояснение:
find ищет файлы и запускает команду mv для переименования с добавлением префикса.
Работа с сокетами в Bash

Задача: Создайте TCP-сервер на порту 12345, который отвечает "Hello" каждому подключению.

Решение:

while true; do
echo -e "HTTP/1.1 200 OK\r\n\r\nHello" | nc -l -p 12345
done


Пояснение:
nc (netcat) слушает порт и отправляет ответ при подключении.
Сравнение двух директорий

Задача: Найдите файлы, которые есть в /dir1, но отсутствуют в /dir2.

Решение:

comm -23 <(ls /dir1 | sort) <(ls /dir2 | sort)


Пояснение:
comm сравнивает отсортированные списки, выводит уникальные для первого каталога.
Сортировка и удаление повторяющихся строк

Использование команд sort и uniq вместе помогут отсортировать и удалить повторяющиеся строки в файле и вывести результат в терминал.

Для этого можно воспользоваться командой:
sort file.txt | uniq

Чтобы сохранить результат в отдельный файл:
sort file.txt | uniq > output.txt
Создание скриншота с помощью команды в терминале

Команда import используется для создания снимков экрана выбранной области или окна на экране.

Захватить весь экран:
import screen.png

Захватить определенную прямоугольную область:
import -crop 800x600+100+100 area.png

Захватить активное в данный момент окно:
import -window root window.png
Чтобы узнать, какой процесс открыл тот или иной ресурс, например, файл или сетевой порт, можно воспользоваться командой fuser. Например:

fuser -va 23/tcp

Получим идентификатор процесса, открывшего ТСР порт 23

fuser -va /chroot/etc/resolv.conf

Во втором случае получим идентификатор процесса, открывшего файл /chroot/ etc/resolv.conf.

Что делать далее - решать вам, например, можно убить этот процесс командой kill.
DHCP-сервер в Linux

1.
Для установки DHCP-сервера в Ubuntu или Debian, выполните команду:
sudo apt-get install isc-dhcp-server

2. Настройка файла dhcpd.conf (основной файл конфигурации DHCP-сервера). Вам нужно указать настройки, такие как подсети, диапазоны IP-адресов, шлюзы, DNS-серверы и т. д.

3. В файле dhcpd.conf определите подсети и диапазоны IP-адресов, доступные для выдачи.
Например, для подсети 192.168.1.0/24 и диапазона IP-адресов от 192.168.1.10 до 192.168.1.100, добавьте следующие строки в файл dhcpd.conf:
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
}

4. В файле dhcpd.conf вы также можете указать другие настройки, такие как шлюзы (routers), DNS-серверы (domain-name-servers) и другие параметры.

5. Перед запуском DHCP-сервера убедитесь, что настройки в файле dhcpd.conf заданы правильно.
Выполните команду sudo dhcpd -t, чтобы проверить конфигурационный файл.

6. Если ошибок нет, запустите DHCP-сервер: sudo service isc-dhcp-server start (в Ubuntu/Debian).
Если к компьютеру подключить несколько мышек, то они будут работать параллельно. При одновременном противоречивом движении мышей курсор будет или оставаться на месте или непредсказуемо перемещаться.

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

Посмотрим группы и номера устройств
$ xinput list

Создаём ещё одну группу «mouse2» для новой мыши
$ xinput create-master mouse2

Переподключаем мышь с id=11 к группе mouse2 (id=13)
$ xinput reattach 11 13
Записать сеанса терминала

Команда script фиксирует все, что происходит в сеансе терминала. С помощью нее можно сохранить всю информацию о вводе, выводе и времени.

Чтобы начать запись терминала в лог файл:
script history_log.txt

Теперь можете попробовать выполнить несколько команд, например, ls, cal, w.

Далее остановите команду script, выполнив команду exit в терминале. После этого сможете увидеть:
Script done, file is history_log.txt

Теперь вся информация, которая была введена в терминал, хранится в файле history_log.txt
Открываем изображения для просмотра из терминала

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

display image.jpg

При запуске команды display появится графическое окно с изображением. Вы можете взаимодействовать с окном, чтобы увеличивать и уменьшать масштаб, прокручивать и закрывать изображение.
Разрешить команды с помощью sudo только определенной группе пользователей

Предупреждение: не следует слепо следовать настройкам. В результате можно испортить систему. По большей части просто читайте и наслаждайтесь, или же не забудьте про резервную копию :)


Это более продвинутое решение, которое сисадмин использует в многопользовательской среде. Допустим, вы создаете группу "coders" и разрешаете им запускать команды из каталогов /var/folder и /opt/bin/coders.

Теперь отредактируйте файл sudoer с помощью:
sudo visudo

Добавьте в него следующую строку:
%coders ALL=(ALL:ALL) /var/folder,/opt/bin/coders
Несколько примеров настроек ядра Linux:

/proc/sys/kernel/panic: Этот параметр определяет время задержки перед автоматической перезагрузкой системы после возникновения фатальной ошибки (паники) ядра. Значение в секундах. Например, чтобы установить время задержки в 10 секунд, выполните команду: echo 10 > /proc/sys/kernel/panic

/proc/sys/kernel/sysrq: Этот параметр определяет, разрешены ли команды SysRq (System Request) для ядра Linux. Команды SysRq позволяют выполнять различные действия, такие как перезагрузка системы, синхронизация дисков, отображение информации о системе и т. д. Чтобы включить команды SysRq, выполните команду: echo 1 > /proc/sys/kernel/sysrq

/proc/sys/kernel/sem: Этот параметр определяет количество системных семафоров, которые могут быть использованы процессами. Семафоры используются для синхронизации доступа к общим ресурсам. Значение состоит из трех чисел, разделенных пробелами, представляющих максимальное количество семафоров, максимальное количество семафоров в каждом наборе и максимальное значение для семафоров.

/proc/sys/kernel/shmmax: Этот параметр определяет максимальный размер общей памяти (shared memory), которая может быть выделена процессу. Значение указывается в байтах. Например, чтобы установить максимальный размер общей памяти в 1 гигабайт, выполните команду: echo 1073741824 > /proc/sys/kernel/shmmax

/proc/sys/kernel/threads-max: Этот параметр определяет максимальное количество потоков, которые могут быть созданы в системе. Значение указывает максимальное количество потоков, которые могут быть созданы процессами. Например, чтобы установить максимальное количество потоков в 10000, выполните команду: echo 10000 > /proc/sys/kernel/threads-max

/proc/sys/kernel/panic_on_oops: Этот параметр определяет, должна ли система автоматически перезагружаться после возникновения ошибки ядра (oops). Значение 1 включает автоматическую перезагрузку, а значение 0 отключает ее. Например, чтобы отключить автоматическую перезагрузку, выполните команду: echo 0 > /proc/sys/kernel/panic_on_oops
Допустим, вы хотите засечь сколько времени выполняется определенное действие в вашем Bash скрипте, для этого добавьте там, где нужно начать замер строку:

START=$(date +%s)

А там, где нужно прекратить:

END=$(date +%s)
DIFF=$(( $END - $START ))
DIFF=$(( $DIFF / 60 ))

Переменная DIFF будет содержать время выполнения в минутах. Теперь вы можете вывести ее с помощью echo.
Анализ и сканирование файлов ELF

Команда scanelf предоставляет широкие возможности для извлечения информации из файлов ELF.

Примеры использования scanelf:
1. Поиск всех ELF файлов, использующих определённую библиотеку:
scanelf -B -n libspecific.so
Эта команда выведет список всех файлов, динамически связанных с libspecific.so.

2. Анализ RPATH и RUNPATH всех ELF файлов в директории:
scanelf -R -l /path/to/directory
Здесь будет произведён поиск и отображение информации о RPATH и RUNPATH для всех ELF файлов в указанной директории.

3. Поиск файлов с неподкачиваемыми секциями :
scanelf -M /path/to/directory
Неподкачиваемые секции относятся к сегментам данных, которые должны оставаться в оперативной памяти во время выполнения программы и не могут быть перемещены в область подкачки (swap). Это особенно важно для кода, который должен быть всегда доступен для быстрого выполнения, без задержек на подкачку из swap-области, например, для драйверов устройств или кода, работающего в режиме реального времени.
Сортировка файлов в каталоге по размеру

Для поиска самых больших файл в каталоге можно воспользоваться комбинацией команд ls и sort:
ls -l | sort -k5,5nr

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

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

Чтобы найти все подкаталоги можно воспользоваться одной из самых популярных команд ls:

ls -d */

-d: параметр указывает ls отображать сами каталоги, а не их содержимое.
*/: шаблон, гарантирующий, что в списке будут указаны только каталоги.