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

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

Регистрация в перечне РКН https://clck.ru/3EpL9L
Download Telegram
При загрузке системы ядро определяет подключенное оборудование и запускает драйверы, которые позволяют Linux работать с ним. Сведения об обнаружении оборудования быстро прокручиваются на экране при загрузке.

Если необходимо повторно отобразить их после запуска системы, чтобы просмотреть сообщения о потенциальных проблемах, существует несколько способов просмотра сообщений:

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

Второй способ просмотра загрузочных сообщений — это команда journalctl, которая отображает сообщения, связанные с конкретным сеансом загрузки.
Команда ld

ld (linker) используется для связывания объектных файлов и создания исполняемых файлов или динамических библиотек.

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

1. Создание исполняемого файла:
ld -o myprogram file1.o file2.o lib1.a lib2.a

Эта команда связывает объектные файлы file1.o и file2.o с библиотеками lib1.a и lib2.a и создает исполняемый файл myprogram.

2. Создание динамической библиотеки:
ld -shared -o libmylib.so file1.o file2.o

Эта команда связывает объектные файлы file1.o и file2.o и создает динамическую библиотеку libmylib.so

3. Указание точки входа:
ld -e my_function -o myprogram file1.o file2.o lib1.a lib2.a

Эта команда связывает объектные файлы file1.o и file2.o с библиотеками lib1.a и lib2.a, указывает my_function как точку входа, и создает исполняемый файл myprogram.
Для проверки скорости записи/чтения можно использовать утилиту dd

Измеряем скорость записи:
dd if=/dev/zero of=testfile bs=1M count=1000 conv=fdatasync
Команда создаст файл testfile размером 1000 МБ, заполненный нулями, и измерит скорость записи данных в этот файл.

Измеряем скорость чтения:
dd if=testfile of=/dev/null bs=1M
Команда прочитает содержимое файла testfile и измерит скорость чтения данных из него.
Настройка и защита SSH-сервера с использованием двухфакторной аутентификации

Задача:

Настройте сервер SSH, чтобы он использовал двухфакторную аутентификацию: сначала SSH-ключи, затем временные коды из Google Authenticator.

Решение:

1. Установите Google Authenticator на сервер:
sudo apt install libpam-google-authenticator

2. Настройте Google Authenticator для пользователя:
google-authenticator
Следуйте инструкциям, чтобы сгенерировать QR-код и связать его с вашим мобильным устройством. После этого сканируйте QR-код в приложении Google Authenticator.

3. Откройте файл конфигурации SSH:
sudo nano /etc/ssh/sshd_config

Найдите и измените следующие строки:
ChallengeResponseAuthentication yes
PasswordAuthentication no


4. Настройте PAM (Pluggable Authentication Modules) для двухфакторной аутентификации. Откройте файл /etc/pam.d/sshd и добавьте:
auth required pam_google_authenticator.so

5. Перезапустите SSH-сервис:
sudo systemctl restart sshd
__________
Теперь для подключения нужно будет использовать SSH-ключ и вводить временный код из приложения Google Authenticator.
Реализация логирования и мониторинга процессов с помощью syslog и journalctl

Задача:


Настройте централизованное логирование для отслеживания ошибок приложений и мониторинга с помощью syslog и journalctl.

Решение:

1. Для начала убедитесь, что rsyslog и journalctl настроены для ведения журналов. Откройте файл /etc/rsyslog.conf и добавьте строки для централизованного логирования:
*.* @your_log_server_ip:514

2. Перезапустите службу rsyslog:
sudo systemctl restart rsyslog

3. Настройте приложение на запись в системный журнал. В вашем приложении добавьте код для логирования:
import logging
import syslog

syslog.syslog(syslog.LOG_INFO, "This is a log message")


4. Для мониторинга журналов используйте команду journalctl:
sudo journalctl -u your_service

Чтобы следить за реальными логами, используйте:
sudo journalctl -f

5. Просмотрите логи для определенных приложений:
sudo journalctl -u apache2
__________
Теперь ваше приложение будет записывать логи в системный журнал, и вы сможете следить за ними с помощью journalctl.
Настройка и управление правами пользователей и групп на сервере

Задача:

Создайте несколько пользователей и назначьте им доступ к различным каталогам с использованием групп. Используйте команду chown и chmod для управления правами.

Решение:

1. Создайте два пользователя:
sudo useradd user1
sudo useradd user2


2. Создайте группу devgroup:
sudo groupadd devgroup

3. Добавьте пользователей в эту группу:
sudo usermod -aG devgroup user1
sudo usermod -aG devgroup user2


4. Создайте директорию и установите на неё права доступа только для группы:
sudo mkdir /home/devgroup
sudo chown :devgroup /home/devgroup
sudo chmod 770 /home/devgroup


5. Проверьте права:
ls -l /home
__________
Теперь только пользователи из группы
devgroup могут иметь доступ к каталогу /home/devgroup.
Мониторинг сетевого трафика с помощью iftop

Задача:

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

Решение:

1. Установите iftop:
sudo apt install iftop

2. Запустите iftop для мониторинга трафика:
sudo iftop
__________
В интерфейсе вы увидите список всех активных подключений и их скорость передачи данных.
Поиск строк в файле с использованием grep

Задача:
Необходимо найти все строки, содержащие слово "error" в логах Apache (файл apache.log), и сохранить их в новый файл error_logs.txt.

Решение:


1. Используем команду grep для поиска строк с ошибками:
grep 'error' apache.log > error_logs.txt

Параметры:
'error'ищет строки, содержащие это слово.
>перенаправляет результат в новый файл.

2. Проверка содержимого error_logs.txt:
cat error_logs.txt
__________
Теперь у вас есть файл, содержащий только строки с ошибками.
Использование ufw для настройки брандмауэра с ограничениями по IP

Задача:

Настройте брандмауэр с помощью ufw, чтобы разрешить доступ к SSH только с определенного IP-адреса.

Решение:

1. Установите и активируйте ufw:
sudo apt install ufw
sudo ufw enable


2. Разрешите подключение по SSH:
sudo ufw allow ssh

3. Ограничьте доступ к SSH только с определенного IP-адреса:
sudo ufw allow from <your_ip_address> to any port 22

4. Проверьте статус:
sudo ufw status
__________
Теперь только указанный IP-адрес может подключаться по SSH.
Отображение зависимостей

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

Основной синтаксис команды ldd выглядит следующим образом:
ldd [опция]... [файл]...

Чтобы увидеть список динамических библиотек, необходимых для работы команды /bin/ls, нужно выполнить команду:
ldd /bin/ls

ldd имеет несколько опций, которые могут изменить его поведение:
--version: Показать версию ldd.
--verbose: Вывести всю информацию, включая информацию о версиях символов.
--help: Показать справочное сообщение и выйти.
Выбор столбцов из файла с использованием cut

Задача:
У вас есть файл CSV с данными о пользователях (users.csv), и вам нужно выбрать только имя и email пользователей, которые находятся в первых двух столбцах.

Решение:

1. Пример содержимого
users.csv:ID,Name,Email,Age
1,John,john@example.com,30
2,Jane,jane@example.com,25
3,Bob,bob@example.com,40


2. Используем команду cut для выбора первых двух столбцов:
cut -d ',' -f 2,3 users.csv

Параметры:
-d ',' — указывает разделитель (запятая).
-f 2,3 — выбирает второй и третий столбцы (имя и email).

3. Результат:
Name,Email
John,john@example.com
Jane,jane@example.com
Bob,bob@example.com

__________
Теперь у вас есть только имена и электронные адреса пользователей.
Использование awk для анализа данных в столбцах

Задача:
У вас есть файл с данными о продажах (sales_data.txt), где в первом столбце указана дата, а в последнем — сумма продажи. Необходимо вычислить общую сумму продаж за все дни.

Решение:


1. Пример содержимого sales_data.txt
2021-01-01,Product1,100
2021-01-02,Product2,150
2021-01-03,Product3,200


2. Используем команду awk для подсчета общей суммы:
awk -F ',' '{sum += $3} END {print "Total Sales: " sum}' sales_data.txt

Параметры:
-F ','указывает разделитель (запятая).
{sum += $3}добавляет значение из третьего столбца (сумма продажи) к общей сумме.
END {print "Total Sales: " sum}выводит результат после обработки всех строк.

3. Результат:
Total Sales: 450
__________
Теперь у вас есть общая сумма продаж за все дни.
В Linux процессы могут быть не только запущены, но и контролируемы на уровне блокировок, изменения приоритетов, а также контроля за использованием памяти.

Пример:
# Отследить системные вызовы процесса с PID 12345
strace -p 12345

# Установить низкий приоритет для процесса
renice -n 15 -p 12345

# Показать ограничения по ресурсам для текущего пользователя
ulimit -a


Совет: Используйте nice для управления приоритетами, а также ulimit для ограничения ресурсов, чтобы не исчерпать все доступные ресурсы на сервере.
Для эффективного мониторинга системы необходимо использовать различные инструменты для анализа нагрузки, использования дисков и памяти.

Пример:
# Показать статистику ввода-вывода каждую секунду
iostat -xz 1

# Показать статистику виртуальной памяти
vmstat 2

# Показать ошибки системы
sysstat -e


Совет: Настройте sysstat для логирования и анализа производительности в долгосрочной перспективе.
Поиск и замена текста с использованием sed

Задача:
У вас есть файл report.txt, содержащий несколько строк с адресами электронной почты. Необходимо заменить все старые домены (например, old-domain.com) на новый (например, new-domain.com).

Решение:

1. Используйте команду sed для замены старого домена на новый:
sed -i 's/old-domain.com/new-domain.com/g' report.txt

Параметры:
-iизменяет файл на месте.
s/old-domain.com/new-domain.com/gзаменяет все вхождения старого домена на новый.

2. Проверка результата:
cat report.txt
__________
Теперь все старые адреса были заменены на новые.
Чтобы эффективно управлять сетью, необходимо понимать, как работать с такими инструментами, как netstat, ss, и tcpdump, а также использовать более сложные инструменты безопасности, например, iptables.

Пример:
# Показать все открытые порты
ss -tuln

# Разрешить подключение по SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Захват пакетов на порту 80
tcpdump -i eth0 port 80


Совет: iptables позволяет не только фильтровать пакеты, но и строить сложные сетевые политики безопасности. Использование tcpdump поможет вам выявить подозрительные пакеты.
Иногда возникает необходимость получения дополнительной информации, которую не предоставляет команда ls (или, по крайней мере, не позволяет получить в одном вызове на выполнение).

Полный обзор статуса файла в файловой системе предоставляет команда stat, к примеру

stat some_file

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

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

find / -name core | tee log_file | wc -l

выводит найденные путевые имена файлов core и результат подсчета их количества.

Часто работа конвейера с командой tee, выводящей результаты и в файл, и в окно терминала (для проверки), занимает много времени. Вы можете понаблюдать за первыми результатами, чтобы убедиться в том, что все работает как надо, а затем смело уходите: результаты сохранятся в файле.
Команда для перезагрузки reboot отличается от более функциональной команды shutdown тем, что последняя позволяет более мягко завершать работу операционной системы, вызывая для этого системные и локальные гс.d-скрипты с параметром stop.

При выполнении команды reboot данные гс.d-скрипты не выполняются, и ресурсоемкие процессы просто не успевают сохранить свои данные.
Команда gio trash отправит файлы в корзину. Он предустановлен во многих операционных системах Linux и является преемником gvfsd-trash.

Важно помнить, что gio trash отправляет файлы в ~/.local/share/Trash/files вместо ~/.trash.

Каталог .local/share/Trash включает в себя три каталога:
info — хранит исходное местоположение удаленных файлов и время удаления.
files — хранит удаленные файлы до тех пор, пока он не будет очищен.
expunged — может временно содержать недавно очищенную корзину.
Отображения дерева зависимостей динамических библиотек

Команда lddtree, являющаяся частью пакета pax-utils, предназначена для отображения зависимостей, необходимых для работы исполняемых файлов или других динамических библиотек.

lddtree отображает иерархическую структуру зависимостей, что облегчает понимание взаимосвязей между библиотеками.

Чтобы увидеть дерево зависимостей для программы /bin/ls. В этом случае команда будет выглядеть следующим образом:
lddtree /bin/ls

Если у вас ещё не установлен pax-utils, который включает в себя lddtree, вы можете установить его с помощью менеджера пакетов:
Debian или Ubuntu:
sudo apt-get update
sudo apt-get install pax-utils
Fedora:
sudo dnf install pax-utils