26 Aralık 2011 Pazartesi

UNIX'te İnode Nasıl İşler?

UNIX/BSD sistemlerde sabit diskin bölümlenmesinde PC BIOS'un getirdiği MBR disk bölümleri halen kullanılmaktadır. Bu disk bölümleri içerisinde UNIX/BSD kendi disk bölümlerini oluşturup bu bölümlerde işletim sistemine özgü dosya sistemlerini oluşturup kullanır. Bu dosya sistemleri kendi yapısında yer alan dosyaların kayıtlarını tutmak durumundadır. Bu kayıtlar ise index node – inode ile yapılır.


Bir disk bölümü bir dosya sistemi ile formatlandığında, dosya sistemi barındırdığı dosyaların kayıtlarını tutmak içi inode tablosu oluşturur. Disk bölümleri formatlandığında yapısında süperblok, inode tablosu ve dosyaların bulunduğu bölümler oluşturulur.

Süperblok bölümü dosya sisteminin parametrelerini barındıran ve tanımlayan disk bölümüdür. Bu alan diskteki blok sayısını, blokların büyüklüğünü, diskteki parçalanmanın miktarını ve index tablosunun büyüklüğü bir diğer deyişle inode sayısını vb bilgileri barındırır. fs(5) kılavuz sayfasında bu bilgilerin tam bir dökümü bulunmaktadır. Bu parametreler kurulum uygulaması tarafından öntanımlı değerleri yada sistem yöneticisinin belirttiği değerlerdir. Daha basit olarak ifade edecek olursak, diskinizdeki boş alan bitmeden tüm serbest inode tükenmesi durumunda dosyaları yedekleyip dosya sisteminin yeniden oluşturulması gerekecektir. Bu işlemi yapmadan önce disk bölümündeki dosya sisteminin barındırdığı dosyaların yedeklenmesi, yedeklerin kontrol edildikten sonra newfs ile dosya sistemin aynı parametreleri ile oluşturulması gereklidir.

Süperblok'tan sonra inode tablosunun yer aldığı bölüm bulunur. İnode tablosunu oluşturan her bir girdi 128 byte büyüklüğündedir. Her bir girdi barındırdığı dosyaya ait olan bilgileri yani metadata verisini barındırır. Metadata ne olduğunu daha iyi anlamak için FreeBSD sistemde /usr/include/ufs/ufs/dinode.h ve OpenBSD sistemde src/sys/ufs/ufs/inode.h dosyalarına bakabilirsiniz. Bu dosyalar bir C kaynak kod dosyası olsa da içeriğinde yer alan açıklama satırları sayesinde kolaylıkla içeriği anlaşılabilir. Metadata kapsamında şu bilgiler bulunur:
  • Dosya izinleri
  • Dosyaya yapılan bağlantıların sayısı
  • Kullanıcı ve grup bilgileri
  • inode numarası
  • Dosyanın byte cinsinden büyüklüğü
  • Dosyanın en son erişildiği tarih (atime)
  • Dosyanın en son düzenlendiği tarih (mtime)
  • Dosya için inode değişimin gerçekleştiği tarih (ctime)
  • Dosya özellikleri (chflags)
  • Tüketilen gerçek blok sayısı
  • Dosyanın sahibi
  • Dosyanın sahibinin birincil grubu
  • Dosyanın oluşturulma numarası
Metadata verilerine bakıldığında dosya adının yer almadığını görülür. Dosya sistemi için dosyanın ilişkili olduğu inode tablosu numarası önemlidir. Bir dosyanın metada bilgisi ls(1) ile sorgulanabilir. ls(1) ile kullanılabilen parametreler ile döndürülen sonuçlar dosya sistemindeki bilgilerin bir bölümünü veya tamamını kapsayacaktır. Aşağıdaki çıktıda ls -l komutunun çıktısı görülmektedir. Çıktıda dosya, dizinlere ilişkin yedi özellik döndürülmüştür.

FreeBSD üzerinde komutun çıktısı

[goksin@tardis /usr/home/goksin]$ ls -l /
total 53
-r--r--r--   1 root  wheel  6200  6 Mar  2011 COPYRIGHT
drwxr-xr-x   2 root  wheel  1024 24 Ara 01:05 bin
drwxr-xr-x   8 root  wheel  1024 24 Ara 01:06 boot
drwxr-xr-x   2 root  wheel   512  7 Nis  2010 cdrom
lrwxr-xr-x   1 root  wheel    10  7 Nis  2010 compat -> usr/compat
dr-xr-xr-x   6 root  wheel   512 25 Ara 14:38 dev
drwxr-xr-x   2 root  wheel   512  7 Nis  2010 dist
-rw-------   1 root  wheel  4096 25 Ara 11:02 entropy
drwxr-xr-x  20 root  wheel  2560 24 Ara 01:08 etc
lrwxr-xr-x   1 root  wheel     8  7 Nis  2010 home -> usr/home
drwxr-xr-x   3 root  wheel  1536 24 Ara 01:06 lib
drwxr-xr-x   2 root  wheel   512 24 Ara 01:07 libexec
drwxr-xr-x   2 root  wheel   512 25 Ara 12:38 media
drwxr-xr-x   4 root  wheel   512  1 Kas 22:55 mnt
dr-xr-xr-x   2 root  wheel   512 21 Kas  2009 proc
drwxr-xr-x   2 root  wheel  2560 24 Ara 01:06 rescue
drwxr-xr-x  18 root  wheel  1024 12 Kas 15:46 root
drwxr-xr-x   2 root  wheel  2560 24 Ara 01:06 sbin
lrwxr-xr-x   1 root  wheel    11 24 Ara 01:05 sys -> usr/src/sys
drwxrwxrwt  20 root  wheel  4096 25 Ara 14:12 tmp
drwxr-xr-x  18 root  wheel   512  1 Kas 22:28 usr
drwxr-xr-x  25 root  wheel   512 25 Ara 14:38 var

OpenBSD üzerinde komutun çıktısı

[goksin@irongiant /home/goksin]$ ls -l /
total 32314
-rw-r--r--   1 root  wheel     578 Aug 17 18:51 .cshrc
-rw-r--r--   1 root  wheel     468 Aug 17 18:51 .profile
drwxr-xr-x   2 root  wheel    1024 Aug 17 18:50 altroot
drwxr-xr-x   2 root  wheel     512 Aug 17 18:53 bin
-r-xr-xr-x   1 root  wheel   45024 Nov  4 09:42 boot
-rw-r--r--   1 root  wheel 8988940 Nov  4 18:51 bsd
-rw-r--r--   1 root  wheel     468 Aug 17 18:51 bsd.rd
drwxr-xr-x   3 root  wheel   21504 Dec 25 11:48 dev
dr-xr-xr-x  23 root  wheel    2560 Dec 25 11:48 etc
drwxr-xr-x   3 root  wheel     512 Nov  4 09:42 home
drwxr-xr-x   2 root  wheel     512 Aug 17 18:50 mnt
drwx------   2 root  wheel     512 Nov  4 09:47 root
drwxr-xr-x   2 root  wheel    1536 Aug 17 18:53 sbin
drwxr-xr-x   2 root  wheel     512 Aug 17 18:50 stand
lrwxr-xr-x   1 root  wheel      11 Nov  4 11:38 sys -> /usr/src/sys
drwxr-xr-x   4 root  wheel     512 Dec 25 14:48 tmp
drwxr-xr-x  17 root  wheel     512 Aug 11 19:30 usr
drwxr-xr-x  23 root  wheel     512 Dec 11 19:30 var

Çıktıda dosya,dizinlerin izinleri, yapılan bağlantı sayısı, sahibi, grubu, byte cinsinden büyüklüğü, mtime ve tam yolu yer almaktadır. Dizinin veya dosyanın tam yolu kısmı hariç olmak üzere geri kalan bilgiler metadata verisinde yer almaktadır. Bu bilgilere ek olarak "i" parametresinin kullanılması ile index numaralarını – inode da öğrenebiliriz.

FreeBSD üzerinde komutun çıktısı

[goksin@tardis /usr/home/goksin]$ ls -li /
total 53
   13 -r--r--r--   1 root  wheel  6200  6 Mar  2011 COPYRIGHT
70657 drwxr-xr-x   2 root  wheel  1024 24 Ara 01:05 bin
94210 drwxr-xr-x   8 root  wheel  1024 24 Ara 01:06 boot
47105 drwxr-xr-x   2 root  wheel   512  7 Nis  2010 cdrom
   11 lrwxr-xr-x   1 root  wheel    10  7 Nis  2010 compat -> usr/compat
    2 dr-xr-xr-x   6 root  wheel   512 25 Ara 14:38 dev
94209 drwxr-xr-x   2 root  wheel   512  7 Nis  2010 dist
    7 -rw-------   1 root  wheel  4096 25 Ara 11:02 entropy
23553 drwxr-xr-x  20 root  wheel  2560 24 Ara 01:08 etc
   10 lrwxr-xr-x   1 root  wheel     8  7 Nis  2010 home -> usr/home
47106 drwxr-xr-x   3 root  wheel  1536 24 Ara 01:06 lib
    4 drwxr-xr-x   2 root  wheel   512 24 Ara 01:07 libexec
70658 drwxr-xr-x   2 root  wheel   512 25 Ara 12:38 media
70659 drwxr-xr-x   4 root  wheel   512  1 Kas 22:55 mnt
    5 dr-xr-xr-x   2 root  wheel   512 21 Kas  2009 proc
47108 drwxr-xr-x   2 root  wheel  2560 24 Ara 01:06 rescue
70660 drwxr-xr-x  18 root  wheel  1024 12 Kas 15:46 root
    6 drwxr-xr-x   2 root  wheel  2560 24 Ara 01:06 sbin
   12 lrwxr-xr-x   1 root  wheel    11 24 Ara 01:05 sys -> usr/src/sys
    2 drwxrwxrwt  20 root  wheel  4096 25 Ara 14:12 tmp
    2 drwxr-xr-x  18 root  wheel   512  1 Kas 22:28 usr
    2 drwxr-xr-x  25 root  wheel   512 25 Ara 14:38 var

OpenBSD üzerinde komutun Çıktısı

[goksin@irongiant /home/goksin]$ ls -li /
total 32314
  123 -rw-r--r--   1 root  wheel     578 Aug 17 18:51 .cshrc
  124 -rw-r--r--   1 root  wheel     468 Aug 17 18:51 .profile
71425 drwxr-xr-x   2 root  wheel    1024 Aug 17 18:50 altroot
47617 drwxr-xr-x   2 root  wheel     512 Aug 17 18:53 bin
 1842 -r-xr-xr-x   1 root  wheel   45024 Nov  4 09:42 boot
    3 -rw-r--r--   1 root  wheel 8988940 Nov  4 18:51 bsd
    4 -rw-r--r--   1 root  wheel     468 Aug 17 18:51 bsd.rd
    5 drwxr-xr-x   3 root  wheel   21504 Dec 25 11:48 dev
    7 dr-xr-xr-x  23 root  wheel    2560 Dec 25 11:48 etc
    2 drwxr-xr-x   3 root  wheel     512 Nov  4 09:42 home
71426 drwxr-xr-x   2 root  wheel     512 Aug 17 18:50 mnt
71427 drwx------   2 root  wheel     512 Nov  4 09:47 root
71428 drwxr-xr-x   2 root  wheel    1536 Aug 17 18:53 sbin
47651 drwxr-xr-x   2 root  wheel     512 Aug 17 18:50 stand
  323 lrwxr-xr-x   1 root  wheel      11 Nov  4 11:38 sys -> /usr/src/sys
    2 drwxr-xr-x   4 root  wheel     512 Dec 25 14:48 tmp
    2 drwxr-xr-x  17 root  wheel     512 Aug 11 19:30 usr
    2 drwxr-xr-x  23 root  wheel     512 Dec 11 19:30 var

Bu komut bir önceki örnekten farklı olarak dosyaların/dizinlerin inode değerleri ilk sütunda görülmektedir. İki numaralı inode değeri /dev, /var/, /tmp ve /usr dizinlerine aittir. 2 numaralı inode, bid UNIX dosya sisteminde her zaman için ilk inode – index numarasıdır. Söz konusu dosya sistemlerinin başlangıç/kök noktasını tanımlar. Sistemde bağlanmış olan dosya sistemlerini görmek için df kullanıldığında 2 numaralı inode neden dört farklı dosya sisteminde döndürüldüğü anlaşılabilir.

FreeBSD üzerinde komutun çıktısı

[goksin@tardis /usr/home/goksin]$ df /
Filesystem  1K-blocks      Used     Avail Capacity  Mounted on
/dev/ad4s1a   1012974    574380    357558    62%    /
devfs               1         1         0   100%    /dev
/dev/ad4s1e   1012974      3152    928786     0%    /tmp
/dev/ad4s1f 458813344 139775370 282332908    33%    /usr
/dev/ad4s1d   8102670   1271756   6182702    17%    /var

OpenBSD üzerinde komutun çıktısı

[goksin@irongiant /home/goksin]$ df /
Filesystem  512-blocks      Used     Avail Capacity  Mounted on
/dev/wd0a      1496188     86164   1335216     6%    /
/dev/wd0k     14129788        44  13423256     0%    /home
/dev/wd0d      2386300        12   2266976     0%    /tmp
/dev/wd0f      3153148    918784   2076708    31%    /usr
/dev/wd0g      1833212    364632   1376920    21%    /usr/X11R6
/dev/wd0h      6807676       428   6466868     0%    /usr/local
/dev/wd0j      3686716         4   3502380     0%    /usr/obj
/dev/wd0i      2596156         4   2466348     0%    /usr/src
/dev/wd0e      3647196     10072   34546768    0%    /var

Her dosya sistemi kendi inode tablosunu tutmak durumundadır. Dolayısıyla da /usr, /var, /tmp ve /dev için döndürülen 2 değeri her bir dosya sistemindeki index tablosundaki iki numaralı girdidir. Doğal olarak da her bir dosya sisteminin başlangıç değeri olarak 2 döndürülür. Bu dört dosya sisteminin ortak özelliği her bir dosya sisteminin başlangıç değerinin iki olmasıdır. İnode aynı zamanda dosyaların atime, ctime ve mtime bilgisini de tutmaktadır. "mtime" dosyanın son olarak düzenlendiği tarihtir. Bir dğer deyişle dosya içeriğin en son ne zaman düzenlendiğinin, değiştirildiğinin bilgisidir. Dosya üzerinde yapılan düzenlemeler kayıt edildiğinde ilgili inode bu değeri günceller. "ls -l " çıktısında bu değer döndürülür. "atime" bilgisi ise dosyaya en son erişilen tarihin bilgisidir. Örneğin dosyanın içeriğinde değişilik yapılmadan sadece görüntülenmesi durumunda erişim zamanı değeri "atime" inode tarafından güncellenir. Erişim zamanını öğrenmek için "ls -lut" komutundan yaralanılır.

FreeBSD üzerinde komutun çıktısı

[goksin@tardis /usr/home/goksin]$ ls -lut /
total 53
-rw-------   1 root  wheel  4096 25 Ara 14:38 entropy
dr-xr-xr-x   6 root  wheel   512 25 Ara 14:38 dev
drwxr-xr-x   2 root  wheel  1024 25 Ara 14:23 bin
drwxr-xr-x   8 root  wheel  1024 25 Ara 14:23 boot
drwxr-xr-x   2 root  wheel   512 25 Ara 14:23 cdrom
drwxr-xr-x   2 root  wheel   512 25 Ara 14:23 dist
drwxr-xr-x  20 root  wheel  2560 25 Ara 14:23 etc
drwxr-xr-x   3 root  wheel  1536 25 Ara 14:23 lib
drwxr-xr-x   2 root  wheel   512 25 Ara 14:23 libexec
drwxr-xr-x   2 root  wheel   512 25 Ara 14:23 media
drwxr-xr-x   4 root  wheel   512 25 Ara 14:23 mnt
dr-xr-xr-x   2 root  wheel   512 25 Ara 14:23 proc
drwxr-xr-x   2 root  wheel  2560 25 Ara 14:23 rescue
drwxr-xr-x  18 root  wheel  1024 25 Ara 14:23 root
drwxr-xr-x   2 root  wheel  2560 25 Ara 14:23 sbin
drwxrwxrwt  20 root  wheel  4096 25 Ara 14:23 tmp
drwxr-xr-x  18 root  wheel   512 25 Ara 14:23 usr
drwxr-xr-x  25 root  wheel   512 25 Ara 14:23 var
-r--r--r--   1 root  wheel  6200 24 Ara 01:07 COPYRIGHT
lrwxr-xr-x   1 root  wheel    11 24 Ara 01:05 sys -> usr/src/sys
lrwxr-xr-x   1 root  wheel     8  7 Nis  2010 home -> usr/home
lrwxr-xr-x   1 root  wheel    10  7 Nis  2010 compat -> usr/compat

OpenBSD üzerinde komutun çıktısı

[goksin@irongiant /home/goksin]$ ls -lut /
total 32314
-rw-r--r--   1 root  wheel     578 Aug 17 18:51 .cshrc
-rw-r--r--   1 root  wheel     468 Aug 17 18:51 .profile
drwxr-xr-x   2 root  wheel    1024 Aug 17 18:50 altroot
drwxr-xr-x   2 root  wheel     512 Aug 17 18:53 bin
-r-xr-xr-x   1 root  wheel   45024 Nov  4 09:42 boot
-rw-r--r--   1 root  wheel 8988940 Nov  4 18:51 bsd
-rw-r--r--   1 root  wheel     468 Aug 17 18:51 bsd.rd
drwxr-xr-x   3 root  wheel   21504 Dec 25 11:48 dev
dr-xr-xr-x  23 root  wheel    2560 Dec 25 11:48 etc
drwxr-xr-x   3 root  wheel     512 Nov  4 09:42 home
drwxr-xr-x   2 root  wheel     512 Aug 17 18:50 mnt
drwx------   2 root  wheel     512 Nov  4 09:47 root
drwxr-xr-x   2 root  wheel    1536 Aug 17 18:53 sbin
drwxr-xr-x   2 root  wheel     512 Aug 17 18:50 stand
lrwxr-xr-x   1 root  wheel      11 Nov  4 11:38 sys -> /usr/src/sys
drwxr-xr-x   4 root  wheel     512 Dec 25 14:48 tmp
drwxr-xr-x  17 root  wheel     512 Aug 11 19:30 usr
drwxr-xr-x  23 root  wheel     512 Dec 11 19:30 var

"ctime" dosya özelliklerinin değiştirildiği tarih bilgisidir. Örneğin dosya sahibi, grubu, izinleri ve chflags ile ilgili özelliklerinin değiştirilmesi gibi. Bu değişiklikler gerçekleştirildiğinde inode tarafından güncellenir. Dosya özelliklerinin değiştirildiği tarih bilgisini öğrenmek için aşağıdaki komut kullanılır:

FreeBSD üzerinde komutun çıktısı

[goksin@tardis /usr/home/goksin]$ ls -lc /
total 53
-r--r--r--   1 root  wheel  6200  1 Kas 01:06 COPYRIGHT
drwxr-xr-x   2 root  wheel  1024 24 Ara 01:05 bin
drwxr-xr-x   8 root  wheel  1024 24 Ara 01:06 boot
drwxr-xr-x   2 root  wheel   512  1 Kas 01:07 cdrom
lrwxr-xr-x   1 root  wheel    10  1 Kas 01:06 compat -> usr/compat
dr-xr-xr-x   6 root  wheel   512 25 Ara 14:38 dev
drwxr-xr-x   2 root  wheel   512  1 Kas 01:07 dist
-rw-------   1 root  wheel  4096 25 Ara 11:02 entropy
drwxr-xr-x  20 root  wheel  2560 24 Ara 01:08 etc
lrwxr-xr-x   1 root  wheel     8  1 Kas 01:06 home -> usr/home
drwxr-xr-x   3 root  wheel  1536 24 Ara 01:06 lib
drwxr-xr-x   2 root  wheel   512 24 Ara 01:07 libexec
drwxr-xr-x   2 root  wheel   512 25 Ara 12:38 media
drwxr-xr-x   4 root  wheel   512  1 Kas 22:55 mnt
dr-xr-xr-x   2 root  wheel   512  1 Kas 01:07 proc
drwxr-xr-x   2 root  wheel  2560 24 Ara 01:06 rescue
drwxr-xr-x  18 root  wheel  1024 12 Kas 15:46 root
drwxr-xr-x   2 root  wheel  2560 24 Ara 01:06 sbin
lrwxr-xr-x   1 root  wheel    11 24 Ara 01:05 sys -> usr/src/sys
drwxrwxrwt  20 root  wheel  4096 25 Ara 14:12 tmp
drwxr-xr-x  18 root  wheel   512  1 Kas 22:28 usr
drwxr-xr-x  25 root  wheel   512 25 Ara 14:38 var

OpenBSD üzerinde komutun çıktısı

[goksin@irongiant /home/goksin]$ ls -lc /
total 32314
-rw-r--r--   1 root  wheel     578 Nov  4 11:38 .cshrc
-rw-r--r--   1 root  wheel     468 Nov  4 11:38 .profile
drwxr-xr-x   2 root  wheel    1024 Nov  4 11:38 altroot
drwxr-xr-x   2 root  wheel     512 Nov  4 11:38 bin
-r-xr-xr-x   1 root  wheel   45024 Nov  4 09:42 boot
-rw-r--r--   1 root  wheel 8988940 Nov  4 18:51 bsd
-rw-r--r--   1 root  wheel     468 Nov  4 11:37 bsd.rd
drwxr-xr-x   3 root  wheel   21504 Dec 25 14:48 dev
dr-xr-xr-x  23 root  wheel    2560 Dec 25 14:48 etc
drwxr-xr-x   3 root  wheel     512 Nov  4 09:42 home
drwxr-xr-x   2 root  wheel     512 Nov  4 11:38 mnt
drwx------   2 root  wheel     512 Nov  4 09:47 root
drwxr-xr-x   2 root  wheel    1536 Nov  4 11:38 sbin
drwxr-xr-x   2 root  wheel     512 Nov  4 11:38 stand
lrwxr-xr-x   1 root  wheel      11 Nov  4 11:38 sys -> /usr/src/sys
drwxr-xr-x   4 root  wheel     512 Dec 25 14:48 tmp
drwxr-xr-x  17 root  wheel     512 Nov  4 11:39 usr
drwxr-xr-x  23 root  wheel     512 Nov  4 11:39 var

Yukarıdaki çıktılardan da görüleceği üzere ls ile kullanılan parametreler değiştirildiğinde döndürülen tarih bilgisi de ilgili dosyanın inode bilgilerinden okunarak döndürülmektedir.

İndeks numaralarını sadece ls ile değil aynı zamanda df ile de döndürülebilir. Komutun çıktısında her bir dosya sisteminde kullanılan ve serbest olan inode bilgileri edinilebilir.

[goksin@tardis /usr/home/goksin]$ df -i /
Filesystem  1K-blocks      Used     Avail Capacity iused    ifree %iused  Mounted on
/dev/ad4s1a   1012974    581486    350452    62%    3510   137800    2%   /
devfs               1         1         0   100%       0        0  100%   /dev
/dev/ad4s1e   1012974      3152    928786     0%     163   141147    0%   /tmp
/dev/ad4s1f 458813344 139762912 282345366    33%  546660 58780826    1%   /usr
/dev/ad4s1d   8102670   1271780   6182678    17%  123884   935954   12%   /var

OpenBSD üzerinde komutun çıktısı

[goksin@irongiant /home/goksin]$ df -i /
Filesystem 512-blocks    Used     Avail Capacity iused   ifree %iused  Mounted on
/dev/wd0a     1496188   86164   1335216     6%    1978  117060    2%   /
/dev/wd0k    14129788      44  13423256     0%      11  909247    0%   /home
/dev/wd0d     2386300      12   2266976     0%       3  155809    0%   /tmp
/dev/wd0f     3153148  918784   2076708    31%   13782  194088    7%   /usr
/dev/wd0g     1833212  364632   1376920    21%    9506  120412    7%   /usr/X11R6
/dev/wd0h     6807676     428   6466868     0%     108  441618    0%   /usr/local
/dev/wd0j     3686716       4   3502380     0%       1  259837    0%   /usr/obj
/dev/wd0i     2596156       4   2466348     0%       1  181885    0%   /usr/src
/dev/wd0e     3647196   10072   34546768    0%     398  233456    0%   /var

"df -i" komutunun sık sık çalıştırılıp dosya sistemindeki serbest inode ve blok sayılarının kontrol edilmesi olası bir kapasite sorunu ile karşı karşıya kalınmasını önleyecektir. Çok sayıda küçük boyutlu dosya boş bloklarını inode göre daha çabuk tüketecektir. Bloka büyüklüğü ile inode sayılarının nasıl ayarlanabileceği sistem yöneticisinin deneyimine ve bilgi birikimine bağlıdır. Kurulum sırasında işletim sistemi gerekli düzenlemeleri yapacaktır. Bu düzenlemelerin sizin için uygun olup olmadığını işletim sistemini kullanırken edindiğiniz deneyimlerinize dayanarak belirleyebilirsiniz.

Hiç yorum yok:

Yorum Gönder