Node jsをインストールするためのtarコマンドの仕組み


10

私のマシンにノードをインストールするとき、私はウェブサイトで見つけた以下のコマンドを使用しました。

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

しかし、これは機能しません。誰かがこれらの2つのコマンドの違いを説明したり理解したりできますか?

コマンド1が実行していることは、コマンド2が実行していることよりも多いですか?


1
あなたはインストールできjodejsaptコマンド:sudo apt install nodejs nodejs-legacy
pa4080 2017年

回答:


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、抽出されたパスから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


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/)。

2番目のコマンドは、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代わりに実行することをお勧めします。痛みが少なく、自動的に更新されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.