노드 js 설치시 tar 명령의 작동 방식


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통해 설치할 수 있습니다 .. aptsudo 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.