Comment fonctionne la commande tar pour l'installation de Node js


10

Lors de l'installation de Node sur ma machine, j'ai utilisé la commande ci-dessous que j'ai trouvée sur un site Web.

tar --strip-components 1 -xzf /usr/save/node-v4.2.1-linux-x64.tar.gz

Je sais que cela tar -xzfest utilisé pour extraire les archives, mais je veux savoir comment le nœud est installé?

J'ai essayé de l'installer de cette façon. J'ai extrait les fichiers de noeud à l' /usr/localaide de la commande ci-dessous,

tar /usr/local -xzf /usr/save/node-v4.2.1-linux-x64.tar.gz

Mais ça ne marche pas. Quelqu'un peut-il m'expliquer ou m'aider à comprendre la différence entre ces deux commandes?

Que fait la commande 1 de plus que la commande 2?


1
Vous pouvez installer jodejspar aptcommande: sudo apt install nodejs nodejs-legacy.
pa4080

Réponses:


24

La structure du répertoire tarball est la suivante:

$ 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/

Lorsque vous extrayez cette archive sans aucune autre option dans /usr/local, vous obtenez ceci:

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

Ainsi, un nouveau répertoire est créé dans /usr/localet les fichiers y sont vidés.

Cependant, avec --strip-components=1, un composant de répertoire du chemin extrait est supprimé, node-v6.10.1-linux-x64/bin/devient bin/et node-v6.10.1-linux-x64/bin/npmdevient ainsi 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/

Et /usr/local/binest déjà dedans PATH, donc vous n'avez rien d'autre à faire pour exécuter npmet node.


14

C'est en quelque sorte une façon cool (mais ennuyeuse) d'installer NodeJS.

Si vous exécutez tar tf /usr/save/node-v4.2.1-linux-x64.tar.gzle fichier, vous verrez quelque chose comme ceci:

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/

Fondamentalement, cela signifie que lorsque vous extrayez cette archive tar, elle sera extraite dans un dossier appelé node-v4.2.1-linux-x64avec tous ces sous-dossiers (et l'installation du nœud) à l'intérieur. En fait, vous pouvez même essayer cette extraction pour avoir une meilleure idée:

mkdir /tmp/node
cd /tmp/node
tar xvf /usr/save/node-v4.2.1-linux-x64.tar.gz

Si vous exécutez ls, vous verrez un node-v4.2.1-linux-x64dossier.

Maintenant, --strip-components 1fait quelque chose d'intéressant pour le processus d'extraction. De man tar:

 --strip-components=NUMBER
       strip NUMBER leading components from file names on extraction

Fondamentalement, cela signifie que lorsque vous tarallez extraire votre archive, il va faire semblant que le node-v4.2.1-linux-x64dossier n'est pas là. , Il est au lieu d' aller à l' extrait bin/, share/et tous les autres dossiers directement.

En fait, vous pouvez l'essayer:

mkdir /tmp/node
cd /tmp/node
tar xvf /usr/save/node-v4.2.1-linux-x64.tar.gz --strip-components=1

Si vous exécutez ls, vous verrez qu'il n'y a plus de node-v4.2.1-linux-x64dossier. Il est juste bin/, include/, lib/et share/(tous les dossiers par hasard dans /usr/local/).

Votre deuxième commande n'aurait pas fonctionné car elle aurait juste extrait le node-v4.2.1-linux-x64dossier /usr/local(si elle s'exécutait même). Si vous exécutez ls /usr/local, vous pourriez même voir ce dossier traîner. C'est inutile, n'hésitez pas à supprimer avec rm. Quant à savoir pourquoi c'est inutile, continuez à lire ...


Maintenant que nous avons expliqué comment fonctionne la commande tar, nous pouvons expliquer comment elle est installée.

Chaque système Linux a quelque chose appelé la $PATHvariable, qui détermine où les fichiers exécutables sont stockés. Parmi ces endroits est /usr/local/bin. Lorsque vous extrayez ce binaire à l'intérieur /usr/local(ce que je suis sûr que ce sont vos instructions d'installation), le binaire NodeJS est écrit /usr/local/bin/nodeselon la façon dont les extractions sont effectuées. De même, toutes les bibliothèques sont ajoutées au dossier de la bibliothèque locale et tout va à peu près là où il appartient.

Maintenant, la mise en garde (et pourquoi cela est ennuyeux) est que vous aptne verrez pas, ne comprendrez pas ou ne réaliserez pas ce qui se passe. Vous ne pourrez pas le mettre à jour via sudo apt upgradeou similaire. Vous devez entrer manuellement et nettoyer l'ancienne installation de NodeJS, puis en installer une nouvelle au cas où vous souhaiteriez mettre à niveau.

Je vous recommanderais simplement de courir à la sudo apt install nodejs-legacyplace. Moins de douleur et il se met automatiquement à jour pour vous.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.