Proc dosya sistemini anlamak

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

KernelCorner

AuthorImage:[Here we need a little image from you]

[Sandeep Grover]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Sandeep Grover

en to tr Erdal Mutlu

AboutTheAuthor:[A small biography about the author]

Sandeep Grover Hindastan'ın en hızlı gelişen elektronik tasarım ve otomasyon şirketlerinden Magma Design Automation'da çalışmaktadır. Boş zamanlarında Linux çekirdeğinin yapısını keşfetmekle uğraşmakta ve bir gün ona katkıda bulunmak istemektedir!

Abstract:[Here you write a little summary]

/proc dosya sistemi sayesinde Linux, iç veri yapılarına erişmeyi ve sistem çalışır durumdayken yapılandırmayı sağlamaktadır. Temelde konular pek fazla farklılık göstermemesine karşın, biz burada sadece Linux'un İntel x86 mimarisinden sözedeceğiz.

ArticleIllustration:[One image that will end up at the top of the article]

[proc dosya sistemi]

ArticleBody:[The main part of the article]

/proc - Sanal bir dosya sistemi

/proc dosya sistemi, çekirdek ve çekirdek modüllerinin programlara bilgi vermek için oluşturulmuş bir yöntemdir. Sanal bir dosya sistemi olan proc, çekirdeğin iç veri yapıları hakkında bilgi almak, sistemde çalışmakta olan programlar hakkında kullanışlı bilgiler edinmek ve çekirdeğin parametrelerini değiştirerek, çalışmakta olan sistemde yapılandırmalar yapılmasını sağlamaktadır. Diğer dosya sistemleri diskte iken proc, geçici bellekte yeralmaktadır. mount komutu gibi, sistemde bağlanmış tüm dosya sistemlerini listeleyen /proc/mounts dosyasına bir gözatarsanız, aşağıdaki gibi bir satır göreceksiniz:


grep proc /proc/mounts
/proc /proc proc rw 0 0

/proc çekirdek tarafından denetlemekte ve bir aygıta bağlı değildir. Genellikle durum bilgileri içerdiğinden, proc dosya sistemini çekirdeğin yönettiği geçici belleğe yerleştirmek en mantıklı seçimdir. /proc'da 'ls -l' komutunu çalıştırırsanız, çoğu dosyanın 0 byte büyüklüğünde olduğu göreceksiniz. Eğer, dosya içeriğine bakacak olursanız, içinde birçok bilginin yeraldığını göreceksiniz. Bu nasıl olmaktadır? Bunun nedeni, /proc dosya sistemi, diğer sıradan dosya sistemleri gibi, kendisini Sanal Dosya Sistemi (SDS) (VMS) katmanına kaydettirmektedir. Ancak, SDS dosya veya dizinler hakkında i-node'lar ile ilgili sistem çağrıları kullandığında, /proc dosya sistemi bu dosya veya dizinleri, çekirdek içerisindeki bilgilerden yaratmaktadır.

proc dosya sisteminin bağlanması

Eğer, daha önceden bağlanmamış ise, proc dosya sistemini aşağıdaki komutu kullanarak bağlayabilirsiniz:

mount -t proc proc /proc

Yukarıdaki komut başarılı bir şekilde bağlama işlemi yerine getirecektir. Daha fazla bilgi için mount komutunun man sayfasına bakınız.

/proc'taki dosyaların görüntülenmesi

/proc'taki dosyalardan, bilgisayarınızın özellikleri, çekirdeğin ve çalışan programların durumları gibi bilgiler edinebilirsiniz. /proc'taki birçok dosya, sisteminizin donanımsal ortamı hakkındaki en son kullanım durumunu yansıtmaktadır. Her nekadar, /proc'taki dosyalar sanal olsalar da, dosyaların içeriğini, çeşitli kelime işlemcileri veya 'more', 'less', 'cat' gibi komutlarla görüntüleyebilirsiniz. Herhangi bir kelime işlemci burada yer alan bir dosyayı açmaya kalkıştığında, dosya çekirdek bilgilerinden otomatik olarak oluşturulmaktadır. İşte size benim bilgisayardan elde etmiş olduğum bazı ilginç sonuçlar:

$ ls -l /proc/cpuinfo -r--r--r-- 1 root root 0 Dec 25 11:01 /proc/cpuinfo

$ file /proc/cpuinfo
/proc/cpuinfo: empty

$ cat /proc/cpuinfo

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 6
cpu MHz         : 1000.119
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
sep_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips        : 1998.85

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 6
cpu MHz         : 1000.119
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
sep_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips        : 1992.29

Bu sonuç, iki işlemcili bir sistemde elde edilmiştir. Yukarıdaki alanların çoğu kendi kendini açıklamakta ve sistemdeki donanım hakkında bilgiler sağlamaktadır. /proc'ta yer alan bazı bilgiler kodlanmış olarak yer almakta ve bunları bizlerin anlayabileceği bir şekile sokmak için çeşitli araçlar yazılmıştır. Bu araçlardan bazıları 'top', 'ps', 'apm' vs. dir.

Yararlı sistem ve çekirdek bilgilerine ulaşmak


Proc dosya sistemi, sistem ve çekirdek hakkında yararlı bilgilere ulaşmak için kullanılabilir. Bazı önemli dosyalar aşağıda listelenmiştir:

Yukarıda listelenenden çok daha fazla sayıda dosya /proc'ta yeralmaktadır. İlgili bir kullanıcı, /proc dizininde yeralan tüm dosyaları 'more' komutuyla görüntülemeli ve burada bulunan dosyalar hakkındaki daha fazla bilgiyi referanslarda verilen ilk bağlantıdan okumalıdır. kcore gibi bazı dosyalar çok büyük olabileceklerinden ve /proc'taki dosyalar hakkında bilgi sahibi olmadan önce, dosyaları görüntülerken 'cat' yerine 'more' komutunu kullanmanızı öneririm.

Çalışan programlar hakkında bilgiler

/proc dosya sistemi, çalışmakta olan tüm programlar hakkında bilgi sahibi olmanızı sağlamaktadır. /proc dizininde isimleri numara olan dizinler vardır. Herbir numara bir program numarasına (PID) karşılık gelmektedir. Dolayısıyla, her çalışan program için /proc'ta kendi program numarasını taşıyan bir dizin yaratılmıştır. Bu dizinler içerisinde, programın durumu ve ortamı hakkında bilgiler veren dosyalar vardır. İsterseniz şimdi çalışan bir programı araştıralım:

$ ps -aef | grep mozilla
root 32558 32425 8  22:53 pts/1  00:01:23  /usr/bin/mozilla

Yukarıdaki komuta göre mozilla 32558 PID'sine sahip olduğunu göstermektedir. Buna karşılık /proc'ta 32558 adlı bir dizin olması gerekir.

$ ls -l /proc/32558
total 0
-r--r--r--    1 root  root            0 Dec 25 22:59 cmdline
-r--r--r--    1 root  root            0 Dec 25 22:59 cpu
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 cwd -> /proc/
-r--------    1 root  root            0 Dec 25 22:59 environ
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 exe -> /usr/bin/mozilla*
dr-x------    2 root  root            0 Dec 25 22:59 fd/
-r--r--r--    1 root  root            0 Dec 25 22:59 maps
-rw-------    1 root  root            0 Dec 25 22:59 mem
-r--r--r--    1 root  root            0 Dec 25 22:59 mounts
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 root -> //
-r--r--r--    1 root  root            0 Dec 25 22:59 stat
-r--r--r--    1 root  root            0 Dec 25 22:59 statm
-r--r--r--    1 root  root            0 Dec 25 22:59 status

"cmdline" dosyasında, programın çalıştırma komutu yeralmaktadır. "environ" dosyasında programın ortam değişkenleri yeralmaktadır. "status" dosyasında, kullanıcı numarası (UID), grup numarası (GID), programı çalıştırmış olan ana programın program numarası (PPID) ve programın o anda "uyumakta" veya "çalışmakta" olup olmadığını belirten bilgi gibi, program hakkında durum bilgileri yeralmaktadır. Her programa ait dizinde birkaç adet sembolik bağlantı vardır. "cwd", programın çalışmakta olduğu dizine, "exe", programın kendisine, "root", programın kendi kök dizini olarak gördüğü dizine, ki genellikle bu "/" dizinidir, "fd", programın kullanmakta olduğu dosya tanımlayıcılarına bağlanmıştır. "cpu" ise, sadece Linux'un SMP, yani birden fazla işlemciyi destekleyen çekirdeklerde var olup, programın işlemci kullanım bilgilerini içermektedir.

/proc/self, bir programın kendisi hakkındaki bilgilere ulaşmak için kullanılabilecek ilginç bir dizindir. /proc/self, /proc dizinine ulaşan programın /proc'ta yeralan dizinine bir sembolik bağlantıdır.

/proc çekirdekle sayesinde etkileşimde bulunmak


Yukarıda sözünü ettiğimiz ve /proc'ta yeralan dosyaların çoğu sadece okunabilirdir. Ancak, çekirdekle etkileşimi sağlamaya yarayan /proc'ta hem okunabilir ve hem de yazılabilir dosyalar da vardır. Bu tür dosyaların içeriğini değiştirmek, çekirdeğin o andaki durumunu etkileyeceği için, dikkatli olunmasında yarar vardır. /proc/sys içeriği değiştirilebilinir tüm dosyaları içermektedir.

/proc/sys/kernel - Çekirdeğin genel çalışmasını etkileyen bilgileri içermektedir. /proc/sys/kernel/{domainname, hostname} alan adı ve bilgisayar adını tutmaktadır. Bu dosyaları ilgili bilgileri değiştirmek için kullanabilirsiniz.

$ hostname
machinename.domainname.com

$ cat /proc/sys/kernel/domainname
domainname.com

$ cat /proc/sys/kernel/hostname
machinename

$ echo "new-machinename"  > /proc/sys/kernel/hostname

$ hostname
new-machinename.domainname.com


/proc/sys/kernel/ dizini içerisinde yapılandırılabilecek birçok dosya bulunmaktadır. Burada hepsini listelemek pek akıllıca olmaz. En iyisi kullanıcının dosyalara bakıp ayrıntıları kendisinin öğrenmesi olacaktır.
Yapılandırma yapılabilecek bir dizin de /proc/sys/net dir. Buradaki dosyaları, sisteminizin bilgisayar ağlarındaki özelliklerini değiştirmek için kullanabilirsiniz. Sözgelimi, yapacağınız basit bir değişiklik ile, bilgisayarınızı ağ'da gizleyebilirsiniz:

$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Bu komut sayesinde, icmp_echos paketlerinine bilgisayarınız cevap vermeyeceği için, ağ'da yeralan diğer bilgisayarlardan gelen ping sorguları cevapsız kalacaktır.

$ ping machinename.domainname.com
no answer from machinename.domainname.com

Eski haline getirmek için:
$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Çekirdeğin özelliklerini değiştiren ve /proc/sys dizininde bulunan birçok dizin bulunmaktadır. Ayrıntılı bilgi için [1] ve [2] nolu referanslara bakınız.

Sonuç

/proc dosya sistemi Linux'un iç yapısına yönelik dosya tabanli bir arayüz oluşturmaktadır. Sistemdeki aygıt ve süreçlerin belirlenmesi ve denetiminde yardımcı görev yapmaktadır. Dolayısıyla, bu dosya sistemini anlamak ve tecrübe sahibi olmak Linux'tan en fazla yarar sağlamanın anahtarıdır.

Referanslar