Tar komutu Node js'i yüklemek için nasıl çalışır?


10

Düğümü makineme kurarken, bir web sitesinde bulduğum aşağıdaki komutu kullandım.

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

tar -xzfArşivleri ayıklamak için kullanıldığını biliyorum ama düğümün nasıl kurulduğunu bilmek istiyorum?

Bu şekilde yüklemeyi denedim. Düğüm dosyalarını /usr/localaşağıdaki komutu kullanarak çıkarttım,

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

Ama bu işe yaramıyor. Birisi bu iki komut arasındaki farkı açıklayabilir veya anlamama yardımcı olabilir mi?

Komut 1, komut 2'den daha fazla ne yapıyor?


1
Sen yükleyebilirsiniz jodejsaracılığıyla aptkomuta: sudo apt install nodejs nodejs-legacy.
pa4080

Yanıtlar:


24

Tarball dizin yapısı şöyledir:

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

Bu arşivi başka bir seçenek olmadan açtığınızda /usr/local, bunu elde edersiniz:

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

Böylece, yeni bir dizin oluşturulur /usr/localve dosyalar oraya dökülür.

Bununla birlikte, --strip-components=1çıkarılan yoldan bir dizin bileşeni kaldırılır, böylece node-v6.10.1-linux-x64/bin/olur bin/ve node-v6.10.1-linux-x64/bin/npmolur 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/

Ve /usr/local/binzaten içeride PATH, yani yürütmek için başka bir şey yapmanıza gerek yok npmve node.


14

Bu, NodeJS'yi kurmanın harika (ama sinir bozucu) bir yoludur.

Eğer kaçarsan tar tf /usr/save/node-v4.2.1-linux-x64.tar.gzdosyada, böyle bir şey görürsünüz:

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/

Temel olarak, bu katran arşivini ayıkladığınızda, node-v4.2.1-linux-x64bu alt klasörlerin (ve düğüm kurulumunun) içinde adı verilen bir klasöre ayıklanacağı anlamına gelir . Aslında, daha iyi bir fikir edinmek için bu alıntıyı bile deneyebilirsiniz:

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

Çalıştırırsanız ls, bir node-v4.2.1-linux-x64klasör görürsünüz .

Şimdi, --strip-components 1çıkarma işlemi için ilginç bir şey yapıyor. Gönderen man tar:

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

Temel olarak, bu tar, arşivinizi çıkaracağınız zaman, node-v4.2.1-linux-x64klasörün orada olmadığı gibi davranacağını gösterir . Bunun yerine, bu özü gidiyor bin/, share/ve doğrudan tüm diğer klasörler.

Aslında, deneyebilirsiniz:

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

Çalıştırırsanız ls, artık bir node-v4.2.1-linux-x64klasör olmadığını görürsünüz . Sadece oluyor bin/, include/, lib/ve share/(hepsi tesadüfen içinde klasörleri /usr/local/).

İkinci komutunuz işe yaramaz çünkü node-v4.2.1-linux-x64klasörü yeni çıkardı /usr/local(eğer hiç çalıştırılsa bile). Çalıştırırsanız ls /usr/local, bu klasörün takıldığını bile görebilirsiniz. İşe yaramaz, silmekten çekinmeyin rm. Neden işe yaramazsa, okumaya devam et ...


Artık tar komutunun nasıl çalıştığını açıkladığımıza göre, bunun nasıl kurulduğunu açıklayabiliriz.

Her Linux sisteminde, $PATHyürütülebilir dosyaların nerede depolanacağını belirleyen değişken adı verilen bir şey vardır. Bu yerler arasında /usr/local/bin. İçerideki bu ikili dosyayı çıkardığınızda /usr/local(yükleme talimatlarınızın söylediklerinden eminim), NodeJS ikili dosyası, /usr/local/bin/nodeayıklamaların nasıl yapıldığına göre yazılıyor . Benzer şekilde, tüm kütüphaneler yerel kütüphane klasörüne eklenir ve hemen hemen her şey ait olduğu yere gider.

Şimdi, uyarı (ve bunun neden sinir bozucu olduğu), olup aptbiteni görmeyecek veya anlamayacak veya fark etmeyecek olmasıdır. Güncelleme yoluyla sudo apt upgradeveya benzeri bir şeyle güncellenemezsiniz . Manuel olarak girip eski NodeJS kurulumunu temizlemeniz ve yükseltmek istediğinizde yenisini koymanız gerekir.

Sadece koşmanı tavsiye ederim sudo apt install nodejs-legacy. Daha az acı ve sizin için otomatik olarak güncellenir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.