'Make install' komutunun tersi nedir, yani Linux'ta bir kütüphaneyi nasıl kaldırırsınız?


396

Koşarken

./configure --prefix=/mingw 

Daha önce çalıştırdığım bir kütüphane için MinGW / MSYS sisteminde

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

Bu mesajla karşılaştım:

UYARI: Vamp eklentisi SDK'sının bir sürümü zaten yüklü. Önce eski sürümü kaldırmadan yeni bir sürüm yüklerseniz endişeler ve üzüntüler bekleyin. (Devam ediyor)

Bu beni endişelendirdi. 'Make install' komutunun tersi nedir, yani bir kütüphane Linux'ta nasıl kaldırılır? İşi 'temizleyecek' mi yoksa başka adımlar var mı?



1
Benzer yanıtlar için askubuntu.com/questions/87111/… adresine bakın , ana çözüm şu anda sudo make uninstallkurulum yapılandırma dosyaları hala mevcutsa, ancak "checkinstall" ile yüklendiyse sistem paketi yönetim yardımcı programını kaldırmanın dışında başka hiçbir belirgin çözüm gibi görünmektedir. " Yarar.
Edward

7
Koştuktan sonra onları çıkarmaya make installhiç ihtiyacım olmadı make uninstall. Her zaman kullandımxargs rm < install_manifest.txt
John Strood

Yanıtlar:


508

make cleanara / çıktı dosyalarını kaynak / derleme ağacınızdan kaldırır. Ancak, yalnızca kaynak / yapı ağacını etkiler; dosya sisteminin geri kalanına dokunmaz ve bu nedenle daha önce kurulmuş olan yazılımları kaldırmaz.

Eğer şanslıysan, koşuyorsun make uninstall işe yarayacaktır. Ancak bunu sağlamak kütüphanenin yazarlarına bağlıdır; bazı yazarlar bir uninstallhedef sağlarken , diğerleri bunu sunmaz.

Şanslı değilseniz, manuel olarak kaldırmanız gerekir. Çalışmak yardımcı make -n installolabilir, çünkü yazılımın kendini kurmak için atacağı adımları gösterecektir, ancak aslında hiçbir şey yapmaz. Daha sonra bu adımları manuel olarak tersine çevirebilirsiniz.


10
+ 1; Diğer paketler tarafından da yüklenmiş olabilecek dosyalara dikkat edin. Bu dosyaların silinmesi ("bu adımları manuel olarak tersine çevirmenin" bir yorumu) diğer paketleri bozabilir. Paket yöneticilerinin icat edilmesinin nedeni (birçok nedenden biri).
Merlyn Morgan-Graham

3
bu yalnızca aynı yapılandırılmış ve derlenmiş derleme dizinini doğru tutarsanız mümkün olabilir? bu yüzden çoğu insan kurulumdan sonra silebileceği için çok kullanışlı değil. Derleme klasörünü tutuyor ve paket kaldır kaldırma seçeneği için doğru yapılandırılmış olsun, kaldırıyor. Açıklama: Yapmak istediği, derlediği şeyler için çalışan paketler için bir tür yönetim sağlamaktır.
Nisse

360

Kullanılamıyorsa sudo make uninstall:

Debian tabanlı bir sistemde, (veya sonra *) yapmak yerine otomatik olarak yüklenen bir dosya oluşturmak için make installçalıştırabilirsiniz . Daha sonra sistem paket yöneticisini (örn. / / / ) Kullanarak kaldırabilirsiniz .sudo checkinstall.debaptsynapticaptitudedpkgCheckinstall ayrıca RPM gibi başka paket türleri oluşturmayı da destekler.

Ayrıca bkz. Http://community.linuxmint.com/tutorial/view/162 ve bazı temel checkinstall kullanımı ve debian checkinstall paketi .


*: Yükledikten sonra bunu okuyorsanız make install, yukarıdaki talimatları izleyebilir ve dpkg -r $PACKAGE_NAME_YOU_CHOSENdaha sonra yapabilirsiniz.


53
Bu cevap, en iyi cevapların çoğu zaman çok fazla oy almadığının kanıtıdır. Teşekkürler! Bunu uzun süre nasıl yapacağımı bilmek istedim. Ben her zaman bir "make install" yapmak için tereddüt çünkü neredeyse kesinlikle kaldırmak için bir ağrı olacağını biliyorum.
doug65536

1
Ayrıca LFS kitabının paket yönetim sistemleri hakkında bazı bilgileri vardır, çünkü kendiniz ayarlamanız gerekir. Buradaki bilgiler, bu tür şeylerin daha iyi çalışmasını sağlamak için yardımcı olmalıdır (daha temiz, daha genel). Yüklenenleri dinleyen ve daha sonra başlatıldığında tüm bu dosyaları silen bir komut dosyası oluşturan komut dosyaları vardır.
Nisse

13
Bunun yerine make installkullanmadan önce koşmuş olmama rağmen bu benim için güzel çalıştı checkinstall.
LukeGT

9
checkinstallÇalışmak için bu mükemmel cevap için paketi yükleyin .
quimnuss

1
"LukeGT" kullanıcısının yaptığı gibi, kurulum yapılandırma dosyaları mevcut değilse ancak yükleyici dosyaları varsa, bunlar derlenebilir ve yüklenebilir checkinstallve yeni derleme eskisiyle aynı ayarlarla yapılırsa, yüklü paket kaldırılır ile checkinstallönceden yüklenmiş dosyaları kaldırmalısınız.
Edward

62

Birlikte manifestyüklenen tüm dosyaları listeleyen bir dosyanız make installvarsa, başka bir yanıttan aldığım bu komutu çalıştırabilirsiniz:

cat install_manifest.txt | xargs echo rm | sh

Varsa sudo make install, kaldırmanıza bir sudo eklemeniz gerekir:

cat install_manifest.txt | xargs echo sudo rm | sh

4
Bunun hiç oy almadığını görünce şaşırdım. Bu, başka seçenek çalışmadığında dosyaları sistemden kaldırmak için çalıştı. Benim durumumda, checkinstall bir hata oluşturamadı çünkü programın sürümü bir sayı ile başlamadı ve bu nedenle oluşturulamadı. Bu güzel çalıştı.
DWils

3
@DWils Sanırım daha fazla oy almadı çünkü oldukça tehlikeli. Ayrıca, xargs echo rm | sh? Bunu öneren kişi, kabuğu kullanma konusunda özellikle deneyimli veya bilgili değildir.
fstd

4
(referans için, bu kabuk tarafından yorumlanır (ve daha sonra sahte 'rm en yürütülmektedir sahiptir dosya herhangi karakterlerin üzerine barf olacak!), ayrıca bu kabuk genişleme her türlü yapacağız. Sadece ne olacağını hayal install_manifest.txtbir yıldız işareti içeriyor ... rm *bir mermiye sokulacak.) Bu nedenle indirildi.
fstd

@fstd oldukça doğru. Her zamanki gibi bu tür bir cevap dikkatle kullanılmalıdır. Bu komutu çalıştırmadan önce manifest dosyasını kontrol edin. Eğer mermiyi kullanıyorsanız, ne yaptığınızı bildiğinizi varsayıyorum.
Üç

An'ın install_manifest.txtvarolabileceği koşulları açıklayabilir misiniz ?
einpoklum

28

Söz konusu programın makefile / configure betiği / autofoo sihrinin ne kadar iyi olduğuna bağlı olarak aşağıdakiler sorununuzu çözebilir:

make uninstall

Sorun, bunu yüklediğiniz sürümün kaynak ağacında ve yükleme için kullandığınız yapılandırma ile aynı şekilde yürütmenizdir.


19

"Make install" den sonra kaldırma

Yöntem # 1 (Kaldırma Yap)

Adım 1: Yalnızca bu adım takip etmek gerekir sildiğiniz takdirde derleme dizini değiştirilmiş / herhangi bir şekilde: İndirme ve markası / make kullanarak yüklemek tam önce yaptığınız gibi aynı prosedürü.

2.Adım: Kaldırma işlemini deneyin.

cd $SOURCE_DIR 
sudo make uninstall

Eğer bu başarılı olursa işiniz biter. Paranoyaksanız, herhangi bir dosyayı kaçırmadığınızdan emin olmak için "Yöntem # 3" adımlarını da deneyebilirsiniz make uninstall.

Yöntem # 2 (checkinstall - yalnızca debian tabanlı sistemler için)

Sürece genel bakış

Debian tabanlı sistemlerde (örn. Ubuntu) .debadlı bir aracı kullanarak kolayca bir paket oluşturabilirsiniz checkinstall. Daha sonra .deb paketini yüklersiniz (bu, debian sisteminizin paketinizin tüm parçalarının gerçekten kurulduğunu fark etmesini sağlar) ve son olarak paket yöneticinizin sisteminizi düzgün bir şekilde temizlemesini sağlamak için kaldırın.

Adım adım

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

Bu noktada checkinstallbir paket adı ister. Biraz açıklayıcı bir şey girin ve bir dakika içinde kullanacağınız için not edin. Ayrıca yok sayabileceğiniz birkaç veri daha isteyecektir. Sürümü kabul edilemez şikayet ederse sadece makul gibi bir şey girin 1.0. Tamamlandığında şunları yükleyebilir ve sonlandırabilirsiniz:

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

Yöntem # 3 (install_manifest.txt)

Eğer bir dosya install_manifest.txtKaynak dizininizde varsa, kurulumun oluşturduğu her dosyanın dosya adlarını içermelidir.

Bu yüzden önce dosya listesini ve mod zamanlarını kontrol edin:

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

Sıfır hata almalısınız ve listelenen dosyaların mod zamanları kurulum süresinde veya sonrasında olmalıdır . Her şey yolundaysa, bunları tek seferde silebilirsiniz:

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

Ancak kullanıcı Merlyn Morgan-Graham, aklınızda bulundurmanız gereken bu yöntemle ilgili ciddi bir bildirime sahiptir (burada kopyalanmıştır): "Diğer paketler tarafından da yüklenmiş olabilecek dosyalara dikkat edin. Bu dosyaları silmek [...] diğer paketleri kır. " . Bu nedenle deleted-by-uninstalldir dosyasını oluşturduk ve dosyaları silmek yerine oraya taşıdık.


Bu yazının% 99'u başka cevaplarda vardı. Ben sadece (umarım) kolay takip nasıl yararlı her şeyi topladı ve önemli ayrıntılara (xarg argümanları alıntı ve silinen dosyaların yedeklerini tutmak gibi) ekstra dikkat vermeye çalıştım.


YÖNTEM 2 benim için çalıştı!
Aizzaac

10

make clean genellikle yalnızca kaynak kodun bulunduğu dizindeki yerleşik dosyaları temizler ve yüklü yazılımlara nadiren dokunur.

Makefiles genellikle kaldırma için bir hedef içermez - dosyaları kuruldukları dizinden kaldırarak genellikle bunu kendiniz yapmanız gerekir. Örneğin, eğer bir program inşa ve (kullanarak yüklü make installiçine) /usr/localEğer bakmak isterdim, /usr/local/bin, /usr/local/libexec, /usr/local/share/man, vb ve istenmeyen dosyaları kaldırmak. Bazen bir Makefileuninstall hedef , ancak her zaman değil.

Tabii ki, genellikle bir Linux sistemine , yazılımı "otomatik olarak" kaldırabilen bir paket yöneticisi kullanarak yazılım yüklersiniz.


8

"Stow" yardımcı programı bu sorunu çözmek için tasarlanmıştır: http://www.gnu.org/software/stow/


5
stowBu sorunu çözmek için nasıl kullanılır ?
3D1T0R

İstifleme yardımcı programı, aynı makinede birden çok sürümü yönetebilmeniz için her sürümü ayrı bir konuma yüklemenizi önerir. Bunu yaparsanız, kaldırma işlemi tüm yükleme dizinini silmek kadar basit olabilir.
Bruce Adams

6

Maalesef standart yok, bu kaynaktan yüklemenin tehlikelerinden biri. Bazı Makefiles bir "kaldırma" içerir, bu yüzden

make uninstall

kaynak dizinden çalışabilir. Aksi takdirde, ne yaparsanız yapın manuel olarak geri alma meselesi olabilir make install.

make clean genellikle sadece kaynak dizini temizler - üretilen / derlenen dosyaları ve benzerlerini kaldırmak, muhtemelen peşinde olduğunuz şeyi değil.


0

Ben "make uninstall" destekleyen birkaç paket biliyorum ama destek daha birçok aşamalı yüklemeler için yükleme DESTDIR = xxx "olun.

Doğrudan kaynaktan yüklemek yerine yüklediğiniz bir paket oluşturmak için bunu kullanabilirsiniz. Checkinstall ile hiç şansım vardı ama fpm çok iyi çalışıyor.

Bu, make install kullanarak daha önce yüklenmiş bir paketi kaldırmanıza da yardımcı olabilir . Yaptığınız paketi, kurulu olanın üzerine kurmaya zorlayın ve ardından kaldırın.

Örneğin, son zamanlarda protobuf-3.3.0 ile başa çıkmak için kullandım. RHEL7'de:

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      

Mümkünse yum'u rpm'ye tercih edin.

Debian9'da:

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

Mümkün olan yerlerde dpkg tercih edin.

Ben de buraya cevap gönderdim


0

Makesize ne bildiğini ve ne yapacağını söyleyebilir. Diyelim ki aşağıdaki komutları yürüten bir "yükleme" hedefiniz var:

cp <filelist> <destdir>/

Genel kurallarınıza şunu ekleyin:

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

Benzer bir hile jenerik yapabilir make clean.


0

önsöz

Aşağıda işe yarayıp yaramayabilir, hepsi olduğu gibi verilir, siz ve sadece hasar, veri kaybı ve benzeri durumlarda yalnızca siz sorumlusunuz. Ama umarım işler yolunda gider!

Geri almak için make installbunu yaptım (ve yaptım):

Fikir: hangi betiğin yüklendiğini kontrol edin ve bunu basit bash betiğiyle geri alın.

  1. Bazı özel dizinlere kurmak için derlemenizi yeniden yapılandırın. Bunu genelde: --prefix=$PWD/install. CMake için, yapı dizininize gidebilir, CMakeCache.txt dosyasını açabilir ve CMAKE_INSTALL_PREFIX değerini düzeltebilirsiniz.
  2. Projeyi özel dizine yükleyin (sadece make installtekrar çalıştırın ).
  3. Şimdi, make installkomut dosyasının başka bir yerden kaldırmak istediğiniz içeriklere (genellikle /usr/local) özel bir dizine yüklediği varsayımından hareket ediyoruz . Yani bir senaryoya ihtiyacımız var. 3.1. Komut dosyası, özel dizini, temiz olmasını istediğiniz diz ile karşılaştırmalıdır. Bunu kullanıyorum:

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. Şimdi sadece bu komut dosyasını çalıştırın (kuru çalışmaya devam edecek)

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

Örneğin, / usr / local'ı temizlemek istemezsiniz ve özel kurulum yönünüz /user/me/llvm.build/install, o zaman olurdu

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

3.3. Komutlar size iyi geliyorsa, günlüğü dikkatlice kontrol edin, açın rm $RM_DIR/$fnve tekrar çalıştırın. Ama dur! Gerçekten dikkatlice kontrol ettin mi? Tekrar kontrol edilebilir mi?

Talimatlara kaynak: https://dyatkovskiy.com/2019/11/26/anti-make-install/

İyi şanslar!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.