首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tar命令如何用于安装Node js?

问tar命令如何用于安装Node js?
EN

Ask Ubuntu用户
提问于 2017-03-30 07:15:33
回答 2查看 3.1K关注 0票数 10

在我的机器上安装Node时,我使用了我在网站上找到的以下命令。

代码语言:javascript
复制
tar --strip-components 1 -xzf /usr/save/node-v4.2.1-linux-x64.tar.gz

我知道tar -xzf用于提取档案,但我想知道节点是如何安装的?

我试着用这种方式安装它。我使用下面的命令将节点文件解压缩到/usr/local,

代码语言:javascript
复制
tar /usr/local -xzf /usr/save/node-v4.2.1-linux-x64.tar.gz

但这不管用。有人能解释或帮助我理解这两条命令的区别吗?

命令1所做的比命令2所做的更多?

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2017-03-30 07:30:19

tarball目录结构如下所示:

代码语言:javascript
复制
$ 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中没有任何其他选项的情况下解压缩此存档时,您将得到以下内容:

代码语言:javascript
复制
/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:

代码语言:javascript
复制
/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中了,所以您不需要做任何其他事情来执行npm和node。

票数 24
EN

Ask Ubuntu用户

发布于 2017-03-30 07:29:36

这是一种很酷(但也很烦人)的安装NodeJS的方法。

如果您在文件上运行tar tf /usr/save/node-v4.2.1-linux-x64.tar.gz,您将看到如下所示:

代码语言:javascript
复制
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的文件夹中,其中包含所有这些子文件夹(以及节点安装)。实际上,您甚至可以尝试这个提取来获得一个更好的想法:

代码语言:javascript
复制
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:

代码语言:javascript
复制
 --strip-components=NUMBER
       strip NUMBER leading components from file names on extraction

基本上,这意味着当tar要提取您的存档时,它将假装node-v4.2.1-linux-x64文件夹不存在。相反,它将直接提取bin/、share/和所有其他文件夹。

事实上,你可以试试:

代码语言:javascript
复制
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
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/898379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档