Lệnh tar hoạt động như thế nào để cài đặt Node js


10

Khi cài đặt Node trên máy của tôi, tôi đã sử dụng lệnh dưới đây mà tôi tìm thấy trên một trang web.

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

Tôi biết rằng nó tar -xzfđược sử dụng để trích xuất tài liệu lưu trữ nhưng tôi muốn biết làm thế nào để cài đặt nút?

Tôi đã thử cài đặt nó theo cách này. Tôi đã trích xuất các tệp nút để /usr/localsử dụng lệnh dưới đây,

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

Nhưng điều này không làm việc. Ai đó có thể giải thích hoặc giúp tôi hiểu sự khác biệt giữa hai lệnh này không?

Lệnh 1 đang làm gì hơn lệnh 2 đang làm gì?


1
Bạn có thể cài đặt jodejsthông qua aptlệnh : sudo apt install nodejs nodejs-legacy.
pa4080

Câu trả lời:


24

Cấu trúc thư mục tarball là như thế này:

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

Khi bạn trích xuất kho lưu trữ này mà không có bất kỳ tùy chọn nào khác /usr/local, bạn sẽ nhận được:

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

Vì vậy, một thư mục mới được tạo /usr/localvà các tệp bị bỏ ở đó.

Tuy nhiên, với --strip-components=1, một thành phần thư mục từ đường dẫn trích xuất được loại bỏ, do đó node-v6.10.1-linux-x64/bin/trở thành bin/node-v6.10.1-linux-x64/bin/npmtrở thành 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/

/usr/local/binđã có sẵn PATH, vì vậy bạn không cần phải làm gì khác để thực thi npmnode.


14

Đây là một cách hay để cài đặt NodeJS.

Nếu bạn chạy tar tf /usr/save/node-v4.2.1-linux-x64.tar.gztrên tệp, bạn sẽ thấy một cái gì đó như thế này:

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/

Về cơ bản, điều này có nghĩa là khi bạn trích xuất kho lưu trữ tar này, nó sẽ trích xuất vào một thư mục được gọi node-v4.2.1-linux-x64với tất cả các thư mục con này (và cài đặt nút) bên trong nó. Trên thực tế, bạn thậm chí có thể thử trích xuất này để có ý tưởng tốt hơn:

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

Nếu bạn chạy ls, bạn sẽ thấy một node-v4.2.1-linux-x64thư mục.

Bây giờ, --strip-components 1làm một cái gì đó thú vị cho quá trình khai thác. Từ man tar:

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

Về cơ bản, điều này có nghĩa là khi tartrích xuất kho lưu trữ của bạn, nó sẽ giả vờ như node-v4.2.1-linux-x64thư mục không có ở đó. Thay vào đó, nó sẽ giải nén bin/, share/và tất cả các thư mục khác trực tiếp.

Trong thực tế, bạn có thể thử nó:

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

Nếu bạn chạy ls, bạn sẽ thấy không còn node-v4.2.1-linux-x64thư mục. Nó chỉ bin/, include/, lib/, và share/(tất cả tình cờ thư mục trong /usr/local/).

Lệnh thứ hai của bạn sẽ không hoạt động vì nó sẽ chỉ trích xuất node-v4.2.1-linux-x64thư mục /usr/local(nếu nó thậm chí còn chạy). Nếu bạn chạy ls /usr/local, bạn thậm chí có thể thấy thư mục này treo xung quanh. Thật vô dụng, cứ thoải mái xóa đi rm. Về việc tại sao nó vô dụng, hãy tiếp tục đọc ...


Bây giờ chúng tôi đã giải thích cách hoạt động của lệnh tar, chúng tôi có thể giải thích cách cài đặt này.

Mọi hệ thống Linux đều có một thứ gọi là $PATHbiến, xác định nơi lưu trữ các tệp thực thi. Trong số những nơi này là /usr/local/bin. Khi bạn trích xuất nhị phân đó bên trong /usr/local(mà tôi tự tin là những gì hướng dẫn cài đặt của bạn nói), nhị phân NodeJS sẽ được ghi /usr/local/bin/nodetheo cách trích xuất được thực hiện. Tương tự, tất cả các thư viện đang được thêm vào thư mục thư viện cục bộ và mọi thứ gần như chỉ thuộc về nơi nó thuộc về.

Bây giờ, cảnh báo (và tại sao điều này gây phiền nhiễu) là aptsẽ không nhìn thấy hoặc hiểu hoặc không nhận ra điều gì đang xảy ra. Bạn sẽ không thể cập nhật thông qua sudo apt upgradehoặc tương tự. Bạn cần phải tự đi vào và dọn dẹp cài đặt NodeJS cũ và sau đó cài đặt cái mới trong trường hợp bạn muốn nâng cấp.

Tôi muốn khuyên bạn chỉ nên chạy sudo apt install nodejs-legacythay thế. Ít đau hơn, và nó tự động cập nhật cho bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.