ค้นหาเว็บไซต์

/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 และอื่นๆ อีกมากมาย