ОП.05Эксплуатация Linux-сервера

Материалы · эксплуатация Linux-сервера

Справочник команд

Команды по задачам, которые встречаются в работе с сервером. Слова на русском и заглавными буквами — места для своих имён и путей. Подробности о любой команде — man команда.

Осмотреться на сервере

ЗадачаКомандаПояснение
кто я и в каких группахidUID, основная и дополнительные группы текущего пользователя
что лежит в каталоге, со скрытымиls -la путьправа, владелец, группа, размер, дата
всё дерево каталогаls -lR путьрекурсивный список с правами
права каждого каталога на путиnamei -l /путь/к/файлупоказывает, на каком каталоге доступ обрывается
права числом и буквамиstat -c "%a %A %U:%G %n" путьправа, владелец и группа одной строкой
прочитать файл постраничноless файлпоиск — /, выход — q
какой это файлfile путьскрипт, программа, текст, ссылка

Найти файлы

ЗадачаКомандаПояснение
файлы старше N днейfind каталог -type f -mtime +N-mtime считает полные сутки
файлы по маске имениfind каталог -name 'маска*'маску берут в кавычки
файлы пользователя по всей системеsudo find / -xdev -user имя 2>/dev/null-xdev — не заходить в другие файловые системы
исключить путь из поискаfind / -xdev -user имя -not -path '/home/имя*'
программы с битом setuidsudo find / -xdev -perm -4000 -type f 2>/dev/null
файлы, доступные всем на записьfind каталог -perm -o+w -type f
к какому пакету относится файлdpkg -S /usr/bin/passwd«no path found» — файл не из пакета
подробный список найденногоfind … -lsкак ls -l для каждого найденного файла

Место на диске

ЗадачаКомандаПояснение
заполнение файловых системdf -hUse% — процент заполнения; df -h путь — файловая система этого пути
сколько занимает каталогsudo du -sh каталог
что занимает место внутриsudo du -sh каталог/* | sort -hсамые большие — внизу
куда подключён разделfindmnt путьисточник, тип файловой системы, параметры
растёт ли файлls -l файл; sleep 10; ls -l файлсравнить размер
следить за концом файлаtail -f файлвыход — Ctrl+C

Файлы: копировать, перенести, проверить

ЗадачаКомандаПояснение
скопировать с правами и владельцемsudo cp -a откуда куда-a сохраняет права, владельца и даты
скопировать и сразу задать праваsudo install -o владелец -g группа -m ПРАВА файл каталог/man install
перенестиsudo mv откуда кудаroot при переносе сохраняет владельца
контрольная суммаsha256sum файлдо и после переноса суммы должны совпасть
создать путь целикомmkdir -p /путь/к/каталогуне ошибается, если каталог уже есть
резервная копия файла перед правкойsudo cp -a файл файл.bak
заменить строку в файлеsudo sed -i 's/^КЛЮЧ=.*/КЛЮЧ=значение/' файлили открыть в sudo nano файл

Пользователи и группы

ЗадачаКомандаПояснение
сведения об учётной записиgetent passwd имясемь полей: имя, x, UID, GID, описание, домашний каталог, оболочка
создать пользователяsudo useradd -m -s /bin/bash -G группа имяman useradd: -r — системная запись, -M — без домашнего каталога, -d — путь
задать парольsudo passwd имя
добавить в группуsudo usermod -aG группа имябез -a список групп заменяется целиком
убрать из группыsudo gpasswd -d имя группа
кто в группеgetent group группа
состояние пароляsudo passwd -S имяL — заблокирован, P — задан
срок действия записиsudo chage -l имя
изменить учётную записьman usermodгруппы, оболочка, блокировка, срок действия

sudo

ЗадачаКомандаПояснение
мои праваsudo -l
права другого пользователяsudo -l -U имя
создать правило отдельным файломsudo visudo -f /etc/sudoers.d/имяvisudo не сохранит файл с ошибкой
проверить файл правилsudo visudo -cf /etc/sudoers.d/имя
выполнить от имени пользователяsudo -u имя командатак проверяют доступ каждой роли
проверить запрет без пароляsudo -u имя sudo -n команда-n — не спрашивать пароль, сразу отказ
где упоминается пользовательsudo grep -r имя /etc/sudoers /etc/sudoers.d /etc/group

Права и владельцы

ЗадачаКомандаПояснение
права числомchmod 640 файлr = 4, w = 2, x = 1 для владельца, группы, остальных
права буквамиchmod g+w,o= файл
особые битыchmod 2770 каталогчетвёртая цифра: 4 — setuid, 2 — setgid, 1 — sticky
сменить владельца и группуsudo chown владелец:группа путь-R — со всем содержимым
маска оболочкиumaskснимает биты с прав 666 у файлов и 777 у каталогов
маска процессаgrep Umask /proc/PID/status
проверить чтение от чужого имениsudo -u имя test -r файл && echo читает-w — запись, -x — запуск

Процессы

ЗадачаКомандаПояснение
процессы пользователяps -u имя -o pid,ppid,stat,%cpu,etime,cmd
найти по командной строкеpgrep -af образец
дерево процессовpstree -p PID
предки процессаpstree -s -p PID
когда запущенps -o lstart,etime -p PID
рабочий каталог процессаsudo ls -l /proc/PID/cwd
открытые файлы процессаsudo ls -l /proc/PID/fdвидно, в какой журнал процесс пишет
какой процесс слушает портsudo ss -ltnpстолбец Process
попросить завершитьсяkill PIDTERM; процесс может его перехватить
завершить принудительноkill -9 PIDKILL; после него проверить, что осталось за процессом
сигнал всем процессам пользователяsudo pkill -u имязатем проверить pgrep -u имя

Нагрузка

ЗадачаКомандаПояснение
нагрузка и число ядерuptime; nproc
самые загруженныеps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu | head
самые большие по памятиps -eo pid,user,rss,cmd --sort=-rss | head
снимок toptop -b -n 1 | head -20
изменить приоритетsudo renice -n N -p PIDnice от −20 до 19
памятьfree -hсмотреть на available

Скрипты bash

Скрипт — команды, записанные в файл по порядку. Запуск: sudo bash script.sh. Скрипт эксплуатации должен выдерживать повторный запуск: шаг, который уже выполнен, не ломает работу.

КонструкцияПримерЧто делает
первая строка#!/bin/bashкаким интерпретатором выполнять файл
строгий режимset -euостановиться на первой ошибке и на неизвестной переменной
переменнаяDIR=/srv/app; ls "$DIR"имя без пробелов вокруг =; при использовании — в кавычках
аргумент скриптаU=${1:-}первый аргумент или пусто, если его нет
вывод команды в переменнуюP=$(pgrep -f образец)
условиеif [ -d "$DIR" ]; then echo есть; else echo нет; fi-d — каталог, -f — файл, -e — существует, -z — пустая строка
выполнить, если первое не удалосьmkdir /srv/app 2>/dev/null || echo "каталог уже есть"так шаг не падает при повторном запуске
циклfor f in a.txt b.txt; do echo "$f"; done
функцияstep() { echo "== $*"; }вызов: step "Шаг 1"
проверить синтаксис без запускаbash -n script.sh
запуск с печатью каждой командыbash -x script.shудобно искать, на каком шаге ошибка