При установке Node на мою машину я использовал приведенную ниже команду, которую нашел на веб-сайте.
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?
software-installation
tar
Пратхапа Редди
источник
источник
jodejs
помощьюapt
команды:sudo apt install nodejs nodejs-legacy
.Ответы:
Структура каталогов tarball выглядит следующим образом:
Когда вы извлекаете этот архив без каких-либо других параметров
/usr/local
, вы получаете это:Таким образом, создается новый каталог
/usr/local
, и файлы там сбрасываются.Однако при этом
--strip-components=1
один компонент каталога из извлеченного пути удаляется, поэтомуnode-v6.10.1-linux-x64/bin/
становитсяbin/
иnode-v6.10.1-linux-x64/bin/npm
становитсяbin/npm
:И
/usr/local/bin
уже вPATH
, так что вам не нужно ничего делать, чтобы выполнитьnpm
иnode
.источник
Это своего рода крутой (но раздражающий) способ установки NodeJS.
Если вы запустите
tar tf /usr/save/node-v4.2.1-linux-x64.tar.gz
файл, вы увидите что-то вроде этого:По сути, это означает, что когда вы извлекаете этот архив tar, он извлекается в папку, которая называется
node-v4.2.1-linux-x64
всеми этими подпапками (и установкой узла) внутри него. На самом деле, вы можете даже попробовать это извлечение, чтобы получить лучшую идею:Если вы запустите
ls
, вы увидитеnode-v4.2.1-linux-x64
папку.Теперь
--strip-components 1
делает что-то интересное для процесса извлечения. Отman tar
:По сути, это означает, что когда
tar
вы собираетесь извлечь ваш архив, он будет притворяться, будтоnode-v4.2.1-linux-x64
папки там нет. Вместо этого он собирается экстрактbin/
,share/
а все остальные папок непосредственно.На самом деле, вы можете попробовать это:
Если вы запустите
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
. Меньше боли, и он автоматически обновляется для вас.источник