Работа с сервером

Для установки корректных версий программ на сервер необходимо заранее знать версию, релиз и разрядность ОС Debian.
Узнать версию и релиз Debian можно с помощью команд:
# cat /etc/issue
- покажет только тип ОС (Debian / CentOS / Ubuntu / ...) и первый major номер версии;

# lsb_release -a
- выводит подробные данные с номером и названием релиза;

# cat /proc/version
- полный номер Linux версии и указанием разрядности ОС ( 32 / 64 bit )

# cat /etc/debian_version
- просто полный номер релиза Debian;


Чтобы запустить процесс на сервере в фоновом режиме лучше всего использовать

# nohup <any_command> > <log_file>

Для просмотра запущенных процессов используем

# jobs

Далее будет выведен список процессов, для завершения первого вводи

# kill %1

и всё, nohup самая простая команда, которая корректно работает с любыми командами.


Другой способ - это использовать "forever"

# forever start <команда>

этот сервис может даже перезапустить неожиданно упавшие процессы и позволяет легко управлять запущенными, но один большой недостаток - то, что этот процесс не позволяет использовать конкретную команду для запуска процесса.

Пример: нужно запустить node server.js, для этого можно использовать forever start server.js и всё круто работает, но...
если нужно запустить babel-node server.js, то forever уже не сработает и будет пытаться запустить скрипт от лица node и выдавать ошибки если скрипт написан на ES6 и рассчитан под запуск с помощью babel-node. В этой ситуации как раз лучше (и верно) использовать nohup.

Часто возникает необходимость найти на сервере файлы, содержащие нужный текст. И хорошо если файлов мало и все находятся в одной директории. Но если же это несколько директорий и их размер внушительный, то задача усложняется.
Пример поиска
find /var/log/ -type f -iname ".log" -exec grep -Him1 'ip...' {}
Утилита rsync используется для синхронизации файлов и директорий как на локальных машинах так и на удалённых.

Утилита rsync используется для синхронизации файлов и директорий как на локальных машинах так и на удалённых.

С её помощью можно скопировать папки на другой сервер с минимальным использованием трафика.

Для резервного копирования локально можно сделать так:
# rsync -a /var/ /var_bak/
удалённо
# rsync -axzvP /var/user/ user@server:/backup/user/


Основные опции утилиты rsync:
-a,  режим архивирования, включает ключи -rlptgoD; -r,  каталоги копируются рекурсивно; -l,  копировать символические ссылки «как есть», не обращаясь к файлам; -p,  сохранение прав доступа к файлам; -t,  сохранение времени модификации файлов; -g, -o, сохранение владельца и группы файла; -D,  сохранение файлов устройств и специальных файлов; -u,  режим обновления, пропускаются файлы с поздней датой модиф.; -v,  выводит имена копируемых файлов; -q,  не выводит сообщения об ошибках; -z,  включение режим сжатия; -P,  отображение прогресса при копировании; -с,  проверка файлов по контрольной сумме, по размеру и дате модификации; --ignore-errors,  продолжение копирования и удаления даже после появления ошибок; --max-delete,  максимальное число удаляемых за один раз файлов и каталогов; --files-from=FILE,  задается список файлов и директорий для копирования в файле; -e ssh,  использование при копировании ssh; --bwlimit=KBPS,  ограничение скорости копирования.

PS:
Если возникнет ошибка вида
bash: rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: remote command not found (code 127) at io.c(601) [sender=3.0.7]


то необходимо установить rsync на той машине, где она не установлена:
Debian:
# aptitude install rsync
CentOS:
# yum install rsync

Бывает необходимо создать резервную копию базы банных сервера.

Это можно сделать с помощью phpMyAdmin, но он долго работает с БД большого размера и затрудняет перенос базы на другой сервер.

Для быстрого бекапа базы данных существует утилита mysqldump в SSH, в общем виде выглядит так:

# mysqldump –uUSER -pPASSWORD -hSERVER DataBase > DataBaseFile.sql

где:

USER — это имя пользователя базы данных;

PASSWORD — пароль пользователя;

SERVER — это имя (или ip-адрес) сервера базы данных;

DataBase — наименование базы данных;

DataBaseFile.sql — имя файла с дампом базы данных.


Также утилита mysqldump имеет много опций и ключей:

 

# mysqldump -–all-databases -uUSER -pPASSWORD > /path/mysql-db-server.sql

Команда с опцией -–all-databases сохраняет все базы данных на MySQL-сервере.

 

# mysqldump -uUSER -pPASSWORD DATABASE table1 table2 table3 > /path/ DATABASE_t1-t2-t3.sql

Сохраняет таблицы table1, table2, table3, из базы DATABASE в файле DATABASE_t1-t2-t3.sql.

 

# mysqldump --no-data -uUSER -pPASSWORD DATABASE > /path/DATABASE-schema.sql

Указав опцию --no-data команда сохранит структуру таблиц (без данных) в файле DATABASE_schema.sql.

 

# mysqldump --add-drop-table -uUSER -pPASSWORD DATABASE > /path/DATABASE.sql

Опция --add-drop-table добавит команду DROP TABLE (удаление таблицы) перед созданием таблиц.

 

# mysqldump --databases -uUSER -pPASSWORD DATABASE > /path/DATABASE.sql

Опция --databases добавит команду CREATE DATABASE перед созданием базы данных. Это позволяет не создавать и не задавать базу данных при восстановлении.

 

# mysqldump -uUSER –pPASSWORD –h192.168.0.1 DATABASE > /path/DATABASE.sql

Команда сделает бэкап базы DATABASE с сервера с ip-адресом 192.168.0.1

 

# mysqldump --max_allowed_packet=8M -uUSER –pPASSWORD DATABASE > /path/DATABASE.sql

Опция --max_allowed_packet=8M принудительно изменит размер пакета считываемых данных в оперативную память размером в 8 мегабайт.

 

# mysqldump --quick -uUSER –pPASSWORD DATABASE > /path/DATABASE.sql

Опция --quick заставляет команду записывать данные непосредственно на диск.

 

# mysqldump --default-character-set=cp1251 -uUSER –pPASSWORD DATABASE > /path/DATABASE.sql

Принудительно указываем кодировку cp1251.

 

# mysqldump -uUSER –pPASSWORD DATABASE | gzip -c /path/DATABASE.sql.gz

Этой последовательностью получаем архивированный бэкап с помощью утилиты gzip (для последующего восстановления необходимо будет предварительно извлечь из архива).

Для восстановления базы данных из бэкапа выполняем команду:

 

# mysql -uUSER –pPASSWORD DATABASE < /path/DATABASE.sql

Архивация данных на удалённом сервере требуется достаточно часто. Если Вам требуется скачать большое количество маленьких файлов, перенести их на другой сервер или просто сделать резервную копию, то без архивации по SSH не обойтись.

Как запаковать файлы в tar.gz через SSH:
tar -zcvf имя_архива архивируемая_папка_или_файл
например:
tar -zcvf folder.tar.gz folder/
где
- c – значит, что создается новый архив;
- z – архивация будет происходить посредством архиватора gzip;
- v – в консоль будет выводиться информация о процессе архивации;
- f – с помощью этого флага задается имя архива;

Как распаковать файлы из tar.gz через SSH:
tar -xzvf имя_архива.tar.gz
например:
tar -xzvf archive.tar.gz

Как запаковать файлы в zip через SSH:
zip -r имя_архива архивируемая_папка_или_файл
например:
zip -r logs.zip logs/
где
r - означает, что нужно искать файлы в папке рекурсивно.

Как распаковать файлы из zip через SSH:
unzip имя_архива.zip
например:
unzip archive.zip

Если необходимо добавить дату или время к имени файла, то используйте %Y%m%d.%H%M%S.

PS: чтобы быстро набрать имя файла наберите первые 2-3 символа и нажмите кнопку “tab”