Распаковка архива .tar.gz?

.tar.gz — это архив созданный программой tar, и после этого заархивированный программой gzip. Такая двойная архивация обусловлена тем, что программа gzip сжимает хорошо и быстро, но делает это только с одним файлом. Поэтому чтобы запаковать несколько файлов, для начала из них создается один tar-архив, а после этого он уже пакуется программой gzip. Причем стоит отметить, что первичный архив tar практически не сжимает информацию, а лишь объединяет ее в один файл. В конечном варианте мы получаем архив с двойным расширением archive.tar.gz или archive.tgz

Для распаковки архива *.tar.gz, вы должны выполнить:

tar -xzf archive.tar.gz

Если в этом архиве есть программное обеспечение, которое необходимо скомпилировать, обычно делается следующее:

tar -xzf archive.tar.gz
cd archive
./configure
make
sudo make install

Будьте внимательны! Не вводите вслепую приведенные выше инструкции; во-первых, прочитайте любые документы под названием «README» или «INSTALLATION», которые вы найдете в архиве.

Структура каталогов Linux

Файловая структура *nix-систем серьезно отличается от структуры в Windows и заслуживает отдельного внимания.

Начнем с базовых понятий:

  • Файловая структура представляет собой дерево
  • В узлах этого дерева находятся директории — файлы специального типа
  • В листьях дерева расположены файлы

В отличии от Windows, в Linux вас не будут спрашивать куда устанавливать программное обеспечение (ПО), где хранить временные файлы, какие файлы будут являть настройками и т.д.

В Linux после выполнения какого-то действия, особенно, связанного с установкой программного обеспечения, операционная система не сообщит ничего о том куда установлено ПО, где находятся конфигурационное файлы, как запускать ПО и т.п.

Структура каталогов Linux достаточно жёсткая и имеет иерархическую структуру, т.е. все каталоги сводятся к единому каталогу root directory (обозначается этот каталог как / — косая черта из правого угла в нижний левый).

Прежде ем начинать работу с Linux хорошо иметь представление о том, что за каталоги находятся в структуре Linux и какое назначение имеет каждый их них.

В Linux есть FHS (англ. Filesystem Hierarchy Standard) — базовый стандартизированный набор каталогов. За каждым каталогом закреплена какая-то особая роль: за нас подумали и решили какие каталоги нам необходимы, т.е. как разработчик операционной системы решил — так мы и видим каталоги:

  • / — Корневой каталог (root directory) в котором находятся все остальные каталоги, содержит всю файловую иерархию.
  • /bin — Основные исполняемые файлы. Утилиты, необходимые операционной системе (cat, ls, cp)
  • /boot — Информация необходимая для загрузки операционной системы. Загрузочные файлы (в том числе файлы загрузчика, ядро, initrd, System.map) 
  • /dev — Устройства, которые представлены в виде файлов (например, /dev/null, /dev/zero)
  • /etc — Общесистемные конфигурационные файлы (настройки самой системы и настройки служб системы)
  • /home — Содержит домашние каталоги пользователей, которые в свою очередь содержат персональные настройки и данные пользователя
  • /lib — Основные библиотеки необходимые для бинарных файлов, необходим для работы программ из /bin и /sbin
  • /media — Точки монтирования для сменных носителей, таких как CD-ROM, DVD-ROM (впервые описано в FHS-2.3)
  • /mnt — Содержит временно монтируемые файловые системы. Временное монтирование блочных устройств
  • /opt — Дополнительное программное обеспечение
  • /proc — Содержит информацию о всех процессах операционной системы. Утилиты работающие с процессами берут информацию из этого каталога. Этот каталог это виртуальная файловая система, представляющая состояние ядра операционной системы и запущенных процессов в виде файлов
  • /root — Домашний каталог для пользователя root
  • /run — Информация о системе с момента её загрузки, в том числе данные, необходимые для работы демонов (pid-файлы, UNIX-сокеты и т.д.)
  • /sbin — Системные исполняемые файлы. Основные системные программы для администрирования и настройки системы (например, init, iptables, ifconfig)
  • /srv — Данные для сервисов, предоставляемых системой (например, www или ftp)
  • /sys — Содержит информацию об устройствах, драйверах, а так же некоторых свойствах ядра
  • /tmp — Временные файлы
  • /usr — Содержит вторичную иерархию для данных пользователя и его бинарных и системных файлов
  • /var — Изменяемые файлы, такие как файлы логов, регистрации, временные почтовые файлы, файлы спулеров

Самые часто используемые каталоги

  • /etc — файлы настроек
  • /var/log — логи
  • /home/<user_name> — домашний каталог пользователя

Перезапуск MySQL на Debian Linux

Первым шагом необходимо зайти на сервер по SSH, используя правильные учетные данные и IP-адрес:

$ ssh root@localhost

Эта команда должна предоставить вам доступ к терминалу сервера.

Вторым шагом нужно перезапустить сервис MySQL, выполнив команду

$ service mysql restart

или, если ваш сервис MySQL имеет другое имя, например mysqld, вам, возможно, придется соответствующим образом изменить команду или попробовать следующее:

$ /etc/init.d/mysql restart

FTP-клиент на Node.js для Windows Server

Имеется

  • Дистрибутив Linux (Debian) с установленной платформой Node.js
  • Сторонний Windows Server

Задача

Необходимо установить FTP коннект к Windows Server при помощи платформы Node.js, вырезать определенную папку (вместе с находящимися в ней папками и файлами) и вставить в определенную директорию на сервере под управлением Linux.

Вопрос

Можно ли реализовать описанную задачу? Если «Да», то какие NPM-пакеты использовать и/или какой код программы подойдет для решения задачи?

Ответ

Если ходить по обычному FTP, то инструкция получилась такая:

  1. Добавить службу FTP-сервер (веб-сервер IIS)
  2. Добавить FTP-сайт и установить физический путь к каталогу с содержимым

При помощи NPM-пакета basic-ftp, получить содержимое каталога:

const ftp = require('basic-ftp');

ftp_connect()
 
async function ftp_connect() {
    const client = new ftp.Client();
    client.ftp.verbose = true;
    try {
        await client.access({
            host: 'host',
            port: '21',
            user: 'domain\\username',
            password: 'password',
            secure: false
        })
        console.log(await client.list())
    }
    catch(err) {
        console.log(err)
    }
    client.close()
}