คำตอบที่ Ryan Thomson จัดหาให้นั้นถูกต้อง ถึงกระนั้นมันก็ไม่สามารถทำงานได้ (รายละเอียดมีเหตุผลด้านล่าง)
ที่ถูกต้อง (และที่ง่ายที่สุด) วิธีการทำเช่นนั้นจะใช้-o
กับapt
การส่งผ่านตัวเลือก dpkg และบังคับให้dpkg
ไปถามคุณว่าคุณต้องการที่จะเก็บไฟล์ปรับแก้ไขหรือคนเดิม คำสั่งจะเป็นเช่นนี้ -
sudo apt-get --reinstall -o Dpkg::Options::="--force-confask" install foo
คำถามนี้จะถามคุณเหมือนกัน
Configuration file '/etc/foo/foo.conf'
==> Modified (by you or by a script) since installation.
Version in package is the same as at last installation.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** foo.conf (Y/I/N/O/D/Z) [default=N] ?
คุณต้องกดYหรือIเพื่อติดตั้งไฟล์กำหนดค่าดั้งเดิมของผู้ดูแลแพ็คเกจ คุณสามารถกด D เพื่อดูการเปลี่ยนแปลงหรือเริ่มรูทเชลล์ด้วยตัวเลือก Z เพื่อแก้ไขด้วยตัวคุณเอง
หมายเหตุ:หลังจากการแทนที่คุณจะพบไฟล์ที่แก้ไขของคุณเป็นat /etc/foo/foo.conf.dpkg-old
ทำไมตัวเลือกอื่น ๆ จึงใช้ไม่ได้
เนื่องจากตัวเลือกอื่น ๆ ใน dpkg ทำงานได้ไม่ดี ตัวเลือกที่เกี่ยวข้องกับไฟล์ปรับแต่งของแพ็คเกจคือ
--force-confmiss
--force-confnew
--force-confold
--force-confdef
--force-confmiss
จะไม่ทำงานเมื่อเวอร์ชันแพคเกจไม่เปลี่ยนแปลง จากหน้าคน
หากมีการแก้ไข conffile และเวอร์ชันในแพ็กเกจมีการเปลี่ยนแปลงให้ติดตั้งเวอร์ชันใหม่เสมอโดยไม่พร้อมต์เว้นแต่ระบุ --force-confdefด้วยเช่นกัน
--force-confmiss
ทำงานร่วมกับ conffiles ที่ขาดหายไป มันจะล้มเหลวเช่นกันเมื่อเวอร์ชันไม่เปลี่ยนแปลง การอ้างถึงหน้าคน
confmiss: หาก conffile หายไปและเวอร์ชันในแพ็กเกจเปลี่ยนไปให้ติดตั้ง conffile ที่หายไปโดยไม่แจ้งให้ทราบ สิ่งนี้เป็นอันตรายเนื่องจากไม่ได้หมายความว่าจะไม่รักษาการเปลี่ยนแปลง (การลบ) ที่ทำไว้กับไฟล์
--force-confold
จะยังคงมีรุ่นที่ปรับเปลี่ยนเฉพาะในกรณีที่รุ่นที่มีการเปลี่ยนแปลง สำหรับแพ็คเกจเดียวกันมันก็จะล้มเหลวเช่นกัน การอ้างถึงหน้าคน
confold: หากมีการแก้ไข conffile และเวอร์ชันในแพ็กเกจมีการเปลี่ยนแปลงให้เก็บเวอร์ชันเก่าไว้เสมอโดยไม่ต้องพรอมต์เว้นแต่จะระบุ --force-confdef ด้วย
--force-confdef
ก็จะล้มเหลวเพราะการกระทำเริ่มต้นคือการเก็บไฟล์เก่า (บ่งชี้จากข้อความที่แสดงด้วย--force-confask
มันมีสาย(Y/I/N/O/D/Z) [default=N]
ซึ่งหมายความว่าการรักษาเป็นค่าเริ่มต้นดูด้านบน) และหาก--force-confnew
มีการระบุไว้ แต่เวอร์ชันจะไม่เปลี่ยนแปลงนั่นก็จะไม่ทำงานเช่นกัน การอ้างถึงหน้าคน
confdef: หากมีการแก้ไข conffile และเวอร์ชันในแพ็กเกจมีการเปลี่ยนแปลงให้เลือกการกระทำเริ่มต้นเสมอโดยไม่ต้องแจ้ง หากไม่มีการดำเนินการเริ่มต้นระบบจะหยุดถามผู้ใช้เว้นแต่จะได้รับ --force-confnew หรือ --force-confold ซึ่งในกรณีนี้จะใช้เพื่อตัดสินใจการกระทำขั้นสุดท้าย
เพียง แต่--force-confask
จะทำงานเพราะมันชัดเจนจะขอให้คุณคำถามแม้ในขณะที่รุ่นจะเหมือนกัน การอ้างถึงหน้าคน
confask: หากมีการแก้ไข conffile ให้แทนที่ด้วยเวอร์ชั่นในแพ็คเกจเสมอแม้ว่าเวอร์ชั่นในแพ็คเกจจะไม่เปลี่ยนแปลง (ตั้งแต่ dpkg 1.15.8) หาก--force-confmiss , --force-confnew , --force-confoldหรือ--force-confdef ได้รับก็จะถูกนำมาใช้ในการตัดสินใจดำเนินการขั้นสุดท้าย
หวังว่าจะช่วยได้
foo
สิ่งที่ถ้าbar
ขึ้นอยู่กับfoo
และฉันไม่ต้องการที่จะลบbar
?