---
title: 'Unix Geleneği ve Linux'
source: 'https://academia.sh/tr/kurslar/linuxa-giris/unix-gelenegi-ve-linux'
course: "Linux'a Giriş"
language: tr
updated: '2026-08-17T18:09:56+00:00'
license: 'CC BY-SA 4.0'
---

# Unix Geleneği ve Linux

Çekirdek, dağıtım ve kabuk katmanlarının ayrımı; Unix tasarım geleneğinin taşıdığı varsayımlar ve POSIX'in taşınabilirlik sözü.

"Linux öğrenmek" ifadesi, tek bir şeyi değil üst üste duran üç ayrı katmanı kapsar:
donanımı yöneten çekirdek, çekirdeğin çevresine toplanmış program kümesi ve bu
programları çağırmak için kullanılan komut yorumlayıcı. Üçü farklı kurumlarca, farklı
zamanlarda ve farklı gerekçelerle üretilmiştir; birbirlerinin yerine geçebilirler.

Bu ders katmanları ayırır ve kursun geri kalanının hangi katmanda geçtiğini belirler.
Ayrım gereksiz bir titizlik gibi görünebilir; ancak "komut çalışmıyor" türü sorunların
çoğu, sorunun hangi katmanda olduğunu bilmemekten kaynaklanır.

## Unix Geleneğinin Varsayımları

Linux, 1970'lerde Bell Laboratuvarları'nda geliştirilen **Unix** işletim sisteminin
tasarım geleneğini sürdürür. Bu gelenek birkaç varsayım üzerine kuruludur ve
varsayımlar, komutların bugünkü davranışını doğrudan açıklar.

**Her şey bir dosyadır.** Yalnızca disk üzerindeki veriler değil; aygıtlar, terminaller,
süreçler arası iletişim kanalları da dosya sistemi içinde bir adla temsil edilir.
Programlar tek bir arayüzle — aç, oku, yaz, kapat — hepsine erişir.

**Küçük araçlar, tek iş.** Her program dar bir işi yapar. Karmaşık işler, programları
birleştirerek kurulur. Bu birleştirmenin dilbilgisi Kabuk Programlama kursunun konusudur;
bu kurs araçların kendisini tanıtır.

**Metin ortak arayüzdür.** Programlar arasında akan veri, çoğunlukla satırlara bölünmüş
düz metindir. Metin, hem insan hem program tarafından okunabildiği için ortak payda
olarak seçilmiştir.

**Yapılandırma dosyalarda durur.** Sistem davranışı, ikili biçimli gizli bir kayıt
defterinde değil, okunabilir metin dosyalarında tutulur. Bir ayarı incelemek, ilgili
dosyayı okumaktır.

Bu varsayımlar bir tasarım tercihidir, doğa yasası değildir. Bedelleri de vardır: metin
tabanlı arayüz, yapılandırılmış veriyi ayrıştırma yükünü her programa dağıtır. Kursun
ilerleyen derslerinde bu bedelin nerede ödendiği görünecektir.

## Çekirdek

**Çekirdek (kernel)**, donanımla doğrudan konuşan tek yazılım katmanıdır. Sorumlulukları
Bilgisayarlar Nasıl Çalışır kursunda tanıtılan kavramlarla örtüşür:

- **Süreç zamanlama:** Hangi programın ne zaman işlemciyi kullanacağına karar verir. Bu
  kararın uygulanması, kesmeler dersinde anlatılan zamanlayıcı kesmesine dayanır.
- **Bellek yönetimi:** Her sürece kendi adres uzayını verir; bir sürecin diğerinin
  belleğini okumasını engeller.
- **Dosya sistemi:** Diskteki bloklara ad ve dizin yapısı giydirir.
- **Aygıt sürücüleri:** Klavye, disk, ağ arayüzü gibi donanımların ayrıntısını gizler.

Bir program çekirdeğin hizmetine **sistem çağrısı (system call)** ile ulaşır. Sistem
çağrısı, sıradan bir işlev çağrısı değildir: işlemci ayrıcalık düzeyini değiştirir,
denetim çekirdeğe geçer, iş bitince geri döner. Dosya açmak, bellek istemek, süreç
yaratmak birer sistem çağrısıdır.

Bu sınır önemlidir çünkü **taşınabilirliğin de sınırıdır**: aynı sistem çağrısı arayüzünü
sunan iki farklı çekirdek üzerinde aynı program çalışabilir.

Sistemin hangi çekirdeği çalıştırdığı sorulabilir:

```
$ uname -s
Linux
```

`uname` komutu çekirdeğin adını yazdırır. Aynı komut, Unix geleneğini paylaşan başka bir
sistemde başka bir yanıt verir — örneğin macOS üzerinde `Darwin`. Komutun kendisi her
ikisinde de vardır; yanıt farklıdır. Taşınabilirliğin ne demek olduğunun en kısa
gösterimi budur.

## Dağıtım

Çekirdek tek başına kullanılabilir bir sistem değildir. Dosya kopyalayan, metin
görüntüleyen, ağ bağlantısı kuran programlar çekirdeğin parçası değildir; ayrı
projelerdir.

**Dağıtım (distribution)**, bir çekirdeği seçilmiş bir program kümesiyle birleştirip
kurulabilir bir bütün hâline getiren paketleme çalışmasıdır. Bir dağıtım tipik olarak şu
bileşenleri belirler:

- Çekirdek ve sürücü seçimi
- Standart C kütüphanesi
- Temel komut araçları (dosya, metin, süreç araçları)
- İlk süreci başlatan ve servisleri yöneten sistem
- Paket yöneticisi ve depo yapılandırması
- Varsayılan kabuk ve varsayılan editör

Bu seçimler dağıtımdan dağıtıma değişir. Bu kurs, değişen kısımlara değil **ortak
zemine** bağlı kalır: anlatılan komutların çoğu POSIX'te tanımlıdır veya tüm yaygın
dağıtımlarda aynı adla bulunur. Dağıtıma özgü davranış geçtiğinde bu açıkça belirtilir.

**POSIX**, Unix benzeri sistemlerin arayüzünü tanımlayan bir standarttır. Bir komutun
POSIX'te tanımlı olması, adının ve temel seçeneklerinin standarda uyan her sistemde aynı
anlama geleceği anlamına gelir. Standart, her seçeneği kapsamaz: sistemler standarda ek
seçenekler koyar ve bu ekler birbirinden ayrışır. Kurs boyunca bu ayrışmanın en sık
görülen örneği olan GNU ve BSD araç aileleri arasındaki farklar, geçtikleri yerde
gösterilir.

## Kabuk

**Kabuk (shell)**, kullanıcıdan komut satırı alan, onu yorumlayan ve karşılık gelen
programları çalıştıran bir programdır. Çekirdeğin parçası değildir; ayrıcalıklı değildir;
başka herhangi bir program gibi çalışır ve değiştirilebilir.

Hangi kabuğun çalıştığı, süreç listesinden okunabilir:

```
$ ps -p $$ -o pid=,comm=
 1076 bash
$ echo $$
1076
```

`$$`, kabuğun kendi süreç numarasını tutan bir değişkendir. `ps` komutu o numaralı sürecin
adını yazdırır. Buradaki yanıt kabuğun adıdır — sistemden sisteme ve kullanıcıdan
kullanıcıya değişir.

Kabuğun değiştirilebilirliği, sistemin bir yerinde açıkça görünür:

```
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 31  2024 /bin/sh -> dash
```

`/bin/sh`, bir programın kendisi değil, bir **role** verilmiş addır: "POSIX kabuğu".
Çıktının ilk karakterindeki `l` harfi, bunun bir bağlantı olduğunu söyler; ok işareti
gerçek hedefi gösterir. Bu sistemde rol `dash` adlı kabuğa verilmiştir; başka bir sistemde
başka bir programa verilebilir. Bağlantıların nasıl çalıştığı, dosya işlemleri konusunda
ayrıntılı olarak ele alınacaktır.

Ayrım şuraya varır: bir komut "çalışmıyorsa" üç ayrı olasılık vardır. Komut sistemde kurulu
değildir (dağıtım katmanı), kabuk komutu bulamıyordur (kabuk katmanı) veya çekirdek işlemi
reddediyordur (izin katmanı). Bu kursun konularının sırası bu üç katmanı izler.

## Her Şey Bir Dosyadır — Somut Bir Örnek

Varsayımların en soyutu olan "her şey bir dosyadır" ilkesi, aygıtlara bakılarak
doğrulanabilir:

```
$ ls -l /dev/null /dev/zero
crw-rw-rw- 1 root root 1, 3 Jul 26 18:45 /dev/null
crw-rw-rw- 1 root root 1, 5 Jul 26 18:45 /dev/zero
```

Satır başındaki `c` harfi, bu girdilerin sıradan dosya değil **karakter aygıtı** olduğunu
söyler. Sıradan bir dosyanın boyutunun bulunduğu sütunda burada iki sayı vardır: aygıtın
ana ve alt numarası. Çekirdek bu numaralarla hangi sürücünün çağrılacağını belirler.

`/dev/null` yazılan her şeyi yutar ve okunduğunda hemen dosya sonu verir; `/dev/zero`
okundukça sıfır bayt üretir. İkisi de disk üzerinde veri tutmaz. Yine de bir program
onları sıradan bir dosya gibi açar, okur ve yazar — çünkü arayüz ortaktır.

## Kursun Ekseni

Kurs boyunca tek bir örnek üzerinde çalışılacaktır: ev dizini altında kurulan `proje/`
adlı bir ölçüm çalışması. Bu dizin ağacı her derste bir adım ilerler; ham ölçüm dosyaları
eklenir, işlenir, bağlanır, arşivlenir, izinleri düzenlenir ve sonunda bir grupla
paylaşılır.

Amaç, komutları listelemek değil, her komutun **neden** öyle davrandığını aynı somut ağaç
üzerinde göstermektir. Bir sonraki ders bu ağacı kurmadan önce, komutların kendisini
yorumlayan katmanı — kabuğu — inceler.

## Özet

- Unix geleneği dört varsayıma dayanır: her şey bir dosyadır, araçlar küçük ve tek işlidir,
  ortak arayüz metindir, yapılandırma okunabilir dosyalarda durur.
- Çekirdek donanımı yönetir ve hizmetlerini sistem çağrılarıyla sunar; bu sınır aynı
  zamanda taşınabilirliğin sınırıdır.
- Dağıtım, bir çekirdeği seçilmiş programlarla birleştiren paketleme çalışmasıdır;
  değişen kısımdır.
- POSIX, komut adlarının ve temel seçeneklerinin ortak anlamını tanımlar; sistemlerin
  standarda eklediği seçenekler birbirinden ayrışır.
- Kabuk ayrıcalıklı bir bileşen değil, değiştirilebilir bir programdır; `/bin/sh` bir
  programın değil bir rolün adıdır.

## Sonraki Adım

Katmanlar ayrıldığına göre, sıra en üsttekine gelir. Bir komut satırı yazıldığında kabuk
onu tam olarak ne yapar: sözcüklere nasıl böler, hangi kısmı program adı sayar, tırnak
işaretleri neyi değiştirir ve bir komutun başarılı olup olmadığı nereden anlaşılır? Sonraki
ders kabuğun bu ayrıştırma işini adım adım açar.
