Когда сайт живёт на своём сервере, часть задач быстрее решить в терминале, чем через панель управления: найти строку в сотне файлов темы, понять, куда делись 40 гигабайт, снять дамп базы перед обновлением. Ниже — команды, которые я использую чаще всего.
Небольшое уточнение по названию: сам SSH отвечает только за защищённое подключение к серверу. Всё, что ниже, — обычные команды Linux, которые вы выполняете уже внутри этого подключения. Подключиться можно так:
ssh user@example.com
# если SSH висит на нестандартном порту
ssh -p 2222 user@example.com
Поиск по содержимому файлов
Самая частая задача: найти, где именно в коде встречается нужная строка. Ключ -r заставляет grep обойти папку рекурсивно, вместе со всеми вложенными.
grep -r "ID транзакции" /home/web/site.ru/public_html/wp-content/themes/themename
Полезные дополнения к этой же команде: -n покажет номера строк, -i сделает поиск нечувствительным к регистру, а -l выведет только имена файлов без самих строк — удобно, когда совпадений много.
Сколько свободного места на диске
df -h
Ключ -h означает human-readable — размеры выводятся в гигабайтах и мегабайтах, а не в блоках. Пример ответа:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 79G 45G 31G 60% /
devtmpfs 2.9G 0 2.9G 0% /dev
Смотреть нужно на строку с реальным диском (здесь /dev/vda1) и на колонку Use%. Если она подбирается к 90%, пора разбираться, что занимает место.
Что именно занимает место
Размеры папок в текущей директории:
du -sh *
То же, но отсортировано от большего к меньшему — в мегабайтах:
du -sm * | sort -nr
И в килобайтах:
du -s * | sort -nr
Если сортировка нужна вместе с удобными единицами, современный sort умеет понимать суффиксы K, M и G:
du -sh * | sort -h
Обычный сценарий поиска «пожирателя места»: запускаете команду в корне сайта, находите самую тяжёлую папку, переходите в неё и повторяете. За три-четыре шага виновник находится — чаще всего это логи, кеш или старые бэкапы.
Архивы
Собрать zip-архив с папкой сайта:
zip -r sitename.zip sitename.ru/
Распаковать tar.gz:
tar -xvf ArchiveName.tar.gz
Обратная операция — упаковать папку в tar.gz, что на больших объёмах заметно экономнее zip:
tar -czvf ArchiveName.tar.gz sitename.ru/
Буквы читаются просто: c — create, x — extract, z — сжатие gzip, v — показывать файлы в процессе, f — имя файла архива.
Права на файлы и папки
Сменить владельца папки вместе со всем содержимым:
chown -R apache:apache folder
Обратите внимание на имя пользователя: apache — это CentOS, AlmaLinux и родственные системы. В Debian и Ubuntu веб-сервер работает от www-data, и команда будет такой:
chown -R www-data:www-data folder
Проверить, от кого работает веб-сервер, можно командой ps aux | grep -E "apache|nginx|php-fpm" — в первой колонке будет имя пользователя.
Резервная копия базы MySQL
mysqldump -u DB_USER_NAME -p'DB_USER_PASS' DB_NAME > /var/www/domains/SITENAME/DB_NAME.sql
Где DB_NAME — название базы, DB_USER_NAME — имя пользователя, DB_USER_PASS — пароль, SITENAME — адрес сайта.
Важная оговорка про пароль. В таком виде команда работает, но пароль попадает в историю оболочки (~/.bash_history) и виден любому пользователю сервера в списке процессов через ps aux. На своём сервере, где вы один, это терпимо, на общем — уже нет. Безопаснее не указывать пароль в строке вовсе — тогда mysqldump спросит его интерактивно:
mysqldump -u DB_USER_NAME -p DB_NAME > dump.sql
А для автоматических выгрузок по расписанию пароль кладут в отдельный файл ~/.my.cnf с правами 600:
[mysqldump]
user=DB_USER_NAME
password=DB_USER_PASS
После этого команда сокращается до mysqldump DB_NAME > dump.sql, и пароль нигде не светится.
Блокировка назойливого IP
Закрыть доступ к серверу с конкретного адреса:
sudo iptables -A INPUT -s XXX.XXX.XXX.XXX -j DROP
Посмотреть все действующие правила с номерами строк:
sudo iptables -n -L -v --line-numbers
Номера строк нужны, чтобы правило можно было потом снять: sudo iptables -D INPUT 3 удалит третье правило в цепочке INPUT.
Учтите главное: правила iptables живут до перезагрузки. Если сервер перезапустится, блокировка исчезнет. Чтобы правила сохранялись, их выгружают через iptables-save или ставят пакет netfilter-persistent.
Опасные команды: читать внимательно
Очистить директорию целиком:
rm -rf *
Эта команда удаляет всё содержимое текущей папки без вопросов и без корзины. Восстановить будет нечем — только из бэкапа. Две меры предосторожности, которые стоят потраченных секунд.
Первое: перед удалением всегда проверяйте, где вы находитесь, командой pwd, и что именно собираетесь удалить — командой ls -la. Классическая авария случается, когда человек думает, что он в папке кеша, а на самом деле в корне сайта.
Второе: работайте с полным путём, а не с текущей папкой — rm -rf /var/www/site.ru/cache/* нагляднее и безопаснее, чем rm -rf *. И никогда не запускайте такие команды из-под root, если этого можно избежать.
Шпаргалка одним списком
ssh user@host | подключиться к серверу |
grep -r "текст" /путь | найти строку в файлах |
df -h | свободное место на дисках |
du -sh * | sort -h | размеры папок по убыванию |
tar -czvf a.tar.gz папка/ | упаковать архив |
tar -xvf a.tar.gz | распаковать архив |
chown -R www-data:www-data папка | сменить владельца |
mysqldump -u USER -p БАЗА > dump.sql | дамп базы |
sudo iptables -A INPUT -s IP -j DROP | заблокировать адрес |
Список не претендует на полноту — это те команды, которые действительно нужны в повседневной работе с сайтом на своём сервере. Если держать их под рукой, большинство мелких задач решается быстрее, чем открывается панель управления.
Частые вопросы
Командой ssh user@example.com, где user — имя пользователя на сервере. Если SSH работает не на стандартном 22-м порту, нужно указать его явно: ssh -p 2222 user@example.com.
В таком виде пароль попадает в историю оболочки и виден другим пользователям сервера в списке процессов (ps aux). На своём сервере это терпимо, на общем — нет. Лучше указать ключ -p без значения — пароль спросят интерактивно, — а для автоматических выгрузок завести файл ~/.my.cnf с правами 600.
Правила iptables хранятся в памяти и при перезагрузке сбрасываются. Чтобы они сохранялись, их выгружают через iptables-save или устанавливают пакет netfilter-persistent.
Нет. Команда удаляет файлы без корзины и без подтверждения, восстановить данные можно только из резервной копии. Поэтому перед запуском проверяйте текущую папку через pwd и ls -la, а лучше указывайте полный путь вместо звёздочки.
Источники
- 1.GNU grep — официальное руководствоhttps://www.gnu.org/software/grep/manual/grep.html
- 2.GNU coreutils — команда duhttps://www.gnu.org/software/coreutils/manual/html_node/du-invocation.html
- 3.GNU tar — официальное руководствоhttps://www.gnu.org/software/tar/manual/tar.html
- 4.mysqldump — документация MariaDBhttps://mariadb.com/kb/en/mysqldump/
- 5.netfilter/iptables — документацияhttps://netfilter.org/documentation/



