'make install'의 반대말은 무엇입니까, 즉 Linux에서 라이브러리를 어떻게 제거합니까?


396

달리는 동안

./configure --prefix=/mingw 

이전에 실행 한 라이브러리의 MinGW / MSYS 시스템에서

'./configure --prefix=/mingw && make && make install' 

이 메시지를 보았습니다.

경고 : Vamp 플러그인 SDK 버전이 이미 설치되어 있습니다. 이전 버전을 먼저 제거하지 않고 새 버전을 설치하면 걱정과 슬픔을 예상 할 수 있습니다. (계속)

이것은 내가 걱정했다. 'make install'과 반대되는 것, 즉 Linux에서 라이브러리를 어떻게 제거합니까? '깨끗하게'작업을 수행합니까, 아니면 다른 단계가 있습니까?



1
비슷한 답변에 대해서는 askubuntu.com/questions/87111/… 을 참조하십시오. sudo make uninstall"checkinstall을 사용하여 설치 한 경우 시스템 패키지 관리 유틸리티를 사용한 설치 제거와 별도로 설치 구성 파일을 여전히 사용할 수 있지만 다른 확실한 해결책은없는 것 같습니다. "유틸리티.
Edward

7
실행 후 make install나는 make uninstall그들을 제거 할 필요가 없었 습니다. 나는 항상 사용했습니다xargs rm < install_manifest.txt
John Strood

답변:


508

make clean소스 / 빌드 트리에서 중간 또는 출력 파일을 제거합니다. 그러나 소스 / 빌드 트리에만 영향을줍니다. 파일 시스템의 나머지 부분을 건드리지 않으므로 이전에 설치된 소프트웨어를 제거하지 않습니다.

운이 좋으면 달리기 make uninstall가 작동합니다. 그러나이를 제공하는 것은 라이브러리 작성자에게 달려 있습니다. 어떤 저자는 uninstall목표를 제공하고 다른 저자는 목표를 제공 하지 않습니다.

운이 좋지 않으면 수동으로 제거해야합니다. 실행 make -n install은 소프트웨어 자체를 설치하는 데 필요한 단계를 보여 주지만 실제로는 아무것도하지 않기 때문에 도움이 될 수 있습니다. 그런 다음 해당 단계를 수동으로 되돌릴 수 있습니다.


10
+1; 다른 패키지에 의해 설치되었을 수도있는 파일을주의하십시오. 이러한 파일을 삭제하면 ( "수동으로 해당 단계를 취소하는"해석으로) 다른 패키지가 손상 될 수 있습니다. 이것이 패키지 관리자가 발명 된 이유 중 하나입니다.
멀린 모건-그레이엄

3
동일한 구성 및 컴파일 된 빌드 디렉토리를 올바르게 유지하는 경우에만 가능합니까? 따라서 대부분의 사람들이 설치 후 삭제하므로 유용하지 않습니다. 빌드 폴더를 유지했는지 여부와 패키지를 make uninstall 옵션으로 올바르게 구성했는지 여부에 관계없이 항목을 설치 제거하려고합니다. 설명 : 그가 원하는 것은 자신이 컴파일 한 작업에 적합한 패키지를 관리하는 것입니다.
Nisse

360

경우는 sudo make uninstall사용할 수 없습니다 :

데비안 기반 시스템에서는 (또는 이후 *) 대신 자동으로 설치 되는 파일 을 만들 make install수 있습니다 . 그런 다음 시스템 패키지 관리자를 사용하여 제거 할 수 있습니다 (예 : / / / ). Checkinstall 은 RPM과 같은 다른 유형의 패키지 작성도 지원합니다.sudo checkinstall.debaptsynapticaptitudedpkg

http://community.linuxmint.com/tutorial/view/162일부 기본 checkinstall 사용법debian checkinstall package 도 참조하십시오 .


* : 함께 설치 한 후이 내용을 읽으면 make install위의 지침을 따르고 dpkg -r $PACKAGE_NAME_YOU_CHOSEN나중에 할 수 있습니다 .


53
이 답변은 최고의 답변이 종종 많은 투표권을 얻지 못한다는 증거입니다. 감사! 나는 이것을 오랫동안하는 방법을 알고 싶었다. 나는 항상 "make install"을하는 것을 망설이고 거의 확실하게 제거해야한다는 것을 알고 있기 때문이다.
doug65536

1
또한 LFS 책에는 패키지 관리 시스템에 대한 정보가 있습니다. 직접 설정해야하기 때문입니다. 이런 종류의 일을 더 잘 수행하는 데 도움이되는 정보가 있어야합니다 (보다 깨끗하고 일반적인 것). 설치되는 내용을 듣고 나서 시작할 때 모든 파일 또는 그와 유사한 것을 삭제하는 스크립트를 작성하는 스크립트가 있습니다.
Nisse

13
대신에 이미 make install사용하기 전에 실행했지만, 이것은 나를 위해 아름답게 작동했습니다 checkinstall.
LukeGT

9
checkinstall이 훌륭한 답변을 위해 패키지 를 설치하십시오 .
quimnuss

1
사용자 "LukeGT"가 언급 한 것과 유사하게, 설치 구성 파일을 사용할 수 없지만 설치 프로그램 파일이있는 경우 해당 파일을 사용하여 컴파일 및 설치할 수 있으며 checkinstall기존 파일과 동일한 설정으로 새 컴파일을 수행 한 경우 설치된 패키지를 설치 제거합니다 와 함께 checkinstall이전에 설치 한 파일을 제거해야합니다.
Edward

62

당신이 있다면 manifest 에 설치된 모든 파일을 나열 파일 make install내가 다른 답변에서이이 명령을 실행할 수를 :

cat install_manifest.txt | xargs echo rm | sh

sudo make install설치 제거에 sudo를 추가해야하는 경우 :

cat install_manifest.txt | xargs echo sudo rm | sh

4
나는 이것이 어떤 upvotes도 얻지 못한 것을보고 놀랐다. 다른 옵션이 작동하지 않을 때 시스템에서 파일을 제거했습니다. 제 경우에는 프로그램의 버전이 숫자로 시작하지 않아서 checkinstall이 deb를 만들 수 없었습니다. 이것은 잘 작동했습니다.
DWils

3
@ DWils 나는 그것이 매우 위험하기 때문에 더 많은 투표를받지 못했다고 생각합니다. 또한 xargs echo rm | sh? 이것을 제안한 사람이 쉘 사용에 대해 특별히 경험이 없거나 지식이없는 것은 분명합니다.
fstd

4
(참조, 그것은 쉘에 의해 해석 (다음은 불량 'RM의 실행 중이되는 파일 이름의 모든 문자에 발프 것이다!), 또한 그 쉘 확장의 모든 종류를 할 것입니다. 다만이 경우 발생하는 상상 install_manifest.txt별표 (*)를 포함 ... rm *쉘로 파이프됩니다.) 이러한 이유로 하향 조정됩니다.
fstd

@fstd 아주 그렇습니다. 평소와 같이 이런 종류의 답변은 신중하게 사용해야합니다. 이 명령을 실행하기 전에 매니페스트 파일을 확인하십시오. 그러나 쉘을 사용하고 있다면 내가하는 일을 알고 있다고 가정합니다.
3

install_manifest.txt가능할 것으로 예상 되는 상황을 설명 할 수 있습니까 ?
einpoklum 2016 년

28

문제의 프로그램의 makefile / configure 스크립트 / autofoo 마법이 얼마나 잘 적용되는지에 따라 다음이 문제를 해결할 수 있습니다.

make uninstall

문제는 설치 한 버전의 소스 트리에서 설치에 사용한 것과 정확히 동일한 구성으로이를 실행해야한다는 것입니다.


19

"make install"후 제거하는 방법

방법 # 1 (제거)

1 단계 : 당신은이 단계를 수행 할 필요가 삭제 한 경우 빌드 디렉토리를 변경 / 어떤 식 으로든 : 다운로드 및 메이크업 / 메이크업은 사용하여 설치할 정확한을 당신이 전에했던 것처럼 동일한 절차를.

2 단계 : 제거를 시도하십시오.

cd $SOURCE_DIR 
sudo make uninstall

경우 이 작업이 성공하면 모든 작업이 완료된다. 편집증 환자라면 "방법 # 3" 의 단계를 시도하여 make uninstall파일을 놓치지 않았 는지 확인할 수 있습니다.

방법 # 2 (checkinstall-데비안 기반 시스템에만 해당)

프로세스 개요

데비안 기반 시스템 (예 : Ubuntu) .deb에서는라는 도구를 사용하여 패키지를 매우 쉽게 만들 수 있습니다 checkinstall. 그런 다음 .deb 패키지를 설치하면 (데비안 시스템은 패키지의 모든 부분이 실제로 설치되었음을 알게됩니다.) 패키지 관리자가 시스템을 올바르게 정리할 수 있도록 패키지를 제거합니다.

단계별

sudo apt-get -y install checkinstall
cd $SOURCE_DIR 
sudo checkinstall

이 시점 checkinstall에서 패키지 이름을 묻는 메시지가 나타납니다. 조금 설명적인 내용을 입력하고 잠시 후에 사용하므로 참고하십시오. 또한 무시할 수있는 몇 가지 데이터를 추가하라는 메시지가 표시됩니다. 허용되지 않는 버전에 대해 불평하는 경우 다음과 같은 합리적인 것을 입력하십시오 1.0. 완료되면 설치하고 마지막으로 제거 할 수 있습니다.

sudo dpkg -i $PACKAGE_NAME_YOU_ENTERED 
sudo dpkg -r $PACKAGE_NAME_YOU_ENTERED

방법 # 3 (install_manifest.txt)

파일 install_manifest.txt이 소스 디렉토리에 존재하면 설치시 작성한 모든 단일 파일의 파일 이름이 포함되어야합니다.

먼저 파일 목록과 모드 시간을 확인하십시오.

cd $SOURCE_DIR 
sudo xargs -I{} stat -c "%z %n" "{}" < install_manifest.txt

오류0으로 표시되고 나열된 파일의 모드 시간이 설치 시간 또는 이후에 있어야합니다 . 모두 OK이면 한 번에 삭제할 수 있습니다.

cd $SOURCE_DIR 
mkdir deleted-by-uninstall
sudo xargs -I{} mv -t deleted-by-uninstall "{}" < install_manifest.txt

사용자 Merlyn 모건 - 그레이엄 그러나 (그대로 여기에 복사)를 염두에 두어야하는 것이이 방법에 대한 심각한 통지가 있습니다 . "다른 패키지가 설치되었을 수 있습니다 파일을 조심 간단히 이러한 파일을 삭제하는 [...] 수 다른 꾸러미를 끊으십시오. " . 그것이 우리가 deleted-by-uninstall디렉토리를 만들고 파일을 삭제하는 대신 파일을 이동 한 이유입니다 .


이 게시물의 99 %가 다른 답변에 존재했습니다. 방금 (쉽게) 따르기 쉬운 방법으로 유용한 모든 것을 수집하고 xarg 인수 인용 및 삭제 된 파일의 백업 유지와 같은 중요한 세부 사항에 특별한주의를 기울이려고했습니다.


방법 2가 나를 위해 일했습니다!
Aizzaac

10

make clean 일반적으로 소스 코드가 포함 된 디렉토리의 빌드 된 파일 만 정리하고 설치된 소프트웨어는 거의 만지지 않습니다.

Makefile에는 일반적으로 제거 대상이 포함되어 있지 않습니다. 일반적으로 파일을 설치 한 디렉토리에서 파일을 제거하여 직접 제거해야합니다. 예를 들어, 당신은 프로그램을 구축하고 (사용하여 설치 make install로) /usr/local당신을 통해보고 싶은 것, /usr/local/bin, /usr/local/libexec, /usr/local/share/man등, 그리고 불필요한 파일을 제거합니다. 때로는 Makefile에 uninstall대상이 포함되어 있지만 항상 그런 것은 아닙니다.

물론 일반적으로 Linux 시스템 에서는 소프트웨어를 "자동으로"제거 할 수 있는 패키지 관리자를 사용하여 소프트웨어를 설치합니다 .


8

"stow"유틸리티는이 문제를 해결하기 위해 설계되었습니다 : http://www.gnu.org/software/stow/


5
stow이 문제를 해결하기 위해 어떻게 사용 합니까?
3D1T0R

stow 유틸리티를 사용하면 동일한 시스템에서 여러 버전을 관리 할 수 ​​있도록 각 버전을 별도의 위치에 설치하는 것이 좋습니다. 이렇게하면 전체 설치 디렉토리를 삭제하는 것만 큼 간단하게 제거 할 수 있습니다.
Bruce Adams

6

불행히도 표준은 없습니다. 이것은 소스에서 설치하는 데 따르는 위험 중 하나입니다. 일부 Makefile에는 "제거"가 포함되므로

make uninstall

소스 디렉토리에서 작동 할 수 있습니다. 그렇지 않으면 수행 한 작업을 수동으로 취소해야 할 수도 있습니다 make install.

make clean 일반적으로 소스 디렉토리를 정리하여 생성 / 컴파일 된 파일 등을 제거합니다.


0

"make uninstall"을 지원하는 패키지는 많지 않지만 단계별 설치를 위해 install install DESTDIR = xxx "를 지원하는 패키지가 많이 있습니다.

이를 사용하여 소스에서 직접 설치하는 대신 설치하는 패키지를 작성할 수 있습니다. 나는 checkinstall에 운이 없었지만 fpm 은 매우 잘 작동합니다.

또한 make install을 사용하여 이전에 설치된 패키지를 제거하는 데 도움이 될 수 있습니다 . 설치된 패키지 위에 빌드 된 패키지를 강제 설치 한 다음 제거하면됩니다.

예를 들어, 나는 최근에 protobuf-3.3.0을 다루기 위해 이것을 사용했습니다. RHEL7에서 :

make install DESTDIR=dest
cd dest
fpm -f -s dir -t rpm -n protobuf -v 3.3.0 \
 --vendor "You Not RedHat" \
 --license "Google?" \
 --description "protocol buffers" \
 --rpm-dist el7 \
 -m you@youraddress.com \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 --rpm-autoreqprov \
 usr

 sudo rpm -i -f protobuf-3.3.0-1.el7.x86_64.rpm
 sudo rpm -e protobuf-3.3.0      

가능하다면 yum을 rpm보다 선호하십시오.

데비안 9 :

make install DESTDIR=dest
cd dest
fpm -f -s dir -t deb -n protobuf -v 3.3.0 \
-C `pwd` \
--prefix / \
--vendor "You Not Debian" \
--license "$(grep Copyright ../../LICENSE)" \
--description "$(cat README.adoc)" \
--deb-upstream-changelog ../../CHANGES.txt \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 usr/local/bin \
 usr/local/lib \
 usr/local/include

 sudo apt install -f *.deb
 sudo apt-get remove protobuf

가능하면 dpkg를 선호하십시오.

나는 또한 여기 에 답변을 게시했습니다


0

Make그것이 무엇을 알고 무엇을할지 말할 수 있습니다. 다음과 같은 명령을 실행하는 "install"대상이 있다고 가정하십시오.

cp <filelist> <destdir>/

일반적인 규칙에서 다음을 추가하십시오.

uninstall :; MAKEFLAGS= ${MAKE} -j1 -spinf $(word 1,${MAKEFILE_LIST}) install \
              | awk '/^cp /{dest=$NF; for (i=NF; --i>0;) {print dest"/"$i}}' \
              | xargs rm -f

비슷한 속임수가 제네릭을 할 수 있습니다 make clean.


0

전문

아래가 작동하거나 작동하지 않을 수 있습니다.이 모든 것은있는 그대로 귀하에게 있으며, 일부 손상, 데이터 손실 등의 경우에는 귀하 만이 책임이 있습니다. 그러나 나는 일이 순조로워지기를 바랍니다!

실행 취소하려면 다음 make install과 같이하십시오 (그리고 수행했습니다).

아이디어 : 스크립트가 설치되어 있는지 확인하고 간단한 bash 스크립트로 실행 취소하십시오.

  1. 사용자 정의 디렉토리에 설치하도록 빌드 디렉토리를 재구성하십시오. 나는 보통 이것을한다 : --prefix=$PWD/install. CMake의 경우 빌드 디렉토리로 이동하여 CMakeCache.txt를 열고 CMAKE_INSTALL_PREFIX 값을 수정하십시오.
  2. 프로젝트를 사용자 정의 디렉토리에 설치 make install하십시오 ( 다시 실행 하십시오).
  3. 이제 우리는 make install스크립트를 다른 곳에서 제거하려는 동일한 내용 (일반적으로 /usr/local) 으로 사용자 지정 디렉토리에 설치 한다는 가정을합니다 . 따라서 스크립트가 필요합니다. 3.1. 스크립트는 사용자 정의 디렉토리를 깨끗하게 원하는 디렉토리와 비교해야합니다. 나는 이것을 사용한다 :

anti-install.sh

RM_DIR=$1
PRESENT_DIR=$2

echo "Remove files from $RM_DIR, which are present in $PRESENT_DIR"

pushd $RM_DIR

for fn in `find . -iname '*'`; do
#  echo "Checking $PRESENT_DIR/$fn..."
  if test -f "$PRESENT_DIR/$fn"; then
    # First try this, and check whether things go plain
    echo "rm $RM_DIR/$fn"

    # Then uncomment this, (but, check twice it works good to you).
    # rm $RM_DIR/$fn
  fi
done

popd

3.2. 이제이 스크립트를 실행하십시오 (드라 이런 실행).

bash anti-install.sh <dir you want to clean> <custom installation dir>

예를 들어 / usr / local을 정리하지 않으려면 사용자 정의 설치 디렉토리가 /user/me/llvm.build/install이고 다음과 같습니다.

bash anti-install.sh /usr/local /user/me/llvm.build/install

3.3. 명령이 당신에게 좋으면 로그를주의 깊게 확인하고 주석을 해제 rm $RM_DIR/$fn하고 다시 실행하십시오. 하지만 그만! 정말로 신중하게 확인 했습니까? 다시 확인할 수 있습니까?

지침 출처 : https://dyatkovskiy.com/2019/11/26/anti-make-install/

행운을 빕니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.