tar 命令如何安装 Node.js

tar 命令如何安装 Node.js

在我的计算机上安装 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

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

答案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。这样麻烦更少,而且它会自动更新。

相关内容