วิธีเรียนรู้เพิ่มเติมเกี่ยวกับเคอร์เนล Linux จากเครื่องของคุณเอง



ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา

การเรียนรู้ที่จะทำงานกับ GNU / Linux โดยทั่วไปจะเป็นการเรียนรู้ที่จะทำงานกับสภาพแวดล้อมเดสก์ท็อป เทคโนโลยีธีมช่วยให้สภาพแวดล้อมเดสก์ท็อปเหล่านี้เลียนแบบอินเทอร์เฟซของอุปกรณ์ iOS, Microsoft Windows และ OS X ซึ่งจะช่วยลดปัญหานี้ให้น้อยที่สุด หลายคนไปต่อและเรียนรู้การดูแลระบบบรรทัดคำสั่ง Unix ด้วย Bash หรือ tcsh เชลล์ อย่างไรก็ตามการมีความรู้เกี่ยวกับภายในของเคอร์เนลลินุกซ์สามารถช่วยให้คุณเข้าใจได้ดีขึ้นว่าส่วนต่างๆของ opcode โต้ตอบกันอย่างไร



บางคนอาจโต้แย้งว่าควรไปอีกหลายขั้นตอนต่อไปและเรียนรู้เพิ่มเติมว่าคอมไพเลอร์ถ่ายทอดรหัส C ไปยังผู้สอนเครื่องสำหรับไมโครโปรเซสเซอร์ได้อย่างไร จากนั้นผู้สนับสนุนรหัสแอสเซมบลีจะโต้แย้งว่าควรเรียนรู้ ASM เพื่อเข้าใจการเขียนโปรแกรมบนแพลตฟอร์ม x86 และ x86_64 อย่างแท้จริง โดยไม่คำนึงถึงตำแหน่งเหล่านี้คำสั่งพื้นฐานของ Linux สามารถให้ข้อมูลมากมายเกี่ยวกับวิธีที่เคอร์เนลมองเห็นคอมพิวเตอร์ของคุณ การเรียนรู้ผ่านกระบวนทัศน์รูปลักษณ์ แต่อย่าแตะต้องเป็นวิธีที่ยอดเยี่ยมในการควบคุมเคอร์เนลเอง แม้ว่าจะใช้บัญชีรูทสำหรับตัวอย่างในหน้านี้ แต่ขอแนะนำให้คุณดูไดเร็กทอรีที่เชื่อมโยงเคอร์เนลผ่านบัญชีผู้ใช้เท่านั้น



วิธีที่ 1: ไดเร็กทอรี / proc

ไดเร็กทอรี / proc อยู่ในภูมิภาคหลักของไดเร็กทอรี root ระดับบนสุดในโครงสร้างไฟล์ Unix ใด ๆ ประกอบด้วยสิ่งที่เรียกว่าระบบไฟล์ proc หรือที่รู้จักกันดีในชื่อ procfs ซึ่งมีข้อมูลเกี่ยวกับวิธีที่ทรัพยากรต่างๆเข้าถึงหน่วยความจำเคอร์เนล แมปกับ / proc ในเวลาที่ระบบบูท เนื่องจากโครงสร้างไฟล์พร็อกซีนี้ทำหน้าที่เป็นอินเทอร์เฟซไปยังโครงสร้างข้อมูลภายในภายในเคอร์เนลของลินุกซ์จึงเป็นการดีที่สุดที่จะสำรวจสิ่งนี้ผ่านบัญชีผู้ใช้เท่านั้น ไฟล์ส่วนใหญ่จะถูกจัดประเภทตามโครงสร้างไฟล์ระบบที่มองเห็นได้ว่าเป็นแบบอ่านอย่างเดียวอย่างไรก็ตามควรอยู่ในด้านที่ปลอดภัย



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

2559-11-25_020006

การพิมพ์อุปกรณ์แมวจะช่วยให้คุณเห็นสิ่งที่แนบมากับเครื่องของคุณ



2559-11-25_020109

อย่างไรก็ตามคุณสามารถออกคำสั่ง man proc เพื่อดูว่าโครงสร้างไฟล์ / proc เกี่ยวข้องกับเคอร์เนลอย่างไร หน้าที่แสดงมาจากคู่มือโปรแกรมเมอร์ Linux

2559-11-25_020156

วิธีที่ 2: ไดเร็กทอรี / sys

จุดแวะต่อไปของคุณในการทัวร์ชมเคอร์เนลของคุณคือ / sys ซึ่งเป็นไดเร็กทอรีอื่นที่แมปกับโครงสร้างไฟล์หลอก สิ่งนี้เป็นไปตามแนวคิด Unix ทั่วไปเหมือนกับที่ / proc ทำ แต่จะส่งออกข้อมูลเกี่ยวกับไดรฟ์อุปกรณ์ที่เกี่ยวข้องและระบบย่อยเคอร์เนลจำนวนหนึ่งแทน หากคุณเคยทำงานกับระบบที่ใช้ BSD มาก่อนคุณอาจคุ้นเคยกับ sysctl ที่ให้ฟังก์ชันเหล่านี้มากขึ้น อุปกรณ์บัส PCI, USB และ S / 390 ถูกแมปกับไดเร็กทอรี / sys ทั้งหมด

ใช้ cd / sys เพื่อตรงไปที่ไดเร็กทอรีจากนั้นออกคำสั่ง ls หรือ dir คุณอาจมีไดเร็กทอรีที่มีชื่อว่า block, class, devices, fs, kernel และอื่น ๆ คุณสามารถสำรวจไฟล์เหล่านี้เพื่อดูไฟล์แบบแบนเพิ่มเติมที่มีข้อมูลเกี่ยวกับระบบ แต่ให้ทำอีกครั้งจากบัญชีผู้ใช้และคอยดู แต่อย่าแตะความคิดเกี่ยวกับตัวคุณเอง

วิธีที่ 3: ไดเร็กทอรี / dev

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

2559-11-25_020242

สิ่งเหล่านี้มีความพิเศษมาก ไฟล์ / dev / null เป็นอุปกรณ์ null ที่ไม่ทำอะไรเลย หากคุณพิมพ์ cat / dev / null คุณจะไม่ได้อะไรเลย เรียกว่าที่เก็บข้อมูลบิตและสามารถเปลี่ยนทิศทางเอาต์พุตไปยังที่เก็บข้อมูลเพื่อให้หน้าจอสะอาดอยู่เสมอ ไฟล์ที่เรียกว่า / dev / zero ไม่มีข้อมูลใด ๆ นอกจากข้อมูลที่เป็นศูนย์ซึ่งสามารถเขียนลงในดิสก์เพื่อให้เป็นศูนย์ ไฟล์สุ่มและไฟล์ urandom มีข้อมูลขยะแบบสุ่มสำหรับสร้างแฮชความปลอดภัย

หากคุณเคยฟอร์แมตดิสก์มาแล้วอย่างน้อยคุณอาจมีประสบการณ์กับวิธีที่เคอร์เนล Linux ดู แต่ละดิสก์ที่เชื่อมต่อกับระบบจะมีชื่อเช่น sda, sdb และอื่น ๆ สำหรับแต่ละดิสก์ ดิสก์ประเภทต่างๆมีชื่อที่แตกต่างกัน โปรดทราบว่าไดเร็กทอรี / dev ใช้คำจำกัดความทางวิทยาศาสตร์คอมพิวเตอร์อย่างเป็นทางการที่เป็นไปได้ของดิสก์แทนที่จะเป็นวิธีที่เรามักจะใช้คำนั้น ซึ่งหมายความว่าฮาร์ดไดรฟ์, SSD, การ์ด SD, การ์ด microSDHC, ระบบไฟล์ของสมาร์ทโฟนที่ต่อเชื่อมผ่าน USB, แท่ง USB และแม้แต่แท็บเล็ตที่ติดตั้งจะเป็นดิสก์ทั้งหมดไปยังเคอร์เนล

ชื่อดิสก์แต่ละชื่อใน Linux จะได้รับตัวเลขหลังจากที่ระบุหมายเลขพาร์ติชัน หากคุณมี SSD ที่มีพาร์ติชันหลักสองพาร์ติชันคุณอาจมี / dev / sda1 และ / dev / sda2 เป็นไดรฟ์ข้อมูลที่ถูกต้อง เป็นไปได้มากกว่าถ้าคุณใช้ Linux จากเดสก์ท็อปหรือแล็ปท็อปที่มีการแบ่งพาร์ติชันสไตล์ MBR คุณจะมี / dev / sda1 ตั้งค่าเป็นพาร์ติชัน ext4 ที่มี Linux ติดตั้งอยู่ มากกว่าที่เป็นไปได้ / dev / sda2 เป็นพาร์ติชันเสริมซึ่งมี / dev / sda5 เป็นพาร์ติชัน swap โครงการนี้เป็นเรื่องธรรมดา แต่ไม่จำเป็น โปรดสังเกตว่าเนื่องจาก swap พาร์ติชันในตัวอย่างทั่วไปนี้เป็นโลจิคัลดิสก์ภายในพาร์ติชันเสริมจึงได้รับ 5 แทนที่จะเป็น 3 เป็นตัวเลข

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

สมมติว่าแท่งของคุณแสดงเป็น / dev / sdc จากนั้นคุณสามารถใช้ sudo fdisk / dev / sdc เพื่อโหลดขึ้นมา หากคุณมีพาร์ติชั่นที่ถูกต้องให้พิมพ์ t เพื่อเปลี่ยนประเภทและพิมพ์ L เพื่อโหลดรายการรหัสฐานสิบหก โปรดสังเกตว่าโครงร่างพาร์ติชัน MBR และ GUID พูดคุยกับเคอร์เนลต่างกันดังนั้นจึงมีการกำหนดที่แตกต่างกัน

2559-11-25_020331

บ่อยกว่าที่คุณจะตั้งค่าไดรฟ์เป็นประเภท 83 ซึ่งมีไว้สำหรับไดรฟ์ Linux 82 ซึ่งใช้สำหรับพาร์ติชันการแลกเปลี่ยน Linux หรือประเภทไฟล์ FAT ประเภทใดประเภทหนึ่ง FAT ย้อนกลับไปในบางรูปแบบหรืออีกรูปแบบหนึ่งถึงปีพ. ศ. 2520 และยังคงเป็นที่ต้องการสำหรับอุปกรณ์พกพาหลายประเภทรวมทั้งไดรฟ์แบบถอดได้ โปรดทราบว่าพาร์ติชันบางประเภทเช่นประเภท 0x0c มีคุณสมบัติที่เรียกว่าการสนับสนุน LBA

เมื่อโปรแกรมเมอร์ออกแบบเคอร์เนลสำหรับระบบปฏิบัติการพวกเขามีวิธีการดูดิสก์ที่แตกต่างกันเล็กน้อย หนึ่งคือการแบ่งจานออกเป็นกระบอกสูบหัวและส่วน นี่เป็นวิธีคลาสสิกในการอ้างถึงฮาร์ดไดรฟ์เป็นเวลานานที่สุด รูปทรงของดิสก์ของแท้ไม่เคยมีความสำคัญต่อ Linux และรูปแบบนี้น่าเสียดายที่ไม่มีที่อยู่หลังจากประมาณ 8 กิกะไบต์ไบนารี วิธีที่สองคือการใช้การกำหนดแอดเดรส C / H / S แบบลอจิกซึ่งจะทำเช่นนี้ แต่จะช่วยให้ตัวควบคุมดิสก์สามารถแมปหมายเลขกระบอกสูบหัวและเซกเตอร์ได้ทุกที่ที่ต้องการ นี่คือเหตุผลที่ระบบปฏิบัติการสามารถอ้างได้ในทางทฤษฎีว่ามีหัวอยู่ในการ์ด SD หรือแท่ง USB เมื่อเป็นไปไม่ได้ทางกายภาพ

วิธีที่สามคือการใช้ Logical Block Addressing ซึ่งเป็นสิ่งที่ LBA ย่อมาจาก แต่ละบล็อกทางกายภาพในไดรฟ์ข้อมูลจะได้รับตัวเลขในโครงร่างนี้ ระบบปฏิบัติการบอกให้ตัวควบคุมดิสก์เขียนลงในบล็อกที่มีหมายเลขหนึ่ง แต่ไม่ทราบว่านั่นคือบล็อกโดยตรงบนดิสก์หรือไม่ นี่เป็นรูปแบบที่ใช้กันมากที่สุดในปัจจุบันและแน่นอนว่าถูกนำมาใช้กับฮาร์ดดิสก์ส่วนใหญ่ตั้งแต่กลางทศวรรษที่ 1990

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

วิธีที่ 4: การเรียกระบบจากคู่มือโปรแกรมเมอร์ Linux

โปรแกรมอ่าน man page ออนบอร์ดที่มาพร้อมกับลีนุกซ์ส่วนใหญ่สามารถทำให้คุณมีหลักสูตรที่ผิดพลาดเกี่ยวกับการโทรระบบซึ่งสามารถช่วยได้อย่างมากในการเรียนรู้เกี่ยวกับเคอร์เนล เริ่มเบราว์เซอร์หน้าเว็บแบบกราฟิก xman จากลิงค์. desktop ถ้าคุณมีหรืออีกทางเลือกหนึ่งโดยกดปุ่ม super และ R ค้างไว้พร้อมกันจากนั้นพิมพ์ xman แล้วกด Enter เลือกตัวเลือก“ Manual Page” จากนั้นเลือก“ Sections” และสุดท้าย“ (2) System Calls” จากเมนูแบบเลื่อนลง

2559-11-25_020430

เมื่อตัวเลือกอ่าน“ บทนำ ” ปรากฏขึ้นให้เลือกว่า หน้าจากคู่มือโปรแกรมเมอร์ Linux ที่จะสอนคุณเกี่ยวกับการโทรระบบจะทักทายคุณ

2559-11-25_020518

อ่าน 6 นาที