При установке узла на моем компьютере я использовал следующую команду, которую я нашел на веб-сайте.
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?
Это классный (но раздражающий) способ установки 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. Меньше боли, и он автоматически обновляется для вас.