คำสั่งการลบแพ็กเกจ APT ต่างกันอย่างไร


17

ความแตกต่างระหว่างคำสั่งเหล่านี้คืออะไร?

  1. sudo apt-get autoremove --purge packagenames
  2. sudo apt-get remove --purge packagenames
  3. sudo apt-get purge purge packagenmaes
  4. sudo apt-get remove packagenames
  5. sudo apt-get autoremove

คำตอบ:


24

คำตอบที่รวดเร็ว

  • remove ถอนการติดตั้งแพ็กเกจที่ตั้งชื่อตาม
  • autoremoveถอนการติดตั้งแพ็คเกจทั้งหมดที่ติดตั้งโดยอัตโนมัติซึ่งไม่จำเป็นอีกต่อไป มันไม่ถูกต้องชื่อแพคเกจรายการหลังจากautoremove; มันจะถูกละเว้น (และแพ็คเกจที่มีสิทธิ์ทั้งหมดจะถูกลบ) ซึ่งอาจไม่ใช่สิ่งที่คุณตั้งใจ
  • --purgeทำให้ไฟล์คอนฟิกูเรชันทั้งระบบที่เชื่อมโยงกับแพ็กเกจถูกลบเพื่อลบออกเช่นกัน มันต้องมาพร้อมกับคำสั่งเช่นหรือremove ธงปรับเปลี่ยนการดำเนินการของคำสั่ง; มันไม่ได้ทำหน้าที่ของมันเองautoremove--purge
  • purgeหมายถึงสิ่งเดียวกันกับ--purge remove(ซึ่งเป็นเหมือนกันremove --purge) การพูดpurgeสองครั้งไม่ถูกต้อง ที่สองpurgeถูกตีความว่าเป็นชื่อของแพคเกจที่จะเป็นpurged ซึ่งอาจไม่ใช่สิ่งที่คุณตั้งใจ

คำตอบแบบเต็ม

เพื่อทำความเข้าใจว่าคำสั่งเหล่านั้นทำอะไรและแตกต่างกันอย่างไรมันช่วย (และอาจเป็นสิ่งสำคัญยิ่ง) ในการทำความเข้าใจแนวคิดสองประการ:

  1. ความแตกต่างระหว่างแพคเกจที่ติดตั้งด้วยตนเองและแพคเกจที่ติดตั้งโดยอัตโนมัติ
  2. ความแตกต่างระหว่างไฟล์แพ็กเกจของแพ็กเกจและไฟล์คอนฟิกูเรชัน

ติดตั้งด้วยตนเองและติดตั้งโดยอัตโนมัติ

แพคเกจการติดตั้งอย่างใดอย่างหนึ่งด้วยตนเองหรือโดยอัตโนมัติติดตั้ง

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

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

เมื่อคุณไม่ได้ระบุแพคเกจที่จะติดตั้ง แต่แทนที่จะติดตั้งเป็นการพึ่งพาของแพคเกจที่คุณระบุในการติดตั้งแพคเกจนั้นจะถูกติดตั้งโดยอัตโนมัติ

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

สุดท้าย:

  • ถ้าคุณพยายามติดตั้งแพคเกจที่ติดตั้งด้วยตนเองมันจะยังคงติดตั้งอยู่ แต่ถ้ามีการติดตั้งโดยอัตโนมัติจะมีการเปลี่ยนแปลง - การพยายามติดตั้งด้วยตนเองจะเป็นการทำเครื่องหมายว่าติดตั้งด้วยตนเอง
  • คุณสามารถทำเครื่องหมายแพ็คเกจใด ๆ ด้วยตนเองหรือติดตั้งโดยอัตโนมัติ (ด้วยapt-markคำสั่ง) ไม่ว่าจะได้รับการติดตั้งจริงหรืออย่างไร
  • แพ็คเกจที่ติดตั้งมาพร้อมกับระบบ Ubuntu ของคุณนั้นไม่ได้ติดตั้งโดยอัตโนมัติทั้งหมด บางคนมาทำเครื่องหมายติดตั้งโดยอัตโนมัติและคนอื่นมาทำเครื่องหมายติดตั้งด้วยตนเอง นี่คือการตอบสนองตรรกะที่อยู่เบื้องหลังความแตกต่างระหว่างแพคเกจด้วยตนเองและการติดตั้งโดยอัตโนมัติ - ความคิดที่ว่าแพคเกจบางอย่างมีความจำเป็นในการบริการของผู้อื่นเท่านั้น

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

apt-get autoremove ลบแพ็คเกจที่ติดตั้งโดยอัตโนมัติซึ่งไม่มีแพ็คเกจที่ติดตั้งด้วยตนเองอีกต่อไป

ไฟล์แพ็กเกจและไฟล์คอนฟิกูเรชัน

แพคเกจให้ไฟล์ที่ตั้งใจจะเป็นและยังคงเหมือนเดิมในทุกระบบที่ติดตั้งแพ็คเกจนั้น ไฟล์ดังกล่าวมีไฟล์เรียกทำงานทรัพยากรเอกสารและ "ทรัพย์สิน" อื่น ๆ สำหรับโปรแกรมที่ติดตั้ง เรามักจะเรียกสิ่งเหล่านี้ว่า "ไฟล์" ที่แพ็คเกจมอบให้

แต่แพ็คเกจให้ไฟล์อื่นเช่นกันซึ่งมีจุดประสงค์ที่จะเปลี่ยนแปลง ไฟล์เหล่านี้เรียกว่าไฟล์กำหนดค่าทั่วโลก (หรือทั้งระบบ) พวกเขามักจะติดตั้งใน/etcไดเรกทอรีและพวกเขาสามารถแก้ไขได้โดยอัตโนมัติและด้วยตนเองเพื่อเปลี่ยนพฤติกรรมของโปรแกรมที่ติดตั้ง ตัวอย่างเช่นsudoมีการตั้งค่าไฟล์และไดเรกทอรีสำหรับแฟ้มการกำหนดค่าอื่น/etc/sudoers ๆ อีกมากมาย /etc/sudoers.dไฟล์นั้นและไฟล์ใด ๆ ที่เพิ่มไปยังไดเรกทอรีนั้นให้ระบุว่าใครได้รับอนุญาตให้ใช้sudoในรูปแบบใด

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

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

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

apt-get removeจะลบแพ็คเกจ; นั่นคือมันจะถอนการติดตั้งแพ็กเกจ แต่ปล่อยให้ไฟล์การกำหนดค่าทั้งระบบ

apt-get purgeจะล้างแพ็คเกจ นั่นคือมันจะถอนการติดตั้งแพคเกจและตรวจสอบให้แน่ใจว่าได้ลบไฟล์การกำหนดค่าทั้งระบบ

อีกวิธีในการกำจัดแพ็คเกจคือการใช้--purgeแฟล็ก ไม่ได้บอกapt-getว่าต้องทำอะไร แต่จะแก้ไขสิ่งที่คำ (หรือ "คำสั่ง") แทนเช่นremoveบอกให้ทำ --purgeธงทำให้เกิดการถอนการติดตั้งแพคเกจใด ๆ ที่จะตามมาด้วยการลบไฟล์การกำหนดค่า systemwide สำหรับแพคเกจ (s) ถูกถอนการติดตั้ง กล่าวอีกนัยหนึ่งการ--purgeเปลี่ยนสถานะเป็นการลบออกเป็นการล้างข้อมูล

เหตุใดเราจึงมีการ--purgeตั้งค่าสถานะเมื่อเรามีpurgeคำสั่ง ท้ายที่สุดแล้วไม่sudo apt-get --purge remove packagenameเท่ากับ sudo apt-get purge packagenameพวกเขาเทียบเท่า ในกรณีที่--purgeมีประโยชน์คือเมื่อคุณต้องการที่จะปรับเปลี่ยนพฤติกรรมของคำสั่งอื่น ๆremoveกว่า

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

sudo apt-get --purge autoremove

ลองพิจารณาการใช้อีกหนึ่ง--purgeครั้ง มีการตั้งค่าสถานะ--reinstallซึ่งจะเปลี่ยนการติดตั้งเป็นการติดตั้งใหม่ นี่คือการบอกว่าโดยปกติเมื่อคุณพยายามติดตั้งแพคเกจที่ติดตั้งแล้วจะไม่มีอะไรเกิดขึ้นหรือ (หากแพ็กเกจถูกติดตั้งโดยอัตโนมัติ) แพ็คเกจจะถูกติดตั้งด้วยตนเอง แต่ด้วย--reinstallแฟล็กการติดตั้งแพ็กเกจที่ติดตั้งไว้แล้วจะทำให้แพ็กเกจถูกลบออกจากนั้นติดตั้งกลับ :

sudo apt-get --reinstall install packagename

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

sudo apt-get --purge --reinstall install packagename

การ--reinstallติดตั้งเปลี่ยนเป็นการติดตั้งใหม่ (เช่นการลบตามด้วยการติดตั้ง) และ--purgeเปลี่ยนส่วนการถอดการติดตั้งใหม่เป็นการล้าง

พฤติกรรมของตัวอย่างของคุณ

ตอนนี้มันควรจะชัดเจนว่าสิ่งที่แต่ละapt-getคำสั่งตัวอย่างของคุณทำ:

  • sudo apt-get autoremove --purge packagenames

    การดำเนินการนี้จะกำจัดแพคเกจที่ติดตั้งโดยอัตโนมัติซึ่งไม่มีแพ็คเกจที่ติดตั้งด้วยตนเองอีกต่อไป นั่นคือจะถอนการติดตั้งแพ็กเกจเหล่านั้น (ซึ่งใช้ลบไฟล์แพ็กเกจ) และจะลบไฟล์การกำหนดค่าทั้งระบบเช่นกัน

    ที่นี่packagenamesไม่ทำอะไรเลย โดยเฉพาะอย่างยิ่งหากคุณต้องการลบแพ็คเกจที่มีรายชื่ออยู่ในนั้นก็จะไม่ทำงานตามที่คุณต้องการ

  • sudo apt-get remove --purge packagenames

    การกำจัดนี้packagenames; สมมติว่าpackagenamesเป็นรายชื่อแพคเกจที่คั่นด้วยช่องว่างมันจะกำจัดทั้งหมด นั่นคือมันจะถอนการติดตั้ง (ซึ่งจะเป็นการลบไฟล์แพ็คเกจ) และจะลบไฟล์การกำหนดค่าทั้งระบบ

    หากแพ็คเกจใด ๆ ที่ระบุไว้ในpackagenamesไม่ได้ติดตั้งการมีอยู่ในรายการจะไม่มีผลกระทบ (ยกเว้นว่าคุณจะได้รับแจ้งว่าไม่ได้ติดตั้ง) หากคุณแสดงชื่อแพ็กเกจที่ไม่ใช่ชื่อของแพ็กเกจจริงคำสั่งจะล้มเหลวพร้อมข้อผิดพลาดunable to locate packagename

  • sudo apt-get purge purge packagenmaes

    หากคุณลบหนึ่งในสิ่งที่เกิดขึ้นpurgeในคำสั่งนั้นมันจะเทียบเท่ากับคำสั่งก่อนหน้า ขณะที่มันยืนก็พยายามที่จะล้างแพคเกจที่เรียกว่าและยังล้างแพคเกจที่ระบุไว้ในpurge packagenamesเนื่องจากpurgeไม่ใช่ชื่อของแพ็คเกจใด ๆ จึงจะล้มเหลวพร้อมข้อความแสดงข้อผิดพลาด

  • sudo apt-get remove packagenames

    สิ่งนี้จะลบแพ็กเกจที่แสดงรายการไว้packagenamesซึ่งจะลบไฟล์แพ็กเกจ สิ่งนี้ไม่ได้ลบไฟล์การกำหนดค่าทั้งระบบ (เพราะเป็นเพียงการลบไม่ใช่การกำจัด)

  • sudo apt-get autoremove

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

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

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