คำสั่ง tar ทำงานอย่างไรสำหรับการติดตั้ง Node js


10

เมื่อทำการติดตั้งโหนดบนเครื่องของฉันฉันใช้คำสั่งด้านล่างที่ฉันพบบนเว็บไซต์

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

ฉันรู้ว่าtar -xzfใช้เพื่อดึงข้อมูลที่เก็บถาวร แต่ฉันต้องการทราบวิธีการติดตั้งโหนดได้อย่างไร

ฉันลองติดตั้งด้วยวิธีนี้ ฉันได้แตกไฟล์โหนดเพื่อ/usr/localใช้คำสั่งด้านล่าง

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

แต่มันไม่ได้ผล ใครสามารถอธิบายหรือช่วยให้ฉันเข้าใจความแตกต่างระหว่างคำสั่งทั้งสองนี้ได้หรือไม่?

คำสั่ง 1 กำลังทำอะไรมากกว่าคำสั่ง 2 ที่กำลังทำอยู่


1
คุณสามารถติดตั้งjodejsผ่านคำสั่ง:apt sudo apt install nodejs nodejs-legacy
pa4080

คำตอบ:


24

โครงสร้างไดเรกทอรี tarball เป็นดังนี้:

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

เมื่อคุณแตกไฟล์เก็บถาวรนี้โดยไม่มีตัวเลือกอื่น/usr/localคุณจะได้รับสิ่งนี้:

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

ดังนั้นไดเรกทอรีใหม่จะถูกสร้างขึ้น/usr/localและไฟล์จะถูกทิ้งที่นั่น

อย่างไรก็ตามด้วย--strip-components=1องค์ประกอบไดเรกทอรีหนึ่งจากเส้นทางที่แยกจะถูกลบออกจึงnode-v6.10.1-linux-x64/bin/กลายเป็นbin/และnode-v6.10.1-linux-x64/bin/npmกลายเป็น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มีอยู่แล้วในPATHเพื่อให้คุณไม่จำเป็นต้องทำอะไรอย่างอื่นในการดำเนินการและnpmnode


14

นี่เป็นวิธีที่ยอดเยี่ยมในการติดตั้ง NodeJS

หากคุณเรียกใช้tar tf /usr/save/node-v4.2.1-linux-x64.tar.gzไฟล์คุณจะเห็นสิ่งนี้:

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/

โดยทั่วไปหมายความว่าเมื่อคุณแตกไฟล์เก็บถาวร tar นี้มันจะแตกไปยังโฟลเดอร์ที่เรียกว่าnode-v4.2.1-linux-x64โฟลเดอร์ย่อยทั้งหมดเหล่านี้ (และการติดตั้งโหนด) ที่อยู่ด้านใน ในความเป็นจริงคุณสามารถลองใช้การแยกนี้เพื่อให้ได้แนวคิดที่ดีกว่า:

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

หากคุณเรียกใช้lsคุณจะเห็นnode-v4.2.1-linux-x64โฟลเดอร์

ตอนนี้--strip-components 1ทำสิ่งที่น่าสนใจในกระบวนการสกัด จากman tar:

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

โดยทั่วไปหมายความว่าเมื่อtarจะแยกเก็บถาวรของคุณมันจะแกล้งทำเป็นnode-v4.2.1-linux-x64โฟลเดอร์ที่ไม่ได้มี แต่มันเป็นไปได้ที่สารสกัดbin/, share/และทุกโฟลเดอร์อื่น ๆ โดยตรง

ในความเป็นจริงคุณสามารถลอง:

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

หากคุณเรียกใช้lsคุณจะเห็นว่าไม่มีnode-v4.2.1-linux-x64โฟลเดอร์อีกต่อไป มันเป็นเพียงbin/, include/, lib/และshare/(ทุกโฟลเดอร์โดยบังเอิญใน/usr/local/)

คำสั่งที่สองของคุณจะไม่ทำงานเพราะมันเพิ่งจะแตกnode-v4.2.1-linux-x64โฟลเดอร์ไป/usr/local(ถ้ามันวิ่งเลย) หากคุณเรียกใช้ls /usr/localคุณอาจเห็นโฟลเดอร์นี้ห้อยอยู่ rmมันไม่มีประโยชน์อย่าลังเลที่จะลบด้วย สำหรับสาเหตุที่ไม่มีประโยชน์ให้อ่านต่อ ...


ตอนนี้เราได้อธิบายวิธีการทำงานของคำสั่ง tar แล้วเราสามารถอธิบายวิธีการติดตั้งนี้ได้

ทุกระบบ Linux มีสิ่งที่เรียกว่า$PATHตัวแปรซึ่งกำหนดตำแหน่งที่จัดเก็บไฟล์ที่เรียกใช้งานได้ /usr/local/binในสถานที่เหล่านี้คือ เมื่อคุณแยกไบนารี่นั้นไว้ข้างใน/usr/local(ซึ่งฉันมั่นใจว่าเป็นคำแนะนำในการติดตั้งของคุณ) ไบนารี NodeJS จะถูกเขียนไป/usr/local/bin/nodeตามวิธีการแยกส่วน ในทำนองเดียวกันทุกไลบรารีจะถูกเพิ่มไปยังโฟลเดอร์ไลบรารีท้องถิ่นและทุกอย่างสวยมากเพียงแค่ไปที่มันเป็นของ

ตอนนี้ข้อแม้ (และทำไมสิ่งนี้จึงน่ารำคาญ) ก็คือว่าaptจะไม่เห็นหรือเข้าใจหรือรู้ว่าเกิดอะไรขึ้น คุณจะไม่สามารถอัปเดตผ่านทางsudo apt upgradeหรือคล้ายกัน คุณจะต้องเข้าไปด้วยตนเองและทำความสะอาดการติดตั้ง NodeJS เก่าแล้วใส่ใหม่ในกรณีที่คุณต้องการอัพเกรด

ฉันอยากจะแนะนำให้คุณเรียกใช้sudo apt install nodejs-legacyแทน ความเจ็บปวดน้อยลงและจะอัปเดตให้คุณโดยอัตโนมัติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.