Wie funktioniert der Befehl tar für die Installation von Node js?

10

Bei der Installation von Node auf meinem Computer habe ich den folgenden Befehl verwendet, den ich auf einer Website gefunden habe.

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

Ich weiß, dass dies tar -xzfzum Extrahieren der Archive verwendet wird, aber ich möchte wissen, wie der Knoten installiert wird.

Ich habe versucht, es auf diese Weise zu installieren. Ich habe die Knotendateien /usr/localmit dem folgenden Befehl extrahiert :

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

Das funktioniert aber nicht. Kann mir jemand erklären oder helfen, den Unterschied zwischen diesen beiden Befehlen zu verstehen?

Was macht Befehl 1 mehr als Befehl 2?

Prathapa Reddy
quelle
1
Sie können jodejsüber den aptBefehl installieren : sudo apt install nodejs nodejs-legacy.
pa4080

Antworten:

24

Die Tarball-Verzeichnisstruktur sieht folgendermaßen aus:

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

Wenn Sie dieses Archiv ohne weitere Optionen extrahieren /usr/local, erhalten Sie Folgendes:

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

Daher wird ein neues Verzeichnis erstellt /usr/localund die Dateien werden dort gespeichert.

Jedoch mit --strip-components=1, eine Verzeichniskomponente aus dem extrahierten Pfad entfernt wird, so node-v6.10.1-linux-x64/bin/wird , bin/und node-v6.10.1-linux-x64/bin/npmwird zu 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/

Und /usr/local/binist bereits in PATH, so dass Sie nichts anderes tun müssen, um npmund auszuführen node.

muru
quelle
14

Dies ist eine coole (aber nervige) Art, NodeJS zu installieren.

Wenn Sie tar tf /usr/save/node-v4.2.1-linux-x64.tar.gzdie Datei ausführen , wird Folgendes angezeigt:

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/

Grundsätzlich bedeutet dies, dass beim Extrahieren dieses Tar-Archivs in einen Ordner extrahiert wird, der node-v4.2.1-linux-x64mit all diesen Unterordnern (und der darin enthaltenen Knoteninstallation) aufgerufen wird . Sie können diese Extraktion sogar ausprobieren, um eine bessere Vorstellung zu erhalten:

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

Wenn Sie ausführen ls, wird ein node-v4.2.1-linux-x64Ordner angezeigt.

Tut jetzt --strip-components 1etwas Interessantes zum Extraktionsprozess. Von man tar:

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

Grundsätzlich bedeutet dies, dass beim tarExtrahieren Ihres Archivs so getan wird, als wäre der node-v4.2.1-linux-x64Ordner nicht vorhanden. Stattdessen ist es Extrakt geht bin/, share/und alle anderen Ordner direkt.

In der Tat können Sie es versuchen:

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

Wenn Sie ausführen ls, sehen Sie, dass kein node-v4.2.1-linux-x64Ordner mehr vorhanden ist . Es ist einfach bin/, include/, lib/, und share/(alle zufällig Ordner in /usr/local/).

Ihr zweiter Befehl hätte nicht funktioniert, da er nur den node-v4.2.1-linux-x64Ordner extrahiert hätte /usr/local(wenn er überhaupt ausgeführt worden wäre). Wenn Sie ausführen ls /usr/local, wird dieser Ordner möglicherweise sogar angezeigt. Es ist nutzlos, zögern Sie nicht mit zu löschen rm. Lesen Sie weiter, warum es nutzlos ist ...


Nachdem wir erklärt haben, wie der Befehl tar funktioniert, können wir erklären, wie dieser installiert wird.

Jedes Linux-System hat eine sogenannte $PATHVariable, die bestimmt, wo ausführbare Dateien gespeichert werden. Unter diesen Orten ist /usr/local/bin. Wenn Sie diese Binärdatei im Inneren extrahieren /usr/local(was in Ihren Installationsanweisungen sicher steht), wird die NodeJS-Binärdatei gemäß der Vorgehensweise beim Extrahieren geschrieben /usr/local/bin/node. In ähnlicher Weise werden alle Bibliotheken zum lokalen Bibliotheksordner hinzugefügt und alles geht so ziemlich dahin, wo es hingehört.

Die Einschränkung (und warum dies ärgerlich ist) ist, dass Sie aptnicht sehen, verstehen oder erkennen können, was los ist. Sie können es nicht durch sudo apt upgradeoder ähnliches aktualisieren . Sie müssen die alte NodeJS-Installation manuell bereinigen und bereinigen und dann die neue installieren, falls Sie jemals ein Upgrade durchführen möchten.

Ich würde empfehlen, dass Sie sudo apt install nodejs-legacystattdessen einfach laufen . Weniger Schmerzen und es wird automatisch für Sie aktualisiert.

Kaz Wolfe
quelle