pra*_*ddy 10 tar software-installation
在我的机器上安装 Node 时,我使用了在网站上找到的以下命令。
tar --strip-components 1 -xzf /usr/save/node-v4.2.1-linux-x64.tar.gz
Run Code Online (Sandbox Code Playgroud)
我知道它tar -xzf
用于提取档案,但我想知道节点是如何安装的?
我尝试以这种方式安装它。我已经/usr/local
使用以下命令提取了节点文件,
tar /usr/local -xzf /usr/save/node-v4.2.1-linux-x64.tar.gz
Run Code Online (Sandbox Code Playgroud)
但这不起作用。有人可以解释或帮助我理解这两个命令之间的区别吗?
命令 1 所做的比命令 2 所做的更多吗?
mur*_*uru 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/
Run Code Online (Sandbox Code Playgroud)
当您在没有任何其他选项的情况下提取此存档时/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/
Run Code Online (Sandbox Code Playgroud)
因此,在 中创建了一个新目录/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/
Run Code Online (Sandbox Code Playgroud)
并且/usr/local/bin
已经在 中PATH
,因此您无需执行任何其他操作即可执行npm
和node
。
Kaz*_*lfe 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/
Run Code Online (Sandbox Code Playgroud)
基本上,这意味着当您解压缩此 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
Run Code Online (Sandbox Code Playgroud)
如果你运行ls
,你会看到一个node-v4.2.1-linux-x64
文件夹。
现在,--strip-components 1
对提取过程做了一些有趣的事情。来自man tar
:
--strip-components=NUMBER
strip NUMBER leading components from file names on extraction
Run Code Online (Sandbox Code Playgroud)
基本上,这意味着当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
Run Code Online (Sandbox Code Playgroud)
如果您运行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
。减少痛苦,它会自动为您更新。
归档时间: |
|
查看次数: |
2671 次 |
最近记录: |