ความแตกต่างระหว่างคำสั่งเหล่านี้คืออะไร?
sudo apt-get autoremove --purge packagenames
sudo apt-get remove --purge packagenames
sudo apt-get purge purge packagenmaes
sudo apt-get remove packagenames
sudo apt-get autoremove
ความแตกต่างระหว่างคำสั่งเหล่านี้คืออะไร?
sudo apt-get autoremove --purge packagenames
sudo apt-get remove --purge packagenames
sudo apt-get purge purge packagenmaes
sudo apt-get remove packagenames
sudo apt-get autoremove
คำตอบ:
remove
ถอนการติดตั้งแพ็กเกจที่ตั้งชื่อตามautoremove
ถอนการติดตั้งแพ็คเกจทั้งหมดที่ติดตั้งโดยอัตโนมัติซึ่งไม่จำเป็นอีกต่อไป มันไม่ถูกต้องชื่อแพคเกจรายการหลังจากautoremove
; มันจะถูกละเว้น (และแพ็คเกจที่มีสิทธิ์ทั้งหมดจะถูกลบ) ซึ่งอาจไม่ใช่สิ่งที่คุณตั้งใจ--purge
ทำให้ไฟล์คอนฟิกูเรชันทั้งระบบที่เชื่อมโยงกับแพ็กเกจถูกลบเพื่อลบออกเช่นกัน มันต้องมาพร้อมกับคำสั่งเช่นหรือremove
ธงปรับเปลี่ยนการดำเนินการของคำสั่ง; มันไม่ได้ทำหน้าที่ของมันเองautoremove
--purge
purge
หมายถึงสิ่งเดียวกันกับ--purge remove
(ซึ่งเป็นเหมือนกันremove --purge
) การพูดpurge
สองครั้งไม่ถูกต้อง ที่สองpurge
ถูกตีความว่าเป็นชื่อของแพคเกจที่จะเป็นpurge
d ซึ่งอาจไม่ใช่สิ่งที่คุณตั้งใจเพื่อทำความเข้าใจว่าคำสั่งเหล่านั้นทำอะไรและแตกต่างกันอย่างไรมันช่วย (และอาจเป็นสิ่งสำคัญยิ่ง) ในการทำความเข้าใจแนวคิดสองประการ:
แพคเกจการติดตั้งอย่างใดอย่างหนึ่งด้วยตนเองหรือโดยอัตโนมัติติดตั้ง
เมื่อคุณระบุแพ็คเกจสำหรับการติดตั้งและถูกติดตั้งจะถูกติดตั้งด้วยตนเอง
แต่อาจมีการติดตั้งแพ็คเกจอื่น ๆ ด้วย แพ็คเกจส่วนใหญ่มีการขึ้นต่อกัน - แพ็คเกจอื่น ๆ ที่ต้องติดตั้งเพื่อให้แพ็คเกจเหล่านั้นทำงานได้ตามที่ต้องการ เมื่อคุณติดตั้งแพ็คเกจจะมีการติดตั้งการอ้างอิง (เช่นแพ็คเกจอื่นที่ขึ้นอยู่กับ) ยกเว้นแพ็คเกจที่ติดตั้งมาก่อน
เมื่อคุณไม่ได้ระบุแพคเกจที่จะติดตั้ง แต่แทนที่จะติดตั้งเป็นการพึ่งพาของแพคเกจที่คุณระบุในการติดตั้งแพคเกจนั้นจะถูกติดตั้งโดยอัตโนมัติ
โปรดทราบว่าเมื่อคุณติดตั้งแพ็กเกจสองแพ็คเกจและหนึ่งในนั้นเป็นการพึ่งพาของแพ็กเกจอื่นนั่นไม่ได้หมายความว่าการพึ่งพานั้นจะถูกติดตั้งโดยอัตโนมัติ อาจเป็นไปได้ว่ามีการติดตั้งการพึ่งพาตนเอง (เช่นที่ระบุโดยคุณเช่นติดตั้งก่อนหรือในเวลาเดียวกันกับแพ็คเกจที่ขึ้นอยู่กับมัน)
สุดท้าย:
apt-mark
คำสั่ง) ไม่ว่าจะได้รับการติดตั้งจริงหรืออย่างไรโดยทั่วไปแล้วสำหรับทุกแพ็คเกจที่ติดตั้งโดยอัตโนมัติคุณจะต้องมีแพ็คเกจที่ติดตั้งด้วยตนเองอย่างน้อยหนึ่งแพคเกจที่ขึ้นอยู่กับมัน (และทำให้แพ็คเกจนั้นถูกติดตั้งโดยอัตโนมัติ) อย่างไรก็ตามหากคุณลบแพ็กเกจที่ติดตั้งด้วยตนเองทั้งหมดซึ่งขึ้นอยู่กับแพ็คเกจที่ติดตั้งโดยอัตโนมัติแพ็คเกจที่ติดตั้งโดยอัตโนมัติจะไม่จำเป็นอีกต่อไป แต่จะยังคงติดตั้งอยู่
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
ผมขอแนะนำให้หน้าคู่มือของมัน สำหรับข้อมูลทั่วไปเพิ่มเติมให้ดูคู่มือนี้