tar命令如何用于安装Node js


10

在计算机上安装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还要做什么?


1
您可以jodejs通过apt命令安装:sudo apt install nodejs nodejs-legacy
pa4080 '17

Answers:


24

tarball目录结构如下:

$ tar tf node-v6.10.1-linux-x64.tar.xz | head
node-v6.10.1-linux-x64/
node-v6.10.1-linux-x64/bin/
node-v6.10.1-linux-x64/bin/npm
node-v6.10.1-linux-x64/bin/node
node-v6.10.1-linux-x64/share/
node-v6.10.1-linux-x64/share/man/
node-v6.10.1-linux-x64/share/man/man1/
node-v6.10.1-linux-x64/share/man/man1/node.1
node-v6.10.1-linux-x64/share/systemtap/
node-v6.10.1-linux-x64/share/systemtap/tapset/

当您在中没有任何其他选项的情况下提取此归档文件时/usr/local,将得到以下信息:

/usr/local/node-v6.10.1-linux-x64/
/usr/local/node-v6.10.1-linux-x64/bin/
/usr/local/node-v6.10.1-linux-x64/bin/npm
/usr/local/node-v6.10.1-linux-x64/bin/node
/usr/local/node-v6.10.1-linux-x64/share/
/usr/local/node-v6.10.1-linux-x64/share/man/
/usr/local/node-v6.10.1-linux-x64/share/man/man1/
/usr/local/node-v6.10.1-linux-x64/share/man/man1/node.1
/usr/local/node-v6.10.1-linux-x64/share/systemtap/
/usr/local/node-v6.10.1-linux-x64/share/systemtap/tapset/

因此,在中创建了一个新目录/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/
/usr/local/bin/
/usr/local/bin/npm
/usr/local/bin/node
/usr/local/share/
/usr/local/share/man/
/usr/local/share/man/man1/
/usr/local/share/man/man1/node.1
/usr/local/share/systemtap/
/usr/local/share/systemtap/tapset/

并且/usr/local/bin已经存在PATH,因此您不需要做其他任何事情就能执行npmnode


14

这是安装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(我确信您的安装说明是这样),将/usr/local/bin/node按照提取的方式写入NodeJS二进制文件。同样,所有库都被添加到本地库文件夹,几乎所有内容都归其所属。

现在,警告(以及为什么令人讨厌)是apt不会看到或理解或意识到正在发生的事情。您将无法通过sudo apt upgrade或类似方式对其进行更新。您需要手动进入并清理旧的NodeJS安装,然后放入新的以备不时之需。

我建议您sudo apt install nodejs-legacy改为跑步。减轻痛苦,它会自动为您更新。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.