이 간단한 bash 스크립트가 내 컴퓨터를 파괴하는 이유는 무엇입니까?

이 간단한 bash 스크립트가 내 컴퓨터를 파괴하는 이유는 무엇입니까?

겉으로는 무해해 보이는 내 스크립트에 이상한 일이 일어나고 있습니다. 일련의 파일을 내 시스템의 특정 위치에 복사해야 하며 이를 수행하기 위한 다음 스크립트가 있습니다.

#!/bin/bash

# Get all the files from the file
LINES=$(cat Release-Nodejs/dependencies.txt)

# Copy each file to its location as indicated in the file
for LINE in ${LINES}
do
    LIBRARY=$(basename ${LINE})
    LIBRARY=Release-Nodejs/${LIBRARY}
    LIB_PATH=$(dirname ${LINE})
    echo -e "Copying \e[38;5;10m${LIBRARY}\e[0m to \e[38;5;11m${LIB_PATH}\e[0m"
    cp ${LIBRARY} ${LIB_PATH}
done

스크립트는 파일에서 파일과 위치를 가져오고 dependencies.txt해당 내용은 다음과 같습니다.

/usr/lib/x86_64-linux-gnu/libnode.so.72
/lib/x86_64-linux-gnu/libgcc_s.so.1
/lib/x86_64-linux-gnu/libpthread.so.0
/lib/x86_64-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libz.so.1
/usr/lib/x86_64-linux-gnu/libbrotlidec.so.1
/usr/lib/x86_64-linux-gnu/libbrotlienc.so.1
/usr/lib/x86_64-linux-gnu/libcares.so.2
/usr/lib/x86_64-linux-gnu/libnghttp2.so.14
/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
/usr/lib/x86_64-linux-gnu/libssl.so.1.1
/usr/lib/x86_64-linux-gnu/libicui18n.so.67
/usr/lib/x86_64-linux-gnu/libicuuc.so.67
/lib/x86_64-linux-gnu/libdl.so.2
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/lib/x86_64-linux-gnu/libm.so.6
/usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1
/usr/lib/x86_64-linux-gnu/libicudata.so.67

해당 줄을 주석 처리하면 다음과 같은 결과를 cp ${LIBRARY} ${LIB_PATH}얻습니다.

스크립트 출력

그래서 나는 파일 이름과 경로를 올바르게 얻고 있음을 알고 있습니다. 해당 줄의 주석 처리를 제거 cp ${LIBRARY} ${LIB_PATH}하고 스크립트를 실행 하면 sudo스크립트가 내 시스템을 중단시킵니다.(그런데 가상 머신에서 테스트 중이므로 무해합니다.). 이렇게 하면 화면이 검게 변하고 가상 머신 창을 강제로 닫아야 합니다. 그런 다음 가상 머신을 다시 실행하려고 하면 다음과 같은 메시지가 나타납니다.

죽음의 시스템

UBUNTU를 완전히 다시 설치해야 했습니다.

각 파일에 대해 명령줄에서 수동으로 수행할 수 있고 cp아무 문제도 발생하지 않고 파일이 대상에 복사되기 때문에 이런 일이 발생하는 이유가 궁금합니다.


편집하다:

댓글 중 하나로XY 문제, 제가 ​​해결하려고 하는 문제는 내 컴퓨터에 기본 nodejs 모듈을 만들고 있는데, 이 모듈은 node v12.18.1해당 컴퓨터에 있고 사용해야 하며 node v 10.19.0대상 컴퓨터에서 노드 버전을 업데이트하거나 설치할 방법이 전혀 없다는 것입니다. 다른 것에는 종속성 패키지가 포함됩니다.

실행하면 ldd mymodule.node다음을 얻습니다.

linux-vdso.so.1 (0x00007ffe878c6000)
libnode.so.72 => /usr/lib/x86_64-linux-gnu/libnode.so.72 (0x00007f9bd34fb000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9bd34e0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9bd34be000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9bd32d4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9bd5b1e000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9bd32b7000)
libbrotlidec.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007f9bd32a9000)
libbrotlienc.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlienc.so.1 (0x00007f9bd3215000)
libcares.so.2 => /usr/lib/x86_64-linux-gnu/libcares.so.2 (0x00007f9bd31fe000)
libnghttp2.so.14 => /usr/lib/x86_64-linux-gnu/libnghttp2.so.14 (0x00007f9bd31d2000)
libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f9bd2ef5000)
libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f9bd2e61000)
libicui18n.so.67 => /usr/lib/x86_64-linux-gnu/libicui18n.so.67 (0x00007f9bd2b4f000)
libicuuc.so.67 => /usr/lib/x86_64-linux-gnu/libicuuc.so.67 (0x00007f9bd2961000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9bd295b000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9bd277a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9bd262b000)
libbrotlicommon.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007f9bd2608000)
libicudata.so.67 => /usr/lib/x86_64-linux-gnu/libicudata.so.67 (0x00007f9bd0aed000)

그렇기 때문에 나는 이 문제에 대해 내가 원하는 것을 하려고 노력하고 있습니다. 여기서 진짜 질문은 다음과 같습니다..node대상에서 아무것도 업데이트하지 않고 배포할 수 있도록 모듈 에 이러한 종속성을 포함하려면 어떻게 해야 합니까 ?

나는 이 모든 것을 모듈에 연결하고 모든 것을 포함하고 시스템 라이브러리에 의존하지 않는 단 하나의 .node 파일을 갖고 싶지만 그것이 가능하다고 생각하지 않습니다. 그렇지 않습니까?

답변1

"mkdir -p /usr/local/lib/nodejs" 디렉터리를 만들고 LIBPATH를 "export LIBPATH=/usr/local/lib/nodejs/"로 설정하는 것을 제외하고 다시 시도할 수 있습니다. 하지만 시작하기 전에 Linux에 Nodejs를 설치하는 방법을 읽어보는 것이 좋습니다. 예를 들어 "https://github.com/nodejs/help/wiki/Installation#how-to-install-nodejs-via-binary-archive-on-linux"를 참조하세요. "/usr/local"에서 수행됩니다. /lib/nodejs". 디렉토리가 생성되면 해야 할 유일한 작업은 바이너리를 다운로드하여 "/usr/local/lib/nodejs" 디렉토리에 추출하는 것입니다.

관련 정보