เกือบทุกไฟล์ที่อยู่ภายใต้การ/dev
มีแฟ้มอุปกรณ์ ในขณะที่การอ่านและการเขียนไปยังไฟล์ปกติเก็บข้อมูลบนดิสก์หรือระบบไฟล์อื่น ๆ การเข้าถึงไฟล์อุปกรณ์สื่อสารกับไดรเวอร์ในเคอร์เนลซึ่งโดยทั่วไปแล้วจะสื่อสารกับฮาร์ดแวร์ชิ้นหนึ่ง (อุปกรณ์ฮาร์ดแวร์ดังนั้นชื่อ)
ไฟล์อุปกรณ์มีสองประเภท: อุปกรณ์บล็อก (ระบุโดยb
เป็นอักขระตัวแรกในเอาต์พุตls -l
) และอุปกรณ์อักขระ (ระบุโดยc
) ความแตกต่างระหว่างอุปกรณ์บล็อกและตัวละครนั้นไม่เป็นสากลอย่างสมบูรณ์ อุปกรณ์บล็อกคือสิ่งต่าง ๆ เช่นดิสก์ซึ่งมีลักษณะเหมือนไฟล์ขนาดใหญ่ขนาดคงที่: หากคุณเขียนไบต์ที่ออฟเซ็ตและอ่านจากอุปกรณ์ที่ออฟเซ็ตนั้นคุณจะได้รับไบท์นั้นกลับมา อุปกรณ์ตัวละครเป็นอะไรก็ได้ที่การเขียนไบต์มีผลทันที (เช่นมันถูกปล่อยออกมาในสายอนุกรม) และการอ่านไบต์ก็มีผลทันที (เช่นการอ่านจากพอร์ตอนุกรม)
ความหมายของไฟล์อุปกรณ์ถูกกำหนดโดยหมายเลขไม่ใช่ชื่อ (ชื่อมีความสำคัญกับแอปพลิเคชัน แต่ไม่ใช่เคอร์เนล) จำนวนนั้นเป็นสองตัวเลขจริง ๆ : หมายเลขหลักระบุว่าไดรเวอร์ใดรับผิดชอบอุปกรณ์นี้และหมายเลขรองทำให้ผู้ขับขี่สามารถขับอุปกรณ์ได้หลายเครื่อง¹ หมายเลขเหล่านี้จะปรากฏในls -l
รายการซึ่งโดยปกติคุณจะพบขนาดไฟล์ เช่นbrw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda
→อุปกรณ์นี้เป็นหลัก 8, รอง 0
ไฟล์อุปกรณ์ภายใต้บางไฟล์/dev
ไม่ตรงกับอุปกรณ์ฮาร์ดแวร์ หนึ่งที่มีอยู่ในทุกระบบยูนิกซ์คือ/dev/null
; การเขียนถึงมันไม่มีผลกระทบและการอ่านจากมันจะไม่ส่งคืนข้อมูลใด ๆ มักจะสะดวกในเชลล์สคริปต์เมื่อคุณต้องการละเว้นเอาต์พุตจากคำสั่ง ( >/dev/null
) หรือรันคำสั่งที่ไม่มีอินพุต ( </dev/null
) ตัวอย่างทั่วไปอื่น ๆ ที่มี/dev/zero
(ซึ่งจะส่งกลับไบต์ null ไม่มีที่สิ้นสุด ) /dev/urandom
(ซึ่งผลตอบแทนที่สุ่มไบต์ไม่มีที่สิ้นสุด )
ไฟล์อุปกรณ์บางไฟล์มีความหมายที่ขึ้นอยู่กับกระบวนการที่เข้าถึงได้ ตัวอย่างเช่น/dev/stdin
กำหนดอินพุตมาตรฐานของกระบวนการปัจจุบัน การเปิดจากมีผลคล้ายกับการเปิดไฟล์ต้นฉบับที่เปิดเป็นอินพุตมาตรฐานของกระบวนการ ในทำนองเดียวกัน/dev/tty
กำหนดเทอร์มินัลที่เชื่อมต่อกระบวนการ ภายใต้ Linux ทุกวันนี้/dev/stdin
และเพื่อน ๆ ไม่ได้ถูกนำมาใช้เป็นอุปกรณ์ตัวอักษร แต่เป็นการเชื่อมโยงสัญลักษณ์ไปยังกลไกทั่วไปที่อนุญาตให้อ้างอิงไฟล์ descriptor ทุกไฟล์ (แทนที่จะเป็นเพียง 0, 1 และ 2 ภายใต้วิธีดั้งเดิม); ตัวอย่างเช่นการเชื่อมโยงสัญลักษณ์/dev/stdin
/proc/self/fd/0
ดูที่/ dev / fd เกี่ยวข้องกับ / proc / self / fd / อย่างไร .
คุณจะพบลิงค์สัญลักษณ์/dev
มากมาย สิ่งนี้อาจเกิดขึ้นได้จากเหตุผลในอดีต: ไฟล์อุปกรณ์ถูกย้ายจากชื่อหนึ่งไปยังอีกชื่อหนึ่ง แต่บางแอปพลิเคชันยังคงใช้ชื่อเดิม ตัวอย่างเช่น/dev/scd0
เป็นลิงค์สัญลักษณ์/dev/sr0
ภายใต้ Linux; ทั้งกำหนดอุปกรณ์ซีดีเครื่องแรก เหตุผลสำหรับการเชื่อมโยงสัญลักษณ์อีกอย่างหนึ่งคือองค์กร: ภายใต้ Linux คุณจะพบฮาร์ดดิสก์ของคุณและพาร์ทิชันในหลายสถานที่: /dev/sda
และ/dev/sda1
และเพื่อน (แต่ละดิสก์ที่กำหนดโดยตัวอักษรโดยพลการและพาร์ทิชันตามรูปแบบพาร์ทิชัน), /dev/disk/by-id/*
(ดิสก์ที่กำหนดโดย หมายเลขซีเรียลที่ไม่ซ้ำกัน), /dev/disk/by-label/*
(พาร์ติชันที่มีระบบไฟล์กำหนดโดยฉลากที่มนุษย์เลือก); และอื่น ๆ. ลิงก์สัญลักษณ์ยังใช้เมื่อชื่ออุปกรณ์ทั่วไปอาจเป็นหนึ่งในหลาย ๆ ตัวอย่างเช่น/dev/dvd
อาจเป็นลิงก์สัญลักษณ์/dev/sr0
หรืออาจเป็นลิงก์ไปยัง/dev/sr1
หากคุณมีเครื่องอ่านซีดีสองเครื่องและเครื่องที่สองคือเครื่องอ่าน DVD เริ่มต้น
ท้ายที่สุดมีไฟล์อื่น ๆ อีกสองสามไฟล์ที่คุณอาจพบภายใต้/dev
เหตุผลดั้งเดิม คุณจะไม่พบสิ่งเดียวกันในทุกระบบ บน Unices ที่สุด/dev/log
เป็นซ็อกเก็ตที่ใช้โปรแกรมในการปล่อยข้อความเข้าสู่ระบบ เป็นสคริปต์ที่สร้างรายการใน/dev/MAKEDEV
/dev
บนระบบลินุกซ์ที่ทันสมัยในรายการ/dev/
ที่ถูกสร้างขึ้นโดยอัตโนมัติudev , MAKEDEV
obsoleting
¹สิ่งนี้ไม่เป็นความจริงภายใต้ Linux อีกต่อไป แต่รายละเอียดนี้มีความสำคัญต่อผู้เขียนโปรแกรมควบคุมอุปกรณ์เท่านั้น