Полезные команды SSH: TOP-70 утилит, используемых на хостинге
Команда TimewebПолезная шпаргалка по использованию хостинга на все времена.

При общении с клиентами в тикетах мы часто выполняем работы именно по SSH. Это касается диагностики, отладки, переноса сайтов и еще сотни других действий.
Сегодня мы собрали TOP-70 утилит, которые находятся в арсенале службы поддержки Timeweb.
Проверка, диагностика ошибок

Цикл для проверки ответов сайта
while true; do curl -I http://domain.com 2>/dev/null | grep HTTP; done
Проверить код ответа сервера
curl -s --head domain.ru | grep HTTP
Получить http-заголовки с сайта
curl -I имя_сайта
Проверить скорость работы сайта
curl -so /dev/null -w '%{time_total}\n' -H 'Cache-Control: no-cache' domain.com
Обратиться к сайту
wget -O /dev/null сайт
Проверить скорость отдачи контента
time wget -O /dev/null domain.com
Проверить скорость выполнения скрипта
time wget index.php
Вывести IP домена
host имя_домена
Вывести NS домена
dig +short NS domain.com
Вывести А-запись
dig +short A domain.ru
Вывести актуальную А-запись минуя кэширование на dns-серверах
(обход кэширования достигается с помощью ключа +trace)
dig +trace domain.ru A
Получить А-запись домена с конкретного DNS-сервера:
dig @ns1.timeweb.ru domain.com
Получить актуальные NS для домена
dig ns +trace domain.ru
Получить txt-запись с конкретного сервера
dig txt domain.ru @8.8.8.8
Получить MX для домена с конкретного сервера
dig mx domain.ru @ns1.timeweb.ru
Посмотреть ошибки PHP
for i in `seq 1 20`; do curl -I домен 2>/dev/null; sleep 1; done | grep 'X-Powered-By: PHP\/5.3' -c
Диагностировать сертификат домена
openssl s_client -connect domain:443
Проверить pagespeed
wget -4SO /dev/null https://domain.ru 2>&1 | fgrep X-Page-Speed
Посмотреть модули php
php -m
Посмотреть лимиты
ulimit -a/etc/security/limits.conf
Посмотреть циклические редиректы
wget -O /dev/null https://домен/файл.txt 2>&1|tail -n1
Проверить доступность порта
nc -l -p порт
Обратиться wget через нужный IP-адрес
wget --bind-address=188.225.72.234 http://yandex.ru
Обратиться к домену напрямую с помощью CURL
(используется для проверки доступности сайта при использовании CDN, например, Cloudflare)
#1curl -IH host:domain.ru http://ip-адрес#2curl -v -H "Host: domain.ru" 92.53.119.143
Обратиться к Apache вместо Nginx
curl -v -H 'Host: domain.ru' http://127.0.0.1:86#86 - порт нужной версии PHP
Обратиться к файлу на сайте от имени Apache
curl -XGET -I -H 'Host: site.ru' 'http://localhost/path/to/file.svg'
Сделать трассировку с сервера ВХ
mtr -c 300 -r ip
Трассировка для windows
pathping -n 92.53.114.107
Cделать трассировку по tcp на 80 порт
traceroute -Tn timeweb.com -p 80
Тест производительности CPU и дисковой системы
sysbench --test=cpu --cpu-max-prime=20000 run -- - CPUdd if=tempfile of=/dev/null bs=1M count=1024 - Чтениеsync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync - Запись
Проверить определение месторасположения IP-адреса по geoip
geoiplookup адрес
Отправить тестовое письмо через sendmail
echo "Test" | sendmail test@mail.ru
Назначить CLI-версию PHP по умолчанию
export PATH=/opt/php<версия>/bin/:$PATH
Посмотреть занятое место
du -sch ./*
Проверить ход выполнения скрипта
strace php index.php
Выводы для проверки связи
dhclient -v -r eth0ip acurl -so /dev/null -w '%{time_total}\n' domain.rucat /etc/sysconfig/network
Проверка сжатия
curl https://URL -H "Accept-Encoding: gzip"
Работа с файлами и директориями

Поиск строки в файлах
grep -rlinsH 'строка' ./
Рекурсивный поиск значения по всем файлам, начиная с текущей директории
grep значение ./ -R
Показать файлы в определенном каталоге с указанной датой изменения
ls -l /tmp/1002/ | grep 'Dec 21'
Изменить права рекурсивно
find . -type d -exec chmod 0700 {} ';'
Сделать php.ini для работы скриптов
/opt/php54/bin/php -с /home/u/user/site/public_html/cgi-bin/php.ini /home/u/user/site/public_html/subdirectory/script.php
Сравнить два файла
diff file1 file2
Разделить файл на нужные части утилитой split
split -b 3500m file.tar
Сделать мягкую ссылку
ln -s полный_путь_на_что_будет_ссылка имя_ссылки#создает ссылку на нужную папку в текущем каталоге
Удалить BOM (вставки вида 1s/)
find . -type f -exec sed '1s/^ //' -i.bak {} \; -exec rm {}.bak \;
Заменить что-то в файлах рекурсивно
find . -type f -name '*' -exec sed -i -r 's/что-заменять/на-что-заменять/g' {} \; find . -type f -name '*' -exec sed -i -r 's%что-заменять%на-что-заменять%g' {} \; #Пример:find . -type f -name '*' -exec sed -i -r 's/znakomstva-vkontakte.ru/znakomstva-vkontakte.tw1.ru/g'
Создать пустой файл нужного объема
dd if=/dev/zero of=~/test.php bs=1M count=1#bs - сколько байт#count - сколько раз
MODX
find . -type f -name '*' -exec sed -i -r 's%beritaxi.com%cf89767.tmweb.ru%g' {} \; find . -type f -name '*' -exec sed -i -r 's%home/login/login.tmweb.ru%home/c/login/public_html%g' {} \;
Удаленное копирование в директорию
nohup wget -r -c -l 0 --restrict-file-names=nocontrol -o wget.log ftp://login:password@ip/path/ &
Перенос из консоли по sftp
sftp логин@адресget -r ./каталог_назначения
Скачать по FTP wget'ом
nohup wget -mc --ftp-user='' --ftp-password='' --output-file=wget.log --limit-rate=500k ftp://ip/путь/ --restrict-file-names=nocontrol &
Скачать несколько каталогов по FTP
wget -m -o ./wget.log --restrict-file-names=nocontrol ftp://username:passwd@host/{path1, path2} &nohup wget -m --ftp-user='' --ftp-password='' --output-file=progress_wget --limit-rate=500k --include-directories=path1,path2,path3 ftp://ip/path --restrict-file-names=nocontrol &
Скачать с удаленного сервера по SCP
scp -rpC -P 3232 логин@ip:/path /local #опции:-l 500 - ограничить скорость-С - сжатие на лету-P 222 - указать порт-p - скопировать права доступа и временные метки-v - verbose-q - тихий режим, не обрабатывает ошибки-r - рекурсивное скачивание
С текущего каталога на удалённый сервер
rsync -avzh --progress --log-file=progress_rsync --bwlimit=500 -e ssh ./ логин@ip:путь
Rsync по ssh с нужными ключами с удаленного сервера в локальную директорию
rsync --progress -avz --log-file=progress_rsync --bwlimit=500 логин@ip:/path/ /local_path/ #опции:--bwlimit=500 - значение указывается в KBPS-e "ssh -p 2022" - указать порт--log-file=progress_rsync - указать файл лога--progress - отобразить прогресс скачивания, но только для текущего файла--rsh=ssh - указать протокол
Копирование rsync локально
rsync -ah --progress /source/ /dest/
Работа с MySQL

Проверить БД на битые таблицы
mysqlcheck -u root -p --check --databases cu59267_base
Восстановить БД, если побились таблицы
mysqlcheck -u root -p --auto-repair --databases cu59267_base
Восстановить БД при наличии ошибок
mysqlcheck -r -u'база_данных' -p'пароль_базы_данных' 'база_данных'
Оптимизация БД
(для уменьшения занимаемого места и ускорения операций ввода/вывода)
mysqlcheck -u root -p --optimize --databases cu59267_base
При принудительном завершении процессов
cat имя_дампа.sql | pv -L 2M | mysql -u'база_данных' база_данных -p'пароль_базы_данных'
Сделать дамп с удаленного сервера
mysqldump -h'адрес_сервера' -u'user' db -p'password' > dumpname.sql
Работа с архивами

Архивировать каталог
tar -cf - каталог | pv -L 2M -cN tar -s $(du -sb каталог | grep -o '[0-9]*') > каталог.tar
Распаковать tar
cat archive.tar | pv -L 2M -s $(du -sb | grep -o '[0-9]*') | tar -x
Распаковать zip через pv
pv -L 1M Файл.zip | unzip-stream target_dir
Импортировать базу через pv
cat dump.sql | pv -L 1M | mysql -u'db' db -p'password'
Сделать дамп с удаленного сервера
mysqldump -h'адрес_сервера' -u'user' db -p'password' > dumpname.sql
Сделать архив с исключением директорий
tar -cf - /path/ --exclude='/path/folder/*' | pv -L 2M > archive.tar
Проверить сжатие gzip
curl https://URL -H "Accept-Encoding: gzip"
Сron

Просмотреть задания cron у клиента
crontab -l
Редактировать файл cron
crontab -e
Хотите больше новостей по хостингу, IT и Web?
Подписывайтесь на наши сообщества:
Telegram: https://t.me/timewebru
Facebook: https://www.facebook.com/TimeWeb/
Twitter: https://twitter.com/Timeweb