Come funziona il comando tar per l'installazione di Node js


10

Durante l'installazione di Node sul mio computer, ho utilizzato il comando seguente che ho trovato su un sito Web.

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

So che tar -xzfviene utilizzato per estrarre gli archivi ma voglio sapere come viene installato il nodo?

Ho provato a installarlo in questo modo. Ho estratto i file del nodo /usr/localusando il comando seguente,

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

Ma questo non funziona. Qualcuno può spiegare o aiutarmi a capire la differenza tra questi due comandi?

Cos'altro sta facendo il comando 1 di quello che sta facendo il comando 2?


1
È possibile installare jodejstramite aptil comando: sudo apt install nodejs nodejs-legacy.
pa4080,

Risposte:


24

La struttura della directory tarball è così:

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

Quando estrai questo archivio senza altre opzioni /usr/local, ottieni questo:

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

Quindi, viene creata una nuova directory /usr/locale qui vengono scaricati i file.

Tuttavia, con --strip-components=1, un componente di directory dal percorso estratto viene rimosso, quindi node-v6.10.1-linux-x64/bin/diventa bin/e node-v6.10.1-linux-x64/bin/npmdiventa 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/

Ed /usr/local/binè già in PATH, quindi non è necessario fare altro per eseguire npme node.


14

Questo è un modo fantastico (ma fastidioso) per installare NodeJS.

Se esegui tar tf /usr/save/node-v4.2.1-linux-x64.tar.gzil file, vedrai qualcosa del genere:

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/

Fondamentalmente, questo significa che quando si estrae questo archivio tar, verrà estratto in una cartella chiamata node-v4.2.1-linux-x64con tutte queste sottocartelle (e l'installazione del nodo) al suo interno. In effetti, puoi anche provare questa estrazione per avere un'idea migliore:

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

Se corri ls, vedrai una node-v4.2.1-linux-x64cartella.

Ora, --strip-components 1fa qualcosa di interessante per il processo di estrazione. Da man tar:

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

Fondamentalmente, questo significa che quando tarestrarrà il tuo archivio, farà finta che la node-v4.2.1-linux-x64cartella non sia lì. Invece, sta andando a estrarre bin/, share/e tutte le altre cartelle direttamente.

In effetti, puoi provarlo:

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

Se corri ls, vedrai che non c'è più una node-v4.2.1-linux-x64cartella. E 'solo bin/, include/, lib/, e share/(tutto coincidenza cartelle in /usr/local/).

Il tuo secondo comando non avrebbe funzionato perché avrebbe appena estratto la node-v4.2.1-linux-x64cartella /usr/local(se fosse stata eseguita). Se corri ls /usr/local, potresti persino vedere questa cartella in giro. È inutile, sentiti libero di eliminare con rm. Per quanto riguarda il motivo per cui è inutile, continua a leggere ...


Ora che abbiamo spiegato come funziona il comando tar, possiamo spiegare come viene installato.

Ogni sistema Linux ha qualcosa chiamato la $PATHvariabile, che determina dove sono archiviati i file eseguibili. Tra questi luoghi è /usr/local/bin. Quando si estrae quel file binario all'interno /usr/local(di cui sono sicuro ciò che dicono le istruzioni di installazione), il binario NodeJS viene scritto /usr/local/bin/nodesecondo il modo in cui vengono eseguite le estrazioni. Allo stesso modo, tutte le librerie vengono aggiunte alla cartella delle librerie locali e tutto va praticamente dove appartiene.

Ora, l'avvertimento (e perché questo è fastidioso) è che aptnon vedrà, non capirà o non capirà cosa sta succedendo. Non sarai in grado di aggiornarlo tramite sudo apt upgradeo simili. Dovresti accedere manualmente e pulire la vecchia installazione di NodeJS e quindi inserirne una nuova nel caso in cui desideri aggiornare.

Consiglierei sudo apt install nodejs-legacyinvece di correre . Meno dolore e si aggiorna automaticamente per te.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.