“ Core Dump” ใน Linux คืออะไร?
เมื่อกระบวนการออกจากระบบโดยไม่คาดคิด มักจะทิ้ง 'คอร์ดัมพ์' ไว้ในระบบของคุณ มีข้อความที่เกี่ยวข้องซึ่งรวมอยู่ในนี้ แกนหลักทำหน้าที่เป็นเครื่องมือดีบักและเป็นอิมเมจของหน่วยความจำที่มีข้อมูลการดีบักด้วย หากคุณเป็นผู้ใช้ที่ไม่ต้องการดีบักโปรแกรม คุณเพียงแค่ลบคอร์:
$ rm แกนกลางคุณยังสามารถปล่อยทิ้งไว้โดยไม่ถูกแตะต้อง เนื่องจากคอร์เก่าจะถูกเขียนทับหากมีการทิ้งคอร์ใหม่ คุณยังสามารถปิดการใช้งานคอร์ดัมพ์ได้ด้วยคำสั่งต่อไปนี้:
$ ลด -ค 0
เราสามารถสร้างคอร์ดัมพ์ได้ตามต้องการ (เช่น ผ่านดีบักเกอร์) หรือสร้างได้โดยอัตโนมัติเมื่อสิ้นสุด เคอร์เนลเริ่มต้นการถ่ายโอนข้อมูลหลักอันเป็นผลมาจากการออกอย่างกะทันหันของโปรแกรม สิ่งเหล่านี้อาจถูกส่งไปยังโปรแกรมอื่น (เช่น systemd-coredump) เพื่อดำเนินการเพิ่มเติม
ตามปกติแล้ว มีการแลกเปลี่ยนระหว่างการรวบรวมข้อมูลเพื่อความเสถียรและการแก้ไขปัญหาที่ดีขึ้น และความเสี่ยงในการเปิดเผยข้อมูลที่ละเอียดอ่อนจากข้อมูลดีบั๊ก
สิ่งที่เราจะครอบคลุม?
ในบทความนี้ เราจะดูวิธีตั้งค่าตำแหน่งของคอร์ดัมพ์บน Ubuntu 20.04 OS เริ่มกันเลย
การสร้างการถ่ายโอนข้อมูลหลัก
มาดูกันก่อนว่าเราจะสร้างคอร์ดัมพ์ได้อย่างไร สำหรับสิ่งนี้ เราใช้คำสั่ง Linux kill ขั้นแรก ค้นหา PID ของกระบวนการ จากนั้นส่งสัญญาณการฆ่า ตัวอย่างเช่น เริ่มกระบวนการสลีปแล้วฆ่ามันด้วย PID:
$ นอน 500$ ฆ่า -s ซิกแทรป $ ( จับ นอน )
ตอนนี้คุณได้เรียนรู้วิธีสร้างการถ่ายโอนข้อมูลหลักแล้ว คุณสามารถใช้ข้อมูลดังกล่าวในส่วนถัดไปต่อไปนี้
พวกเขาไปไหน?
ไฟล์การถ่ายโอนข้อมูลหลักมีชื่อว่า core.pid ตามค่าเริ่มต้น และสร้างขึ้นในไดเร็กทอรีการทำงานของแอปพลิเคชัน ที่นี่ pid คือรหัสกระบวนการ
ด้วยเครื่องมือ ulimit คุณสามารถรับหรือเปลี่ยนขีดจำกัดทรัพยากรระบบสำหรับเชลล์ปัจจุบันและเชลล์อื่นๆ ที่ตามมา หากต้องการตรวจสอบหรือกำหนดค่าขีดจำกัดขนาดไฟล์หลัก ให้ใช้คำสั่งต่อไปนี้:
$ ลด -คเพื่อหลีกเลี่ยงการคั่นหรือตัดทอนไฟล์หลัก ตรวจสอบให้แน่ใจว่าได้ตั้งค่าขีดจำกัดโดยรวมเป็น “ไม่จำกัด” [1] สามารถทำได้ใน /etc/security/limits.conf โดยเพิ่มบรรทัดต่อไปนี้:
รูท - คอร์ไม่จำกัด* - คอร์ไม่ จำกัด
ตอนนี้ เพียงออกจากระบบและลงชื่อเข้าใช้ใหม่เพื่อรับขีดจำกัดที่จะนำไปใช้กับเซสชันของคุณ
การปรับแต่งตำแหน่งของ Core Dump
โดยปกติจะใช้คำสั่ง “sysctl kernel.core_pattern” หรือ “/proc/sys/kernel/core_pattern” เพื่อตั้งค่าตำแหน่งที่คอร์ดัมพ์ไป
ป้อนคำสั่งต่อไปนี้เพื่อดูการตั้งค่าสำหรับรูปแบบหลักปัจจุบัน:
$ แมว / โพรซี / ระบบ / เคอร์เนล / core_patternโดยปกติคุณจะพบค่าเริ่มต้นที่แสดงเป็น 'หลัก' ที่นี่
การใช้ “/proc/sys/kernel/core_pattern” เพื่อตั้งค่าตำแหน่งการถ่ายโอนข้อมูลหลัก
ลองเปลี่ยนเส้นทางการถ่ายโอนข้อมูลหลักชั่วคราวไปยังตำแหน่งใหม่ เช่น /tmp/dumps/core โดยใช้ไฟล์ “/proc/sys/kernel/core_pattern” [2] [3] ตอนนี้ทำตามขั้นตอนต่อไปนี้:
ขั้นตอนที่ 1 . ขั้นแรก สร้างไดเร็กทอรีเพื่อจัดเก็บคอร์ดัมพ์:
$ มคเดียร์ -หน้า / ทีเอ็มพี / การถ่ายโอนข้อมูล / แกน /ขั้นตอนที่ 2 . ให้สิทธิ์ที่จำเป็นแก่ไดเร็กทอรีนี้:
$ chmod ก+x / ทีเอ็มพี / การถ่ายโอนข้อมูล / แกน /ขั้นตอนที่ 3 . ตอนนี้ ตั้งค่าเส้นทางการถ่ายโอนข้อมูลหลักชั่วคราว:
$ เสียงสะท้อน '/tmp/dump/cores/core' | ซูโด ที / โพรซี / ระบบ / เคอร์เนล / core_patternอีกครั้ง ตั้งค่า ulmit เป็นไม่จำกัดทั่วโลก
ที่นี่เราสามารถผนวกข้อมูลอื่น ๆ เข้ากับชื่อไฟล์ได้ดังที่แสดงต่อไปนี้:
$ เสียงสะท้อน '/tmp/dump/cores/core_%e.%p_%t' | ซูโด ที / โพรซี / ระบบ / เคอร์เนล / core_patternแต่ละพารามิเตอร์ที่ใช้ในที่นี้สามารถกำหนดได้ดังนี้:
% และ: สำหรับ เรียกใช้งานได้ ไฟล์ ชื่อ% พี: สำหรับ กระบวนการ รหัส หรือปิ๊ด.
% เสื้อ: สำหรับ เพิ่มการประทับเวลา
ขั้นตอนที่ 4 . ต่อไป เราต้องเปลี่ยนไฟล์ “/etc/sysctl.conf” เพื่อใช้การตั้งค่าก่อนหน้าอย่างถาวร เปิดไฟล์นี้:
$ ซูโด นาโน / เป็นต้น / sysctl.confตอนนี้เพิ่มบรรทัดต่อไปนี้ในไฟล์นี้:
kernel.core_pattern = / ทีเอ็มพี / การถ่ายโอนข้อมูล / แกน / แกนกลางนอกจากนี้ แทนที่จะใช้บรรทัดนี้ คุณสามารถเพิ่มสิ่งนี้:
kernel.core_pattern= '/tmp/dump/cores/core_%e.%p_%t'นั่นคือทั้งหมดที่เราต้องทำ ตอนนี้ สร้างการถ่ายโอนข้อมูลหลักตามที่กล่าวไว้ในส่วน 'การสร้างการถ่ายโอนข้อมูลหลัก' หลังจากนี้ เราสามารถตรวจสอบว่าไฟล์หลักของเราถูกสร้างขึ้นหรือไม่:
$ ล -l / ทีเอ็มพี / การถ่ายโอนข้อมูล / แกน /
ใช้คำสั่ง “Sysctl” เพื่อตั้งค่าตำแหน่งการถ่ายโอนข้อมูลหลัก
เราสามารถใช้คำสั่ง sysctl เพื่อจุดประสงค์เดียวกันได้เช่นกัน มาเปลี่ยนตำแหน่งการถ่ายโอนข้อมูลหลักและรูปแบบของไฟล์หลัก:
ขั้นตอนที่ 1 . สร้างไดเร็กทอรีใหม่และให้สิทธิ์ที่จำเป็น:
$ มคเดียร์ -หน้า / ทีเอ็มพี / มายดัมพ์$ chmod a+rwx / ทีเอ็มพี / มายดัมพ์
ขั้นตอนที่ 2 . ตอนนี้เพียงเรียกใช้คำสั่งต่อไปนี้:
$ ซูโด ระบบ -ใน kernel.core_pattern= / ทีเอ็มพี / มายดัมพ์ / แกน_ % และ. % พี_ % ที
ขั้นตอนที่ 3 . อีกครั้ง สร้างการถ่ายโอนข้อมูลหลักเหมือนที่เราทำก่อนหน้านี้ หลังจากนี้ ให้ตรวจสอบว่าไฟล์หลักถูกสร้างขึ้นหรือไม่:
$ ล -l / ทีเอ็มพี / มายดัมพ์ /
ในระบบ Ubuntu การถ่ายโอนข้อมูลหลักมักจะถูกส่งไปยัง Apport สำหรับระบบที่ใช้ Red Hat ระบบอาจส่งต่อไปยัง Automatic Bug Reporting Tool (ABRT) เริ่มแรก ฉันประสบปัญหาในการกำหนดค่าตำแหน่งการถ่ายโอนข้อมูลหลัก ดังนั้นฉันจึงต้องปิดการใช้งาน Apport บน Ubuntu 20.04 โดยสมบูรณ์ บางที นี่อาจเป็นกรณีของ Red Hat และคนอื่นๆ ด้วย
บทสรุป
ในบทความนี้ เราได้เห็นว่าเราสามารถปรับแต่งตำแหน่งของคอร์ดัมพ์บน Ubuntu 20.04 OS ได้อย่างไร การถ่ายโอนข้อมูลหลักสามารถช่วยให้คุณทราบว่ามีอะไรผิดปกติ แต่ข้อมูลเหล่านี้แย่มากสำหรับการรั่วไหลของข้อมูลที่ละเอียดอ่อน ควรปิดใช้งานการถ่ายโอนข้อมูลหลักเมื่อใดก็ตามที่ไม่จำเป็นและเปิดใช้งานเฉพาะเมื่อจำเป็นเท่านั้น ในสถานการณ์เช่นนี้ ให้ยืนยันว่าไฟล์ถูกจัดเก็บอย่างปลอดภัยเพื่อให้ผู้ใช้ทั่วไปไม่สามารถเข้าถึงข้อมูลได้ นอกจากนี้ โดยไม่คำนึงถึงการตัดสินใจของคุณ คุณควรทดสอบการกำหนดค่าของคุณเสมอเพื่อให้แน่ใจว่าการทำงานเป็นไปตามที่ต้องการ
การถ่ายโอนข้อมูลหลักและการกำหนดค่าเริ่มต้นได้รับการจัดการแตกต่างกันไปตามระบบปฏิบัติการต่างๆ เมื่อไม่นานมานี้ ระบบ Linux ส่วนใหญ่ได้นำ systemd มาใช้ ซึ่งได้นำมาซึ่งการปรับเปลี่ยนกฎเล็กน้อย คุณอาจต้องค้นหาคอร์ดัมพ์ ทั้งนี้ขึ้นอยู่กับการกำหนดค่าระบบของคุณ