लगभग सभी के अंतर्गत फ़ाइलें /dev
हैं डिवाइस फ़ाइलें । जबकि एक नियमित फ़ाइल को पढ़ना और लिखना एक डिस्क या अन्य फाइल सिस्टम पर डेटा संग्रहीत करता है, डिवाइस फ़ाइल तक पहुंचने से कर्नेल में एक ड्राइवर के साथ संचार होता है, जो आमतौर पर हार्डवेयर के एक टुकड़े (एक हार्डवेयर डिवाइस, इसलिए नाम) के साथ संचार करता है।
डिवाइस फ़ाइलों के दो प्रकार हैं: ब्लॉक डिवाइस ( b
आउटपुट में पहला चरित्र के रूप में दर्शाया गया है ls -l
), और चरित्र डिवाइस (संकेत द्वारा c
)। ब्लॉक और चरित्र उपकरणों के बीच का अंतर पूरी तरह से सार्वभौमिक नहीं है। ब्लॉक डिवाइस डिस्क की तरह की चीजें हैं, जो बड़ी, निश्चित आकार की फाइलों की तरह व्यवहार करती हैं: यदि आप एक निश्चित ऑफसेट पर एक बाइट लिखते हैं, और बाद में उस ऑफसेट पर डिवाइस से पढ़ा जाता है, तो आपको वह बाइट वापस मिल जाती है। कैरेक्टर डिवाइस कुछ और ही होते हैं, जहां बाइट लिखने का कुछ तात्कालिक प्रभाव होता है (जैसे कि यह एक सीरियल लाइन पर उत्सर्जित होता है) और एक बाइट को पढ़ने से कुछ तात्कालिक प्रभाव भी होता है (जैसे कि यह सीरियल पोर्ट से पढ़ा जाता है)।
डिवाइस फ़ाइल का अर्थ उसके नंबर से निर्धारित होता है, उसके नाम से नहीं (नाम अनुप्रयोगों के लिए मायने रखता है, लेकिन कर्नेल के लिए नहीं)। संख्या वास्तव में दो नंबर है: प्रमुख संख्या इंगित करती है कि इस डिवाइस के लिए कौन सा ड्राइवर जिम्मेदार है, और मामूली संख्या एक ड्राइवर को कई डिवाइस चलाने की अनुमति देती है। ये नंबर ls -l
लिस्टिंग में दिखाई देते हैं , जहाँ आपको सामान्य रूप से फ़ाइल का आकार मिलेगा। उदा brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda
→ यह उपकरण प्रमुख major, लघु ० है।
कुछ डिवाइस फ़ाइलें /dev
हार्डवेयर डिवाइस के अनुरूप नहीं होती हैं। हर यूनिक्स प्रणाली पर मौजूद एक है /dev/null
; इस पर लिखने का कोई प्रभाव नहीं है, और इससे पढ़ने से कोई डेटा वापस नहीं आता है। शेल स्क्रिप्ट्स में यह अक्सर सुविधाजनक होता है, जब आप आउटपुट को कमांड ( >/dev/null
) से अनदेखा करना चाहते हैं या बिना इनपुट के कमांड चलाते हैं ( </dev/null
)। अन्य सामान्य उदाहरण हैं /dev/zero
(जो अशक्त बाइट्स विज्ञापन infinitum/dev/urandom
लौटाता है ) (जो यादृच्छिक बाइट्स विज्ञापन infinitum लौटाता है )।
कुछ डिवाइस फ़ाइलों का एक अर्थ है जो उस प्रक्रिया पर निर्भर करता है जो इसे एक्सेस करता है। उदाहरण के लिए, /dev/stdin
वर्तमान प्रक्रिया के मानक इनपुट को नामित करता है; खोलने से लगभग वही प्रभाव पड़ता है जो मूल फ़ाइल को खोलने का होता है जिसे प्रक्रिया के मानक इनपुट के रूप में खोला गया था। कुछ इसी तरह, /dev/tty
टर्मिनल को नामित करता है जिससे प्रक्रिया जुड़ी हुई है। लिनक्स के तहत, आजकल, /dev/stdin
और दोस्तों को चरित्र उपकरणों के रूप में लागू नहीं किया जाता है, बल्कि एक अधिक सामान्य तंत्र के प्रतीकात्मक लिंक के रूप में, जो प्रत्येक फ़ाइल डिस्क्रिप्टर को संदर्भित करने की अनुमति देता है (पारंपरिक विधि के तहत केवल 0, 1 और 2 के विपरीत); उदाहरण के /dev/stdin
लिए एक प्रतीकात्मक लिंक है /proc/self/fd/0
। देखें कि कैसे / dev / fd का संबंध / proc / self / fd / से है? ।
आपको कई प्रतीकात्मक लिंक मिलेंगे /dev
। यह ऐतिहासिक कारणों से हो सकता है: एक डिवाइस फ़ाइल को एक नाम से दूसरे नाम पर ले जाया गया था, लेकिन कुछ एप्लिकेशन अभी भी पुराने नाम का उपयोग करते हैं। उदाहरण के लिए, लिनक्स के तहत /dev/scd0
एक प्रतीकात्मक लिंक है /dev/sr0
; दोनों पहले सीडी डिवाइस को नामित करते हैं। सांकेतिक लिंक के लिए एक अन्य कारण संगठन है: लिनक्स के तहत, आप कई स्थानों में अपनी हार्ड डिस्क और विभाजन मिल जाएगा: /dev/sda
और /dev/sda1
और दोस्तों (प्रत्येक डिस्क एक मनमाना पत्र द्वारा नामित, और विभाजन विभाजन लेआउट के अनुसार), /dev/disk/by-id/*
(डिस्क एक द्वारा नामित अद्वितीय सीरियल नंबर), /dev/disk/by-label/*
(एक फाइलसिस्टम के साथ विभाजन, एक मानव-चयनित लेबल द्वारा निर्दिष्ट); और अधिक। जब एक जेनेरिक डिवाइस का नाम कई में से एक हो सकता है तो प्रतीकात्मक लिंक का भी उपयोग किया जाता है; उदाहरण के लिए/dev/dvd
यदि आप दो सीडी रीडर हैं और दूसरा एक डिफ़ॉल्ट डीवीडी रीडर होना है, तो /dev/sr0
यह एक प्रतीकात्मक लिंक हो सकता है या यह एक लिंक हो सकता है /dev/sr1
।
अंत में, /dev
पारंपरिक कारणों से कुछ अन्य फाइलें हैं जिन्हें आप खोज सकते हैं । आपको हर सिस्टम पर समान नहीं मिलेगा। अधिकांश यूनियनों पर, /dev/log
एक सॉकेट है जो प्रोग्राम लॉग संदेशों का उत्सर्जन करने के लिए उपयोग करते हैं। /dev/MAKEDEV
एक स्क्रिप्ट है जो प्रविष्टियों को बनाता है /dev
। आधुनिक लिनक्स सिस्टम पर, प्रविष्टियां udev/dev/
द्वारा स्वचालित रूप से बनाई जाती हैं , कंसोल ।MAKEDEV
No यह वास्तव में लिनक्स के तहत सच नहीं है, लेकिन यह विस्तार केवल डिवाइस ड्राइवर लेखकों के लिए मायने रखता है।