在我的机器上安装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所做的更多?
发布于 2017-03-30 07:30:19
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中了,所以您不需要做任何其他事情来执行npm和node。
发布于 2017-03-30 07:29:36
这是一种很酷(但也很烦人)的安装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。更少的痛苦,它会自动为你更新。
https://askubuntu.com/questions/898379
复制相似问题