$ man workbook

How This Workbook Works

Bu çalışma kitabı nasıl kullanılır?

This is a single interactive page — not a 500-page PDF. Use the left sidebar like a Linux directory tree: each entry is one "part" of the bootcamp. Click a part, read the English explanation, then the Turkish box right underneath it explains the same idea in plain words — no assumed knowledge, every abbreviation spelled out.

Bu tek sayfalık interaktif bir çalışma kitabı — 500 sayfalık bir PDF değil. Sol taraftaki menüyü bir Linux klasör ağacı gibi düşün: her satır, bootcamp'teki bir "bölüme" karşılık geliyor. Bir bölüme tıkla, önce İngilizce açıklamayı oku, hemen altındaki teal (turkuaz) renkli kutuda aynı şeyin Türkçe, hiçbir ön bilgi varsaymadan, kısaltmalar bile açık yazılmış halini bul.

✎ Notlarım

legend Reading the Boxes — Kutuları okuma rehberi

TERMİNALDE ÇALIŞTIR
mkdir linux-lessons # bu satırı kendi terminaline (iPad'de Termius/SSH, bilgisayarda Terminal) yaz

Any block styled like a terminal window (with the three colored dots and the amber "TERMİNALDE ÇALIŞTIR" badge) is a command you physically type into your own terminal — your EC2 instance, WSL, or Mac/Linux terminal.

TRÜstteki gibi, üç renkli noktası ve turuncu "TERMİNALDE ÇALIŞTIR" rozeti olan her kutu, senin gerçekten kendi terminaline (EC2 sunucun, WSL ya da Mac/Linux terminalin) yazman gereken bir komuttur. Bu bir örnek değil — gerçekten dene.

ÇIKTI / EXPECTED OUTPUT
(klasör oluşturulur, ekrana bir şey yazdırmaz)

A dashed box labeled "ÇIKTI / OUTPUT" shows what you should see on screen after running the command above it — so you can check your work.

TRKesikli çizgili "ÇIKTI" kutusu, üstündeki komutu çalıştırdığında ekranda görmen gereken sonucu gösterir — böylece kendi işini kontrol edebilirsin.

💡 Tip: Sarı ipucu kutuları, sık yapılan hataları veya "aklında tut" notlarını içerir.

plan Suggested Order — Önerilen çalışma sırası

Work top to bottom, Part 1 → 9, then the Crontab appendix. Each part builds on the previous one's vocabulary (e.g. Part 6 assumes you already know variables from Part 2).

TRSıradan git: Bölüm 1'den 9'a, sonra Crontab eki. Her bölüm bir öncekinin kelime dağarcığını kullanır (örneğin Bölüm 6, Bölüm 2'de gördüğün "değişken" kavramını bildiğini varsayar).

Do the terminal exercises for real on an EC2 instance or local VM — reading is not the same as typing. When you're stuck, bring this exact page back into a new chat with me and tell me which numbered exercise you're on; I'll pick up exactly where we left off.

TRTerminal alıştırmalarını gerçekten bir EC2 sunucusunda ya da kendi bilgisayarındaki bir sanal makinede yap — sadece okumak, yazmakla aynı şey değil. Takıldığın yerde bu sayfayı yeni bir sohbete getirip hangi alıştırma numarasında olduğunu söyle, kaldığımız yerden devam ederim.

$ cd part-01/

Managing Files in Linux

Linux'ta Dosya Yönetimi

Purpose: understand what Linux is, how the shell fits into the system, and learn the core commands to view, search, and manage files and their contents.

Amaç: Linux'un ne olduğunu, shell'in sistemin neresinde durduğunu anlamak ve dosyaları görüntülemek, aramak, içeriklerini yönetmek için temel komutları öğrenmek.

✎ Notlarım — Dosya Yönetimi

kavram What is Linux? — Linux nedir?

Linux is a free, open-source operating system — an alternative to Windows and macOS. "Open-source" means anyone can read, modify, and redistribute its source code.

TRLinux, ücretsiz ve açık kaynaklı bir işletim sistemidir — Windows ve macOS'a bir alternatiftir. "Açık kaynak" demek, kaynak kodunu isteyen herkesin okuyabileceği, değiştirebileceği ve yeniden dağıtabileceği anlamına gelir.

Applications / Utilities bash, vim, grep, python… Shell bash / zsh — command interpreter Kernel manages CPU, memory, devices Hardware
USER ↔ Shell ↔ Kernel ↔ Hardware — the shell is your only door into the system

TRSen komut yazdığında (örn. ls), bunu Shell alır, işletim sisteminin çekirdeği olan Kernel'e iletir, o da donanımla konuşup sonucu geri Shell üzerinden sana ekranda gösterir. Shell hem komut satırı yorumlayıcısı hem de bir programlama dilidir (Bash = "Bourne Again SHell").

Prompt sonundaki işaret önemlidir: $ normal kullanıcı demektir, # ise root / süper kullanıcı (yönetici) olduğun anlamına gelir.

temel Basic Shell Commands — Temel komutlar

CommandAçıklama (TR)
pwdBulunduğun (şu anki) dizinin tam yolunu gösterir — "print working directory"
lsDizin içeriğini listeler
cdDizin değiştirir
mkdirYeni bir klasör oluşturur
rmdirBoş bir klasörü siler
touchBoş bir dosya oluşturur
rmDosya siler
cpDosyayı başka bir yere kopyalar
mvDosyayı taşır veya adını değiştirir
catDosya içeriğini ekrana yazdırır
echoEkrana yazı yazdırır
clearTerminal ekranını temizler

yardım Getting Help — Yardım alma komutları

Every command has documentation built into Linux itself — you rarely need to search the internet.

TRHer komutun Linux'un içinde hazır bir belgesi vardır — çoğu zaman internete bakmana gerek kalmaz.

TERMİNALDE ÇALIŞTIR
man ls        # ls komutunun tam el kitabını (manual) açar — çıkmak için 'q'
info ls       # man'den daha detaylı belge
whatis ls     # tek satırlık kısa açıklama
apropos pwd   # "pwd" ile ilgili tüm komutları arar
ls --help     # kısa kullanım + seçenekler listesi
💡 İpucu: man ekranından çıkmak için q tuşuna bas — çoğu yeni başlayan burada takılır kalır!

editör Text Editors: Vim & Nano — Metin editörleri

Vim has two modes: Command mode (moving/deleting/copying) and Insert mode (actually typing text). Nano is "modeless" — you can just start typing immediately.

TRVim'in iki modu vardır: Komut modu (gezinme/silme/kopyalama) ve Ekleme (Insert) modu (gerçekten yazı yazma). Nano ise "modsuz"dur — dosyayı açar açmaz direkt yazmaya başlayabilirsin, bu yüzden yeni başlayanlar için daha kolaydır.

VimNe yaparNanoNe yapar
iEkleme moduna girCtrl+OKaydet (Write Out)
EscKomut moduna dönCtrl+XÇıkış
ddSatırı silCtrl+KSatırı kes
yySatırı kopyalaCtrl+UYapıştır (uncut)
pYapıştırCtrl+WAra (Where is)
:wq veya ZZKaydet ve çıkCtrl+GYardım
💡 İpucu: Vim'de yanlışlıkla bir moda takılıp kaldıysan, panik yapma — Esc tuşuna bas, komut moduna dönersin.

dosya sistemi The Filesystem Tree — Dosya sistemi ağacı

On Linux, everything is a file — even a directory is just a special file that contains the names of other files. Everything starts from the root directory /.

TRLinux'ta her şey bir dosyadır — bir klasör bile, içinde başka dosyaların isimlerini tutan özel bir dosyadır. Her şey kök dizin (/) ile başlar. Windows'taki gibi C:\, D:\ diye ayrı sürücüler yoktur, tek bir ağaç vardır.

/ /bin /etc /home /var /usr /tmp /opt binaries configs user dirs variable data 2nd hierarchy temp files add-on apps enes osman /home/enes /home/osman
Tek kök (/) — her kullanıcının kendi ev dizini /home altında
DizinNe için
/binTemel komut çalıştırılabilir dosyaları (binary)
/bootÖnyükleyici (boot loader) dosyaları
/devCihaz dosyaları (donanımlar dosya gibi görünür)
/etcSistem geneli ayar (konfigürasyon) dosyaları
/homeKullanıcıların ev dizinleri
/libTemel paylaşılan kütüphaneler
/mnt, /mediaGeçici / çıkarılabilir bağlama noktaları
/optEk (eklenti) uygulama paketleri
/tmpGeçici dosyalar (yeniden başlatınca silinebilir)
/usr, /varİkincil program hiyerarşisi / değişken veriler (loglar vb.)

The first character in ls -l output tells you the file type:

SembolAnlamı
-Normal dosya
dDizin (klasör)
lLink (kısayol)
cKarakter aygıtı
bBlok aygıtı

TRls renkleri de anlamlıdır: Mavi = klasör, Yeşil = çalıştırılabilir dosya, Camgöbeği = link, Kırmızı = sıkıştırılmış arşiv, Beyaz = düz metin dosyası.

içerik Working With File Contents — Dosya içeriğiyle çalışmak

Create a folder and a sample file to practice on:

TERMİNALDE ÇALIŞTIR
mkdir linux-lessons
cd linux-lessons
cat > welcome.txt
# yaz: Welcome to the linux lessons ... line 15'e kadar, bitince Ctrl+D
KomutNe yapar
head welcome.txtİlk 10 satırı gösterir
head -5 welcome.txtİlk 5 satırı gösterir
tail welcome.txtSon 10 satırı gösterir
tail -n 5 welcome.txtSon 5 satırı gösterir
tail -n +10 welcome.txt10. satırdan sona kadar gösterir
cat welcome.txtTüm dosyayı ekrana basar
more welcome.txtSayfa sayfa gösterir (sadece ileri gidilir)
less welcome.txtmore gibi ama daha hızlı, ileri/geri gidilebilir
tac welcome.txtDosyayı ters (son satırdan ilk satıra) gösterir — "cat" tersten yazılmış!
💡 İpucu: cat > dosya.txt ile yazmaya başladığında, bitirdiğinde Ctrl+D ile (EOF - dosya sonu) sinyali vermen gerekir, yoksa terminal yazmaya devam etmeni bekler.

find Searching Files: find — Dosya arama

find searches the filesystem tree for files matching criteria: name, type, size, modification time, etc.

TRfind, dosya sistemi ağacında isim, tür, boyut, değiştirilme tarihi gibi kriterlere göre dosya arar.

TERMİNALDE ÇALIŞTIR
find . -name welcome.txt          # bulunduğun dizinde ara
find /home -name welcome.txt      # /home altında ara
find /home -iname welcome.txt     # büyük/küçük harf duyarsız ara
find /home -type d -name linux-lessons   # sadece klasörler arasında ara
find . -type f -name "*.txt"      # tüm .txt dosyalarını bul
find . -type f -empty             # boş dosyaları bul
find /home -size +50M -size -100M # 50MB'den büyük, 100MB'den küçük dosyalar
find /home -mtime -10             # son 10 gün içinde değişenler
find /home -mtime +10             # 10 günden daha eski değişenler
💡 İpucu: + ve - önekleri "büyük" ve "küçük" anlamına gelir: -mtime -10 = son 10 gün, -mtime +10 = 10 günden eski.

grep Searching Text: grep — Metin içinde arama

grep (Global Regular Expression Print) searches for a text pattern inside files and prints matching lines. It's the single most-used filter command in DevOps work — logs, configs, code, everything.

TRgrep, dosyaların içinde bir metin deseni arar ve eşleşen satırları ekrana basar. DevOps işlerinde en çok kullanılan komutlardan biridir — loglarda, config dosyalarında, kodda hep grep kullanılır.

Bayrak (flag)Anlamı
-iBüyük/küçük harf duyarsız arama
-vEşleşmeyen satırları göster
-wSadece tam kelime eşleşmesi
-nSatır numaralarını göster
-cEşleşme sayısını say
-rAlt klasörlerde de (recursive) ara
-A n / -B n / -C nEşleşen satırdan sonra/önce/her iki yönde n satır daha göster
TERMİNALDE ÇALIŞTIR
grep "kernel" linux.txt          # "kernel" geçen satırları bul
grep -i "linux" linux.txt        # büyük/küçük harf fark etmeksizin ara
grep -w "kernel" linux.txt       # tam kelime olarak "kernel"
grep -v "kernel" linux.txt       # "kernel" GEÇMEYEN satırlar
grep "^li" welcome.txt           # satır BAŞI "li" ile başlayanlar
grep "kernel.$" linux.txt        # satır SONU "kernel." ile bitenler
grep -A3 "line 5" welcome.txt    # eşleşmeden sonraki 3 satırı da göster

TR^ işareti "satır başı", $ işareti "satır sonu" demektir — bunlara "regular expression" (düzenli ifade / regex) denir.

chown File Ownership — Dosya sahipliği

Every file belongs to a user (owner) and a group. chown changes ownership, chgrp changes just the group.

TRHer dosyanın bir kullanıcı (sahip) ve bir grup sahibi vardır. chown sahipliği değiştirir, chgrp sadece grubu değiştirir.

TERMİNALDE ÇALIŞTIR
chown root linux.txt        # kullanıcı sahibini root yap
chown :root linux.txt       # grup sahibini root yap
chown root:root linux.txt   # hem kullanıcı hem grup sahibini root yap
chown -R root linux-lessons # klasör ve içindeki her şeyi recursive değiştir
chgrp root linux.txt        # sadece grup sahibini değiştir
$ cd part-02/

Linux Environment Variables

Linux Ortam Değişkenleri

Purpose: understand environment vs. shell variables, the PATH variable, quoting rules, and the sudo command.

Amaç: ortam değişkenleri ile shell değişkenleri arasındaki farkı, PATH değişkenini, tırnak (quoting) kurallarını ve sudo komutunu anlamak.

✎ Notlarım — Ortam Değişkenleri

kavram Shell vs Environment Variables — İki değişken türü

A shell variable only exists in your current terminal session. An environment variable is available system-wide, even to programs you launch from that shell.

TRShell değişkeni sadece şu an içinde bulunduğun terminal oturumunda vardır — terminali kapatınca kaybolur. Ortam (environment) değişkeni ise sistem genelinde geçerlidir, o terminalden başlattığın diğer programlar da bu değişkeni görebilir.

A variable name may only contain letters, numbers, and underscore (_), and must start with a letter or underscore. There must be no spaces around the = sign.

✅ Geçerli❌ Geçersiz — neden
KEY=value3_KEY=value — rakamla başlıyor
_VAR=5-VAR=5 — tire (-) özel bir karakter
LINUX_way=testLINUX-way=test — isimde tire olamaz
💡 İpucu: Konvansiyon (zorunlu değil ama gelenek) olarak ortam değişkenleri BÜYÜK_HARF ile yazılır: PATH, HOME, USER gibi.

liste Common Environment Variables — Sık kullanılan değişkenler

DeğişkenAçıklama
PATHÇalıştırılabilir dosyaların arandığı klasörlerin listesi
HOMEKullanıcının ev dizini yolu
USERKullanıcı adı
SHELLHangi shell'in kullanıldığı (örn. /bin/bash)
EDITORVarsayılan metin editörü
LANGDil / yerel ayarlar
TERMTerminal emülatörü türü
TERMİNALDE ÇALIŞTIR
printenv           # tüm ortam değişkenlerini listele
env                # aynı şeyi yapar (küçük farklarla)
printenv HOME      # tek bir değişkenin değerini gör
echo $HOME         # aynı sonucu $ ile de alabilirsin
set                # TÜM shell değişkenlerini + fonksiyonları listele (çok uzun bir çıktı!)
export ENVVAR=value  # yeni bir ortam değişkeni oluştur
env | grep ENVVAR     # oluştuğunu kontrol et
unset ENVVAR           # değişkeni sil

path The PATH Variable — PATH değişkeni

Why can you type ls instead of /bin/ls? Because the shell checks each directory listed in PATH, in order, and runs the first matching executable it finds.

TRls yazdığında neden tam yolu (/bin/ls) yazmana gerek kalmıyor? Çünkü shell, PATH değişkeninde listelenen klasörleri sırayla kontrol eder ve ilk bulduğu eşleşen çalıştırılabilir dosyayı çalıştırır.

$ ls /usr/local/sbin (1) /usr/local/bin (2) /bin (3)✓ bulundu! çalışır
Shell, PATH'teki klasörleri sırayla dener, ilk eşleşmede durur
TERMİNALDE ÇALIŞTIR
printenv PATH
# örnek çıktı: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH=$PATH:/home/ec2-user/test   # PATH'e yeni bir klasör ekle
💡 İpucu: Kendi yazdığın bir scripti her yerden ./ yazmadan çalıştırmak istiyorsan, scriptin bulunduğu klasörü PATH'e eklemen gerekir.

quoting Quoting with Variables — Tırnak kullanımı

Quoting controls whether the shell expands (substitutes the value of) a variable.

TürDavranışÖrnek
Çift tırnak " "Değişkenleri genişletir (expand eder), $ ' " \ hariç her şeyi korurecho "$SHELL" → /bin/bash
Tek tırnak ' 'Hiçbir şeyi genişletmez, her şeyi olduğu gibi korurecho '$SHELL' → $SHELL (harfiyen)
Ters bölü \Bir sonraki karakteri kaçırır (escape), özel anlamını iptal ederecho "hello \$MYNAME" → hello $MYNAME
TERMİNALDE ÇALIŞTIR
MYNAME="james"
MYVAR="hello $MYNAME"
echo $MYVAR         # → hello james (çift tırnak: değişken genişler)
echo '$MYNAME'      # → $MYNAME (tek tırnak: hiç genişlemez)

sudo The sudo Command — sudo komutu

sudo ("superuser do") temporarily grants admin (root) privileges to a normal user for a single command.

TRsudo ("superuser do" — süper kullanıcı olarak yap), normal bir kullanıcıya, tek bir komut için geçici olarak yönetici (root) yetkisi verir.

TERMİNALDE ÇALIŞTIR
sudo yum update    # yönetici yetkisiyle sistemi güncelle
sudo su            # root kullanıcıya geç
sudo su -          # root'a, root'un kendi ortam ayarlarıyla birlikte geç
exit               # root'tan çık, önceki kullanıcına dön
💡 İpucu: Prompt sonunda # görüyorsan artık root'sundur — çok dikkatli ol, root her şeyi silebilir/değiştirebilir.
$ cd part-03/

Managing Users and Groups

Kullanıcı ve Grup Yönetimi

Purpose: learn to identify who's on the system, create/modify/delete users, manage passwords, and organize users into groups.

Amaç: sistemde kimin olduğunu görmeyi, kullanıcı oluşturma/değiştirme/silmeyi, şifre yönetimini ve kullanıcıları gruplar halinde organize etmeyi öğrenmek.

✎ Notlarım — Kullanıcı & Grup Yönetimi

kimlik Basic User Commands — Temel kullanıcı komutları

KomutNe yapar
whoamiŞu an hangi kullanıcı olarak giriş yaptığını gösterir
whoSistemde şu an kimlerin oturum açtığını gösterir
wwho + o kullanıcıların ne yaptığını gösterir
id [kullanıcı]Kullanıcı ID'sini, birincil grup ID'sini ve üye olduğu tüm grupları gösterir
su [kullanıcı]Başka bir kullanıcı olarak bir shell başlatır (ortam değişmez)
su - [kullanıcı]Başka kullanıcıya, onun kendi ortam ayarlarıyla birlikte geçer
💡 İpucu: su user1 ile su - user1 arasındaki fark önemli: tire (-) olmadan sadece kullanıcı değişir ama hâlâ eski dizindesindir; tire ile hem kullanıcı hem de onun ev dizini/ortamı yüklenir.

passwd User Management: /etc/passwd — Kullanıcı veritabanı

All local users are recorded in /etc/passwd. This is a plain text file you can read with cat.

TRTüm yerel kullanıcılar /etc/passwd dosyasında kayıtlıdır. Bu düz metin bir dosyadır, cat ile okuyabilirsin (şifreler burada değil, şifreler ayrı ve şifreli bir dosyada — /etc/shadow).

KomutNe yapar
useradd kullaniciYeni bir kullanıcı oluşturur (varsayılan olarak ev dizini oluşturmayabilir)
useradd -m kullaniciEv dizini oluşturmaya zorlar
useradd -d /yol kullaniciÖzel bir ev dizini adı belirtir
useradd -c "açıklama" kullaniciKullanıcıya bir açıklama (description) ekler
adduser kullaniciuseradd'ın interaktif (soru-cevaplı) versiyonu — bir Perl scripti
userdel kullaniciKullanıcıyı siler ama ev dizinini SİLMEZ
userdel -r kullaniciKullanıcıyı VE ev dizinini birlikte siler
usermod -c "yeni açıklama" kullaniciKullanıcının bir özelliğini değiştirir
TERMİNALDE ÇALIŞTIR
sudo useradd -m -c "Yazilim Gelistirici" mehmet
cat /etc/passwd | grep mehmet
sudo userdel -r mehmet

şifre User Passwords — Kullanıcı şifreleri

ÖğeAçıklama
passwd [kullanıcı]Bir kullanıcının şifresini belirler/değiştirir
/etc/shadowŞifrelenmiş şifrelerin tutulduğu dosya — sadece root okuyabilir
/etc/login.defsŞifre yaşlanması, uzunluğu gibi varsayılan ayarlar

grup Group Management — Grup yönetimi

Group membership is recorded in /etc/group. Groups let you give the same permissions to many users at once (e.g. everyone in "devops" can access certain files).

TRGrup üyelikleri /etc/group dosyasında tutulur. Gruplar sayesinde birçok kullanıcıya aynı anda aynı izinleri verebilirsin (örn. "devops" grubundaki herkes belirli dosyalara erişebilsin).

devops (kullanıcı) devops (birincil grup) cloud (ikincil) aws (ikincil) groups devops → devops cloud aws
Bir kullanıcının bir "birincil" grubu, birden çok "ikincil" grubu olabilir
KomutNe yapar
groups [kullanıcı]Kullanıcının üye olduğu grupları listeler
groupadd [grup]Yeni bir grup oluşturur
usermod -a -G grup kullaniciKullanıcıyı bir gruba ekler (mevcut gruplarını korur)
groupmod -n yenisim eskisimBir grubun adını değiştirir
groupdel [grup]Bir grubu siler
gpasswd -a kullanici grupKullanıcıyı gruba ekler
gpasswd -d kullanici grupKullanıcıyı gruptan çıkarır
⚠️ Dikkat: usermod -G grup kullanici komutunda -a bayrağı olmadan kullanırsan, kullanıcıyı belirtmediğin TÜM diğer gruplardan çıkarırsın! Her zaman -a -G birlikte kullan ("append" — ekle demek).
$ cd part-04/

Using Package Managers

Paket Yöneticileri Kullanımı

Purpose: understand what a package manager is and use yum/dnf (Amazon Linux, Fedora) and apt (Ubuntu/Debian) to install, update, and remove software.

Amaç: paket yöneticisinin ne olduğunu anlamak, yazılım yüklemek/güncellemek/kaldırmak için yum/dnf (Amazon Linux, Fedora) ve apt (Ubuntu/Debian) kullanmak.

✎ Notlarım — Paket Yöneticileri

kavram What is a Package Manager? — Paket yöneticisi nedir?

Think of a package manager as an "office assistant" that fetches, installs, and organizes software for you — instead of manually downloading files from random websites, you just say "install git" and it handles dependencies, versions, and configuration.

TRPaket yöneticisini, senin için yazılım getirip kuran ve düzenleyen bir "ofis asistanı" gibi düşün — rastgele internet sitelerinden dosya indirip kurmak yerine sadece "git'i kur" dersin, o senin için bağımlılıkları (dependencies), sürümleri ve ayarları hallederder.

install git Paket Yöneticisi Repository (depo) Kurulu ✓
Paket + bağımlılıkları otomatik bulunur, indirilir, kurulur

format Package Formats by Distro — Dağıtıma göre paket formatları

İşletim SistemiFormatAraç(lar)
Debian / Ubuntu.debapt, apt-get, dpkg
CentOS / Amazon Linux 2.rpmyum
Fedora / Amazon Linux 2023.rpmdnf
Ubuntu / Debian apt (yüksek seviye) dpkg (düşük seviye) Amazon Linux 2 yum (yüksek seviye) rpm (düşük seviye) Fedora / AL2023 dnf (yüksek seviye) rpm (düşük seviye)
Yüksek seviye araçlar (apt/yum/dnf), düşük seviye araçların (dpkg/rpm) üzerine kuruludur ve bağımlılıkları otomatik çözer

yum/dnf yum & dnf Deep Dive — yum ve dnf komutları

KomutNe yapar
yum install paketPaketi kurar
yum install paket -yOnay sormadan kurar
yum remove paketPaketi kaldırır
yum autoremove paketPaketi ve kullanılmayan bağımlılıklarını kaldırır
yum update paketBelirli bir paketi günceller
yum updateTüm kurulu paketleri günceller
yum info paketPaket hakkında bilgi verir
yum list installedKurulu tüm paketleri listeler
yum --showduplicates list paketPaketin tüm mevcut sürümlerini listeler
TERMİNALDE ÇALIŞTIR
sudo yum install git -y      # git'i onaysız kur
git --version                # sürümü kontrol et
sudo yum autoremove git -y   # git'i bağımlılıklarıyla kaldır

TRUbuntu tarafında karşılığı: sudo apt update (depo listesini günceller), sudo apt install git -y, sudo apt remove git -y.

$ cd part-05/

Filters & Control Operators

Filtreler ve Kontrol Operatörleri

Purpose: understand stdin/stdout/stderr, chain commands together with pipes and filters, and control command execution flow with operators like &&, ||, ;.

Amaç: stdin/stdout/stderr kavramlarını, komutları pipe (boru) ve filtrelerle birbirine bağlamayı, &&, ||, ; gibi operatörlerle komut akışını kontrol etmeyi öğrenmek.

✎ Notlarım — Filtreler & Kontrol Operatörleri

i/o stdin, stdout, stderr — Standart giriş/çıkış/hata

Every program has three standard streams: input coming in, normal output going out, and error messages going out separately.

TRHer programın üç standart "kanalı" (stream) vardır: içeri giren veri, normal çıktı, ve ayrı olarak giden hata mesajları.

[ program ] stdin stdout stderr
stdin girer, stdout normal çıktıyı, stderr hataları ayrı taşır

pipe The Pipe | — Boru operatörü

A pipe sends the stdout of one command directly into the stdin of the next — this is how you chain small tools into powerful one-liners.

TRPipe (boru), bir komutun çıktısını doğrudan bir sonraki komutun girdisine bağlar — küçük araçları zincirleyerek güçlü tek satırlık komutlar yazmanı sağlar.

TERMİNALDE ÇALIŞTIR
cat colors.txt | grep "blue"
#   ↑ çıktı        ↑ boru  ↑ filtre
# cat'in çıktısı, grep'in girdisi olur

filtre Filter Commands — Filtre komutları

KomutNe yaparÖrnek
teeGirdiyi hem ekrana hem de bir dosyaya yazar (aynı anda ikisine de)ls -l | tee file.txt | less
cutBelirtilen ayraca göre sütun (kolon) seçercut -d: -f1 /etc/passwd — kullanıcı adlarını al
tr"Translate" — karakterleri değiştirir (örn. küçük→büyük harf)cat f | tr 'a-z' 'A-Z'
wcSatır/kelime/karakter sayarwc -l dosya.txt — satır say
sortAlfabetik sıralarsort -r dosya.txt — ters sırala
uniqTekrarlanan satırları kaldırır (önce sort şart!)sort f | uniq
commİki sıralı dosyayı satır satır karşılaştırır (3 sütun: sadece A, sadece B, ikisinde de)comm a.txt b.txt
💡 İpucu: uniq yalnızca birbirine bitişik tekrar eden satırları kaldırır — bu yüzden neredeyse her zaman önce sort ile sıralaman gerekir: sort dosya | uniq.

operatör Control Operators — Kontrol operatörleri

OperatörAnlamı
;Birden fazla komutu aynı satırda, sırayla çalıştırır (birbirinin sonucuna bakmadan)
&Komutu arka planda (background) çalıştırır, shell bekletmez
$?Son çalışan komutun çıkış kodunu tutar: 0 = başarılı, diğerleri = hata
&&Mantıksal VE — ikinci komut, sadece ilki BAŞARILI olduysa çalışır
||Mantıksal VEYA — ikinci komut, sadece ilki BAŞARISIZ olduysa çalışır
#Yorum satırı — bu işaretten sonrası shell tarafından yok sayılır
\Satır sonu ters bölü — komutu bir sonraki satırdan devam ettirir
TERMİNALDE ÇALIŞTIR
rm dosya.txt && echo "silindi" || echo "başarısız"
# rm başarılıysa "silindi", başarısızsa "başarısız" yazar
# bu, komut satırında bir if-then-else yapısı kurmanın yoludur
💡 İpucu: && ve ||'yi birlikte kullanmak, tam bir if-else mantığı kurar: "başarılıysa bunu yap, değilse şunu yap".
$ cd part-06/

Shell Scripting Basics

Shell Script Yazmanın Temelleri

Purpose: write your first bash scripts, use variables, read user input, work with command-line arguments and arrays, and do simple arithmetic.

Amaç: ilk bash scriptlerini yazmak, değişken kullanmak, kullanıcıdan girdi almak, komut satırı argümanları ve dizilerle (array) çalışmak, basit aritmetik işlemler yapmak.

✎ Notlarım — Shell Script Temelleri

script Your First Script — İlk scriptin

A shell script is just a text file full of commands, run all at once. The first line — the shebang #!/bin/bash — tells the system which interpreter to use.

TRBir shell script'i, tek seferde çalıştırılan komutlarla dolu bir metin dosyasından ibarettir. İlk satır — shebang denen #!/bin/bash — sisteme "bu dosyayı bash ile çalıştır" der. "Shebang" adı, # (hash) + ! (bang) harflerinden gelir.

TERMİNALDE ÇALIŞTIR
mkdir shell-scripting && cd shell-scripting
nano basic.sh
basic.sh İÇİNE YAZ
#!/bin/bash
echo "Hello World"
TERMİNALDE ÇALIŞTIR
chmod +x basic.sh   # scripti çalıştırılabilir yap
./basic.sh          # çalıştır — "./" bulunduğun klasörden çalıştır demektir
💡 İpucu: ./ olmadan yazarsan (basic.sh), shell dosyayı sadece PATH'teki klasörlerde arar ve bulamaz. ./ "bulunduğun klasörde ara" demektir.

yorum Comments & Heredoc — Yorum satırları ve Heredoc

Bash ignores everything after # (except the shebang's first line). Bash has no native multi-line comment — but a heredoc block can serve as one.

TRBash, #'den sonraki her şeyi yok sayar (ilk satırdaki shebang hariç). Bash'te çok satırlı yorum diye bir şey yoktur — ama bir heredoc bloğu bu işi görebilir.

basic.sh
#!/bin/bash
echo "hello"
# date   ← bu satır çalışmaz, yorum
pwd  # bu bir satır-içi (inline) yorumdur

<< multiline-comment
Bu satırlar hiç çalışmaz,
heredoc bloğunun içindeki
her şey bir yorum gibi davranır.
multiline-comment

değişken Variables & Command Substitution — Değişkenler ve komut yerine koyma

Command substitution captures a command's output and stores it as a variable's value, using $(...) or backticks.

TRCommand substitution (komut yerine koyma), bir komutun çıktısını alıp bir değişkene atamanı sağlar — $(...) veya backtick (`) ile yapılır.

command-substitution.sh
#!/bin/bash
working_directory=$(pwd)
echo "Welcome, your working directory is $working_directory."
# veya doğrudan, değişken kullanmadan:
echo "Today is $(date)"
echo "You are $(whoami)"

read Console Input — Kullanıcıdan girdi alma

KullanımNe yapar
read NAMEKullanıcının yazdığını NAME değişkenine kaydeder
read -p "Mesaj: " NAME-p ile önce bir mesaj gösterir, sonra girdi bekler
read -s -p "Şifre: " PASS-s ile yazılan şey ekranda görünmez (şifre girişi için)
variable.sh
#!/bin/bash
read -p "Enter your name: " NAME
echo "Welcome $NAME"

read -s -p "Enter your password: " PASSWORD
echo -e "\nYour password is $PASSWORD"

args Command-Line Arguments — Komut satırı argümanları

DeğişkenAnlamı
$0Script'in kendi adı
$1 – $91'den 9'a kadar sıradaki argümanlar
$@Tüm argümanlar
$#Kaç argüman verildiği (sayı)
$RANDOMRastgele bir sayı üretir
$LINENOScript içindeki o anki satır numarası
TERMİNALDE ÇALIŞTIR
./argument.sh Joe Matt Timothy
# $0=argument.sh  $1=Joe  $2=Matt  $3=Timothy  $#=3

array Arrays — Diziler

TERMİNALDE ÇALIŞTIR
devops_tools=("docker" "kubernetes" "ansible" "terraform" "jenkins")
echo ${devops_tools[0]}     # → docker (ilk eleman, index 0'dan başlar)
echo ${devops_tools[@]}     # → tüm elemanlar
echo ${#devops_tools[@]}    # → 5 (eleman sayısı)

aritmetik Simple Arithmetic: expr, let, (( )) — Basit aritmetik

YöntemÖzellik
expr 3 + 5Sonucu direkt ekrana yazdırır. Sayılar ve operatör arasında boşluk şart, * kaçırılmalı (\*)
let "sum = 3 + 5"Sonucu bir değişkene kaydeder, ekrana yazmaz
sum=$((3 + 5))Çift parantez ile aritmetik — en yaygın kullanılan modern yöntem
calculator.sh
#!/bin/bash
read -p "Input first number: " first_number
read -p "Input second number: " second_number

echo "SUM=$(( first_number + second_number ))"
echo "SUB=$(( first_number - second_number ))"
echo "MUL=$(( first_number * second_number ))"
echo "DIV=$(( first_number / second_number ))"

TRnum++ (post-increment) önce mevcut değeri kullanır, SONRA artırır. ++num (pre-increment) önce artırır, SONRA değeri kullanır. Bu ince fark script hatalarının klasik bir sebebidir.

$ cd part-07/

Conditional Statements

Koşullu İfadeler (if / elif / case)

Purpose: make scripts make decisions — if/else/elif chains, nested conditions, boolean logic, and case statements.

Amaç: scriptlerin karar vermesini sağlamak — if/else/elif zincirleri, iç içe koşullar, mantıksal (boolean) işlemler ve case ifadeleri.

✎ Notlarım — Koşullu İfadeler

if Basic If Statement — Temel if ifadesi

"If a test is true, do X. If not, don't."

TR"Eğer bir test doğruysa, X'i yap. Değilse yapma." — mantık bu kadar basit.

number gir $number-gt 50 ? evet "büyük" yaz hayır hiçbir şey yazma
if [[ test ]] then ... fi — en basit karar yapısı
if-statement.sh
#!/bin/bash
read -p "Input a number: " number

if [[ $number -gt 50 ]]
then
  echo "The number is big."
fi

op Operators — Karşılaştırma operatörleri

TürOperatörAnlamı
Sayısal (Relational)-eqeşit
-neeşit değil
-gtbüyük
-ltküçük
-gebüyük eşit
-leküçük eşit
Metinsel (String)=eşit
!=eşit değil
-zboş metin
-nboş olmayan metin
Dosya (File Test)-dbu bir dizin mi
-fbu normal bir dosya mı
-edosya var mı
-xçalıştırılabilir mi
⚠️ Dikkat: Sayısal operatörler (-eq, -gt vb.) sadece SAYILAR için çalışır, metinler için işe yaramaz — metin karşılaştırmak için = ve != kullan.

elif If / Elif / Else & Nesting — Çoklu koşullar ve iç içe yapılar

elif-statement.sh
#!/bin/bash
read -p "Input a number: " number

if [[ $number -eq 10 ]]
then
  echo "The number is equal to 10."
elif [[ $number -gt 10 ]]
then
  echo "The number is bigger than 10"
else
  echo "The number is smaller than 10"
fi

If statements can be nested — an if inside another if — to test multiple conditions in sequence.

TRIf ifadeleri iç içe (nested) yazılabilir — bir if'in içine başka bir if koyarak, sırayla birden fazla koşulu test edebilirsin.

nested-if-statement.sh
#!/bin/bash
read -p "Input a number: " number

if [[ $number -gt 10 ]]
then
  echo "Number is bigger than 10"
  if (( $number % 2 == 1 ))
  then
    echo "And is an odd number."
  else
    echo "And is an even number"
  fi
else
  echo "It is not bigger than 10"
fi

bool Boolean Operators — Mantıksal operatörler

OperatörAnlamı
!Değili alır (true ↔ false)
&&VE — ikisi de doğruysa true
||VEYA — biri doğruysa true
boolean.sh
#!/bin/bash
read -p "Input your name: " name
read -sp "Input your password: " password

if [[ $name = $(whoami) ]] && [[ $password = Aa1234 ]]
then
  echo -e "\nWelcome $(whoami)"
else
  echo -e "\nIt is wrong account"
fi

case Case Statements — Case ifadesi (çoklu dallanma)

When you have many if/elif branches, a case statement is cleaner — it matches one variable against several possible values.

TRÇok fazla if/elif dalın varsa, case ifadesi daha temizdir — bir değişkeni birden fazla olası değerle eşleştirir.

case-statement.sh
#!/bin/bash
read -p "Select an operation (1-4): " operation

case $operation in
  "1")
     echo "addition"
     ;;
  "2")
     echo "subtraction"
     ;;
  *)
     echo "Wrong choice..."
     ;;
esac
💡 İpucu: *) her zaman en sonda durur — "yukarıdakilerin hiçbiri eşleşmediyse" demektir, diğer dillerdeki "default" gibi düşün.
$ cd part-08/

Linux File Permissions

Linux Dosya İzinleri

Purpose: understand the owner/group/others permission model, read/write/execute meaning, numeric vs symbolic notation, and change ownership/permissions safely.

Amaç: sahip/grup/diğerleri izin modelini, okuma/yazma/çalıştırma anlamlarını, sayısal ve sembolik gösterimi anlamak ve izin/sahiplik değişikliklerini güvenle yapmak.

✎ Notlarım — Dosya İzinleri

rwx Anatomy of a Permission String — İzin dizesinin anatomisi

Every file has an owner and a group. ls -l shows a 10-character string: 1 for file type, then three groups of three (owner / group / others), each meaning read (r), write (w), execute (x).

TRHer dosyanın bir sahibi (owner) ve bir grubu vardır. ls -l komutu 10 karakterlik bir dize gösterir: ilk karakter dosya türü, sonra üçer üçer üç grup (sahip / grup / diğerleri), her biri okuma (r), yazma (w), çalıştırma (x) anlamına gelir.

- r w x r - x r - - tür USER (sahip) GROUP (grup) OTHERS (diğerleri) rwx = 4+2+1 = 7 r-x = 4+0+1 = 5 r-- = 4+0+0 = 4 chmod 754 dosya
-rwxr-xr-- örneği: sahip her şeyi yapabilir, grup okur+çalıştırır, diğerleri sadece okur
SembolAnlamıSayısal değer
rread — okuma4
wwrite — yazma2
xexecute — çalıştırma (dizinlerde: içine girme)1
💡 İpucu: Bir dizinde x izni olmadan, o dizinin İÇİNE giremezsin (cd yapamazsın) — r sadece dosya isimlerini listeler ama içine giremezsin.

chmod Changing Permissions — İzin değiştirme

Sayısal (numeric)Sembolik (symbolic)Anlamı
chmod 700 dosyachmod u=rwx,g=,o= dosyaSadece sahip her şey yapabilir
chmod 644 dosyachmod u=rw,g=r,o=r dosyaSahip okur/yazar, diğerleri sadece okur
chmod 755 dosyachmod u=rwx,g=rx,o=rx dosyaSahip her şey, diğerleri okur+çalıştırır (yaygın script izni)
chmod 600 dosyachmod u=rw,g=,o= dosyaSadece sahip okur/yazar — hassas dosyalar için
TERMİNALDE ÇALIŞTIR
echo "Top secret info" > secret.txt
chmod 600 secret.txt      # sadece sahip okur/yazar
ls -l secret.txt          # kontrol et: -rw------- olmalı

chown Copying & Ownership — Kopyalama ve sahiplik

cp alone does NOT preserve original permissions — use cp -p to keep them.

TRTek başına cp orijinal izinleri KORUMAZ — izinleri korumak için cp -p kullan.

TERMİNALDE ÇALIŞTIR
chmod 640 source.txt
cp source.txt copy1.txt      # izinler DEĞİŞİR (varsayılan umask'e göre)
cp -p source.txt copy2.txt   # izinler AYNI kalır
sudo chown user1:user2 dosya.txt   # sahibi user1, grubu user2 yap

alıştırma Quick Self-Check — Kendini test et

Given -rwxr-xr-- owned by alice:developers — can someone outside the "developers" group execute this file? What can the group do?

TR-rwxr-xr-- iznine sahip, sahibi alice, grubu developers olan bir dosya düşün — "developers" grubu dışındaki biri bu dosyayı çalıştırabilir mi? Grup ne yapabilir? (Cevap: grup okuyup çalıştırabilir ama yazamaz; diğerleri sadece okuyabilir, çalıştıramaz.)

$ cd part-09/

Loops & Functions

Döngüler ve Fonksiyonlar

Purpose: repeat blocks of code with while/until/for/select loops, control them with break/continue, and organize reusable code into functions.

Amaç: while/until/for/select döngüleriyle kod bloklarını tekrarlamak, break/continue ile kontrol etmek, tekrar kullanılabilir kodu fonksiyonlar halinde organize etmek.

✎ Notlarım — Döngüler & Fonksiyonlar

while While & Until Loops — While ve Until döngüleri

while repeats as long as the condition is true. until is the opposite — it repeats until the condition becomes true (i.e. while it's false).

TRwhile, koşul doğru olduğu sürece tekrar eder. until ise tam tersi — koşul doğru olana kadar (yani yanlış olduğu sürece) tekrar eder.

number-le 10 ? evet echo number++ hayır döngü biter
while [[ number -le 10 ]] do ... done — koşul yanlış olunca döngü durur
while-loop.sh
#!/bin/bash
number=1
while [[ $number -le 10 ]]
do
  echo $number
  ((number++))
done
echo "Now, number is $number"

for For Loops & Select Loops — For ve Select döngüleri

for iterates over a fixed list of items. select builds an interactive numbered menu the user can choose from.

TRfor, sabit bir liste üzerinde döner. select ise kullanıcının seçebileceği numaralı, interaktif bir menü oluşturur.

for-array.sh
#!/bin/bash
devops_tools=("docker" "kubernetes" "ansible" "terraform" "jenkins")

for tool in ${devops_tools[@]}
do
   echo $tool
done
select-loop.sh
#!/bin/bash
PS3="Select the operation: "
select operation in addition subtraction exit
do
  case $operation in
    addition) echo "toplama seçildi" ;;
    subtraction) echo "çıkarma seçildi" ;;
    exit) break ;;
    *) echo "Wrong choice..." ;;
  esac
done

break Break & Continue — Break ve Continue

KomutNe yapar
breakDöngünün TAMAMINI hemen sonlandırır
continueSadece o anki tekrarı atlar, döngü devam eder
⚠️ Dikkat: Koşulu hiç false olmayan bir döngü sonsuz döngüdür (infinite loop) — Ctrl+C ile durdurabilirsin. break/continue genelde böyle döngüleri kontrollü hale getirmek için kullanılır.

func Functions — Fonksiyonlar

A function is reusable code that only runs when called. Arguments are passed the same way as script arguments ($1, $2...). Bash functions don't "return" a value like other languages — return just sets an exit status (0-255), captured in $?.

TRFonksiyon, sadece çağrıldığında çalışan, tekrar kullanılabilir koddur. Argümanlar script argümanlarıyla aynı şekilde geçilir ($1, $2...). Bash fonksiyonları diğer dillerdeki gibi bir "değer döndürmez" — return sadece bir çıkış durumu (0-255) belirler, bunu $? ile okursun.

functions.sh
#!/bin/bash
Welcome () {
    echo "Welcome to Linux Lessons $1 $2 $3"
    return 3
}

Welcome Joe Matt Timothy
echo $?    # → 3 (return ile belirlenen çıkış kodu)

scope Variable Scope: local — Değişken kapsamı

By default, ALL Bash variables are global — even ones declared inside a function. The local keyword restricts a variable to only exist inside that function.

TRVarsayılan olarak Bash'te TÜM değişkenler globaldir — bir fonksiyonun içinde tanımlansa bile. local anahtar kelimesi, bir değişkenin sadece o fonksiyonun içinde var olmasını sağlar.

variables-scope.sh
#!/bin/bash
var1='global 1'
var2='global 2'

var_scope () {
  local var1='function 1'   # sadece fonksiyon içinde geçerli
  var2='function 2'         # local değil → GLOBAL var2'yi değiştirir!
}

var_scope
echo $var1   # → global 1 (değişmedi, local korudu)
echo $var2   # → function 2 (kalıcı olarak değişti!)
⚠️ Dikkat: Fonksiyon içinde local demeyi unutursan, o değişken global değişkeni kalıcı olarak değiştirir — bu en sık yapılan script hatalarından biridir.
$ cat appendix/crontab.md

Appendix: Crontab Format

Ek: Crontab Zamanlama Formatı

Purpose: schedule scripts to run automatically at fixed times using cron — essential for DevOps automation (backups, log rotation, health checks).

Amaç: cron kullanarak scriptlerin belirli zamanlarda otomatik çalışmasını sağlamak — DevOps otomasyonunda (yedekleme, log döndürme, sağlık kontrolleri) temel bir araç.

✎ Notlarım — Crontab

cron The 5-Star Format — 5 yıldızlı format

* * * * * cmd Dakika0-59 Saat0-23 Ayın Günü1-31 Ay1-12 Haftanın Günü0-6 (0=Pazar) 0 13 * * * date >> /home/ec2-user/date.log → her gün saat 13:00'te tarihi date.log'a yaz
dakika · saat · ayın günü · ay · haftanın günü · komut
SembolAnlamı
*Her değer (any/all)
,Birden çok değer listesi (örn. 1,15)
-Aralık (örn. 1-5)
/Adım değeri (örn. */3 = her 3 birimde bir)
TERMİNALDE ÇALIŞTIR
crontab -e     # kendi crontab dosyanı düzenle
crontab -l     # mevcut cron görevlerini listele

# örnek görevler:
0 3 * * sun sudo yum update -y   # her Pazar saat 3'te sistemi güncelle
0 1 * * * date >> ~/date.log    # her gün saat 1'de tarihi kaydet
💡 İpucu: Karmaşık cron ifadelerini elle hesaplamak yerine crontab.guru sitesini kullan — yazdığın ifadeyi anında İngilizce olarak açıklar.
$ ./test-yourself.sh

Exercise Checklist

Alıştırma Kontrol Listesi — hepsini terminalde gerçekten dene

Tick these off as you complete them for real, in a terminal. They come directly from your bootcamp materials, part by part. This box only tracks progress in this browser tab — it resets on reload.

Bunları gerçekten terminalde yaparak işaretle. Bootcamp materyallerinden bölüm bölüm derlendi. Bu kutu ilerlemeyi sadece bu sekmede takip eder — sayfayı yenilersen sıfırlanır, o yüzden bir oturuşta bitirmeye çalış ya da kendi notlarını da tut.

✎ Genel notlar / takıldığım yerler

03 Users & Groups — Kullanıcı & Grup

  • ✓Create user "devops", set password, add description "the best cloud engineer", switch to it, then delete with home dirdevops kullanıcısı oluştur, şifre ver, açıklama ekle, kullanıcıya geç, sonra ev diziniyle sil
  • ✓Create groups "cloud" and "aws", add devops to both, then remove from one and rename the other"cloud" ve "aws" gruplarını oluştur, devops'u ikisine de ekle, birinden çıkar, diğerinin adını değiştir

04 Package Managers — Paket Yöneticileri

  • ✓Update all packages, then install/remove httpd without confirmation promptsTüm paketleri güncelle, sonra httpd'yi onaysız kur/kaldır
  • ✓Uninstall git with dependencies, find and install a previous version, then update to latestgit'i bağımlılıklarıyla kaldır, önceki bir sürümü bul ve kur, sonra en güncel sürüme güncelle

05 Filters & Control Operators — Filtreler

  • ✓Create countries.csv → cut the Continent column → remove header → sort → dedupe → save to continents.txtcountries.csv oluştur → Continent sütununu kes → başlığı çıkar → sırala → tekrarları kaldır → continents.txt'e kaydet
  • ✓Search for "linuxway.doc"; print its content if found, else print "Too early!"; create it and repeat"linuxway.doc" ara; varsa içeriğini yazdır, yoksa "Too early!" yaz; dosyayı oluşturup tekrarla

06 Shell Scripting — Script Yazımı

  • ✓Write "my-first-script.sh" that prints "This is my first script.", make it executable, run it"This is my first script." yazdıran my-first-script.sh yaz, çalıştırılabilir yap, çalıştır
  • ✓Add your scripts directory to PATH so you never need "./" againScriptlerinin klasörünü PATH'e ekle, bir daha "./" yazmana gerek kalmasın
  • ✓calculate.sh: base_value=5, add user input, print totalcalculate.sh: base_value=5, kullanıcı girdisini ekle, toplamı yazdır

07 Conditional Statements — Koşullu İfadeler

  • ✓Ask name, age, average life expectancy → print "Student"/"Worker"/"Retired"/"Already died" logic with years-remaining mathİsim, yaş, ortalama yaşam süresi sor → "Öğrenci"/"Çalışan"/"Emekli"/"Zaten ölmüş" mantığıyla kalan yıl hesabı yap

08 File Permissions — Dosya İzinleri

  • ✓Lab 1A: set a.txt=rw-r-----, b.txt=rwxr-xr--, c.txt=rw-rw-r-- with chmod, verify with ls -lchmod ile a.txt/b.txt/c.txt için farklı izin kombinasyonları kur, ls -l ile doğrula
  • ✓Lab 1C: create secret.txt, chmod 600, try reading as another user, then chmod 700 and try running itsecret.txt oluştur, 600 yap, başka kullanıcıyla okumayı dene, sonra 700 yapıp çalıştırmayı dene
  • ✓Lab 1D: compare cp vs cp -p permission preservationcp ile cp -p arasındaki izin koruma farkını karşılaştır
  • ✓Lab 1E: sudo chown user1:user2 a file, verify with ls -lBir dosyayı sudo chown user1:user2 ile değiştir, ls -l ile doğrula

09 Loops & Functions — Döngüler & Fonksiyonlar

  • ✓Sum numbers 1 to 100 using a loop, print result1'den 100'e kadar sayıları bir döngüyle topla, sonucu yazdır
  • ✓Ask for multiple names on one line, print a "Hello" line for eachTek satırda birden fazla isim al, her biri için ayrı "Hello" satırı yazdır
  • ✓Write print_age(birth_year) function; call print_age 2024print_age(birth_year) fonksiyonu yaz; print_age 2024 ile çağır