При загрузке системы ядро определяет подключенное оборудование и запускает драйверы, которые позволяют Linux работать с ним. Сведения об обнаружении оборудования быстро прокручиваются на экране при загрузке.
Если необходимо повторно отобразить их после запуска системы, чтобы просмотреть сообщения о потенциальных проблемах, существует несколько способов просмотра сообщений:
Любой пользователь может запустить команду
Второй способ просмотра загрузочных сообщений — это команда
Если необходимо повторно отобразить их после запуска системы, чтобы просмотреть сообщения о потенциальных проблемах, существует несколько способов просмотра сообщений:
Любой пользователь может запустить команду
dmesg, чтобы увидеть, какое оборудование обнаружено и какие драйверы загружены ядром во время запуска. Второй способ просмотра загрузочных сообщений — это команда
journalctl, которая отображает сообщения, связанные с конкретным сеансом загрузки.Команда ld
ld (linker) используется для связывания объектных файлов и создания исполняемых файлов или динамических библиотек.
Примеры использования команды ld:
1. Создание исполняемого файла:
Эта команда связывает объектные файлы
2. Создание динамической библиотеки:
Эта команда связывает объектные файлы
3. Указание точки входа:
Эта команда связывает объектные файлы
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.so3. Указание точки входа:
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
Измеряем скорость записи:
Команда создаст файл testfile размером 1000 МБ, заполненный нулями, и измерит скорость записи данных в этот файл.
Измеряем скорость чтения:
Команда прочитает содержимое файла testfile и измерит скорость чтения данных из него.
Измеряем скорость записи:
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 на сервер:
2. Настройте Google Authenticator для пользователя:
Следуйте инструкциям, чтобы сгенерировать QR-код и связать его с вашим мобильным устройством. После этого сканируйте QR-код в приложении Google Authenticator.
3. Откройте файл конфигурации SSH:
Найдите и измените следующие строки:
4. Настройте PAM (Pluggable Authentication Modules) для двухфакторной аутентификации. Откройте файл
5. Перезапустите SSH-сервис:
__________
Теперь для подключения нужно будет использовать SSH-ключ и вводить временный код из приложения Google Authenticator.
Задача:
Настройте сервер SSH, чтобы он использовал двухфакторную аутентификацию: сначала SSH-ключи, затем временные коды из Google Authenticator.
Решение:
1. Установите Google Authenticator на сервер:
sudo apt install libpam-google-authenticator2. Настройте Google Authenticator для пользователя:
google-authenticatorСледуйте инструкциям, чтобы сгенерировать QR-код и связать его с вашим мобильным устройством. После этого сканируйте QR-код в приложении Google Authenticator.
3. Откройте файл конфигурации SSH:
sudo nano /etc/ssh/sshd_configНайдите и измените следующие строки:
ChallengeResponseAuthentication yes
PasswordAuthentication no4. Настройте PAM (Pluggable Authentication Modules) для двухфакторной аутентификации. Откройте файл
/etc/pam.d/sshd и добавьте:auth required pam_google_authenticator.so5. Перезапустите SSH-сервис:
sudo systemctl restart sshd__________
Теперь для подключения нужно будет использовать SSH-ключ и вводить временный код из приложения Google Authenticator.
Реализация логирования и мониторинга процессов с помощью syslog и journalctl
Задача:
Настройте централизованное логирование для отслеживания ошибок приложений и мониторинга с помощью syslog и journalctl.
Решение:
1. Для начала убедитесь, что
2. Перезапустите службу rsyslog:
3. Настройте приложение на запись в системный журнал. В вашем приложении добавьте код для логирования:
4. Для мониторинга журналов используйте команду
Чтобы следить за реальными логами, используйте:
5. Просмотрите логи для определенных приложений:
__________
Теперь ваше приложение будет записывать логи в системный журнал, и вы сможете следить за ними с помощью
Задача:
Настройте централизованное логирование для отслеживания ошибок приложений и мониторинга с помощью syslog и journalctl.
Решение:
1. Для начала убедитесь, что
rsyslog и journalctl настроены для ведения журналов. Откройте файл /etc/rsyslog.conf и добавьте строки для централизованного логирования:*.* @your_log_server_ip:5142. Перезапустите службу rsyslog:
sudo systemctl restart rsyslog3. Настройте приложение на запись в системный журнал. В вашем приложении добавьте код для логирования:
import logging
import syslog
syslog.syslog(syslog.LOG_INFO, "This is a log message")4. Для мониторинга журналов используйте команду
journalctl:sudo journalctl -u your_serviceЧтобы следить за реальными логами, используйте:
sudo journalctl -f5. Просмотрите логи для определенных приложений:
sudo journalctl -u apache2__________
Теперь ваше приложение будет записывать логи в системный журнал, и вы сможете следить за ними с помощью
journalctl.Настройка и управление правами пользователей и групп на сервере
Задача:
Создайте несколько пользователей и назначьте им доступ к различным каталогам с использованием групп. Используйте команду chown и chmod для управления правами.
Решение:
1. Создайте два пользователя:
2. Создайте группу
3. Добавьте пользователей в эту группу:
4. Создайте директорию и установите на неё права доступа только для группы:
5. Проверьте права:
__________
Теперь только пользователи из группы
Задача:
Создайте несколько пользователей и назначьте им доступ к различным каталогам с использованием групп. Используйте команду chown и chmod для управления правами.
Решение:
1. Создайте два пользователя:
sudo useradd user1
sudo useradd user22. Создайте группу
devgroup:sudo groupadd devgroup3. Добавьте пользователей в эту группу:
sudo usermod -aG devgroup user1
sudo usermod -aG devgroup user24. Создайте директорию и установите на неё права доступа только для группы:
sudo mkdir /home/devgroup
sudo chown :devgroup /home/devgroup
sudo chmod 770 /home/devgroup5. Проверьте права:
ls -l /home__________
Теперь только пользователи из группы
devgroup могут иметь доступ к каталогу /home/devgroup.Мониторинг сетевого трафика с помощью iftop
Задача:
Используйте iftop для мониторинга входящего и исходящего сетевого трафика в реальном времени.
Решение:
1. Установите iftop:
2. Запустите iftop для мониторинга трафика:
__________
В интерфейсе вы увидите список всех активных подключений и их скорость передачи данных.
Задача:
Используйте iftop для мониторинга входящего и исходящего сетевого трафика в реальном времени.
Решение:
1. Установите iftop:
sudo apt install iftop2. Запустите iftop для мониторинга трафика:
sudo iftop__________
В интерфейсе вы увидите список всех активных подключений и их скорость передачи данных.
Поиск строк в файле с использованием grep
Задача:
Необходимо найти все строки, содержащие слово "
Решение:
1. Используем команду grep для поиска строк с ошибками:
Параметры:
•
•
2. Проверка содержимого
__________
Теперь у вас есть файл, содержащий только строки с ошибками.
Задача:
Необходимо найти все строки, содержащие слово "
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:
2. Разрешите подключение по SSH:
3. Ограничьте доступ к SSH только с определенного IP-адреса:
4. Проверьте статус:
__________
Теперь только указанный IP-адрес может подключаться по SSH.
Задача:
Настройте брандмауэр с помощью ufw, чтобы разрешить доступ к SSH только с определенного IP-адреса.
Решение:
1. Установите и активируйте ufw:
sudo apt install ufw
sudo ufw enable2. Разрешите подключение по SSH:
sudo ufw allow ssh3. Ограничьте доступ к SSH только с определенного IP-адреса:
sudo ufw allow from <your_ip_address> to any port 224. Проверьте статус:
sudo ufw status__________
Теперь только указанный IP-адрес может подключаться по SSH.
Отображение зависимостей
С помощью команды
Основной синтаксис команды
Чтобы увидеть список динамических библиотек, необходимых для работы команды /bin/ls, нужно выполнить команду:
ldd имеет несколько опций, которые могут изменить его поведение:
С помощью команды
ldd можно отобразить список динамических библиотек, необходимых для работы вашей программы. Она помогает выявлять отсутствующие зависимости и решать проблемы совместимости.Основной синтаксис команды
ldd выглядит следующим образом:ldd [опция]... [файл]...Чтобы увидеть список динамических библиотек, необходимых для работы команды /bin/ls, нужно выполнить команду:
ldd /bin/lsldd имеет несколько опций, которые могут изменить его поведение:
--version: Показать версию ldd.--verbose: Вывести всю информацию, включая информацию о версиях символов.--help: Показать справочное сообщение и выйти.Выбор столбцов из файла с использованием cut
Задача:
У вас есть файл CSV с данными о пользователях (
Решение:
1. Пример содержимого
2. Используем команду
Параметры:
•
•
3. Результат:
__________
Теперь у вас есть только имена и электронные адреса пользователей.
Задача:
У вас есть файл 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,402. Используем команду
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 для анализа данных в столбцах
Задача:
У вас есть файл с данными о продажах (
Решение:
1. Пример содержимого sales_data.txt
2. Используем команду awk для подсчета общей суммы:
Параметры:
•
•
•
3. Результат:
__________
Теперь у вас есть общая сумма продаж за все дни.
Задача:
У вас есть файл с данными о продажах (
sales_data.txt), где в первом столбце указана дата, а в последнем — сумма продажи. Необходимо вычислить общую сумму продаж за все дни.Решение:
1. Пример содержимого sales_data.txt
2021-01-01,Product1,100
2021-01-02,Product2,150
2021-01-03,Product3,2002. Используем команду 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 процессы могут быть не только запущены, но и контролируемы на уровне блокировок, изменения приоритетов, а также контроля за использованием памяти.
Пример:
Совет: Используйте nice для управления приоритетами, а также ulimit для ограничения ресурсов, чтобы не исчерпать все доступные ресурсы на сервере.
Пример:
# Отследить системные вызовы процесса с PID 12345
strace -p 12345
# Установить низкий приоритет для процесса
renice -n 15 -p 12345
# Показать ограничения по ресурсам для текущего пользователя
ulimit -a
Совет: Используйте nice для управления приоритетами, а также ulimit для ограничения ресурсов, чтобы не исчерпать все доступные ресурсы на сервере.
Для эффективного мониторинга системы необходимо использовать различные инструменты для анализа нагрузки, использования дисков и памяти.
Пример:
Совет: Настройте sysstat для логирования и анализа производительности в долгосрочной перспективе.
Пример:
# Показать статистику ввода-вывода каждую секунду
iostat -xz 1
# Показать статистику виртуальной памяти
vmstat 2
# Показать ошибки системы
sysstat -e
Совет: Настройте sysstat для логирования и анализа производительности в долгосрочной перспективе.
Поиск и замена текста с использованием sed
Задача:
У вас есть файл
Решение:
1. Используйте команду sed для замены старого домена на новый:
Параметры:
•
•
2. Проверка результата:
__________
Теперь все старые адреса были заменены на новые.
Задача:
У вас есть файл
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.
Пример:
Совет: iptables позволяет не только фильтровать пакеты, но и строить сложные сетевые политики безопасности. Использование tcpdump поможет вам выявить подозрительные пакеты.
Пример:
# Показать все открытые порты
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 будет показано почти все, что можно узнать о рассматриваемом файле, вплоть до старшего и младшего номеров устройства, на котором хранится файл.Командный конвейер, как правило, действует прямолинейно, но зачастую полезно распараллелить поток данных.
Это можно сделать с помощью команды
выводит найденные путевые имена файлов core и результат подсчета их количества.
Часто работа конвейера с командой
Это можно сделать с помощью команды
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 отображает иерархическую структуру зависимостей, что облегчает понимание взаимосвязей между библиотеками.
Чтобы увидеть дерево зависимостей для программы /bin/ls. В этом случае команда будет выглядеть следующим образом:
Если у вас ещё не установлен pax-utils, который включает в себя lddtree, вы можете установить его с помощью менеджера пакетов:
Debian или Ubuntu:
Команда
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