Bölüm 16: Linux
Giriş
Nasıl Çalışalım?
Kurallar (aksi belirtilmedikçe): komutlar bash kabuğunda, sıradan bir kullanıcıyla çalıştırılır; C örneklerinde gerekli başlık dosyaları eklenmiş kabul edilir ve sistem çağrıları başarılıdır.
Soru 1 · Tarihçe ve Kabuk
Linux Nasıl Doğdu?
Linux çekirdeğinin ortaya çıkışı için hangisi doğrudur?
- AT&T’nin UNIX kaynak kodunun doğrudan kopyalanmasıyla yazıldı.
- Linus Torvalds çekirdeği MINIX üzerinde geliştirdi; çekirdek GNU projesinin derleyici, kabuk ve araçlarıyla birleşerek kullanılabilir bir sistem oldu.
- Berkeley’deki BSD ekibinin bir alt projesidir.
- Tanenbaum’un yazdığı MINIX’in yeni adıdır.
- Baştan bir mikroçekirdek olarak tasarlandı.
Cevabı göster
Doğru cevap: B) Linus Torvalds çekirdeği MINIX üzerinde geliştirdi; çekirdek GNU projesinin derleyici, kabuk ve araçlarıyla birleşerek kullanılabilir bir sistem oldu.
Linux UNIX kodu içermez; POSIX arayüzünü yeniden gerçekler. Tanenbaum MINIX’i öğretim için yazmıştı; Torvalds onun üzerinde kendi monolitik çekirdeğini geliştirdi ve GNU araçlarıyla birleştirdi. Bu yüzden tam sistem için “GNU/Linux” adı da kullanılır.
Soru 2 · Tarihçe ve Kabuk
“Linux” Neyin Adı?
Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.
““Linux” sözcüğü tam anlamıyla Ubuntu, Fedora ya da Pardus gibi bir dağıtımın bütününün adıdır.”
Cevabı göster
Yanlış. Linux tam olarak yalnızca çekirdeğin adıdır. Dağıtım çekirdeğe C kütüphanesi (glibc, musl), kabuk ve araçlar, paket yöneticisi (apt, dnf, pacman), init sistemi (systemd) ve masaüstü ekler. Android de Linux çekirdeğini kullanır ama GNU kullanıcı alanı yoktur.
Soru 3 · Tarihçe ve Kabuk
Boru Hattının Çıktısı
Aşağıdaki komut ne yazdırır? sort komutu uniq -c’den önce neden gereklidir?
printf "b\na\nb\nc\na\nb\n" | sort | uniq -c | sort -rn | head -1
3 b2 a1 c3 a
Cevabı göster
Doğru cevap: A) 3 b
3 b
uniq -c yalnızca ardışık tekrarları sayar; önce sort aynı satırları yan yana getirmezse b’ler üç ayrı grup olarak sayılırdı. sort -rn sayıya göre büyükten küçüğe dizer, head -1 ilk satırı alır.
Soru 3 · Çözüm
Adım Adım Çözüm
Kabuk 5 süreç ve 4 boru kurar; her aşama yalnızca kendi stdin’ini okur, stdout’una yazar.
printf altı satır üretir; sort tüm girdiyi okuduktan sonra sıralı yazar.
uniq -c ardışık aynı satırları sayıp “sayı satır” biçiminde yazar.
Sayıya göre ters sıralanır (-n sayısal, -r ters); head -1 en sık satırı bırakır: 3 b.
Soru 4 · Tarihçe ve Kabuk
Yönlendirmenin Sırası
/yok dizini mevcut değil. Hangi komutta ls’in hata mesajı ekrana yazılır, dosyaya gitmez?
ls /yok /tmp > cikti.txt 2>&1ls /yok /tmp 2>&1 > cikti.txtls /yok /tmp &> cikti.txtls /yok /tmp 2> cikti.txt
Cevabı göster
Doğru cevap: B) ls /yok /tmp 2>&1 > cikti.txt
Yönlendirmeler soldan sağa uygulanır. B’de 2>&1 önce stderr’i stdout’un o anki hedefine (terminal) kopyalar; ardından yalnızca stdout dosyaya çevrilir. A’da önce stdout dosyaya gider, sonra stderr ona eşlenir; C ikisini birden, D yalnız stderr’i dosyaya yollar.
Soru 5 · Tarihçe ve Kabuk
Boru Uçlarını Kapatmak
Kabuk ls | wc -l satırını pipe, fork, dup2 ve exec ile kurar. Adımları sırayla yazın. Kabuk kendi elindeki yazma ucunu kapatmayı unutursa ne olur?
Cevabı göster
pipe(fd): okuma ucu (ör. 3) ve yazma ucu (4).- 1. çocuk:
dup2(4, 1), fazla uçları kapatır,exec("ls"). - 2. çocuk:
dup2(3, 0), fazla uçları kapatır,exec("wc"). - Kabuk iki ucu da kapatır ve iki çocuğu
waitile bekler.
Yazma ucu herhangi bir süreçte açık kaldıkça wc EOF görmez: ls bitse bile wc sonsuza dek bekler, kabuk da onu.
Soru 6 · Süreçler ve Sinyaller
fork Sonrası Değişkenler
Program ne yazdırır? Çıktı sırası her çalıştırmada aynı mıdır?
int main(void) {
int x = 5;
pid_t p = fork();
if (p == 0) {
x += 10;
printf("çocuk %d\n", x);
exit(0);
}
waitpid(p, NULL, 0);
x -= 1;
printf("ebeveyn %d\n", x);
return 0;
}çocuk 15,ebeveyn 14çocuk 15,ebeveyn 4ebeveyn 4,çocuk 15(sıra belirsiz)çocuk 15,ebeveyn 5
Cevabı göster
Doğru cevap: B) çocuk 15, ebeveyn 4
çocuk 15 ebeveyn 4
fork sonrası iki sürecin ayrı adres uzayı vardır (COW): çocuğun x += 10’u ebeveyni etkilemez. Ebeveyn waitpid’de çocuğu beklediği için sıra her zaman aynıdır.
Soru 6 · Çözüm
Adım Adım Çözüm
E: ebeveyn (PID 700), Ç: çocuk (PID 701). fork bir kez çağrılır, iki kez döner.
Tek süreç var; x = 5.
fork: ebeveynde p = çocuğun PID’i, çocukta p = 0. Sayfalar paylaşılır, yazılınca kopyalanır.
Hangisi önce CPU alırsa alsın, ebeveyn çocuk bitene kadar waitpid’de bloke kalır.
Çocuk kendi x kopyasını 15 yapar ve yazar. Ebeveynin x’i hâlâ 5.
Çocuk biter; çıkış durumu okunana kadar zombidir, ebeveyne SIGCHLD gider.
waitpid döner, zombi toplanır. Ebeveyn x’i 4 yapar ve yazar.
int main(void) {
int x = 5;
pid_t p = fork();
if (p == 0) {
x += 10;
printf("çocuk %d\n", x);
exit(0);
}
waitpid(p, NULL, 0);
x -= 1;
printf("ebeveyn %d\n", x);
return 0;
}Soru 7 · Süreçler ve Sinyaller
Kaç Süreç Oluşur?
main içinde yalnızca aşağıdaki iki satır var. Program sonunda kaç tane x yazılır (ilk süreç dahil kaç süreç çalışır)?
if (fork() && fork())
fork();
printf("x\n");- 3
- 4
- 6
- 8
Cevabı göster
Doğru cevap: B) 4
4. && kısa devre yapar: ilk fork’ta çocuk 0 alır, koşul yanlıştır, başka fork yapmaz. Ebeveyn ikinci fork’u yapar; oradaki çocuk da 0 alıp çıkar. Yalnız ilk süreç üçüncü fork’a ulaşır. Toplam: ilk süreç + 3 çocuk = 4 süreç, 4 satır.
Soru 7 · Çözüm
Adım Adım Çözüm
a && b: a yanlışsa (0) b hiç değerlendirilmez. fork çocuğa 0, ebeveyne pozitif PID döndürür.
İlk fork iki süreç yaratır. Çocukta sonuç 0 olduğundan && kısa devre yapar: Ç1 doğrudan printf’e gider.
Ebeveynde ilk sonuç pozitif; ikinci fork çağrılır. Ç2’de sonuç 0, koşul yanlış.
Yalnız P’de iki sonuç da pozitif: üçüncü fork Ç3’ü yaratır. printf’i 4 süreç çalıştırır.
Soru 8 · Süreçler ve Sinyaller
Yakalanamayan Sinyal
Bir süreç sigaction ile aşağıdaki sinyallerden hangisi için işleyici kuramaz ya da onu yok sayamaz?
- SIGINT (Ctrl-C)
- SIGTERM (
killkomutunun varsayılanı) - SIGKILL (
kill -9) - SIGHUP
- SIGUSR1
Cevabı göster
Doğru cevap: C) SIGKILL (kill -9)
SIGKILL ve SIGSTOP yakalanamaz, engellenemez, yok sayılamaz; yöneticinin süreci her durumda durdurabilmesi için. kill PID varsayılan olarak SIGTERM (15) gönderir: süreç kaynaklarını temizleyip nazikçe çıkabilir. Önce SIGTERM, ancak gerekirse SIGKILL denenmelidir.
Soru 9 · Süreçler ve Sinyaller
Çocuk Bitince Ne Kalır?
Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.
“Ebeveyni henüz wait çağırmamışken sonlanan bir çocuk süreç, çekirdek tablolarından hemen ve tamamen silinir.”
Cevabı göster
Yanlış. Çocuğun belleği ve dosyaları serbest bırakılır, ama PID’i ve çıkış durumu ebeveyn okuyana kadar saklanır: süreç zombi (Z) olur. Ebeveyn hiç beklemezse zombiler birikir; ebeveyn ölürse çocuk PID 1’e (ya da bir alt toplayıcıya) devredilir ve orada toplanır.
Soru 10 · Süreçler ve Sinyaller
Süreç ve İş Parçacığı Linux’ta
Linux’ta süreç ile iş parçacığı arasındaki ilişki için hangisi doğrudur?
- Çekirdekte iş parçacıkları için ayrı, süreçlerden tamamen farklı bir yapı vardır.
- İkisi de bir görevdir (
task_struct); farkclone()bayraklarıyla neyin paylaşıldığıdır. İş parçacıklarıCLONE_VM,CLONE_FILES,CLONE_SIGHAND,CLONE_THREADile adres uzayını ve tanımlayıcıları paylaşır, aynı TGID’dedir. - İş parçacıkları yalnızca kullanıcı alanında vardır; çekirdek onları bilmez (N:1 model).
- fork() ile oluşturulan çocuk ebeveynle aynı adres uzayını paylaşır.
Cevabı göster
Doğru cevap: B) İkisi de bir görevdir (task_struct); fark clone() bayraklarıyla neyin paylaşıldığıdır. İş parçacıkları CLONE_VM, CLONE_FILES, CLONE_SIGHAND, CLONE_THREAD ile adres uzayını ve tanımlayıcıları paylaşır, aynı TGID’dedir.
NPTL 1:1 modelidir: her pthread bir çekirdek görevidir. Kullanıcının gördüğü PID aslında TGID’dir. fork ise her yapının kopyasını alan (bellek COW) bir clone’dur.
Soru 11 · Çizelgeleme ve Önyükleme
Hangi Sınıf Önce?
Aynı CPU’da aynı anda üç görev hazır: biri SCHED_DEADLINE, biri SCHED_FIFO (öncelik 50), biri normal (SCHED_OTHER, nice −20). Çizelgeleyici önce hangisini çalıştırır?
- nice −20 olan normal görev, çünkü nice değeri en düşüktür
- SCHED_FIFO görevi
- SCHED_DEADLINE görevi
- Üçü eşit pay alır
Cevabı göster
Doğru cevap: C) SCHED_DEADLINE görevi
Çizelgeleme sınıfları sırayla sorulur: deadline > gerçek zamanlı (FIFO/RR) > adil (EEVDF) > boşta. Üst sınıfta hazır görev varken alttakiler beklemek zorundadır. nice yalnızca adil sınıfın içindeki payı etkiler.
Soru 12 · Çizelgeleme ve Önyükleme
nice ve Sanal Çalışma Süresi
Adil sınıfta ağırlıklar: nice 0 → 1024, nice 5 → 335, nice −5 → 3121. Sanal çalışma süresi artışı Δv = gerçek süre × 1024 / ağırlık. (a) Her görev 6 ms çalışırsa vruntime’ı ne kadar ilerler? (b) Sürekli hazır bir nice 0 ve bir nice 5 görevi tek CPU’yu yaklaşık hangi oranda paylaşır?
Cevabı göster
- (a) nice 0: 6 × 1024 / 1024 = 6 ms; nice 5: 6 × 1024 / 335 ≈ 18,34 ms; nice −5: 6 × 1024 / 3121 ≈ 1,97 ms.
- (b) Pay ağırlıkla orantılıdır: 1024 / (1024 + 335) ≈ %75,3 ve 335 / 1359 ≈ %24,7.
Düşük ağırlıklı görevin vruntime’ı hızlı ilerlediği için daha seyrek seçilir; EEVDF ayrıca yalnızca “uygun” (v ≤ V) görevler arasında en erken sanal son tarihi seçer.
Soru 12 · Çözüm
Adım Adım Çözüm
Sanal zaman, gerçek zamanın ağırlıkla ölçeklenmiş hâlidir; çizelgeleyici geride kalanı öne alır.
nice 0 için ağırlık 1024: sanal zaman gerçek zamanla aynı hızda ilerler.
nice 5 görev aynı 6 ms için ≈ 3 kat, nice −5 görev ≈ 3 kat yavaş “yaşlanır”.
Uzun vadede her görev ağırlığı oranında CPU alır: ≈ %75 ve ≈ %25.
Soru 13 · Çizelgeleme ve Önyükleme
Önyükleme Sırası
Bir Linux makinesinin açılışı için doğru sıra hangisidir?
- systemd → UEFI → önyükleyici → çekirdek → initramfs
- UEFI ürün yazılımı → önyükleyici (çekirdek + initramfs yüklenir) → çekirdek başlatma → initramfs gerçek kökü bağlar → PID 1 (systemd) servisleri başlatır → giriş
- Önyükleyici → UEFI → systemd → çekirdek → giriş
- Çekirdek → UEFI → initramfs → önyükleyici → systemd
Cevabı göster
Doğru cevap: B) UEFI ürün yazılımı → önyükleyici (çekirdek + initramfs yüklenir) → çekirdek başlatma → initramfs gerçek kökü bağlar → PID 1 (systemd) servisleri başlatır → giriş
initramfs, kök dosya sistemini bağlamak için gereken sürücüleri (NVMe, RAID, şifreli disk) çekirdek bağlamadan önce RAM’de sağlar ve switch_root yapar. Güvenli önyükleme açıksa her aşama bir sonrakinin imzasını doğrular.
Soru 14 · /proc ve Süreç Bilgisi
Boyutu Sıfır Görünen Dosya
ls -l /proc/meminfo dosya boyutunu 0 gösteriyor, ama cat /proc/meminfo onlarca satır yazıyor. Bunun nedeni nedir?
- Dosya sıkıştırılmış olarak diskte saklanır.
/procdiskte yer kaplamayan sanal bir dosya sistemidir (procfs); içerik her okumada çekirdek tarafından o anki değerlerle üretilir.- Dosya yalnızca root’a görünür olduğu için boyutu gizlenir.
lskomutu metin dosyalarının boyutunu göstermez.
Cevabı göster
Doğru cevap: B) /proc diskte yer kaplamayan sanal bir dosya sistemidir (procfs); içerik her okumada çekirdek tarafından o anki değerlerle üretilir.
procfs’teki dosyalar çekirdek veri yapılarına açılan pencerelerdir: ps, top ve free verilerini buradan okur. Aynı fikir “her şey dosyadır” ilkesinin bir uygulamasıdır; ayrıntılı aygıt modeli ise /sys (sysfs) altındadır.
Soru 15 · /proc ve Süreç Bilgisi
Açık Dosyaları Nerede Görürüz?
PID’i 4321 olan bir sunucu sürecinin şu an hangi dosyaları ve soketleri açık tuttuğunu görmek istiyorsunuz. En doğrudan kaynak hangisidir?
/proc/4321/maps/proc/4321/fd/dizini/proc/sys/fs/file-max/proc/filesystems/etc/fstab
Cevabı göster
Doğru cevap: B) /proc/4321/fd/ dizini
/proc/PID/fd/ altında her açık dosya tanımlayıcısı için bir sembolik bağ bulunur (0, 1, 2, 3 …); hedefi dosya yolunu ya da socket:[…] biçimini gösterir. maps bellek eşlemelerini, file-max sistem geneli sınırı, filesystems desteklenen dosya sistemi türlerini verir.
Soru 16 · /proc ve Süreç Bilgisi
Yanlış Eşleştirme
Aşağıdaki /proc yolu ile içeriği eşleştirmelerinden hangisi yanlıştır?
/proc/PID/maps→ sürecin sanal bellek bölgeleri (kod, öbek, yığın, kütüphaneler) ve izinleri/proc/PID/status→ durum, PPid, uid/gid, bellek kullanımı gibi okunabilir özet/proc/PID/cmdline→ süreci başlatan komut satırı argümanları/proc/sys/vm/swappiness→ çalışırken okunup değiştirilebilen bir çekirdek parametresi/proc/loadavg→ çekirdek sürümü ve derleyici bilgisi
Cevabı göster
Doğru cevap: E) /proc/loadavg → çekirdek sürümü ve derleyici bilgisi
/proc/loadavg son 1, 5 ve 15 dakikanın yük ortalamalarını ve çalışabilir/toplam görev sayısını verir. Çekirdek sürümü ve derleme bilgisi /proc/version dosyasındadır.
Soru 17 · /proc ve Süreç Bilgisi
/proc/self Kimi Gösterir?
Kabukta echo $$ komutu 4100 yazdırıyor. Ardından aşağıdaki komut çalıştırılıyor. Çıkan Pid ve PPid değerleri için hangisi doğrudur?
cat /proc/self/status | grep -E "^(Pid|PPid):"
Pid4100,PPid1Pidcat’in PID’i (4100 değil),PPid4100Pidgrep’in PID’i,PPidcat’in PID’iPid4100,PPid4100
Cevabı göster
Doğru cevap: B) Pid cat’in PID’i (4100 değil), PPid 4100
/proc/self, dosyayı açan sürecin kendi dizinidir; dosyayı cat açar. Kabuk boru hattındaki her komut için ayrı çocuk süreç oluşturduğundan Pid cat’in yeni PID’idir, PPid ise kabuğun PID’i olan 4100’dür.
Soru 18 · /proc ve Süreç Bilgisi
Çekirdek Parametresini Değiştirmek
Hangi komut, root olarak çalıştırıldığında sysctl -w vm.swappiness=10 ile aynı etkiyi yapar?
echo 10 > /proc/sys/vm/swappinessecho 10 > /proc/meminfoecho vm.swappiness=10 >> /proc/versionchmod 10 /proc/sys/vm
Cevabı göster
Doğru cevap: A) echo 10 > /proc/sys/vm/swappiness
sysctl adındaki noktalar /proc/sys altındaki dizin ayırıcılarına karşılık gelir. Bu değişiklik bir sonraki açılışa kadar geçerlidir; kalıcı olması için /etc/sysctl.d/ altındaki bir dosyaya yazılır. meminfo ve version salt okunurdur.
Soru 19 · /proc ve Süreç Bilgisi
Yetim Sürecin Ebeveyni
Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.
“Ebeveyni sonlanan ama kendisi çalışmaya devam eden bir sürecin PPID değeri 0 olur ve süreç ağacının dışında kalır.”
Cevabı göster
Yanlış. Yetim süreç ölmeden önce yeniden ebeveynlenir: PID 1’e (systemd) ya da kendini “alt toplayıcı” ilan etmiş bir sürece devredilir; PPID buna göre güncellenir. Böylece çocuk bittiğinde onu wait ile toplayacak biri her zaman vardır. pstree -p ve ps -ef --forest bu ebeveyn–çocuk ilişkisini ağaç olarak gösterir.
Soru 20 · /proc ve Süreç Bilgisi
Her Şey Dosyadır
Linux süreç ve çekirdek bilgisini neden özel sistem çağrıları yerine /proc ve /sys altında dosya olarak sunar? Bu tasarımın iki yararını ve bir sınırını yazın.
Cevabı göster
- Yarar 1: aynı araçlar her yerde çalışır:
cat,grep, kabuk betikleri, yönlendirme. Yeni bir bilgi için yeni sistem çağrısı gerekmez. - Yarar 2: erişim denetimi dosya izinleriyle yapılır (ör. başka kullanıcının
/proc/PID/environ’u okunamaz;/proc/sys’e yalnız root yazar). - Sınır: metin biçimini her okumada ayrıştırmak yavaştır ve biçim değişirse araçlar bozulabilir; bazı aygıt işlemleri dosya modeline sığmaz ve
ioctlgibi “kaçış kapılarına” yığılır.
Soru 21 · Dosya Sistemleri
Sert ve Sembolik Bağ
Komutlar sırayla çalıştırılıyor (stat -c %h sert bağ sayısını yazar). Çıktıyı yazın.
echo veri > a.txt ln a.txt b.txt ln -s a.txt c.txt stat -c %h b.txt rm a.txt stat -c %h b.txt cat b.txt cat c.txt
- 2, 1, veri, hata (c.txt sarkar)
- 2, 2, veri, veri
- 1, 1, hata, veri
- 2, 1, hata, hata
Cevabı göster
Doğru cevap: A) 2, 1, veri, hata (c.txt sarkar)
Son satır: “Böyle bir dosya ya da dizin yok”. Sert bağ aynı i-node’a ikinci addır: rm bir adı siler, sayaç 1’e iner, veri kalır. Sembolik bağ hedefin yolunu tutar; hedef silinince sarkar.
Soru 21 · Çözüm
Adım Adım Çözüm
i-node 500: verinin bulunduğu i-node. c.txt kendi i-node’u olan küçük bir dosyadır, içinde “a.txt” yolu yazar.
a.txt oluşturulur; i-node 500, bağ sayısı 1.
Sert bağ: b.txt dizine aynı i-node numarasıyla eklenir.
Sembolik bağ: ayrı bir i-node, içeriği hedef yol. i500’ün sayacı değişmez.
b.txt’nin i-node’unda bağ sayısı 2.
rm (unlink) a.txt adını siler; sayaç 1. Veri, sayaç 0 olana ve açık fd kalmayana kadar serbest bırakılmaz.
b.txt veriye hâlâ ulaşır.
c.txt “a.txt” yolunu çözmeye çalışır; ad yok: bağ sarkar.
echo veri > a.txt ln a.txt b.txt ln -s a.txt c.txt stat -c %h b.txt rm a.txt stat -c %h b.txt cat b.txt cat c.txt
Soru 22 · Dosya Sistemleri
Paylaşılan Dosya Konumu
Bir süreç fd = open("kayit.dat", O_RDONLY) yapıyor, ardından read(fd, buf, 100). Sonra fork() çağrılıyor; çocuk read(fd, buf, 40) yapıp çıkıyor. Ebeveyn çocuğu bekledikten sonra lseek(fd, 0, SEEK_CUR) çağırırsa ne döner?
- 100
- 140
- 40
- 0
Cevabı göster
Doğru cevap: B) 140
140. fork çocuğa tanımlayıcı tablosunun kopyasını verir, ama iki tablo da aynı açık dosya nesnesini (struct file) gösterir; konum (f_pos) bu nesnededir. Çocuğun 40 baytlık okuması ebeveynin konumunu da ilerletir. İlgisiz bir süreç dosyayı ayrıca açsaydı kendi konumu olurdu.
Soru 23 · Dosya Sistemleri
ext4 Sıralı Günlükleme
ext4’ün varsayılan data=ordered kipinde bir dosyaya yazılıp fsync yapıldığında hangisi doğrudur?
- Veri de üst veri de önce günlüğe, sonra asıl yerlerine yazılır.
- Veri blokları önce asıl yerlerine yazılır; üst veri (i-node, bit eşlem, extent) günlüğe bir işlem olarak yazılır ve commit kaydıyla kalıcı olur.
- Hiçbir şey günlüğe yazılmaz; çökme sonrası tam fsck taraması yapılır.
- Yalnızca veri blokları günlüğe yazılır; üst veri hiç korunmaz.
Cevabı göster
Doğru cevap: B) Veri blokları önce asıl yerlerine yazılır; üst veri (i-node, bit eşlem, extent) günlüğe bir işlem olarak yazılır ve commit kaydıyla kalıcı olur.
Veri önce yazıldığı için üst veri hiçbir zaman çöp içeren bir bloğu göstermez. Çökme sonrası commit’li işlemler yeniden oynatılır, yarım kalanlar atılır; saniyeler içinde tutarlılık sağlanır. data=journal veriyi de günlüğe yazar (en güvenli, en yavaş).
Soru 24 · Dosya Sistemleri
st_ctime Oluşturma mı?
Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.
“stat çıktısındaki st_ctime alanı dosyanın oluşturulduğu (creation) zamanı gösterir.”
Cevabı göster
Yanlış. st_ctime i-node’un son değişme (change) zamanıdır: izin, sahip, bağ sayısı ya da içerik değiştiğinde güncellenir. st_mtime son içerik değişikliği, st_atime son erişimdir. Oluşturma zamanı yalnızca statx() ile (stx_btime) ve destekleyen dosya sistemlerinde alınabilir.
Soru 25 · İzinler ve Konteynerler
umask Hesabı
umask 033 iken (a) touch not.txt ile oluşan dosyanın ve (b) mkdir arsiv ile oluşan dizinin izinleri nedir? (c) “666 − 033 = 633” hesabı neden yanlıştır?
Cevabı göster
- (a) 666 & ~033 = 644 →
rw-r--r--. - (b) 777 & ~033 = 744 →
rwxr--r--. - (c) umask bir bit maskesidir: maskedeki bitler silinir, çıkarma yapılmaz. 033’ün x bitleri dosyada zaten yoktur; çıkarma 633’ü (
rw--wx-wx) verir ve yanlış bitleri açar.
Soru 25 · Çözüm
Adım Adım Çözüm
Yeni dosya 666, yeni dizin 777 ister; umask’ta 1 olan bitler kapatılır: istenen & ~umask.
Dosya için istenen izin 666 = rw-rw-rw-.
umask 033 = 000 011 011: grup ve diğerlerinde w ve x bitleri silinecek (turuncu).
(a) 666 & ~033: grup ve diğerlerinin w biti kapanır, x zaten yoktu → 644 = rw-r--r--.
(b) Dizin: 777 & ~033 → 744 = rwxr--r--. Grup ve diğerleri dizini listeleyebilir ama içine giremez (x yok).
Soru 26 · İzinler ve Konteynerler
Sembolik chmod
İzni rw-r----- (640) olan bir dosyaya chmod u+x,g+w,o+r dosya uygulanıyor. Yeni izin sekizli ve sembolik olarak nedir?
764,rwxrw-r--751,rwxr-x--x744,rwxr--r--124,--x-w-r--
Cevabı göster
Doğru cevap: A) 764, rwxrw-r--
Sembolik kip mevcut bitlere ekleme yapar: sahip rw- + x = rwx (7), grup r-- + w = rw- (6), diğer --- + r = r-- (4) → 764, rwxrw-r--. Sekizli chmod 764 ise eski bitlere bakmadan doğrudan atama yapar.
Soru 27 · İzinler ve Konteynerler
Özel İzin Bitleri
Sekizli izin ile ls -l gösterimi eşleştirmelerinden hangisi yanlıştır?
4755→rwsr-xr-x(setuid)1777→rwxrwxrwt(yapışkan bit)2750→rwsr-x---(setgid)4644→rwSr--r--(setuid, sahipte x yok)0640→rw-r-----
Cevabı göster
Doğru cevap: C) 2750 → rwsr-x--- (setgid)
setgid (2xxx) grup üçlüsünün x yerinde görünür: 2750 → rwxr-s---. Küçük s/t altta x olduğunu, büyük S/T x olmadığını gösterir. Yapışkan bit /tmp’de herkesin yazıp yalnız kendi dosyasını silebilmesini sağlar.
Soru 28 · İzinler ve Konteynerler
İzin Denetiminin Sırası
proje.txt dosyasının izni ----rwxr-- (0074), sahibi ali, grubu dev. Ali de dev grubunun üyesi. ali, veli (dev üyesi) ve ayse (başka grup) dosyayı okumaya çalışıyor. Kimler okuyabilir?
- Üçü de
- Yalnız veli ve ayse
- Yalnız ali ve veli
- Yalnız veli
- Hiçbiri
Cevabı göster
Doğru cevap: B) Yalnız veli ve ayse
Çekirdek ilk eşleşen sınıfa bakar: euid sahibe eşitse yalnız sahip bitleri (---) kullanılır ve grup üyeliği hiç denetlenmez → ali okuyamaz. veli grup bitlerini (rwx), ayse diğer bitlerini (r--) alır; ikisi de okur. (Sahip izni chmod ile kendine geri verebilir.)
Soru 29 · İzinler ve Konteynerler
Ad Alanı mı, cgroup mu?
Bir konteynerin (a) yalnızca kendi süreçlerini görmesini ve kendi içinde PID 1 olmasını, (b) en fazla 512 MB bellek kullanabilmesini hangi Linux özellikleri sağlar?
- (a) cgroup, (b) PID ad alanı
- (a) PID ad alanı, (b) cgroup
memory.max - (a) seccomp, (b) chroot
- (a) SELinux, (b) ulimit
- (a) ve (b) ikisi de ağ ad alanı
Cevabı göster
Doğru cevap: B) (a) PID ad alanı, (b) cgroup memory.max
Ad alanları ne görüleceğini (PID, bağlama, ağ, ana makine adı, kullanıcı eşlemesi), cgroups ne kadar kullanılacağını (cpu.max, memory.max, pids.max) belirler. seccomp sistem çağrılarını, SELinux/AppArmor erişimi kısıtlar; hepsi birlikte konteyneri oluşturur.
Soru 30 · İzinler ve Konteynerler
Konteynerdeki PID 1
Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.
“Konteyner içinde PID 1 olarak görünen uygulama, konak makinede de PID 1’dir ve konağın systemd sürecinin yerini alır.”
Cevabı göster
Yanlış. PID ad alanı yalnızca bir görünüm sağlar: içeride PID 1 olan süreç konakta sıradan bir PID’e (ör. 48213) sahiptir; konaktaki PID 1 systemd’dir. Konteynerler konak çekirdeğini paylaşır: VM’den çok hafiftir, ama bir çekirdek açığı tüm konteynerleri etkileyebilir.
Özet
Özet: Sık Yapılan Hatalar
uniq’in tüm tekrarları saydığını sanmak: yalnız ardışık satırları birleştirir; öncesortgerekir.- Yönlendirme sırasını önemsiz saymak:
2>&1 > dosyaile> dosya 2>&1farklıdır. - fork sonrası değişkenlerin paylaşıldığını düşünmek: bellek ayrıdır (COW); açık dosya nesnesi ve konumu ise paylaşılır.
/proc’u diskteki bir dizin sanmak: çekirdeğin o anki durumunu üreten sanal dosya sistemidir;/proc/selfonu açan süreçtir.- umask’ı izinden çıkarmak: umask bit temizler (istenen & ~umask); 666 − 033 hesabı yanlış bitleri açar.
- Sahibin grup veya diğer bitlerinden de yararlanabildiğini sanmak: ilk eşleşen sınıf (sahip → grup → diğer) kazanır.
- Sert bağ ile sembolik bağı karıştırmak: sert bağ aynı i-node’dur, dosya sistemi sınırını aşamaz; sembolik bağ yolu tutar ve sarkabilir.