Урок 10. Архивы и сеть: tar, zip, curl, ssh и scp
Последний урок — о том, без чего не обходится работа с серверами: упаковать папку в архив, скачать файл из интернета, подключиться к удалённой машине и перенести на неё файлы. Всё это — тоже обычные команды.
tar — архив из папки
В Linux основной архиватор — tar. Он собирает файлы и папки в один файл, а сжимает его обычно gzip — отсюда расширение .tar.gz (или .tgz).
tar -czf site.tar.gz site
tar -tzf site.tar.gz
tar -xzf site.tar.gz
tar -xzf site.tar.gz -C /tmp/restore- первая строка создаёт архив
site.tar.gzиз папкиsite; - вторая показывает, что в архиве, ничего не распаковывая;
- третья распаковывает в текущую папку, четвёртая — в папку
/tmp/restore(она должна уже существовать).
Буквы ключей:
| Ключ | Что значит |
|---|---|
c | create — создать архив |
x | extract — распаковать |
t | list — показать содержимое |
z | сжатие gzip (.tar.gz) |
J | сжатие xz (.tar.xz) — медленнее, но меньше |
j | сжатие bzip2 (.tar.bz2) |
f | имя файла архива — ставится последним, сразу перед именем |
v | печатать имена файлов по ходу работы |
C | перейти в папку перед распаковкой |
При распаковке способ сжатия указывать не обязательно: tar -xf архив сам разберётся, .tar.gz это или .tar.xz.
tar -x молча заменяет файлы с теми же именами. Перед распаковкой чужого архива посмотрите его содержимое (tar -tf) и распакуйте в отдельную пустую папку — иначе можно затереть свои файлы.
gzip — сжать один файл
gzip big.log
gunzip big.log.gz
gzip -k big.loggzip сжимает файл и заменяет его сжатым big.log.gz; gunzip возвращает как было; -k оставляет исходный файл. Старые журналы в /var/log часто лежат как .gz. Читать их можно, не распаковывая: zcat, zless и zgrep — то же, что cat, less и grep, но для сжатых файлов.
zip — архив для Windows
Архивы .zip открываются в любой системе, поэтому их удобно отправлять тем, кто работает в Windows:
zip -r site.zip site
unzip -l site.zip
unzip site.zip -d site-copy-r — с вложенными папками; unzip -l — показать содержимое, -d — распаковать в указанную папку. Команд zip и unzip может не быть в системе — тогда поставьте одноимённые пакеты (в Ubuntu, Debian и Mint: sudo apt install zip unzip).
ping — есть ли связь
ping -c 4 debian.orgping посылает короткие запросы и показывает, за сколько миллисекунд пришёл ответ (time=…). В конце — итог: сколько запросов отправлено, сколько ответов получено и сколько потеряно (packet loss). Без -c ping в Linux работает бесконечно — остановите его Ctrl+C.
Если ответов нет, это ещё не значит, что сервер выключен: многие серверы и брандмауэры (программы и устройства, которые пропускают или отсекают подключения) не отвечают на ping нарочно. А сообщение вроде Name or service not known значит, что не удалось узнать адрес по имени: опечатка в имени или не работает DNS.
curl и wget — скачать из интернета
wget https://example.com/file.tar.gz
wget -c https://example.com/file.tar.gz
curl -O https://example.com/file.tar.gz
curl -L -o latest.tar.gz https://example.com/download
curl -I https://example.comwget адресскачивает файл в текущую папку,-cдокачивает прерванную загрузку;curl -Oсохраняет файл под его именем с сайта,-o имя— под своим;-Lу curl — идти по перенаправлениям. Без него curl может скачать короткую страницу «файл переехал» вместо самого файла;curl -Iпоказывает только заголовки ответа сервера — удобно проверить, отвечает ли сайт и какой код возвращает (200— всё хорошо,404— нет страницы).
Без ключей curl печатает скачанное прямо в терминал — так удобно смотреть ответы программ и страницы. Если какой-то из команд нет, поставьте пакет curl или wget.
В инструкциях встречаются команды вида curl адрес | bash — скачать скрипт и сразу выполнить. Такой скрипт получает все ваши права, а с sudo — права root. Выполняйте его только с официального сайта программы, а лучше сначала скачайте в файл и прочитайте.
ssh — работа на удалённом сервере
ssh ivan@192.168.1.10
ssh -p 2222 ivan@203.0.113.5
ssh ivan@192.168.1.10 'df -h'ssh пользователь@адрес подключает к серверу: приглашение сменится на серверное, и все команды курса будут выполняться там. Выход — exit или Ctrl+D. -p — если сервер ждёт подключений не на стандартном порту 22. Команда в кавычках после адреса выполнится на сервере, и вы сразу вернётесь к себе.
При первом подключении ssh покажет отпечаток ключа сервера и спросит, доверять ли ему — ответьте yes. Как включить сервер SSH и входить по ключу вместо пароля, подробно рассказано в теме Ubuntu.
scp — перенести файлы
scp копирует файлы через то же соединение SSH. Удалённый путь пишется как пользователь@адрес:путь:
scp site.tar.gz ivan@192.168.1.10:/home/ivan/
scp ivan@192.168.1.10:/var/log/nginx/error.log .
scp -r site ivan@192.168.1.10:~/
scp -P 2222 site.tar.gz ivan@203.0.113.5:~/- первая строка — с вашего компьютера на сервер, вторая — с сервера к вам (
.— в текущую папку); -r— папку целиком;- порт у
scpзадаётся большой буквой-P, а уssh— маленькой-p.
Двоеточие после адреса обязательно. scp file ivan@192.168.1.10 без него просто сделает у вас копию файла с именем ivan@192.168.1.10.
Для больших папок и регулярного копирования удобнее rsync: он переносит только изменившиеся файлы — о нём справка Как скопировать файлы на сервер.
Пример: перенести сайт на сервер
Первые две команды выполняются на вашем компьютере, третья входит на сервер, а две последние — уже на сервере:
tar -czf site.tar.gz site
scp site.tar.gz ivan@192.168.1.10:~/
ssh ivan@192.168.1.10
mkdir -p ~/www
tar -xzf ~/site.tar.gz -C ~/wwwОдин архив переносится быстрее, чем тысячи мелких файлов, а tar записывает в архив права и даты каждого файла.
Коротко
tar -czf архив.tar.gz папка— упаковать,tar -xzf архив.tar.gz— распаковать,tar -tzf— посмотреть.gzipиgunzip— один файл;zcat,zgrep— читать сжатое;zip -rиunzip— архивы для Windows.ping -c 4 адрес— проверить связь.wget адресилиcurl -L -O адрес— скачать файл;curl -I— заголовки ответа.ssh пользователь@адрес— войти на сервер,scp файл пользователь@адрес:путь— скопировать туда.