Unix'i 100 maddede anlatmaya başlıyorum. (Herbir maddenin açıklaması yapılıp full reg)
Unix, 1969'da Bell Laboratuvarları'nda Ken Thompson ve Dennis Ritchie tarafından geliştirildi.Bu maddeyi derinlemesine açıklayalım:
Unix'in doğuşu, bilgisayar bilimlerinin önemli dönüm noktalarından biridir. 1960'ların sonlarında, bilgisayarlar hala büyük, pahalı ve karmaşık makinelerdi. Bu dönemde, Bell Laboratuvarları (şu anki adıyla Nokia Bell Labs) bir işletim sistemi geliştirme projesinde yer alıyordu: Multics (Multiplexed Information and Computing Service).
Örnek Senaryo: Düşünün ki 1969 yılındasınız. Ken Thompson ve Dennis Ritchie, Multics projesinde çalışıyorlar ama projenin karmaşıklığı ve yavaş ilerleyişinden memnun değiller. Thompson, bir gün eski bir PDP-7 bilgisayarında basit bir dosya sistemi ve birkaç yardımcı program yazmaya başlıyor. Bu, Unix'in temellerini oluşturuyor.
Detaylar:
- İsim Kökeni: Sistemin adı başlangıçta "Unics" (Uniplexed Information and Computing Service) idi, Multics'in aksine tek kullanıcılı bir sistem olduğu için. Zamanla bu isim "Unix"e dönüştü.
- C Dilinin Gelişimi: Ritchie, Unix'i daha taşınabilir hale getirmek için C programlama dilini geliştirdi. Bu, Unix'in farklı donanımlarda çalışabilmesini sağladı.
- İlk Sürümler: İlk Unix sürümü 1971'de tamamlandı ve Bell Labs içinde kullanılmaya başlandı. 1973'te sistemin çekirdeği C diliyle yeniden yazıldı.
- Yayılma: Unix, üniversitelere ücretsiz olarak dağıtıldı. Bu, sistemin hızla yayılmasını ve gelişmesini sağladı.
- Etki: Unix, modern işletim sistemlerinin birçoğunu etkiledi. Linux, BSD, macOS gibi sistemler Unix felsefesini ve tasarım prensiplerini takip eder.
Günümüze Etkisi: Bugün kullandığımız birçok teknoloji, Unix'in prensiplerinden ve tasarım felsefesinden etkilenmiştir. Örneğin, akıllı telefonunuzda kullandığınız Android işletim sistemi, Linux çekirdeği üzerine inşa edilmiştir ve dolayısıyla Unix mirasını taşır.
Unix'in geliştirilmesi, bilgisayar bilimlerinde "açık kaynak" kavramının öncüsü olmuş, yazılım geliştirme pratiklerini değiştirmiş ve bilgisayarların daha erişilebilir hale gelmesine katkıda bulunmuştur.
Çok kullanıcılı ve çok görevli bir işletim sistemidir.Komut satırı arayüzü (CLI) Unix'in ana kullanıcı arayüzüdür.
Unix felsefesi: "Bir işi iyi yapan küçük programlar yaz."
Dosya sistemi hiyerarşik bir yapıya sahiptir.
Unix'te "her şey bir dosyadır" prensibi geçerlidir.
Çekirdek (kernel), Unix'in kalbidir ve donanımla iletişimi sağlar.
Kabuk (shell), kullanıcı ile çekirdek arasındaki arayüzdür.
Bash, sh, csh gibi farklı kabuk türleri vardır.
Unix sistemlerde kullanıcı ve grup kavramları önemlidir.
İzinler (permissions) dosya ve dizin erişimini kontrol eder.
Evet, Unix izinleri (permissions), dosya ve dizin erişimini kontrol eder. Unix tabanlı sistemlerde her dosya ve dizin, kullanıcılar ve gruplar için belirli erişim izinlerine sahiptir. İzinler üç kategoriye ayrılır:
- Sahip (Owner) İzinleri: Dosyanın sahibinin izinlerini belirtir.
- Grup İzinleri: Dosyanın sahibiyle aynı grupta olan kullanıcıların izinlerini belirtir.
- Diğer (Other) İzinleri: Dosyanın sahibi ve sahibiyle aynı grupta olmayan tüm diğer kullanıcıların izinlerini belirtir.
Her kategori için üç temel izin türü vardır:
- Okuma (Read, r): Dosyayı okuma izni verir.
- Yazma (Write, w): Dosyayı yazma veya değiştirme izni verir.
- Çalıştırma (Execute, x): Dosyayı çalıştırma veya bir dizine erişim izni verir.
İzinler sembolik olarak veya oktal olarak belirtilir. Sembolik olarak izinler, r
, w
ve x
karakterleriyle ifade edilir ve şu şekilde gösterilir:
plaintextrwxr-xr--
Bu örnek, şu anlama gelir:
- Sahip için: Okuma, yazma ve çalıştırma izni (
rwx
) - Grup için: Okuma ve çalıştırma izni (
r-x
) - Diğer kullanıcılar için: Sadece okuma izni (
r--
)
Oktal sistemde ise her izin türü bir sayı ile temsil edilir:
r
= 4 (okuma)w
= 2 (yazma)x
= 1 (çalıştırma)
Örneğin, rwxr-xr--
izni oktal olarak 755
şeklinde ifade edilir:
- Sahip için:
rwx
= 4+2+1 = 7 - Grup için:
r-x
= 4+0+1 = 5 - Diğer kullanıcılar için:
r--
= 4+0+0 = 4
Bu izinler chmod
komutu ile ayarlanabilir:
chmod 755 dosyaadı
Unix izinleri, sistem güvenliğini sağlamak ve kullanıcılar arasında doğru erişim kontrollerini yapmak için hayati öneme sahiptir.
Borular (pipes) ve yönlendirmeler (redirections) Unix'in güçlü özellikleridir.
Prosesler, Unix'te çalışan programlardır.
Her prosesin bir PID (Process ID) numarası vardır.
Fork ve exec, yeni prosesler oluşturmak için kullanılan temel mekanizmalardır.
Sinyaller, prosesler arası iletişim için kullanılır.
man komutu, Unix'in dahili dokümantasyon sistemidir.
Unix, zaman paylaşımlı sistemler için tasarlanmıştır.
Çok sayıda Unix türevi vardır: Linux, BSD, macOS vb.
POSIX, Unix sistemler için standartları belirler.
Sembolik bağlantılar (symbolic links) dosya sisteminde esneklik sağlar.
Cron, zamanlanmış görevleri yönetmek için kullanılır.
X Window System, Unix'in grafik kullanıcı arayüzü (GUI) altyapısıdır.
vi ve emacs, Unix'in popüler metin düzenleyicileridir.
grep, sed, awk gibi metin işleme araçları Unix'in güçlü yanlarındandır.
Regular expressions (düzenli ifadeler) Unix araçlarında yaygın kullanılır.
find komutu, dosya ve dizinleri aramak için kullanılır.
tar, Unix sistemlerde arşivleme için kullanılan standarttır.
NFS (Network File System), ağ üzerinden dosya paylaşımı sağlar.
SSH, güvenli uzaktan erişim için kullanılır.
Unix sistemlerde çok sayıda daemon (arka plan hizmeti) çalışır.
/etc dizini, sistem konfigürasyon dosyalarını içerir.
/home dizini, kullanıcı ev dizinlerini barındırır.
/var dizini, değişken verileri (log dosyaları gibi) saklar.
/tmp dizini, geçici dosyalar için kullanılır.
Unix sistemlerde birden çok çalışma seviyesi (runlevel) vardır.
init, geleneksel Unix sistemlerde ilk çalışan prosestir.
systemd, modern Unix sistemlerinde init'in yerini almıştır.
Unix'te prosesler arası iletişim için çeşitli mekanizmalar vardır: borular, soketler, sinyaller vb.
nice komutu, proseslerin önceliğini ayarlamak için kullanılır.
top komutu, sistem kaynaklarının kullanımını izlemek için kullanılır.
Unix sistemlerde swap alanı, sanal bellek için kullanılır.
fsck komutu, dosya sistemi tutarlılığını kontrol eder ve onarır.
df komutu, disk kullanımını gösterir.
du komutu, dizin ve dosyaların boyutunu gösterir.
chmod komutu, dosya ve dizin izinlerini değiştirmek için kullanılır.
chown komutu, dosya ve dizinlerin sahipliğini değiştirmek için kullanılır.
umask, yeni oluşturulan dosya ve dizinlerin varsayılan izinlerini belirler.
Unix sistemlerde çevre değişkenleri (environment variables) önemli bir rol oynar.
.bashrc ve .bash_profile, kullanıcı oturum ayarlarını içerir.
/dev dizini, aygıt dosyalarını içerir.
/proc dizini, çalışan sistemin ve proseslerin bilgilerini içerir.
Unix sistemlerde çekirdek modülleri, çalışma zamanında yüklenebilir.
lsmod komutu, yüklü çekirdek modüllerini listeler.
ps komutu, çalışan prosesleri gösterir.
kill komutu, proseslere sinyal göndermek için kullanılır.
Unix sistemlerde inode'lar, dosya sistemi meta verilerini saklar.
ln komutu, sabit ve sembolik bağlantılar oluşturmak için kullanılır.
mount komutu, dosya sistemlerini bağlamak için kullanılır.
umount komutu, bağlı dosya sistemlerini ayırmak için kullanılır.
ulimit, kullanıcı ve proseslerin kaynak kullanımını sınırlar.
crontab, periyodik görevleri zamanlamak için kullanılır.
at komutu, tek seferlik görevleri zamanlamak için kullanılır.
iptables, Unix sistemlerde güvenlik duvarı yapılandırması için kullanılır.
sed, akış editörü olarak metin manipülasyonu için kullanılır.
awk, metin tabanlı veri işleme için güçlü bir araçtır.
tail komutu, dosyanın son satırlarını görüntülemek için kullanılır.
head komutu, dosyanın ilk satırlarını görüntülemek için kullanılır.
xargs, komut satırı argümanlarını işlemek için kullanılır.
Unix sistemlerde RAID, veri depolama güvenilirliği için kullanılır.
LVM (Logical Volume Manager), esnek disk yönetimi sağlar.
rsync, dosya senkronizasyonu ve yedekleme için kullanılır.
tcpdump, ağ trafiğini analiz etmek için kullanılır.
netstat, ağ bağlantılarını ve istatistiklerini gösterir.
lsof, açık dosyaları listelemek için kullanılır.
strace, sistem çağrılarını ve sinyalleri izlemek için kullanılır.
gcc, GNU Compiler Collection, Unix sistemlerde yaygın kullanılan bir derleyicidir.
chroot, bir prosesi farklı bir kök dizinle çalıştırmak için kullanılır.
Nice değeri, proseslerin CPU önceliğini belirler (-20 en yüksek, 19 en düşük).
/etc/passwd dosyası, kullanıcı hesap bilgilerini saklar.
/etc/shadow dosyası, şifrelenmiş kullanıcı parolalarını içerir.
SUID (Set User ID) biti, bir programın sahibinin izinleriyle çalışmasını sağlar.
SGID (Set Group ID) biti, bir programın grup izinleriyle çalışmasını sağlar.
ptrace sistem çağrısı, hata ayıklama için prosesleri izlemeye olanak tanır.
setuid() ve setgid() sistem çağrıları, proses kimliğini değiştirmek için kullanılır.
mmap() sistem çağrısı, bellek eşlemesi için kullanılır.
fcntl() sistem çağrısı, dosya tanımlayıcılarını kontrol etmek için kullanılır.
epoll, yüksek ölçekli I/O olaylarını izlemek için kullanılan bir API'dir.
Unix domain soketleri, aynı makinedeki prosesler arası iletişim için kullanılır.
FIFOs (named pipes), ilişkili olmayan prosesler arasında veri akışı sağlar.
Semaphores, paylaşılan kaynakların senkronizasyonu için kullanılır.
Shared memory, prosesler arası hızlı veri paylaşımı sağlar.
inotify, dosya sistemi olaylarını izlemek için kullanılır.
User namespaces, ayrıcalıklı işlemleri güvenli bir şekilde yalıtır.
Control groups (cgroups), proses gruplarının kaynak kullanımını sınırlar.
Namespaces, proses yalıtımı için kullanılır (PID, network, mount vb.).
Containers, namespaces ve cgroups kullanarak hafif sanallaştırma sağlar.