Altında Neredeyse tüm dosyaları /dev
vardır aygıt dosyaları . Normal bir dosyaya okuma ve yazma, verileri bir diskte veya başka bir dosya sisteminde saklarken, bir aygıt dosyasına erişmek, genellikle sırayla bir donanım parçasıyla (yani bir donanım aygıtı adıyla) iletişim kuran çekirdekteki bir sürücü ile iletişim kurar.
İki tür aygıt dosyası vardır: blok aygıtları ( b
çıktısının ilk karakteri ile gösterilir ls -l
) ve karakter aygıtları (ile gösterilir c
). Blok ve karakter cihazları arasındaki fark tamamen evrensel değildir. Blok aygıtları, büyük, sabit boyutlu dosyalar gibi davranan diskler gibi şeylerdir: belirli bir ofsette bir bayt yazarsanız ve daha sonra bu ofsetteki aygıttan okursanız, o baytı geri alırsınız. Karakter aygıtları hemen hemen başka bir şeydir; bayt yazmanın hemen bir etkisi (örneğin seri bir satırda yayınlanır) ve bayt okumak aynı zamanda hemen hemen bir etkisinin olduğu (örneğin seri porttan okunur).
Bir aygıt dosyasının anlamı, adıyla değil, adıyla belirlenir (ad, uygulamalar için önemlidir, ancak çekirdeğe göre). Sayı aslında iki sayıdır: büyük sayı bu aygıttan hangi sürücünün sorumlu olduğunu gösterir ve küçük sayı sürücünün birkaç aygıt kullanmasına izin verir¹. Bu numaralar ls -l
, normalde dosya boyutunu bulacağınız listede görünür . Örneğin brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda
→ bu cihaz büyük 8, küçük 0.
Altındaki bazı aygıt dosyaları /dev
donanım aygıtlarına karşılık gelmez. Her unix sisteminde var olan /dev/null
; ona yazmanın bir etkisi yoktur ve bundan okumak hiçbir zaman veri döndürmez. Kabuk komut dosyalarında, komutun ( >/dev/null
) çıktısını yoksaymak veya girişi olmayan bir komutu ( ) çalıştırmak istediğinizde genellikle kullanışlıdır </dev/null
. Diğer yaygın örnekler /dev/zero
(boş bayt ad sonsuz ) /dev/urandom
döndüren (rastgele bayt ad sonsuz ) döndüren ).
Birkaç cihaz dosyası, erişen işleme bağlı olan bir anlama sahiptir. Örneğin /dev/stdin
, mevcut işlemin standart girişini belirler; içinden açmak, işlemin standart girişi olarak açılan orijinal dosyayı açmakla yaklaşık aynı etkiye sahiptir. Bir şekilde benzer şekilde, /dev/tty
işlemin bağlı olduğu terminali belirler. Linux altında, bugünlerde /dev/stdin
ve arkadaşlar karakter aracı olarak uygulanmaz, bunun yerine her dosya tanımlayıcısının referans verilmesine izin veren daha genel bir mekanizmaya sembolik bağlar (geleneksel yöntemde yalnızca 0, 1 ve 2'nin aksine); örneğin /dev/stdin
, sembolik bir bağlantıdır /proc/self/fd/0
. Bakınız / dev / fd, / proc / self / fd / ile nasıl ilişkilidir? .
Altında bir dizi sembolik bağlantı bulacaksınız /dev
. Bu tarihsel nedenlerden dolayı ortaya çıkabilir: bir aygıt dosyası bir addan diğerine taşındı, ancak bazı uygulamalar hala eski adı kullanıyor. Örneğin, Linux altında /dev/scd0
sembolik bir bağlantıdır /dev/sr0
; her ikisi de ilk CD aygıtını tanımlar. Sembolik bağlantıların bir başka nedeni de organizasyondur: Linux altında, sabit disklerinizi ve bölümlerinizi birkaç yerde bulacaksınız: /dev/sda
ve /dev/sda1
ve arkadaşlar (her bir disk tarafından rastgele bir harfle /dev/disk/by-id/*
belirtilen diskler ve bölüm düzenine göre bölümler), ( benzersiz seri numarası), /dev/disk/by-label/*
(insan tarafından seçilen bir etiket ile belirtilen dosya sistemine sahip bölümler); ve dahası. Sembolik bağlantılar, genel bir cihaz adı birkaç kişiden biri olduğunda da kullanılır; Örneğin/dev/dvd
iki CD okuyucunuz varsa ve ikincisi varsayılan DVD okuyucuysa /dev/sr0
, bu sembolik bir bağlantı olabilir veya bir bağlantı olabilir /dev/sr1
.
Son olarak, /dev
geleneksel nedenlerden dolayı bulabileceğiniz birkaç dosya daha var . Her sistemde aynı şeyi bulamazsınız. En Unix'lerde, /dev/log
bir olan soket programları günlük iletilerini yaymak için kullandıkları. /dev/MAKEDEV
Girişleri oluşturan bir betiktir /dev
. Modern Linux sistemlerinde, girişler udev/dev/
tarafından otomatik olarak eski haline getirilir .MAKEDEV
¹ Bu aslında Linux altında artık geçerli değil, ancak bu ayrıntı yalnızca aygıt sürücüsü yazarları için önemli.