จะตรวจสอบไฟล์ปรับแต่งบนระบบเดเบียนได้อย่างไร?


62

วิธีการค้นหาไฟล์การกำหนดค่าที่จัดการ Debian ทั้งหมดซึ่งมีการเปลี่ยนแปลงจากค่าเริ่มต้น


1
คำถามไปที่นี่ คำตอบไปที่ด้านล่าง
Dennis Williamson

ฉันย้ายคำตอบที่คุณให้ไว้ในคำตอบของคุณ
Zoredache

คำตอบ:


78

หากต้องการค้นหาไฟล์การกำหนดค่าที่จัดการ Debian ทั้งหมดซึ่งมีการเปลี่ยนแปลงจากค่าเริ่มต้นคุณสามารถใช้คำสั่งเช่นนี้

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK/{print $1}'

แก้ไข (ทำงานกับระบบที่แปลเป็นภาษาท้องถิ่น):

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | LANG=C md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK/{print $1}' | sort | less

แก้ไข (ใช้ได้กับแพ็คเกจที่มี OK ในชื่อไฟล์):

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | LANG=C md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK$/{print $1}' | sort | less

ใช้งานได้อย่างมีเสน่ห์ใน Ubuntu 10.4 ฉันจะโหวตคุณเป็นพันครั้ง :-)
Ludwig Weinzierl

ใช้งานได้ดี คุณสามารถใช้md5sum --quietแม้ว่าจะหลีกเลี่ยงการกรองไฟล์ OK ด้วยawk(และทำให้เกิดปัญหาการแปล?) อย่างไรก็ตามคุณไม่ทราบวิธีรวมไฟล์ที่ไม่ได้ติดตามภายใน / etc? เช่นเดียวกับใน / etc / apache2 / sites-available เช่น
sfussenegger

จะน่าสนใจที่จะรู้ว่าคำตอบของฉัน ( debsums -ec) ใช้งานได้จริงเพราะดูเหมือนว่าจะได้รับผลลัพธ์ที่น้อยกว่ามาก
naught101

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

เป็นการตรวจสอบเพิ่มเติมเพื่อดูว่าการเปลี่ยนแปลงการกำหนดค่าใดบ้างที่อาจค้างอยู่หรือล้าสมัยfind /etc -type f \( -iname '*.ucf-dist' -o -iname '*.ucf-old' -o -iname '*.dpkg-old' -o -iname '*.dpkg-dist' \) -print | sort
sphakka

47

จากman debsums:

  debsums -ce
          List changed configuration files.

1
นี่คือคำตอบที่ง่ายและดีที่สุด
mfisch

1
เฉพาะค่าติดตั้ง debsums เท่านั้นและคุณอาจไม่ต้องการติดตั้ง
Alexis Wilke

1
@AlexisWilke: มัน 218kb และมีการอ้างอิงน้อยที่สุด ...
naught101

11

ขออภัยที่ necro แต่ในขณะที่คำตอบของ @ naught101 นั้นถูกต้องสำหรับไฟล์ที่แก้ไขแล้วมันไม่ได้ช่วยเพิ่มไฟล์เลย @ วิธีแก้ปัญหาของ Graeme ดี แต่ขึ้นอยู่กับ etckeeper; ฉันไม่ต้องการแก้ไขระบบไฟล์

find /etc -type f | grep -vFf <(debsums -e -r /etc | sed 's/[[:space:]]*OK$//')

ค้นหาไฟล์ใน / etc / ที่debsumsไม่ได้รายงานที่ถูกต้อง ซึ่งหมายความว่าไฟล์ที่ไม่ได้ติดตามหรือไฟล์ที่ไม่ได้ "ตกลง" (แฮชไม่ตรงกัน)


หนึ่งควรรันdebsums --list-missingเพื่อตรวจสอบว่าอย่างน้อยหนึ่งแพคเกจจะหายไป checksums ของไฟล์รวม ทุกวันนี้ผลลัพธ์ควรว่างเปล่า
Mikko Rantalainen

8

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

ดู:


5

หรือ debsums -e | grep FAILED ซึ่งจะแสดงการประชุมที่หายไปทั้งหมด

(จากแพ็คเกจ debsums)


2

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

http://devstructure.com/blueprint/

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


ไม่ชัดเจนจากหน้าแรกของพวกเขา (ดูค่อนข้างล้าสมัย) หากรองรับ Python-3 มีใครลองบ้าง
sphakka

เมื่อพิจารณาจาก GitHub repo ที่ใช้งานล่าสุดหลายปีที่ผ่านมาฉันจะไม่วางเงินมากเกินไปในการทำงานใน Python3 นอกกรอบ แต่ดูเหมือนว่าจะเขียนได้ค่อนข้างดี สนับสนุน.
dragon788

1

สิ่งนี้จะแยกจากคำถามเดิมเล็กน้อยว่ามันจะให้ไฟล์กำหนดค่า ADDED ซึ่งต่างจากการปรับเปลี่ยนเพียงอย่างเดียว แม้ว่าไฟล์ที่ไม่รวมอยู่ในแพ็คเกจ deb ใด ๆ ก็จะถูกดักจับเช่นกัน พฤติกรรมทั้งสองอาจเป็นที่น่าพอใจ

มันขึ้นอยู่กับการใช้ etckeeper กับ git vcs โดยสมบูรณ์ตั้งแต่เริ่มต้นแม้ว่ามันควรจะทำงานถ้าคุณเพิ่มและคอมมิทไฟล์ที่เปลี่ยนแปลงก่อนหน้านี้หลังจากคอมมิทครั้งแรก โปรดทราบว่าหนึ่ง gotcha ที่นี่คือ Ubuntu ตั้งค่า etckeeper ให้ใช้ Bazaar ตามค่าเริ่มต้น (Canonical sponsor Bazaar) แทนที่จะเป็น git default ที่นักพัฒนา etckeeper ตั้งไว้

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

filter_sed="/committing changes in \/etc after apt run\$/d"

etckeeper vcs log --oneline |
  sed "$filter_sed; \$d; s/ .*//" |
  xargs etckeeper vcs show --name-only --format=format: |
  sort |
  uniq |
  sed "/^\$/d"

สตริงตัวกรองสามารถขยายได้เพื่อรวมการคอมมิทอื่น ๆ ถ้ามันถูกตั้งชื่ออย่างสม่ำเสมอ อาจดีสำหรับการติดตั้งโดยตรงจากไฟล์ deb หรือจากซอร์สโค้ด

ไฟล์เด่นที่สิ่งนี้ทำให้ฉันเป็นของฉันxorg.conf- คุณต้องเพิ่มไฟล์นี้ลงใน / etc / X11 ด้วยตัวคุณเองถ้าคุณต้องการ นอกจากนี้default/grubการเปลี่ยนแปลงของฉันก็หยิบขึ้นมาดูเหมือนว่านี่จะถูกคัดลอกมาจาก / usr / share โดยสคริปต์การติดตั้งโพสต์แทนที่จะแสดงเป็นส่วนหนึ่งของแพ็คเกจ หากมีการเปลี่ยนแปลงไฟล์เช่นนี้วิธีการที่เกี่ยวข้องกับ dpkg จะไม่เปิดเผย


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