Как работает команда tar для установки узла js

При установке узла на моем компьютере я использовал следующую команду, которую я нашел на веб-сайте.

tar --strip-components 1 -xzf /usr/save/node-v4.2.1-linux-x64.tar.gz

Я знаю, что tar -xzf используется для извлечения архивов, но я хочу знать, как установлен ли узел?

Я попытался установить его таким образом. Я извлек файлы узлов на /usr/local, используя следующую команду:

tar /usr/local -xzf /usr/save/node-v4.2.1-linux-x64.tar.gz

Но это не сработает. Может ли кто-нибудь объяснить или помочь мне понять разницу между этими двумя командами?

Что еще делает команда 1, чем команда 2?

1
задан 30 March 2017 в 10:31

1 ответ

Это классный (но раздражающий) способ установки NodeJS.

Если вы запустите tar tf /usr/save/node-v4.2.1-linux-x64.tar.gz в файле, вы увидите что-то вроде этого:

node-v4.2.1-linux-x64/
node-v4.2.1-linux-x64/bin/
node-v4.2.1-linux-x64/bin/npm
node-v4.2.1-linux-x64/bin/node
node-v4.2.1-linux-x64/share/
node-v4.2.1-linux-x64/share/man/
node-v4.2.1-linux-x64/share/man/man1/

В основном это означает, что при извлечении этого tar-архива он будет извлекаться в папку с именем node-v4.2.1-linux-x64 со всеми этими подпапками (и установкой узла) внутри нее. На самом деле вы можете даже попробовать это извлечение, чтобы получить лучшую идею:

mkdir /tmp/node
cd /tmp/node
tar xvf /usr/save/node-v4.2.1-linux-x64.tar.gz

Если вы запустите ls, вы увидите папку node-v4.2.1-linux-x64.

Теперь , --strip-components 1 делает что-то интересное для процесса извлечения. Из man tar:

 --strip-components=NUMBER
       strip NUMBER leading components from file names on extraction

В основном это означает, что когда tar собирается извлечь ваш архив, он будет притворяться, что папка node-v4.2.1-linux-x64 не существует. Вместо этого он будет извлекать bin/, share/ и все остальные папки напрямую.

На самом деле вы можете попробовать:

mkdir /tmp/node
cd /tmp/node
tar xvf /usr/save/node-v4.2.1-linux-x64.tar.gz --strip-components=1

Если вы запустите ls, вы увидите, что больше нет папки node-v4.2.1-linux-x64. Это bin/, include/, lib/ и share/ (все совпадающие папки в /usr/local/).

Ваша вторая команда не сработала бы, потому что она просто извлекла бы node-v4.2.1-linux-x64 в папку /usr/local (если он вообще запущен). Если вы запустите ls /usr/local, вы даже можете увидеть эту папку, висящую вокруг. Это бесполезно, не стесняйтесь удалять с помощью rm. Что касается того, почему это бесполезно, продолжайте читать ...

Теперь, когда мы объяснили, как работает команда tar, мы можем объяснить, как это будет установлено.

В каждой системе Linux есть что-то, называемое переменной $PATH, которая определяет, где хранятся исполняемые файлы. Среди этих мест есть /usr/local/bin. Когда вы извлекаете этот двоичный файл внутри /usr/local (что я уверен в том, что говорят ваши инструкции по установке), двоичный файл NodeJS записывается в /usr/local/bin/node в соответствии с тем, как выполняются экстракции. Аналогично, все библиотеки добавляются в локальную библиотечную папку, и все довольно просто происходит там, где она принадлежит.

Теперь оговорка (и почему это раздражает) заключается в том, что apt не увидит или понять или понять, что происходит. Вы не сможете обновить его через sudo apt upgrade или подобное. Вам нужно будет вручную войти и очистить старую установку NodeJS, а затем добавить новую, если вы когда-нибудь захотите обновить.

Я бы порекомендовал вам просто запустить sudo apt install nodejs-legacy. Меньше боли, и он автоматически обновляется для вас.

14
ответ дан 23 May 2018 в 00:08

Другие вопросы по тегам:

Похожие вопросы: