Bagaimana cara kerja perintah tar untuk menginstal Node js


10

Saat memasang Node di mesin saya, saya menggunakan perintah di bawah ini yang saya temukan di situs web.

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

Saya tahu itu tar -xzfdigunakan untuk mengekstrak arsip tetapi saya ingin tahu bagaimana simpul diinstal?

Saya mencoba menginstalnya dengan cara ini. Saya telah mengekstrak file simpul /usr/localmenggunakan perintah di bawah ini,

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

Tetapi ini tidak berhasil. Adakah yang bisa menjelaskan atau membantu saya memahami perbedaan antara kedua perintah ini?

Apa yang sedang dilakukan perintah 1 daripada yang dilakukan perintah 2?


1
Anda dapat menginstal jodejsmelalui aptperintah: sudo apt install nodejs nodejs-legacy.
pa4080

Jawaban:


24

Struktur direktori tarball adalah seperti ini:

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

Saat Anda mengekstrak arsip ini tanpa opsi lain /usr/local, Anda mendapatkan ini:

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

Jadi, direktori baru dibuat /usr/local, dan file-file dibuang di sana.

Namun, dengan --strip-components=1, satu komponen direktori dari jalur yang diekstraksi dihapus, jadi node-v6.10.1-linux-x64/bin/menjadi bin/dan node-v6.10.1-linux-x64/bin/npmmenjadi 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/

Dan /usr/local/binsudah masuk PATH, jadi Anda tidak perlu melakukan apa pun untuk mengeksekusi npmdan node.


14

Ini semacam cara yang keren (namun menjengkelkan) untuk menginstal NodeJS.

Jika Anda menjalankan tar tf /usr/save/node-v4.2.1-linux-x64.tar.gzfile tersebut, Anda akan melihat sesuatu seperti ini:

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/

Pada dasarnya, ini berarti bahwa ketika Anda mengekstrak arsip tar ini, itu akan mengekstrak ke folder yang disebut node-v4.2.1-linux-x64dengan semua subfolder ini (dan instalasi node) di dalamnya. Bahkan, Anda bahkan dapat mencoba ekstraksi ini untuk mendapatkan ide yang lebih baik:

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

Jika Anda menjalankan ls, Anda akan melihat node-v4.2.1-linux-x64folder.

Sekarang, --strip-components 1lakukan sesuatu yang menarik untuk proses ekstraksi. Dari man tar:

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

Pada dasarnya, ini berarti bahwa ketika tarakan mengekstrak arsip Anda, itu akan berpura-pura seolah node-v4.2.1-linux-x64folder itu tidak ada. Sebaliknya, itu akan mengekstrak bin/, share/dan semua folder lainnya secara langsung.

Bahkan, Anda bisa mencobanya:

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

Jika Anda menjalankan ls, Anda akan melihat tidak ada lagi node-v4.2.1-linux-x64folder. Hanya saja bin/, include/, lib/, dan share/(semua kebetulan folder di /usr/local/).

Perintah kedua Anda tidak akan berhasil karena hanya akan mengekstrak node-v4.2.1-linux-x64folder ke /usr/local(jika itu berjalan sama sekali). Jika Anda menjalankan ls /usr/local, Anda bahkan mungkin melihat folder ini berkeliaran. Tidak ada gunanya, jangan ragu untuk menghapus rm. Adapun mengapa itu tidak berguna, terus membaca ...


Sekarang kita telah menjelaskan bagaimana perintah tar bekerja, kita dapat menjelaskan bagaimana ini terinstal.

Setiap sistem Linux memiliki sesuatu yang disebut $PATHvariabel, yang menentukan di mana file yang dapat dieksekusi disimpan. Di antara tempat-tempat ini adalah /usr/local/bin. Ketika Anda mengekstrak biner di dalamnya /usr/local(yang saya yakin adalah apa yang dikatakan oleh instruksi pemasangan Anda), biner NodeJS sedang ditulis /usr/local/bin/nodesesuai dengan bagaimana ekstraksi dilakukan. Demikian pula, semua perpustakaan sedang ditambahkan ke folder perpustakaan lokal dan semuanya berjalan di tempatnya.

Sekarang, peringatannya (dan mengapa ini menjengkelkan) adalah apttidak akan melihat atau memahami atau menyadari apa yang sedang terjadi. Anda tidak akan dapat memperbaruinya melalui sudo apt upgradeatau serupa. Anda harus masuk dan membersihkan instalasi NodeJS yang lama secara manual dan kemudian memasang yang baru jika Anda ingin memutakhirkan.

Saya akan merekomendasikan Anda hanya menjalankan sudo apt install nodejs-legacysaja. Lebih sedikit rasa sakit, dan secara otomatis memperbarui untuk Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.