Apa cara yang benar untuk menghapus aplikasi sepenuhnya?

546

Saya telah mencari di internet untuk informasi tersebut dan menemukan baris perintah yang berbeda, seperti yang berikut ini:

sudo apt-get remove application
sudo apt-get remove application*

sudo apt-get remove --purge application
sudo apt-get remove --purge application*

sudo apt-get purge application
sudo apt-get purge application*

Jadi, apa cara yang benar? Apakah perlu menggunakan "*" itu?

Setelah itu, saya juga menemukan perintah-perintah ini:

sudo updatedb
sudo locate application
sudo rm -rf (file/folder name)
pengguna48949
sumber
1
Beberapa pertanyaan Anda mungkin dijawab dalam posting ini: askubuntu.com/questions/1143/how-can-i-uninstall-software
Glutanimate
8
application*kadang-kadang dapat memberikan hasil yang tidak terduga - misalnya, jika Anda memiliki file di direktori saat ini bernama application_information, shell akan memperluasnya sebelum diteruskan ke apt-get. Jika ini terjadi dan Anda menginginkan tanda bintang, Anda dapat menggunakan application\*atau'application*'
Izkata
6
application*bahkan lebih berbahaya di mana tidak ada file di direktori saat ini: apt-getmenggunakan ekspresi reguler, tidak ada pola glob. Orang-orang hampir menghapus seluruh sistem yang mencoba untuk dihapus wine*.
Andrea Corbellini
3
Bisakah Anda menerima jawaban? Berterima kasih kepada orang-orang yang menjawab Anda.
m-ric
Baik application*juga application\*aman! Mengutip *dengan \atau ' 'hanya meningkatkan risiko, memastikan *diteruskan sebagaimana adanya apt-get(meskipun biasanya memang demikian!), Menyebabkan apt-getmenafsirkan argumen sebagai regex. Dalam regex *berarti "nol atau lebih dari karakter sebelumnya." Bentuk kesalahan yang umum adalah menghapus wine*, menghapus semua paket dengan win(bukan wine, win) di mana saja dalam nama mereka dan semua paket tergantung pada salah satu dari mereka. Lihat penjelasan ini dan kemungkinan perbaikannya . @Izkata
Eliah Kagan

Jawaban:

705
  • apt-get remove packagename

    akan menghapus binari, tetapi bukan konfigurasi atau file data paket packagename. Ini juga akan membuat dependensi terinstal dengannya pada waktu instalasi tidak tersentuh.

  • apt-get purge packagename atau apt-get remove --purge packagename

    akan menghapus tentang segala sesuatu tentang paket packagename, tetapi tidak dependensi yang diinstal dengannya saat instalasi. Kedua perintah itu setara.

    Sangat berguna ketika Anda ingin 'memulai semuanya' dengan aplikasi karena Anda mengacaukan konfigurasi. Namun, itu tidak menghapus file konfigurasi atau data yang berada di direktori home pengguna, biasanya di folder tersembunyi di sana. Tidak ada cara mudah untuk menghapusnya juga.

  • apt-get autoremove

    menghapus paket-paket yatim, yaitu paket yang diinstal yang dulu diinstal sebagai dependensi, tetapi tidak lagi. Gunakan ini setelah menghapus paket yang telah menginstal dependensi yang tidak lagi Anda minati.

  • aptitude remove packagenameatau aptitude purge packagename(juga)

    juga akan berusaha untuk menghapus paket lain yang diharuskan packagenamepada tetapi tidak diharuskan oleh paket yang tersisa. Perhatikan bahwa aptitudehanya mengingat informasi dependensi untuk paket yang telah diinstal.

Dan masih banyak lagi yang ada. dpkgPerintah tingkat bawah dapat digunakan (lanjutan), atau alat GUI seperti Muon, Synaptic, Software Center, dll. Tidak ada satu pun 'cara yang benar' untuk menghapus aplikasi atau melakukan tugas lain yang berinteraksi dengan manajemen paket Anda.

Daftar yang Anda temukan hanyalah contoh. Pastikan Anda memahami maknanya dan mencoba apa yang ingin dilakukan sebelum menerima tindakan (Anda perlu menekan Ysebelum benar-benar melakukan tindakan seperti yang diusulkan).

Versi asterisk dalam pertanyaan mungkin salah ; apt-getmenerima ekspresi reguler dan bukan pola gumpalan sebagai shell. Jadi apa yang terjadi?

sudo apt-get remove application*

adalah sebagai berikut:

  1. Shell mencoba memperluas application*melihat file di direktori saat ini. Jika (seperti biasanya kasus) tidak menemukan apa pun, ia mengembalikan pola glob tidak diubah (seandainya bashdengan perilaku default di sini --- zshakan kesalahan keluar).

  2. apt-getakan menghapus paket yang namanya mengandung string yang memenuhi ekspresi reguler application*, yaitu, applicatiodiikuti oleh jumlah sewenang-wenang n: applicatio, application, applicationn, libapplicatio, dll

  3. Untuk melihat bagaimana ini bisa berbahaya, coba (tanpa root untuk keamanan ganda) apt-get -s remove "wine*"( -sakan mensimulasikan hal itu alih-alih melakukannya) --- ia akan mengatakan akan menghapus semua paket yang "menang" dalam nama mereka dan dependennya, hampir seluruh sistem ...

Mungkin, perintah yang dimaksud benar-benar

 sudo apt-get remove "^application.*"

(catat tanda kutip dan titik) yang akan menghapus semua paket yang namanya dimulai application.

Perintah ini,

sudo updatedb                  # <-- updates the locate database (index). harmless
sudo locate application        # <-- locates the file 'application'. harmless
sudo rm -rf (file/folder name) # <-- removes files/dirs recursively. dangerous.

sepenuhnya di luar ruang lingkup manajemen paket. Jangan hapus file milik paket tanpa menggunakan manajer paket! Ini akan membingungkan dan merupakan cara yang salah untuk melakukan sesuatu.

Jika Anda tidak tahu paket milik file mana, coba ini:

dpkg -S /path/to/file
gertvdijk
sumber
9
Opsi --purge juga berguna ketika mencoba untuk sepenuhnya menghapus semua dependensi yang tersisa termasuk file konfigurasi mereka: apt-get-autoremove --purge Penting juga untuk dicatat bahwa file konfigurasi di direktori home Anda tidak terpengaruh oleh opsi --purge. Ini Anda harus menghapus secara manual.
Glutanimate
1
Ada kesalahan di sini: apt-get menerima RE, bukan GLOBAL; jadi apt-get remove pack * akan menghapus semua paket yang dimulai dengan pac diikuti dengan nol atau lebih k ... yang biasanya tidak terduga. Saya mengedit anser. Lihat juga askubuntu.com/questions/210976/…
Rmano
Saya pikir jawaban ini tidak lagi akurat. Salah satu apt remove -s texlive*atau apt-getrekannya mengembalikan garis seperti Note, selecting 'texlive-font-utils' for glob 'texlive*'(menyiratkan bahwa mereka memang menerima gumpalan), diikuti oleh yang biasa Package 'texlive-common' is not installed, so not removed, dan akhirnya Remvgaris, seperti Remv texlive-font-utils [2015.20160320-1] [...].
Jonathan Y.
@ JonathanY. Anda juga akan memilih paket yang tidak diinstal. Bagaimanapun, bisakah Anda mengajukan pertanyaan BARU dan menguraikan sedikit lebih detail apa situasi Anda dalam pertanyaan itu. Saya akan senang melihatnya :)
gertvdijk
Saya tidak mengajukan pertanyaan baru. Saya menunjuk pada kemungkinan perubahan karena jawaban ini dibuat yang membuat beberapa detail salah. Intinya, tampaknya apt-get remove packa*memang benar-benar mengambil gumpalan packa*alih-alih melihatnya sebagai regex: cocok packagetetapi tidak pack.
Jonathan Y.
110

Untuk Ubuntu 12.04 dan mungkin lebih tinggi, metode yang benar adalah:

sudo apt-get --purge autoremove packagename

Seperti yang dijelaskan di sini .

Jangan gunakan packagename*karena dapat menghapus paket yang tidak diinginkan dan menyebabkan lebih banyak masalah daripada yang dipecahkan. Atau jika Anda harus, setidaknya menjalankannya dengan -s, --simulate, --dry-runbendera pertama yang melihat persis apa yang akan dilakukan tanpa melakukan hal itu.

Kurtosis
sumber
13
ini adalah jawaban yang benar, pendek dan ringkas:
Anwar
20

Anda dapat menggunakan perintah ini:

sudo apt-get purge --auto-remove packagename

Ini akan membersihkan paket-paket yang diperlukan bersama dengan dependensi yang diinstal dengan paket-paket itu. The --auto-removepilihan (menjadi alias autoremove) bekerja sama dengan sudo apt-get autoremove. Dengan menggunakan perintah ini kita dapat menjalankan satu perintah:

sudo apt-get purge --auto-remove packagename

Dari pada:

sudo apt-get purge packagename
sudo apt-get autoremove
pl_rock
sumber
2
Meskipun Anda benar, tetapi Anda juga bisa menggunakannya sudo apt-get --purge autoremove packagename. Perintah yang sama 1 di sini
Anwar
Bisakah perintah lengkap juga ditulis sebagai apt-get autoremove --purgeganti apt-get purge --auto-remove?
felwithe
3
Bisakah seseorang tolong tembak saya?
Martin Andersson
7

Anda dapat menggunakan dengan aman sudo apt-get remove --purge applicationatau sudo apt-get remove applications99% dari waktu. Ketika Anda menggunakan purgeflag, itu hanya menghapus semua file konfigurasi juga. Yang mungkin atau mungkin tidak apa yang Anda inginkan, tergantung pada apakah Anda ingin menginstal ulang aplikasi tersebut. Ini application*akan cocok dengan semua aplikasi yang dimulai dengan application, yang biasanya plugins, fitur tambahan, dll dari aplikasi utama yang Anda hapus. yaitu

sudo apt-get remove gedit*

akan menghapus gedit, gedit-pluginsdan gedit-common. Biasanya tidak perlu melakukan ini, karena sebagian besar plugin / program terkait tergantung pada aplikasi utama, dan secara otomatis akan dihapus (atau ditandai untuk dihapus) ketika Anda menghapus instalasi aplikasi utama.

Perintah terakhir Anda hanyalah menghapus sisa dari aplikasi yang diketahui memiliki uninstaller berantakan, dan itu hanya menghapus sisa-sisa aplikasi.

reverendj1
sumber
5

Saya mendapat beberapa pesan kesalahan saat menghapus paket, satu-satunya cara saya menemukan bahwa itu berfungsi adalah:

mv /var/lib/dpkg/info/package.* /tmp/
dpkg --remove --force-remove-reinstreq package

Saya menemukan bahwa meskipun hanya menggunakan

dpkg --remove --force-remove-reinstreq package

tidak menghapus paket itu menunjukkan kepada saya jalur yang benar ke file untuk bergerak dengan:

mv /var/lib/dpkg/info/package.* /tmp/

Paket pengganti dengan nama aplikasi Anda. Gunakan sudo di Ubuntu, jadikan root di Debian.

DangerFireBob
sumber
1

Itu tergantung pada aplikasi yang ingin Anda hapus. Selalu pastikan untuk memeriksa dependensinya sebelum mengeluarkan perintah ya. Saat Anda menghapus sesuatu berdasarkan baris perintah, terkadang akan muncul beberapa perpustakaan yang tidak lagi diperlukan. Ini dapat dihapus dengan apt-get autoremove.

Berhati-hatilah bahwa dengan menggunakan perintah seperti sudo apt-get remove --purge applicationname dapat menghapus beberapa dependensi yang dibutuhkan oleh aplikasi lain dan, dengan demikian, dapat merusak sistem Anda.

Jika Anda ingin melakukannya dengan cara yang lebih aman, Anda selalu dapat menghapusnya hanya dengan menggunakan pusat perangkat lunak atau apt-get remove applicationname. Jika dependensi tidak diperlukan lagi, keluarkan apt-get autoremove nanti.

gustavokrm
sumber
Saya pikir seluruh sistem paket Debian dirancang khusus untuk tidak menghapus paket jika ada paket lain yang bergantung padanya. Anda mungkin (dengan senang hati) ditanya apakah Anda ingin menghapus semua paket dependen juga, dan di situlah Anda harus benar-benar membaca daftar paket yang akan dihapus, yang menurut saya adalah apa yang ingin Anda katakan.
Xen2050
1

Saya hanya ingin mengklarifikasi satu hal yang tampaknya menjadi sumber kebingungan di sini. The dpkgutilitas tidak tahu tentang atau melacak paket dependensi dalam hubungannya satu sama lain, yang merupakan alasan besar yang aptdikembangkan saya percaya. Anda dapat membacanya di bagian 8.6 di halaman ini . Debian GNU / Linux FAQ - Alat manajemen paket Debian

  • Dengan apt: Jika saya ingin membersihkan paket A, dan ia memiliki dependensi yang disebut paket B, dan paket B tidak memiliki paket dependen lainnya, maka paket A dan B akan dibersihkan. Jika paket B DID memiliki paket dependen lainnya, maka hanya paket A yang akan dihapus.

  • Dengan dpkg: Ketergantungan apa? Anda baru saja mengatakan kepada saya untuk membersihkan
    paket sialan itu jadi itulah yang saya lakukan! Perencanaan yang buruk di pihak Anda bukan
    merupakan keadaan darurat di pihak saya.

Dengan itu, berikut adalah dua one-liner yang dapat digunakan untuk setiap metode pembersihan:

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --dry-run --purge

apt-get autoremove -y; apt-get --dry-run purge -y $(dpkg --list |grep '^rc' |awk '{print $2}')

Hapus --dry-rununtuk melakukan operasi pembersihan yang sebenarnya alih-alih melaporkan tindakan apa yang akan diambil.

Sysinfo.io
sumber