Читать книгу: «Работа в командной строке linux», страница 2
3.2. Редактирование файлов в терминале
1. nano — простой редактор для новичков.
nano config.ini
Базовые сочетания клавиш:* Ctrl+O — сохранить;* Ctrl+X — выйти;* Ctrl+K — вырезать строку;* Ctrl+U — вставить;* Ctrl+W — поиск.
2. vim — мощный редактор для опытных пользователей.
vim script.py
Режимы:* командный (Esc) — навигация и команды;* вставка (i) — редактирование текста;* командная строка (:) — сохранение, выход и др.
Основные команды:* :w — сохранить;* :q — выйти;* :wq — сохранить и выйти;* :q! — выйти без сохранения.
3.3. Поиск информации в файлах
1. grep — поиск строк по шаблону.
grep "error" /var/log/syslog # Найти строки с "error"
grep -i "warning" logfile.log # Поиск без учёта регистра
grep -r "config" /home/user/ # Рекурсивный поиск в каталоге
grep -n "function" script.js # Вывод с номерами строк
2. find — поиск файлов по имени, размеру, дате и т. д.
find /home -name "*.txt" # Найти все .txt файлы в /home
find /var/log -mtime -7 # Файлы, изменённые за последние 7 дней
find . -size +1M # Файлы больше 1 МБ в текущей директории
3.4. Фильтрация и обработка текста
1. sort — сортировка строк.
sort data.txt
sort -r data.txt # Обратная сортировка
sort -n numbers.txt # Сортировка по числовому значению
2. uniq — удаление дубликатов (работает с отсортированными данными).
sort log.txt | uniq # Удалить повторяющиеся строки
3. wc (word count) — подсчёт строк, слов, байт.
wc -l script.sh # Количество строк
wc -w document.txt # Количество слов
wc -c data.bin # Количество байт
4. cut — извлечение колонок или символов.
cut -d':' -f1 /etc/passwd # Извлечь первое поле (разделитель — двоеточие)
cut -c1-10 file.txt # Извлечь первые 10 символов каждой строки
5. awk — обработка структурированных данных.
awk '{print $1}' /etc/passwd # Вывести первое поле каждой строки
awk -F':' '$3 > 1000' /etc/passwd # Найти пользователей с UID > 1000
3.5. Практические упражнения
1. Создайте файл test.log и заполните его 20 строками произвольного текста.
2. Выведите первые 5 строк файла командой head.
3. Выведите последние 3 строки файла командой tail.
4. Найдите все строки с словом «test» в файле с помощью grep.
5. Отсортируйте строки файла test.log по алфавиту и сохраните результат в sorted.log.
6. Подсчитайте количество строк в sorted.log командой wc.
7. Откройте файл sorted.log в редакторе nano, добавьте заголовок и сохраните изменения.
8. Найдите все файлы с расширением .log в каталоге /var/log командой find.
9. Выведите содержимое /etc/passwd, отобразив только имена пользователей (первое поле) с помощью cut.
10. Просмотрите большой лог‑файл (например, /var/log/syslog) с помощью less, найдите в нём строку с ошибкой (слово «error»).
Заключение
Вы освоили ключевые инструменты для работы с текстовыми файлами в Linux:* просмотр содержимого (cat, less, head, tail);* редактирование (nano, vim);* поиск информации (grep, find);* фильтрацию и обработку текста (sort, uniq, wc, cut, awk).
Эти навыки позволят вам эффективно анализировать логи, настраивать конфигурационные файлы и автоматизировать обработку данных.
В следующей главе мы рассмотрим работу с процессами и заданиями в Linux — управление запущенными программами, мониторинг ресурсов и планирование задач.
Глава 4. Управление процессами и заданиями в Linux
Введение
Процессы — основа многозадачности в Linux. Каждый раз, когда вы запускаете программу или выполняете команду, создаётся процесс. Умение управлять процессами критически важно для системного администрирования и эффективной работы с системой.
В этой главе вы:* узнаете, что такое процессы и какие они бывают;* освоите инструменты мониторинга процессов;* научитесь управлять приоритетами процессов;* познакомитесь с механизмами управления заданиями в оболочке;* изучите способы завершения процессов;* выполните практические задания для закрепления навыков.
4.1. Что такое процесс
Процесс — запущенный экземпляр программы, которому ядро Linux выделяет ресурсы (память, процессорное время и т. д.).
Каждый процесс имеет:* PID (Process ID) — уникальный идентификатор;* PPID (Parent PID) — идентификатор родительского процесса;* состояние (выполняется, спит, остановлен, зомби);* приоритет;* используемые ресурсы (CPU, память, файлы).
Типы процессов:* Интерактивные — работают на переднем плане, взаимодействуют с пользователем.* Фоновые (демоны) — работают без прямого взаимодействия с пользователем (например, веб‑сервер apache2).
4.2. Мониторинг процессов
1. ps (process status) — моментальный снимок процессов.
Основные опции:* ps aux — все процессы всех пользователей;* ps -ef — полный формат с PPID;* ps -u username — процессы конкретного пользователя;* ps -p PID — информация о конкретном процессе.
Пример:
ps aux | head -5
2. top — мониторинг в реальном времени.
Запуск:
top
Управление в top:* q — выход;* k — завершение процесса (запросит PID);* r — изменение приоритета (nice);* P — сортировка по CPU;* M — сортировка по памяти.
3. htop — улучшенная версия top с цветовым выделением и удобным интерфейсом.
Установка (если не установлен):
sudo apt install htop # Debian/Ubuntu
sudo yum install htop # CentOS/RHEL
Запуск:
htop
4.3. Управление заданиями (Job Control)
Задание — процесс или группа процессов, управляемых текущей оболочкой.
Основные команды:
1. jobs — показать задания текущей сессии:
jobs
2. fg (foreground) — перевести задание на передний план:
fg %1 # Перевести задание №1 на передний план
3. bg (background) — запустить приостановленное задание в фоне:
bg %2 # Запустить задание №2 в фоне
4. Ctrl+Z — приостановить выполняющееся задание (переводит в состояние Stopped).
5. & — запуск процесса в фоне сразу:
sleep 100 & # Запустить sleep в фоне
Пример работы:
long_command # Запускаем долго выполняющуюся команду
Ctrl+Z # Приостанавливаем её
bg # Запускаем в фоне
jobs # Проверяем статус
4.4. Завершение процессов
1. kill — отправка сигналов процессу.
Основные сигналы:* SIGTERM (15) — корректное завершение (по умолчанию);* SIGKILL (9) — принудительное завершение («убивает» процесс);* SIGSTOP (19) — приостановка процесса;* SIGCONT (18) — продолжение выполнения.
Примеры:
kill 1234 # Отправить SIGTERM процессу с PID 1234
kill -9 1234 # Принудительно завершить процесс
kill -STOP 1234 # Приостановить процесс
2. pkill — завершение по имени процесса:
pkill firefox # Завершить все процессы firefox
pkill -9 python # Принудительно завершить все процессы python
3. killall — аналогично pkill, но может завершать по имени:
killall chrome
4.5. Приоритеты процессов
Приоритет (nice value) определяет, сколько процессорного времени получит процесс.
• Диапазон: от -20 (высший приоритет) до 19 (низший приоритет).
• По умолчанию процессы запускаются с приоритетом 0.
Команды:
1. nice — запуск с заданным приоритетом:
nice -n 10 long_calculation.sh # Запустить с низким приоритетом
2. renice — изменение приоритета работающего процесса:
renice 5 1234 # Установить приоритет 5 для процесса 1234
4.6. Практические упражнения
1. Запустите команду sleep 300 и приостановите её с помощью Ctrl+Z.
2. Проверьте список заданий командой jobs.
3. Запустите sleep 200 & (в фоне).
4. Снова выполните jobs и обратите внимание на статус заданий.
5. Переведите первое задание на передний план командой fg.
6. Прервите его с помощью Ctrl+C.
7. Запустите top и отсортируйте процессы по потреблению CPU (P).
8. Найдите процесс с наибольшим потреблением и запомните его PID.
9. Завершите этот процесс командой kill PID.
10. Проверьте, что процесс завершён, снова запустив top.
11. Запустите htop (если установлен) и изучите интерфейс.
12. Создайте скрипт high_cpu.sh, который в цикле выводит дату:
#!/! /bin/bash
while true; do
date
sleep 1
done
13. Запустите его с высоким приоритетом (nice -n -10 ./high_cpu.sh) и понаблюдайте в top.
14. Измените приоритет работающего процесса на 15 с помощью renice.
4.7. Дополнительные инструменты
• pgrep — поиск PID по имени процесса:
pgrep firefox
• strace — трассировка системных вызовов процесса:
strace -p PID
• lsof — список открытых файлов процессом:
lsof -p PID
• vmstat — общая статистика по системе (память, CPU, I/O):
vmstat 2 # Обновление каждые 2 секунды
Заключение
Вы освоили ключевые аспекты управления процессами в Linux:* мониторинг процессов (ps, top, htop);* управление заданиями (jobs, fg, bg);* завершение процессов (kill, pkill, killall);* настройку приоритетов (nice, renice).
Эти навыки позволят вам:* эффективно диагностировать проблемы с производительностью;* управлять ресурсами системы;* автоматизировать задачи с учётом приоритетов;* безопасно завершать зависшие процессы.
В следующей главе мы рассмотрим автоматизацию задач с помощью планировщика cron и работу с сетевыми командами в Linux.
Глава 5. Автоматизация задач с помощью cron и основы работы с сетью в Linux
Введение
Автоматизация рутинных задач и работа с сетевыми подключениями — ключевые навыки для администратора Linux. В этой главе вы освоите:* настройку планировщика задач cron;* создание и редактирование расписаний;* основы сетевых команд для диагностики и подключения;* практические сценарии автоматизации.
5.1. Планировщик задач cron
Cron — демон Linux, выполняющий задачи по расписанию. Каждая задача записывается в специальный файл — crontab (cron table).
Основные команды для работы с crontab:* crontab -e — отредактировать файл crontab или создать его;* crontab -l — показать содержимое файла crontab;* crontab -r — удалить текущий файл crontab;* crontab -i — удалить с запросом подтверждения;* crontab -u username -e — редактировать crontab другого пользователя (требуется root).
5.2. Синтаксис crontab
Каждая строка crontab состоит из 5 полей расписания и команды:
минута час день_месяца месяц день_недели команда
Поля:* минута (0–59);* час (0–23);* день месяца (1–31);* месяц (1–12 или jan–dec);* день недели (0–6, где 0 — воскресенье, или sun–sat).
Специальные символы:* * — любое значение (каждый);* , — список значений (например, 1,8);* - — диапазон (например, 1-5);* / — шаг (например, */5 — каждые 5 единиц).
Примеры расписаний:
0 2 * * * # Каждый день в 2:00
0 0 1 * * # Первое число каждого месяца в 0:00
*/10 * * * * # Каждые 10 минут
0 9-18 * * 1-5 # Каждый час с 9:00 до 18:00 с понедельника по пятницу
@reboot # При загрузке системы
@daily # Ежедневно в 0:00 (аналог 0 0 * * *)
@weekly # Еженедельно в 0:00 воскресенья (аналог 0 0 * * 0)
@monthly # Ежемесячно в 0:00 первого числа (аналог 0 0 1 * *)
5.3. Практические примеры заданий cron
1. Ежедневное резервное копирование:
0 3 * * * /usr/bin/tar -czf /backups/home_$(date +\%Y\%m\%d).tar.gz /home
2. Очистка временных файлов раз в неделю:
0 4 * * 0 /usr/bin/find /tmp -type f -mtime +7 -delete
3. Мониторинг использования диска ежедневно:
0 6 * * * df -h | mail -s "Disk Usage Report" admin@example.com
4. Запуск скрипта при загрузке:
@reboot /home/user/startup_script.sh
5. Проверка доступности сервера каждые 5 минут:
*/5 * * * * /bin/ping -c 1 192.168.1.1 > /dev/null || echo "Server down!" | mail -s "Alert" admin@example.com
Начислим +6
Покупайте книги и получайте бонусы в Литрес, Читай-городе и Буквоеде.
Участвовать в бонусной программе
