Kısım I · Makine · Bölüm 18
İşletim Sistemleri Ailesi ve Terminal
macOS, Linux, Windows ve kabuk (macOS, Linux, Windows and the shell)
Neden burada: Bölüm 13–17 işletim sistemini kavram olarak kurdu; gerçekte Mac, Android, Ubuntu, Windows var. Bu bölüm bunların akrabalığını ve hepsine yazıyla konuşma yolunu, terminali, anlatır.
Neye dayanıyor: 13.2 ve 13.3 (çekirdek, sistem çağrısı), 14.1 (süreç), 16.1 ve 16.3 (yol, izin), 17 (sürücü).
- Kat 8–10Ağ, tarayıcı, uygulamaHepsi bu sistemlerden birinde süreç olarak çalışır.
- Kat 7İşletim sistemiBu bölüm: somut sistemler ve terminal (Bölüm 13–18).
- Kat 0–6Bit, devre, işlemci, bellek, diller, açılışÇekirdek açılışta yüklenen bir programdır.
Komut çıktıları, Ubuntu çalışan bir makinede, boş bir deneme klasöründe gerçekten çalıştırılarak alındı (kullanıcı ve klasör adları değiştirildi; bazı hata satırları kısaltıldı). Denemeler yalnız ayrı bir çalışma klasöründe yapıldı; paket kurma ve kaldırma komutları ise açıklayıcı örnektir, burada çalıştırılmadı. 18.4’teki örnekler bash/zsh içindir; PowerShell’de komut ve seçenekler farklı olabilir.
18.1 Soy ağacı: Unix, BSD, macOS (Darwin/XNU), iOS; Linux (Ubuntu), Android; Windows (NT) ayrı kol
Kök: Unix ve BSD
Dennis Ritchie'ye göre Unix 1969'da Bell Laboratuvarları'nda doğdu; ilk sürümü Ken Thompson'ın az kullanılan bir PDP-7'de yazdığı dosya sistemi ve birkaç araçtan çıktı. Ritchie'nin tarihçesi üç fikri öne çıkarır: dosya sistemi, süreç kontrolü ve komutları zincirleyen "boru hattı".1 (Bölüm 16, 14, 18.3). Bir adlandırma ayrıntısı: "UNIX" bir ticari markadır; The Open Group'a göre yalnızca Single UNIX Specification'a uyan ve sertifikalanan sistemler markayı kullanabilir.4 Linux ve BSD'ye bu yüzden "Unix-benzeri" (UNIX-like) denir.2
BSD (Berkeley Software Distribution), Berkeley'de Unix üzerine geliştirilen yazılım ve sistem ailesidir. FreeBSD bu mirasın bir devamıdır; Apple da kendi BSD katmanının 4.4BSD-Lite Release 2'den türediğini belirtir. Yani ortaklık yalnız benzer bir ekran kullanmaları değil, tarihsel sistem bileşenleri ve arayüzleridir.26
macOS ve iOS: Darwin, XNU
Apple'a göre çekirdek ve diğer temel parçaların açık kaynaklı bütününe Darwin (Darwin) denir; macOS, Darwin'in üstüne Apple'ın kapalı grafik ve uygulama katmanlarını ekler.5 Darwin'in çekirdeği XNU (X is Not Unix)'dur. Apple'ın README'si: "X is Not Unix"; Carnegie Mellon'da geliştirilen Mach çekirdeğini, FreeBSD bileşenlerini ve sürücüler için C++ tabanlı I/O Kit'i birleştiren melez (hybrid) bir çekirdek; macOS'ta ve iOS'ta kullanılır.7 Arşiv belgesine göre Mach işlemci ve belleği yönetir, zamanlar; BSD dosya sistemlerini, ağı, Unix güvenlik modelini, sistem çağrılarını ve POSIX arayüzlerinin çoğunu verir; I/O Kit sürücüleri taşır. Yani Bölüm 13–17'nin işleri Apple'da böyle dağılmıştır.
Linux: çekirdek ile dağıtım ayrı şeydir
Dar anlamda Linux yalnızca bir çekirdektir; kernel.org'a göre GNU GPL sürüm 2 altında yayımlanır, yani özgür yazılımdır.8 Bir masaüstü veya geliştirme ortamı için çekirdeğin yanına kabuk, araçlar ve diğer kullanıcı alanı parçaları eklenir. Çekirdeği bunlarla paketleyen bütüne dağıtım (distribution) denir. Ubuntu (Ubuntu), Debian temelli bir Linux dağıtımıdır. Çekirdek ile onu paketleyen tam sistemi ayırmak gerekir; Linux ve Ubuntu birbirinin rakibi iki aynı tür parça değildir.10
Android: Linux çekirdeği, farklı üst kat
Android Developers'a göre Android "Linux tabanlı açık kaynaklı bir yazılım yığınıdır"; temeli Linux çekirdeğidir.11 Android'in çekirdeği, Linux'un uzun dönem destekli bir sürümüne Android yamaları eklenerek oluşur; üstünde HAL (donanım üreticilerinin uyguladığı standart arayüz), ART (uygulamanın ara kodunu işlemci komutlarına çeviren çalışma ortamı) ve sistem servisleri gelir.12 Sonuç: Ubuntu da Android de "Linux" çekirdeğini kullanır ama bir Ubuntu programı Android'de kendiliğinden çalışmaz. Çekirdek ortak, üst kat farklı.
Windows (NT): ayrı kol
Windows'un NT soyu Unix/BSD'den ayrı bir işletim sistemi koludur. Microsoft'un mimari belgelerinde de süreç, sanal bellek, giriş/çıkış ve sürücüler bulunur: aynı temel sorunların başka bir gerçeklemesi.13 Kullanıcı kipindeki süreçlerin özel adres alanları vardır; çekirdek kipindeki bir hatanın etkisi bütün sisteme yayılabilir.14 Windows içinde Linux araçları için WSL (Windows Subsystem for Linux) kullanılabilir. WSL 2, Linux çekirdeğini sistemin yönettiği hafif bir sanal makinede çalıştırır; “sanal makine hiç yok” demek yanlış olur. Ayrıntılı sanallaştırma konusu Bölüm 43'te.24
18.2 POSIX: Unix ailesinin ortak dili
Dosya açmak için bir sistemde open(), ötekinde open_file() olsaydı programları taşımak için bu çağrıları uyarlamak gerekirdi. Bottom Up sorunu bu örnekle anlatır; çözüm POSIX (Portable Operating System Interface)'tir: Unix tipi sistemlerin uyguladığı önemli bir standart (Windows'un benzer ama tescilli standartları vardır).17 POSIX bir program değil, bir şartnamedir. POSIX.1-2024'ün kapsam maddesi: uygulamaların kaynak düzeyinde taşınabilirliği için standart bir işletim sistemi arayüzü ve ortamı tanımlar; ortamın içinde kabuk ve ortak yardımcı programlar vardır. Kapsam dışı olanlar da yazılı: grafik kullanıcı arayüzleri ve veritabanı yönetim sistemi arayüzleri.16 Yani POSIX hem programcının çağırdığı fonksiyonları (Bölüm 13.3'teki sistem çağrılarının C arayüzü) hem kullanıcının yazdığı komutları (ls, cat) kapsar; masaüstü pencerelerini kapsamaz.
Bu, Bölüm 1.4'teki arayüz ve gerçekleme ayrımının sistem düzeyindeki örneğidir: POSIX arayüz, macOS ile Linux gerçekleme. Hukuk benzetmesi: ortak bir çerçeve düzenleme gibi; herkes ona uyar ama uyum derecesi ve ek hükümler değişir. UNIX sertifikası bunun üstündeki katmandır: Single UNIX Specification Version 5 (2024)'ün çekirdeği POSIX.1-2024'tür.4 Kabuklarda da fark görünür: bash kılavuzu bash'in POSIX Kabuk ve Araçlar bölümünün uyumlu bir gerçeklemesi olmayı amaçladığını söyler;21 zsh kılavuzu zsh'nin varsayılan kipte POSIX'le uyumluluk sağlamadığını yazar.22
"Mac ve Linux aynı" da, "tamamen farklı" da yanlış. Ortak zemin POSIX'in tanımladığı komutlar ve çağrılardır; her sistem bunun dışında kendi seçeneklerini taşır (Bottom Up: platformlar POSIX'e "genel olarak" uyar, küçük ama bazen önemli farklarla).17 Güvenli yol: POSIX'teki seçeneklere dayan, gerisini sistemin man sayfasından doğrula.
18.3 Terminal, kabuk (zsh, bash), komut satırı (CLI) ile grafik kullanıcı arayüzü (GUI) farkı
Kabuk (shell), metin girdisini komut olarak yorumlayan programdır. Etkileşimli satırları okuyabildiği gibi komut dosyalarını da yürütebilir. bash ve zsh kabuk adlarıdır; Apple yeni macOS hesapları için zsh'yi varsayılan kabuk olarak belgeler.1820 Windows'taki PowerShell de kabuk ve betik dilidir; .NET nesneleriyle çalışması bash/zsh'nin ağırlıkla metin temelli borularından farklıdır.24
Terminal (terminal) gündelik kullanımda yazı girip çıktı gördüğün uygulamadır; Mac’te Terminal buna örnek. Tarihte fiziksel klavye ve ekrandı. POSIX’in terminal arayüzü ise işletim sistemindeki özel karakter dosyası düzeyini tanımlar. Terminal uygulaması girdiyi kabuğa iletir, çıktıyı gösterir; komutu yorumlayan kabuktur.1819
| Katman | İşi | Örnek |
|---|---|---|
| Terminal (pencere) | Tuşları kabuğa iletir, çıktıyı çizer | macOS Terminal, Windows Terminal |
| Kabuk | Satırı yorumlar, programı bulup çalıştırır | zsh, bash, PowerShell |
| Komut (program) | Asıl işi yapar, çekirdekten hizmet ister | ls, git, node |
Komut satırı arayüzü (CLI, command line interface) ile grafik kullanıcı arayüzü (GUI, graphical user interface): Apple'ın kılavuzuna göre Mac uygulamalarında düğmeler, kaydırıcılar ve menülerle (GUI) iş yaparsın; Terminal'de komut yazarsın (CLI).19 İkisi aynı çekirdeğe iki kapıdır. Pratik farklar: tekrarlanabilirlik: beş tıklamayı anlatman gerekir, bir komut kopyalanır ve betiğe dönüşür (agent'ların terminalde çalışabilmesinin nedeni budur); uzaktan çalışma: satır tabanlı komut ağdan kolay geçer, Ubuntu belgeleri OpenSSH'i ağdaki bilgisayarları uzaktan denetlemek için şifreli araç olarak tanıtır30 (sunucuyu grafik masaüstü açmadan yönetmek mümkündür, 18.6).
Kabuğun gücü: Bottom Up'a göre kabuk bir programın çıktısını ötekinin girdisine bağlar (program1 | program2); "küçük araçları zincirle" Unix deyimidir.23 program1 | program2 yazımındaki |, ilk programın çıktısını ikincinin girdisine bağlar. Ayrıntılı betik yazmayı burada açmıyoruz.
18.4 Temel komutlar: pwd, ls, cd, mkdir, cat; ortam değişkeni, PATH
Bir komut satırı komut adı, seçenekler (-l) ve argümanlardan (genellikle yol) oluşur: ls -l js içinde ls komut, -l seçenek, js argümandır. $ kabuğun istemidir; sen yazmazsın. Oturum gerçekten çalıştırıldı:
$ mkdir hukuk-app
$ cd hukuk-app
$ pwd
/home/kerem/deneme/hukuk-app
$ mkdir js
$ printf "<h1>Hukuka Giris</h1>\n" > index.html
$ echo "body { color: navy; }" > style.css
$ ls
index.html js style.css
$ cat index.html
<h1>Hukuka Giris</h1>
$ cd js
$ pwd
/home/kerem/deneme/hukuk-app/js
$ cd ..
(printf ve echo metin yazar; > çıktıyı ekran yerine dosyaya yönlendirir, yani dosyayı oluşturur; bu iki satır yalnızca örnek dosya üretti.)
pwd(print working directory): POSIX'e göre geçerli çalışma dizininin mutlak yolunu yazar.25 Çalışma dizini (working directory), kabuğun şu an bulunduğu klasördür; Bölüm 16.1'deki göreli yol buna göre çözülür. Kaybolursan ilk komut budur.ls(list): dizinin içindekini listeler; nokta ile başlayan adları-averilmedikçe yazmaz; argümansız.verilmiş gibi davranır.25-lilk sütunda Bölüm 16.3'teki izin dizisini gösterir (dile başlayan satır dizindir).cd(change directory): POSIX tanımında geçerli kabuk ortamının çalışma dizinini değiştirir.25 Bu yüzden ayrı program olamaz: ayrı program kendi sürecinin dizinini değiştirip kaybolurdu, kabuk yerinde kalırdı.cdkabuğa gömülü bir yerleşik komuttur (builtin). ArgümansızcdHOME'a gider,cd ..üst dizine,cd -önceki dizine.mkdir(make directory): dizin oluşturur;-peksik üst dizinleri de yaratır.25cat(concatenate): dosyaları sırayla okuyup içeriklerini standart çıktıya yazar;25 içine kısaca bakmanın en hızlı yolu.
$ type cd
cd is a shell builtin
$ type ls
ls is hashed (/usr/bin/ls)
$ mkdir js/yeni/alt
mkdir: No such file or directory
$ echo $?
1
$ mkdir -p js/yeni/alt
$ echo $?
0
$? son komutun çıkış durumunu (exit status) tutar: genel olarak 0 başarıyı, sıfır dışı değer başarısızlığı veya komuta özgü başka bir sonucu bildirir. ls ayrı bir programdır (hashed: bash yolunu hatırlıyor, aşağıda PATH).
Ortam değişkeni (environment variable)
Kabuk, çalıştırdığı programa bir bilgi paketi verir: ad=değer biçiminde metin çiftleri. POSIX'e göre bir program başlarken ona bu dizgilerden oluşan bir dizi (ortam) verilir; standart araçların kullandığı ortam adları büyük harf, rakam ve alt çizgiden oluşur; küçük harfli adlar da uygulamalar için mümkündür.26 Yani ortam, Bölüm 14'teki sürecin başlangıçtaki "ayar çantası"dır. Bash kılavuzuna göre export, bir adı sonradan çalıştırılacak komutlara ortamla geçirilecek diye işaretler;21 işaretlenmemiş değişkeni çocuk süreç görmez:
$ MESAJ=merhaba
$ echo $MESAJ
merhaba
$ bash -c 'echo [$MESAJ]'
[]
$ export MESAJ
$ bash -c 'echo [$MESAJ]'
[merhaba]
bash -c '…' yeni bir bash süreci (çocuk) başlatır. Uygulamamızda veritabanı adresi gibi çalışma ayarları kaynak koda gömülmeden ortamla verilebilir (Bölüm 43.7, 28.7).
PATH: komut nerede aranır?
Bash kılavuzuna göre komut adında eğik çizgi yoksa önce kabuk fonksiyonlarına, sonra yerleşik komutlara bakılır; ikisi de değilse $PATH'in her elemanındaki dizinde o adda çalıştırılabilir dosya aranır.21 POSIX'e göre PATH iki nokta üstüste ile ayrılmış dizin listesidir; liste baştan sona taranır, çalıştırma izni olan ilk dosyada durulur; ad eğik çizgi içeriyorsa PATH hiç taranmaz.26 Örnek (kısaltılmış) PATH ve olay zinciri:
$ echo "$PATH"
/usr/local/bin:/usr/bin:/bin
$ printf '#!/bin/sh\necho Merhaba Kerem\n' > selam
$ selam
bash: selam: command not found
$ echo $?
127
$ ./selam
bash: ./selam: Permission denied
$ echo $?
126
$ chmod +x selam
$ ./selam
Merhaba Kerem
$ PATH="$PWD:$PATH" selam
Merhaba Kerem
selam: eğik çizgi yok, kabuk PATH'teki dizinlere bakar, bulamaz: command not found (127). Dosya klasörde duruyor ama klasör PATH'te değil../selam: eğik çizgi var, PATH taranmaz, dosya doğrudan açılır. Amaxizni yok: Permission denied (126), Bölüm 16.3.chmod +xiznini ekler; artık./selamçalışır.PATH="$PWD:$PATH" selam: yalnızca bu komut için çalışma dizinini PATH'in başına ekler; ad, eğik çizgisiz bulunur.
İki ayrı hata: "bu ad hiçbir yerde yok" (127) ile "dosya var ama çalıştıramazsın" (126). Geçerli dizini kalıcı PATH'e koyarsan indirdiğin klasördeki ls adlı bir dosya gerçek ls'in yerine geçebilir; bu yüzden ./ bilinçli yazılır.
Başkasından ya da bir agent'tan gelen komutta şu işaretlere dikkat et: sudo (yönetici yetkisi), rm (siler), > (dosyanın üzerine yazar), curl … | bash (indirileni doğrudan çalıştırır). Anlamadığın komutu çalıştırma. Homebrew'un kurulum komutu da indirilen betiği bash'e verir; sitesi betiğin ne yapacağını açıkladığını ve başlamadan önce durduğunu söyler.27
18.5 Paket yöneticisi: Homebrew, apt
Program kurmanın iki yolu var: siteden kurulum dosyası indirip tıklamak ya da adını bir komuta söyleyip gerisini ona bırakmak. İkincisi paket yöneticisidir (package manager): yazılımı bir kataloğundan bulup indiren, kuran, güncelleyen, kaldıran ve ihtiyaç duyduğu parçaları da çözen araç. Katalog paket deposu (package repository) adını taşır (Git'in deposuyla karıştırma, Bölüm 28). Aynı fikri Bölüm 29'da JavaScript paketleri için npm olarak göreceksin.
apt (Debian, Ubuntu). Ubuntu Server belgesine göre Debian paketlerini (.deb) kurmanın önerilen yolu APT (Advanced Packaging Tool), yani apt komutudur; APT yerel bir paket dizinine bakar, dizin /etc/apt/sources.list.d altında tanımlı depolardan gelir.29 Belgedeki akış (çalıştırmadım, sistemi değiştirirler; # sonrası yorumdur):
$ sudo apt update # paket dizinini depolardan yenile
$ sudo apt install nmap # nmap'i ve gereken parçaları kur
$ sudo apt remove nmap # kaldır
$ sudo apt upgrade # kurulu paketleri güncelle
sudo, ardından gelen komutu yönetici (root) yetkisiyle çalıştırır. Sistem geneline kurmak sıradan kullanıcının yazamadığı dizinlere dokunmaktır; Bölüm 13.2'deki ayrıcalık ve Bölüm 16.3'teki izinler yüzünden yetki gerekir. Belge ayrıca apt'in etkileşimli kullanım için olduğunu, betiklerde apt-get kullanılması gerektiğini söyler; altta dpkg durur, o paketleri kurar ama bağımlılıkları kendiliğinden indirip çözemez, APT bunu ekleyen katmandır.29
Homebrew (macOS, Linux, WSL). macOS ile apt gibi bir yönetici gelmez; yaygın seçenek Homebrew'dur. Komut satırı araçları için formula, grafik uygulamaları için cask gibi paket tanımları kullanır.27
Homebrew paketlerini kendi kurulum kökü (prefix) ve paket dizinleriyle yönetir. Varsayılan kök Apple silicon Mac’te /opt/homebrew, Intel Mac’te /usr/local’dır. İlk kurulumdan sonra paket kurmak için normalde sudo gerekmez. Kurulumun verdiği brew shellenv ayarı araçların PATH’te bulunmasına yardım eder; “kurulu ama bulunamıyor” sorusu böylece 18.4’e bağlanır.2728
Node, Go ve Git gibi araçları kendi bilgisayarında muhtemelen Homebrew (Mac) ya da WSL'deki Ubuntu'da apt ile kuracaksın; sunucuda (Bölüm 43) araçların hangi yolla kurulacağı ayrıca seçilir. Sonra git (Bölüm 28), npm (29), go run (37) ve psql (39) hep bu terminalde yazılır; kurulumdan sonra "command not found" çıkarsa ilk bakılacak yer PATH'tir. Prototipinin klasörüne cd ile girip ls yazmak, Bölüm 16'daki dosya ağacında yürümektir.
18.6 Sunucular neden çoğunlukla Linux; Mac neden geliştirici dostu
Bu başlığı kullanım yüzdesi sıralaması olarak değil, tercih gerekçeleri olarak okuyacağız. Birincil bir yaygınlık ölçümü kullanmadığımız için pazar payı vermiyoruz.
Sunucuda Linux: çekirdeğin GPLv2 lisansı ve kaynak kodunun erişilebilirliği bir etkendir;8 Ubuntu da ücretsiz kullanılabilen sistem sunar.10 SSH ile uzaktan yönetim ve paket araçları otomasyona elverişlidir.2925 Terminal pencere düzenine bağlı kalmadan komutlarla çalışmayı sağlar. Windows Server ve diğer sistemlerin sunucu olamayacağı sonucu çıkmaz.
Mac ve geliştirici konforu: “Dost” öznel olduğu için somut parçaları ayırıyoruz. XNU’nun BSD bileşeni Unix tipi güvenlik, sistem çağrıları ve birçok POSIX arayüzü sağlar.6 Grafik uygulamalarla terminal aynı masaüstünde birlikte kullanılabilir;19 Homebrew geliştirme araçlarının kurulumunu yönetir.27 Bu parçalar sunucuda kullanacağın birçok komut fikrini yerel geliştirmeye taşır; “her geliştirici için en iyi sistem” kanıtı değildir.
Uyarı: Mac sunucunun kendisi değildir. Çekirdek farklı (XNU, Linux değil), varsayılan kabuk farklı (zsh), araç seçenekleri küçük ama gerçek biçimde ayrışabilir (18.2). "Bende çalışıyordu" sorununun bir kaynağı budur; konteynerleri Bölüm 43'te çözümlerden biri olarak göreceğiz. Mac şart da değil: Windows'ta WSL ile Ubuntu terminali alabilir24 ya da doğrudan Linux kullanabilirsin.
13: komutlar dosya, süreç ve aygıt hizmetlerini çekirdekten alır. 14: kabuk bir süreçtir; çoğu komutu ayrı süreç olarak başlatır, cd gibi yerleşikler kabuğun içinde çalışır; ortam, sürecin başlangıç paketidir. 16: yol, çalışma dizini, izin ve x biti bu bölümün her yerindeydi; PATH dosya sisteminde bir listede aramadır. 17: terminal dosya gibi görünür, klavye ve ekranla sürücüler üzerinden konuşur.
Bu bölümde neler kuruldu
Soy ağacı: Unix → BSD → Darwin/XNU (macOS, iOS); Linux çekirdeği → dağıtımlar (Ubuntu), Android; Windows NT ayrı kol. POSIX ortak şartnamedir. Terminal, kabuk ve komut ayrı katlardır. pwd, ls, cd, mkdir, cat; ortam değişkenleri ve PATH; apt ve Homebrew.
Terimler sözlükte, Bölüm 18 başlığı altında.
Computer Science from the Bottom Up, Bölüm 1, "3.1 The Shell" (yönlendirme ve boru alt başlıklarıyla). Derinleşmek için POSIX.1-2024, "1.1 Scope" ve Ubuntu Server belgesi, "Install and manage packages".
Takıldığın her yeri yapay zekâ öğretmenine sor; ondan boş bir klasörde yalnızca okuyan beş komutluk bir oturum tasarlamasını iste, çıktıyı önceden tahmin et, sonra çalıştırıp karşılaştır.
Bölüm sonu soruları
Kitaba bakmadan cevapla. Kâğıt kalem serbest.
uname -s "Linux", /etc/os-release "Ubuntu" der. Bkz. 18.1selam yazınca "command not found" çıkıyor, dosya o klasörde duruyor. En olası sebep?MESAJ=merhaba yazılıp export edilmeden bash -c 'echo [$MESAJ]' çalıştırılırsa ne olur?export değişkeni sonradan çalışan komutlara ortamla geçirir. Bkz. 18.4sudo gerekmez?sudo gerekmez. Paketler ev dizinine değil prefix'e (örneğin /opt/homebrew) girer; apt ise sistem geneline kurup yetki ister. Bkz. 18.5Örnek cevabı göster
Ubuntu bir Linux dağıtımıdır (çekirdek + araçlar + apt). Android de Linux çekirdeğini kullanır ama üstünde HAL, ART ve Android çatısı vardır. macOS Linux değil, XNU çekirdeğiyle çalışır, BSD soyundandır. POSIX, Unix tipi arayüzlerin ortak zeminini açıklar; Android’in bütün ortamının Ubuntu veya macOS ile aynı olduğu sonucu çıkmaz. Bkz. 18.1 ve 18.2.
node yazıp Enter'a bastığında kabuk ne yapar? node'u nerede arar, hangi hata mesajlarıyla karşılaşabilirsin ve her biri ne demektir?Cevabı göster
Eğik çizgi olmadığı için kabuk önce fonksiyonlara, yerleşiklere bakar, sonra PATH'teki dizinleri soldan sağa gezip çalıştırılabilir node dosyası arar; bulursa yeni süreç başlatır. "command not found": PATH'te yok (kurulu değil ya da dizini PATH'te değil). "Permission denied": dosya var, x izni yok. "No such file or directory": eğik çizgili yol yanlış. Bkz. 18.4.
Kaynaklar
- Dennis M. Ritchie, The Evolution of the Unix Time-sharing System.
- FreeBSD, Explaining BSD.
- FreeBSD, Handbook, Introduction.
- The Open Group, UNIX Certification Program ve Single UNIX Specification V5 (2024), Introduction.
- Apple, Kernel Programming Guide: Kernel Architecture Overview (arşiv belgesi).
- Apple, Kernel Programming Guide: BSD Overview (arşiv belgesi).
- Apple, XNU README.
- kernel.org, SSS ve Licensing rules.
- Ubuntu, Ubuntu and Debian.
- Android Developers, Platform architecture.
- AOSP, Kernel overview ve Architecture overview.
- Microsoft Learn, Lesson 2 – Windows NT System Overview (arşiv belgesi).
- Microsoft Learn, User mode and kernel mode.
- Microsoft Learn, Multiprocessor-Safe ("Windows NT-based operating system") ve Operating System Version.
- The Open Group, POSIX.1-2024, 1. Introduction (1.1 Scope).
- Ian Wienand, Bottom Up: Bölüm 1, 1.2, Bölüm 4.
- The Open Group, POSIX.1-2024, 3. Definitions (Shell, Terminal, Pseudo-Terminal).
- Apple Support, What is Terminal on Mac?
- Apple Support, Use zsh as the default shell on Mac ve Change the default shell in Terminal.
- GNU, Bash Reference Manual (What is a shell?, 3.7.2,
export). Bash geliştiricisi Chet Ramey’nin resmî üniversite sitesindeki kılavuz kopyası. - Zsh Manual, Introduction.
- Ian Wienand, Bottom Up, 1.3 File Descriptors (3.1 The Shell).
- Microsoft Learn: WSL, PowerShell, Windows Terminal.
- The Open Group, POSIX.1-2024 Utilities: pwd, ls, cd, mkdir, cat.
- The Open Group, POSIX.1-2024, 8. Environment Variables.
- Homebrew, brew.sh ve brew(1).
- Homebrew, Installation.
- Ubuntu Server documentation, Install and manage packages.
- Ubuntu Server documentation, OpenSSH server.