/proc - รับข้อมูลกระบวนการ Linux และฮาร์ดแวร์
วันนี้ เราจะเจาะลึกเนื้อหาของไดเร็กทอรี /proc เพื่อพัฒนาความเข้าใจเกี่ยวกับฟังก์ชันต่างๆ ให้ดียิ่งขึ้น สิ่งสำคัญที่ควรทราบคือไดเร็กทอรี /proc เป็นคุณลักษณะทั่วไปใน Linux ทุกรุ่น โดยไม่คำนึงถึงรสชาติหรือสถาปัตยกรรม
ความเข้าใจผิดอย่างหนึ่งที่เราต้องชี้แจงทันทีคือไดเร็กทอรี /proc ไม่ใช่ระบบไฟล์ทั่วไปในความหมายดั้งเดิมของคำนี้
เป็นระบบไฟล์เสมือนที่มีข้อมูลเกี่ยวกับกระบวนการและข้อมูลอื่นๆ ที่เกี่ยวข้องกับระบบภายใน procfs ระบบไฟล์นี้แมปกับไดเร็กทอรี /proc และติดตั้งระหว่างกระบวนการบูตของระบบ
/proc ใน Linux คืออะไร
ระบบไฟล์ /proc ทำหน้าที่เป็นอินเทอร์เฟซไปยังโครงสร้างข้อมูลเคอร์เนลและข้อมูลรันไทม์ ซึ่งให้วิธีการสำหรับทั้งผู้ใช้และแอปพลิเคชันในการเข้าถึงข้อมูลโดยละเอียดเกี่ยวกับกระบวนการ การกำหนดค่าระบบ ฮาร์ดแวร์ และอื่นๆ โดยการเปิดเผย ข้อมูลนี้ผ่านลำดับชั้นของไฟล์เสมือน
หากต้องการดูรายการไฟล์และไดเร็กทอรีทั้งหมดในระบบไฟล์ /proc คุณสามารถใช้คำสั่ง ls ดังที่แสดง
ls /proc
การนำทาง /proc ใน Linux
เมื่อคุณนำทางไปยังไดเร็กทอรี /proc คุณจะสังเกตเห็นว่ามีไฟล์ที่ฟังดูคุ้นเคยจำนวนหนึ่ง และไดเร็กทอรีที่มีหมายเลขกำกับอยู่จำนวนหนึ่ง ซึ่งแต่ละไดเร็กทอรีสอดคล้องกับกระบวนการที่ทำงานอยู่ในระบบ
cd /proc
ls
ไดเร็กทอรีที่มีหมายเลขเหล่านี้แสดงถึงกระบวนการต่างๆ หรือที่รู้จักกันดีในชื่อ Process ID (PID) และภายในไดเร็กทอรีคือคำสั่งที่ครอบครองไดเร็กทอรีเหล่านั้น ไฟล์ประกอบด้วยข้อมูลระบบ เช่น หน่วยความจำ (meminfo) ข้อมูล CPU (cpuinfo) และระบบไฟล์ที่มีอยู่
นี่คือไฟล์และไดเร็กทอรีหลักบางส่วนที่คุณจะพบ:
/proc/cpuinfo
– รายการข้อมูลเกี่ยวกับ CPU บนระบบ เช่น รุ่น ความเร็ว และจำนวนคอร์/proc/meminfo
– แสดงรายการรายละเอียดเกี่ยวกับการใช้หน่วยความจำและสถิติที่ประกอบด้วยจำนวนหน่วยความจำทั้งหมด หน่วยความจำที่ว่าง และหน่วยความจำที่ใช้โดยแต่ละกระบวนการ/proc/filesystems
– ประกอบด้วยรายการระบบไฟล์ทั้งหมดที่เคอร์เนลรองรับ/proc/sys
– แสดงรายการการกำหนดค่าและพารามิเตอร์รันไทม์สำหรับเคอร์เนล/proc/loadavg
– แสดงค่าเฉลี่ยโหลดของระบบในช่วงเวลาต่างๆ เช่น 1, 5 และ 15 นาที/proc/self
– ลิงก์สัญลักษณ์ไปยังไดเร็กทอรีของกระบวนการ/proc/stat
– ประกอบด้วยสถิติต่างๆ เกี่ยวกับระบบ เช่น จำนวนกระบวนการที่ทำงาน จำนวนการขัดจังหวะ และระยะเวลาที่ใช้ในแต่ละสถานะของ CPU/proc/uptime
– ประกอบด้วยระยะเวลาที่ระบบกำลังทำงานอยู่/proc/PID
– มีข้อมูลเกี่ยวกับกระบวนการเฉพาะ โดยที่ PID คือรหัสกระบวนการ
การแยกข้อมูลระบบ
/proc/meminfo ใช้เพื่อแสดงข้อมูลเกี่ยวกับการใช้หน่วยความจำและสถิติของระบบ Linux ซึ่งมีสแน็ปช็อตของตัวชี้วัดที่เกี่ยวข้องกับหน่วยความจำต่างๆ ซึ่งอาจมีประโยชน์สำหรับการตรวจสอบประสิทธิภาพของระบบและการใช้ทรัพยากร .
cat /proc/meminfo
อย่างที่คุณเห็น /proc/meminfo มีข้อมูลมากมายเกี่ยวกับหน่วยความจำของระบบของคุณ รวมถึงจำนวนทั้งหมดที่มี (เป็น kb) และจำนวนว่างในสองอันดับแรก เส้น
การรันคำสั่ง cat กับไฟล์ใดๆ ใน /proc จะแสดงเนื้อหาออกมา ข้อมูลเกี่ยวกับไฟล์ใด ๆ มีอยู่ในหน้าคนโดยการเรียกใช้:
man 5 /proc/<filename>
ฉันจะให้บทสรุปสั้นๆ เกี่ยวกับไฟล์ /proc's:
- /proc/cmdline – ข้อมูลบรรทัดคำสั่งเคอร์เนล
- /proc/console – ข้อมูลเกี่ยวกับคอนโซลปัจจุบันรวมถึง tty
- /proc/devices – ไดรเวอร์อุปกรณ์ที่กำหนดค่าไว้สำหรับเคอร์เนลที่ทำงานอยู่ในปัจจุบัน
- /proc/dma – ข้อมูลเกี่ยวกับช่อง DMA ปัจจุบัน
- /proc/fb – อุปกรณ์ Framebuffer
- /proc/filesystems – ระบบไฟล์ปัจจุบันที่เคอร์เนลรองรับ
- /proc/iomem – แผนที่หน่วยความจำระบบปัจจุบันสำหรับอุปกรณ์
- /proc/ioports – ภูมิภาคพอร์ตที่ลงทะเบียนสำหรับการสื่อสารอินพุต-เอาต์พุตกับอุปกรณ์
- /proc/loadavg – ค่าเฉลี่ยโหลดของระบบ
- /proc/locks – ไฟล์ที่ถูกล็อคโดยเคอร์เนลในปัจจุบัน
- /proc/meminfo – ข้อมูลเกี่ยวกับหน่วยความจำระบบ (ดูตัวอย่างด้านบน)
- /proc/misc – ไดรเวอร์เบ็ดเตล็ดที่ลงทะเบียนสำหรับอุปกรณ์หลักเบ็ดเตล็ด
- /proc/modules – โมดูลเคอร์เนลที่โหลดในปัจจุบัน
- /proc/mounts – รายการการเมาต์ทั้งหมดที่ระบบใช้งาน
- /proc/partitions – ข้อมูลโดยละเอียดเกี่ยวกับพาร์ติชันที่มีอยู่ในระบบ
- /proc/pci – ข้อมูลเกี่ยวกับอุปกรณ์ PCI ทุกตัว
- /proc/stat – บันทึกหรือสถิติต่างๆ ที่เก็บไว้จากการรีบูตครั้งล่าสุด
- /proc/swap – ข้อมูลเกี่ยวกับพื้นที่สว็อป
- /proc/uptime – ข้อมูลสถานะการออนไลน์ (เป็นวินาที)
- /proc/version – เวอร์ชันเคอร์เนล เวอร์ชัน gcc และการติดตั้ง Linux
การแยกข้อมูลกระบวนการ
ภายในไดเร็กทอรีที่มีหมายเลข /proc คุณจะพบไฟล์และลิงก์จำนวนหนึ่ง โปรดจำไว้ว่าหมายเลขของไดเรกทอรีเหล่านี้สัมพันธ์กับ PID ของคำสั่งที่รันอยู่ภายใน
ตัวอย่างเช่น การไปที่ /proc/
จะให้รายละเอียดต่างๆ เช่น:
/proc//cmdline
– อาร์กิวเมนต์บรรทัดคำสั่งที่ใช้ในการเริ่มกระบวนการ/proc//status
– ข้อมูลสถานะโดยละเอียด รวมถึงการใช้งานหน่วยความจำและสถิติกระบวนการ/proc//fd
– ลิงก์สัญลักษณ์ไปยังไฟล์ที่เปิดโดยกระบวนการ
ลองใช้ตัวอย่างเพื่อดูโฟลเดอร์ชื่อ /proc/12
cd /proc/12
ls
ถ้าฉันวิ่ง:
cat /proc/12/status
ฉันได้รับสิ่งต่อไปนี้:
แล้วนี่หมายความว่าอะไร? ส่วนสำคัญอยู่ที่ด้านบน จากไฟล์สถานะเราสามารถดูได้ว่ากระบวนการนี้เป็นของ rcu_tasks_rude_kthread สถานะปัจจุบันคือ ไม่ได้ใช้งาน และกระบวนการ ID คือ 12 อย่างเห็นได้ชัด
นอกจากนี้เรายังสามารถดูว่าใครกำลังดำเนินการนี้ เนื่องจาก UID และ GID มีค่า 0 ซึ่งบ่งชี้ว่ากระบวนการนี้เป็นของ root แข็งแกร่ง> ผู้ใช้
ในไดเร็กทอรีที่มีหมายเลขกำกับ คุณจะมีโครงสร้างไฟล์ที่คล้ายกัน และไดเร็กทอรีที่สำคัญที่สุดพร้อมคำอธิบายมีดังนี้:
- cmdline – บรรทัดคำสั่งของกระบวนการ
- สภาพแวดล้อม – ตัวแปรสภาพแวดล้อม
- fd – ตัวอธิบายไฟล์
- ขีดจำกัด – มีข้อมูลเกี่ยวกับขีดจำกัดของกระบวนการ
- เมานต์ – ข้อมูลที่เกี่ยวข้อง
คุณจะสังเกตเห็นลิงก์หลายลิงก์ในไดเร็กทอรีที่มีหมายเลข:
- cwd – ลิงก์ไปยังไดเร็กทอรีการทำงานปัจจุบันของกระบวนการ
- exe – ลิงก์ไปยังปฏิบัติการของกระบวนการ
- root – ลิงก์ไปยังไดเร็กทอรีงานของกระบวนการ
นี่ควรช่วยให้คุณเริ่มต้นทำความคุ้นเคยกับไดเร็กทอรี /proc นอกจากนี้ยังควรให้ข้อมูลเชิงลึกเกี่ยวกับวิธีที่คำสั่งจำนวนหนึ่งได้รับข้อมูล เช่น สถานะการออนไลน์ lsof เมาท์ และ ps และอื่นๆ อีกมากมาย