วิธีที่ถูกต้องในการลบแอปพลิเคชันสมบูรณ์คืออะไร


546

ฉันได้ค้นหาข้อมูลจากอินเทอร์เน็ตและพบบรรทัดคำสั่งที่แตกต่างกันเช่นเดียวกับสิ่งเหล่านี้:

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*

ดังนั้นวิธีที่ถูกต้องคืออะไร? จำเป็นต้องใช้ "*" หรือไม่

หลังจากนั้นฉันก็พบคำสั่งเหล่านี้:

sudo updatedb
sudo locate application
sudo rm -rf (file/folder name)

1
บางคำถามของคุณอาจได้รับคำตอบในโพสต์นี้: askubuntu.com/questions/1143/how-can-i-uninstall-software
Glutanimate

8
application*ในบางโอกาสสามารถให้ผลลัพธ์ที่ไม่คาดคิดได้ตัวอย่างเช่นถ้าคุณมีไฟล์ในไดเรกทอรีปัจจุบันapplication_informationเชลล์จะขยายออกก่อนที่มันจะถูกส่งไปยัง apt-get หากสิ่งนี้เกิดขึ้นและคุณต้องการเครื่องหมายดอกจันแท้จริงคุณสามารถใช้application\*หรือ'application*'
Izkata

6
application*อันตรายยิ่งขึ้นเมื่อไม่มีไฟล์ในไดเรกทอรีปัจจุบัน: apt-getใช้นิพจน์ทั่วไปไม่มีรูปแบบแบบกลม wine*คนได้เช็ดเกือบทั้งระบบพยายามลบ
Andrea Corbellini

3
คุณยอมรับคำตอบได้ไหม? ที่จะขอบคุณคนที่ตอบคุณ
m-ric

ทั้งapplication*มิได้application\*มีความปลอดภัย! Quoting *ด้วย\หรือ' 'เพียงเพิ่มความเสี่ยงจึงมั่นใจได้ว่า*จะถูกส่งเป็นคือการapt-get(แม้ว่ามันเป็นเรื่องปกติอยู่แล้ว!) ทำให้เกิดapt-getการตีความอาร์กิวเมนต์เป็นนิพจน์ทั่วไป ใน regex *หมายถึง "ศูนย์อักขระก่อนหน้านี้" รูปแบบทั่วไปของความผิดพลาดคือการถอนการติดตั้งwine*ออกแพคเกจทั้งหมดที่มีwin(ไม่ได้wine, win) ที่ใดก็ได้ในชื่อของพวกเขาและทุกแพคเกจขึ้นอยู่กับคนใดคนหนึ่ง ดูคำอธิบายนี้และการแก้ไขปัญหาที่เป็นไปได้ @Izkata
Eliah Kagan

คำตอบ:


705
  • apt-get remove packagename

    จะลบไบนารี packagenameแต่ไม่ได้กำหนดค่าหรือไฟล์ข้อมูลของแพคเกจ มันจะปล่อยให้การพึ่งพาติดตั้งกับมันในเวลาการติดตั้งมิได้ถูกแตะต้อง

  • apt-get purge packagename หรือ apt-get remove --purge packagename

    จะลบทุกอย่างเกี่ยวกับแพคเกจpackagenameแต่ไม่ขึ้นกับการติดตั้งในการติดตั้ง ทั้งสองคำสั่งนั้นเทียบเท่ากัน

    มีประโยชน์อย่างยิ่งเมื่อคุณต้องการ 'เริ่มต้นใหม่' ด้วยแอปพลิเคชันเนื่องจากคุณทำให้การกำหนดค่าสับสน อย่างไรก็ตามจะไม่ลบการกำหนดค่าหรือไฟล์ข้อมูลที่อยู่ในโฮมไดเร็กตอรี่ของผู้ใช้, โดยปกติจะอยู่ในโฟลเดอร์ที่ซ่อนอยู่ที่นั่น ไม่มีวิธีง่ายๆที่จะลบสิ่งเหล่านั้นออกเช่นกัน

  • apt-get autoremove

    ลบแพ็คเกจที่ไม่ได้ใช้งานออกเช่นแพ็คเกจที่ติดตั้งซึ่งเคยติดตั้งเป็นการอ้างอิง แต่ไม่นาน ใช้สิ่งนี้หลังจากลบแพ็คเกจที่ติดตั้งการพึ่งพาแล้วคุณไม่สนใจอีกต่อไป

  • aptitude remove packagenameหรือaptitude purge packagename(เช่นเดียวกัน)

    จะพยายามลบแพ็คเกจอื่น ๆ ตามที่กำหนดไว้โดยpackagenameเปิด แต่ไม่จำเป็นต้องใช้ในแพ็คเกจที่เหลืออยู่ โปรดทราบว่าaptitudeจะจำเฉพาะข้อมูลการพึ่งพาสำหรับแพ็คเกจที่ติดตั้งไว้

และมีอีกมากมาย dpkgคำสั่งระดับล่างสามารถใช้ (เครื่องมือขั้นสูง) หรือเครื่องมือ GUI เช่น Muon, Synaptic, Software Center เป็นต้นไม่มีวิธีที่ถูกต้องเพียงวิธีเดียวในการลบแอปพลิเคชันหรือทำงานอื่น ๆ ที่มีปฏิสัมพันธ์กับการจัดการแพ็คเกจของคุณ

รายการที่คุณพบเป็นเพียงตัวอย่าง ตรวจสอบให้แน่ใจว่าคุณเข้าใจความหมายและลองทำสิ่งที่ต้องการก่อนที่จะยอมรับการกระทำ (คุณต้องกดYก่อนที่จะทำการกระทำตามที่เสนอจริง)

รุ่นดอกจันในคำถามคืออาจจะไม่ถูกต้อง ; apt-getยอมรับการแสดงออกปกติและไม่ได้เป็นรูปแบบ glob เป็นเปลือก แล้วจะเกิดอะไรขึ้นกับ

sudo apt-get remove application*

คือต่อไปนี้:

  1. เชลล์พยายามขยายการapplication*ดูไฟล์ในไดเรกทอรีปัจจุบัน หาก (ตามปกติกรณี) พบว่าไม่มีอะไรมันจะส่งกลับรูปแบบ glob ไม่เปลี่ยนแปลง (สมมติว่าbashมีพฤติกรรมเริ่มต้นที่นี่ --- zshจะผิดพลาด)

  2. apt-getจะลบแพคเกจที่มีชื่อมีสตริงที่ตอบสนองการแสดงออกปกติapplication*, ที่อยู่, applicatioตามด้วยจำนวนข้อของn: applicatio, application, applicationn, libapplicatioฯลฯ

  3. หากต้องการดูว่าสิ่งนี้อาจเป็นอันตรายได้อย่างไรให้ลอง (โดยไม่ต้องรูทเพื่อความปลอดภัยสองเท่า) apt-get -s remove "wine*"( -sจะจำลองสิ่งแทนการทำ) - มันจะบอกว่าจะลบแพ็คเกจทั้งหมดที่มี "ชนะ" ในชื่อและขึ้นอยู่กับ เกือบทั้งระบบ ...

อาจเป็นคำสั่งที่ตั้งใจจริง ๆ

 sudo apt-get remove "^application.*"

(หมายเหตุราคาและจุด) applicationซึ่งจะลบทุกแพคเกจที่มีชื่อเริ่มต้นด้วย

คำสั่งเหล่านี้

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.

อยู่นอกขอบเขตของการจัดการบรรจุภัณฑ์ อย่าลบไฟล์ที่เป็นของแพ็คเกจโดยไม่ใช้โปรแกรมจัดการแพ็คเกจ! มันจะสับสนและเป็นวิธีที่ผิดในการทำสิ่งต่าง ๆ

หากคุณไม่ทราบว่าไฟล์อยู่ในแพคเกจใดให้ลองทำสิ่งนี้:

dpkg -S /path/to/file

9
ตัวเลือก --purge ยังมีประโยชน์เมื่อพยายามที่จะลบการอ้างอิงที่เหลืออยู่รวมถึงไฟล์ config ของพวกเขาอย่างเต็มที่: apt-get-autoremove --purge นอกจากนี้ยังเป็นสิ่งสำคัญที่จะต้องทราบว่าไฟล์การกำหนดค่าในไดเรกทอรีบ้านของคุณไม่ได้รับผลกระทบจากตัวเลือก --purge สิ่งเหล่านี้คุณจะต้องลบออกด้วยตนเอง
Glutanimate

1
มีข้อผิดพลาดที่นี่: apt-get ยอมรับ RE ไม่ใช่ globs; ดังนั้น apt-get remove pack * จะลบแพ็กเกจทั้งหมดที่เริ่มต้นด้วย pac ตามด้วยศูนย์หรือมากกว่า k ... ซึ่งโดยปกติจะไม่คาดคิด ฉันแก้ไข anser ดูเพิ่มเติมได้ที่askubuntu.com/questions/210976/…
Rmano

ฉันคิดว่าคำตอบนี้ไม่แม่นยำอีกต่อไป อย่างใดอย่างหนึ่งapt remove -s texlive*หรือมันapt-getเส้นคู่ผลตอบแทนเช่นNote, selecting 'texlive-font-utils' for glob 'texlive*'(หมายความว่าพวกเขาไม่ยอมรับแน่นอน globs) ตามปกติPackage 'texlive-common' is not installed, so not removedและในที่สุดก็สายเช่นRemv Remv texlive-font-utils [2015.20160320-1] [...]
Jonathan Y.

@JonathanY คุณจะเลือกแพ็คเกจที่ไม่ได้ติดตั้งด้วย อย่างไรก็ตามคุณช่วยถามคำถามใหม่และอธิบายรายละเอียดเพิ่มเติมได้เล็กน้อยว่าสถานการณ์ของคุณเป็นอย่างไร ผมจะมีความสุขที่จะมองมัน :)
gertvdijk

ฉันไม่ได้ถามคำถามใหม่ ฉันกำลังชี้ไปที่การเปลี่ยนแปลงที่เป็นไปได้เนื่องจากคำตอบนี้ทำขึ้นซึ่งทำให้รายละเอียดบางอย่างไม่ถูกต้อง ปัญญาก็จะดูเหมือนว่าapt-get remove packa*ไม่แน่นอนใช้ glob packa*แทนที่จะมองไปที่มันเป็น regex: มันตรงแต่ไม่package pack
Jonathan Y.

110

สำหรับ Ubuntu 12.04 และอาจสูงกว่าวิธีที่ถูกต้องคือ:

sudo apt-get --purge autoremove packagename

ตามรายละเอียดที่นี่

อย่าใช้packagename*เนื่องจากสามารถลบแพ็คเกจที่ไม่ตั้งใจและทำให้เกิดปัญหามากกว่าที่แก้ได้ หรือถ้าคุณต้องทำงานอย่างน้อยมันด้วย-s, --simulate, --dry-runธงก่อนเพื่อดูว่าสิ่งที่มันจะทำได้โดยไม่ต้องทำมัน


13
นี่คือคำตอบที่ถูกต้องสั้นและกระชับ:
อันวาร์

20

คุณสามารถใช้คำสั่งนี้:

sudo apt-get purge --auto-remove packagename

มันจะกำจัดแพคเกจที่จำเป็นพร้อมกับการอ้างอิงที่ติดตั้งกับแพ็คเกจเหล่านั้น --auto-removeตัวเลือก (เป็นนามแฝงของautoremove) sudo apt-get autoremoveทำงานคล้ายกับ โดยใช้คำสั่งนี้เราสามารถเรียกใช้คำสั่งเดียว:

sudo apt-get purge --auto-remove packagename

แทน:

sudo apt-get purge packagename
sudo apt-get autoremove

2
แม้ว่าคุณจะถูกต้อง แต่ก็สามารถใช้งานsudo apt-get --purge autoremove packagenameได้ คำสั่ง 1 คำสั่งเดียวกันที่นี่
Anwar

สามารถใช้คำสั่งที่สมบูรณ์นอกจากนี้ยังจะเขียนเป็นapt-get autoremove --purgeแทนapt-get purge --auto-remove?
felwithe

3
ใครช่วยยิงฉันหน่อยได้ไหม
Martin Andersson

7

คุณสามารถใช้งานได้อย่างปลอดภัยsudo apt-get remove --purge applicationหรือsudo apt-get remove applications99% ของเวลา เมื่อคุณใช้การpurgeตั้งค่าสถานะมันจะลบไฟล์กำหนดค่าทั้งหมดด้วย ซึ่งอาจเป็นหรือไม่เป็นสิ่งที่คุณต้องการขึ้นอยู่กับว่าคุณต้องการติดตั้งแอปพลิเคชันดังกล่าว application*จะตรงกับการใช้งานทั้งหมดที่เริ่มต้นด้วยapplicationซึ่งมักจะมีปลั๊กอินคุณสมบัติเพิ่มเติมอื่น ๆ ของโปรแกรมหลักที่คุณกำลังลบ กล่าวคือ

sudo apt-get remove gedit*

จะเอาgedit, และgedit-plugins gedit-commonโดยทั่วไปไม่จำเป็นต้องทำเช่นนี้เนื่องจากปลั๊กอิน / โปรแกรมที่เกี่ยวข้องส่วนใหญ่ขึ้นอยู่กับแอปพลิเคชันหลักและจะถูกลบโดยอัตโนมัติ (หรือทำเครื่องหมายเพื่อลบ) เมื่อคุณถอนการติดตั้งแอปพลิเคชันหลัก

คำสั่งสุดท้ายของคุณคือการลบสิ่งที่เหลือจากแอปพลิเคชันที่ทราบว่ามีตัวถอนการติดตั้งยุ่งและมันเป็นเพียงการลบส่วนที่เหลือของแอปพลิเคชัน


5

ฉันได้รับข้อความแสดงข้อผิดพลาดในการลบแพ็คเกจวิธีเดียวที่ฉันพบว่าใช้งานได้คือ:

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

ฉันพบว่าแม้จะใช้เพียง

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

ไม่ลบแพ็กเกจมันแสดงพา ธ ที่ถูกต้องไปยังไฟล์ที่จะย้ายด้วย:

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

แพ็คเกจทดแทนที่มีชื่อแอปพลิเคชันของคุณ ใช้ sudo ใน Ubuntu กลายเป็น root ใน Debian


3

ฉันพบคำสั่งนี้ในอินเทอร์เน็ต

dpkg --purge --force-depends application

http://www.debian-administration.org/article/Reinstalling_packages_to_fix_problems


1

ขึ้นอยู่กับแอปพลิเคชันที่คุณต้องการลบ ตรวจสอบให้แน่ใจเสมอเพื่อตรวจสอบการอ้างอิงก่อนที่จะใช้คำสั่ง yes เมื่อคุณลบบางสิ่งออกจากบรรทัดคำสั่งบางครั้งมันจะแสดงไลบรารีจำนวนหนึ่งที่ไม่ต้องการอีกต่อไป สิ่งเหล่านี้สามารถลบออกได้ด้วย apt-get autoremove

ระวังว่าการใช้คำสั่งเช่น sudo apt-get remove - ชื่อแอพพลิเคชั่นอาจลบการอ้างอิงบางอย่างที่แอพพลิเคชั่นอื่น ๆ ต้องการและอาจทำให้ระบบของคุณเสียหาย

หากคุณต้องการทำในวิธีที่ปลอดภัยกว่าคุณสามารถลบออกได้โดยใช้เพียงแค่ซอฟต์แวร์ศูนย์หรือชื่อแอปพลิเคชันลบ apt-get หากไม่จำเป็นต้องพึ่งพาอีกต่อไปให้ออกโปรแกรมรับอัตโนมัติ apt-get ในภายหลัง


ฉันคิดว่าระบบแพคเกจ Debian ทั้งหมดได้รับการออกแบบมาโดยเฉพาะเพื่อไม่ให้ลบแพคเกจหากมีแพ็กเกจอื่นขึ้นอยู่กับมัน คุณอาจถูกถามอย่างเป็นประโยชน์ว่าคุณต้องการลบแพ็กเกจที่เกี่ยวข้องทั้งหมดหรือไม่และนี่คือที่ที่คุณควรอ่านรายการแพ็กเกจที่จะถูกลบซึ่งฉันคิดว่าคุณกำลังจะพูดอะไร
Xen2050

1

ฉันแค่อยากจะอธิบายสิ่งหนึ่งที่ดูเหมือนจะเป็นแหล่งของความสับสนที่นี่ dpkgยูทิลิตี้ไม่ทราบเกี่ยวกับแพคเกจหรือติดตามการอ้างอิงในความสัมพันธ์กับอีกคนหนึ่งซึ่งเป็นเหตุผลใหญ่ที่aptได้รับการพัฒนาผมเชื่อว่า คุณสามารถอ่านได้ในหัวข้อ 8.6 ในหน้านี้คำถามที่พบบ่อย Debian GNU / Linux - เครื่องมือจัดการแพคเกจ Debian

  • ด้วย apt: ถ้าฉันต้องการกำจัดแพ็คเกจ A, และมันมีการอ้างอิงที่เรียกว่า package B, และแพ็คเกจ B ไม่มีแพ็คเกจที่ขึ้นต่อกันอื่นจากนั้นแพ็กเกจ A และ B จะถูกลบทิ้ง หากแพ็คเกจ B DID มีแพ็คเกจอื่นที่อ้างอิงแล้วแพ็คเกจ A เท่านั้นที่จะถูกลบทิ้ง

  • ด้วย dpkg: การพึ่งพาอะไร คุณเพิ่งบอกให้ฉันล้าง
    แพ็คเกจแช่งดังนั้นนั่นคือสิ่งที่ฉันทำ! การวางแผนที่ไม่ดีในส่วนของคุณไม่
    ถือเป็นเรื่องฉุกเฉินสำหรับฉัน

ด้วยที่กล่าวว่าที่นี่สองสมุทรซึ่งสามารถใช้สำหรับวิธีการกำจัดแต่ละ:

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}')

ลบ--dry-runเพื่อดำเนินการกวาดล้างจริงแทนที่จะรายงานสิ่งที่มันจะได้ดำเนินการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.