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
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.
(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.
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.
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.
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
| Command | Açıklama (TR) |
|---|---|
pwd | Bulunduğun (şu anki) dizinin tam yolunu gösterir — "print working directory" |
ls | Dizin içeriğini listeler |
cd | Dizin değiştirir |
mkdir | Yeni bir klasör oluşturur |
rmdir | Boş bir klasörü siler |
touch | Boş bir dosya oluşturur |
rm | Dosya siler |
cp | Dosyayı başka bir yere kopyalar |
mv | Dosyayı taşır veya adını değiştirir |
cat | Dosya içeriğini ekrana yazdırır |
echo | Ekrana yazı yazdırır |
clear | Terminal 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.
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
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.
| Vim | Ne yapar | Nano | Ne yapar |
|---|---|---|---|
i | Ekleme moduna gir | Ctrl+O | Kaydet (Write Out) |
Esc | Komut moduna dön | Ctrl+X | Çıkış |
dd | Satırı sil | Ctrl+K | Satırı kes |
yy | Satırı kopyala | Ctrl+U | Yapıştır (uncut) |
p | Yapıştır | Ctrl+W | Ara (Where is) |
:wq veya ZZ | Kaydet ve çık | Ctrl+G | Yardım |
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.
| Dizin | Ne için |
|---|---|
/bin | Temel komut çalıştırılabilir dosyaları (binary) |
/boot | Önyükleyici (boot loader) dosyaları |
/dev | Cihaz dosyaları (donanımlar dosya gibi görünür) |
/etc | Sistem geneli ayar (konfigürasyon) dosyaları |
/home | Kullanıcıların ev dizinleri |
/lib | Temel paylaşılan kütüphaneler |
/mnt, /media | Geçici / çıkarılabilir bağlama noktaları |
/opt | Ek (eklenti) uygulama paketleri |
/tmp | Geç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:
| Sembol | Anlamı |
|---|---|
- | Normal dosya |
d | Dizin (klasör) |
l | Link (kısayol) |
c | Karakter aygıtı |
b | Blok 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:
mkdir linux-lessons
cd linux-lessons
cat > welcome.txt
# yaz: Welcome to the linux lessons ... line 15'e kadar, bitince Ctrl+D| Komut | Ne yapar |
|---|---|
head welcome.txt | İlk 10 satırı gösterir |
head -5 welcome.txt | İlk 5 satırı gösterir |
tail welcome.txt | Son 10 satırı gösterir |
tail -n 5 welcome.txt | Son 5 satırı gösterir |
tail -n +10 welcome.txt | 10. satırdan sona kadar gösterir |
cat welcome.txt | Tüm dosyayı ekrana basar |
more welcome.txt | Sayfa sayfa gösterir (sadece ileri gidilir) |
less welcome.txt | more gibi ama daha hızlı, ileri/geri gidilebilir |
tac welcome.txt | Dosyayı ters (son satırdan ilk satıra) gösterir — "cat" tersten yazılmış! |
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.
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
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ı |
|---|---|
-i | Büyük/küçük harf duyarsız arama |
-v | Eşleşmeyen satırları göster |
-w | Sadece tam kelime eşleşmesi |
-n | Satır numaralarını göster |
-c | Eşleşme sayısını say |
-r | Alt klasörlerde de (recursive) ara |
-A n / -B n / -C n | Eşleşen satırdan sonra/önce/her iki yönde n satır daha göster |
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.
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
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=value | 3_KEY=value — rakamla başlıyor |
_VAR=5 | -VAR=5 — tire (-) özel bir karakter |
LINUX_way=test | LINUX-way=test — isimde tire olamaz |
liste Common Environment Variables — Sık kullanılan değişkenler
| Değişken | Açıklama |
|---|---|
PATH | Çalıştırılabilir dosyaların arandığı klasörlerin listesi |
HOME | Kullanıcının ev dizini yolu |
USER | Kullanıcı adı |
SHELL | Hangi shell'in kullanıldığı (örn. /bin/bash) |
EDITOR | Varsayılan metin editörü |
LANG | Dil / yerel ayarlar |
TERM | Terminal emülatörü türü |
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.
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
quoting Quoting with Variables — Tırnak kullanımı
Quoting controls whether the shell expands (substitutes the value of) a variable.
| Tür | Davranış | Örnek |
|---|---|---|
Çift tırnak " " | Değişkenleri genişletir (expand eder), $ ' " \ hariç her şeyi korur | echo "$SHELL" → /bin/bash |
Tek tırnak ' ' | Hiçbir şeyi genişletmez, her şeyi olduğu gibi korur | echo '$SHELL' → $SHELL (harfiyen) |
Ters bölü \ | Bir sonraki karakteri kaçırır (escape), özel anlamını iptal eder | echo "hello \$MYNAME" → hello $MYNAME |
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.
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
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ı
| Komut | Ne yapar |
|---|---|
whoami | Şu an hangi kullanıcı olarak giriş yaptığını gösterir |
who | Sistemde şu an kimlerin oturum açtığını gösterir |
w | who + 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 |
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).
| Komut | Ne yapar |
|---|---|
useradd kullanici | Yeni bir kullanıcı oluşturur (varsayılan olarak ev dizini oluşturmayabilir) |
useradd -m kullanici | Ev dizini oluşturmaya zorlar |
useradd -d /yol kullanici | Özel bir ev dizini adı belirtir |
useradd -c "açıklama" kullanici | Kullanıcıya bir açıklama (description) ekler |
adduser kullanici | useradd'ın interaktif (soru-cevaplı) versiyonu — bir Perl scripti |
userdel kullanici | Kullanıcıyı siler ama ev dizinini SİLMEZ |
userdel -r kullanici | Kullanıcıyı VE ev dizinini birlikte siler |
usermod -c "yeni açıklama" kullanici | Kullanıcının bir özelliğini değiştirir |
sudo useradd -m -c "Yazilim Gelistirici" mehmet cat /etc/passwd | grep mehmet sudo userdel -r mehmet
şifre User Passwords — Kullanıcı şifreleri
| Öğe | Açı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).
| Komut | Ne yapar |
|---|---|
groups [kullanıcı] | Kullanıcının üye olduğu grupları listeler |
groupadd [grup] | Yeni bir grup oluşturur |
usermod -a -G grup kullanici | Kullanıcıyı bir gruba ekler (mevcut gruplarını korur) |
groupmod -n yenisim eskisim | Bir grubun adını değiştirir |
groupdel [grup] | Bir grubu siler |
gpasswd -a kullanici grup | Kullanıcıyı gruba ekler |
gpasswd -d kullanici grup | Kullanıcıyı gruptan çıkarır |
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.
format Package Formats by Distro — Dağıtıma göre paket formatları
| İşletim Sistemi | Format | Araç(lar) |
|---|---|---|
| Debian / Ubuntu | .deb | apt, apt-get, dpkg |
| CentOS / Amazon Linux 2 | .rpm | yum |
| Fedora / Amazon Linux 2023 | .rpm | dnf |
yum/dnf yum & dnf Deep Dive — yum ve dnf komutları
| Komut | Ne yapar |
|---|---|
yum install paket | Paketi kurar |
yum install paket -y | Onay sormadan kurar |
yum remove paket | Paketi kaldırır |
yum autoremove paket | Paketi ve kullanılmayan bağımlılıklarını kaldırır |
yum update paket | Belirli bir paketi günceller |
yum update | Tüm kurulu paketleri günceller |
yum info paket | Paket hakkında bilgi verir |
yum list installed | Kurulu tüm paketleri listeler |
yum --showduplicates list paket | Paketin tüm mevcut sürümlerini listeler |
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.
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ı.
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.
cat colors.txt | grep "blue" # ↑ çıktı ↑ boru ↑ filtre # cat'in çıktısı, grep'in girdisi olur
filtre Filter Commands — Filtre komutları
| Komut | Ne yapar | Örnek |
|---|---|---|
tee | Girdiyi hem ekrana hem de bir dosyaya yazar (aynı anda ikisine de) | ls -l | tee file.txt | less |
cut | Belirtilen ayraca göre sütun (kolon) seçer | cut -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' |
wc | Satır/kelime/karakter sayar | wc -l dosya.txt — satır say |
sort | Alfabetik sıralar | sort -r dosya.txt — ters sırala |
uniq | Tekrarlanan 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 |
operatör Control Operators — Kontrol operatörleri
| Operatör | Anlamı |
|---|---|
; | 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 |
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
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.
mkdir shell-scripting && cd shell-scripting nano basic.sh
#!/bin/bash echo "Hello World"
chmod +x basic.sh # scripti çalıştırılabilir yap ./basic.sh # çalıştır — "./" bulunduğun klasörden çalıştır 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.
#!/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.
#!/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ım | Ne yapar |
|---|---|
read NAME | Kullanı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) |
#!/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şken | Anlamı |
|---|---|
$0 | Script'in kendi adı |
$1 – $9 | 1'den 9'a kadar sıradaki argümanlar |
$@ | Tüm argümanlar |
$# | Kaç argüman verildiği (sayı) |
$RANDOM | Rastgele bir sayı üretir |
$LINENO | Script içindeki o anki satır numarası |
./argument.sh Joe Matt Timothy
# $0=argument.sh $1=Joe $2=Matt $3=Timothy $#=3array Arrays — Diziler
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 + 5 | Sonucu 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 |
#!/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.
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.
#!/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ür | Operatör | Anlamı |
|---|---|---|
| Sayısal (Relational) | -eq | eşit |
-ne | eşit değil | |
-gt | büyük | |
-lt | küçük | |
-ge | büyük eşit | |
-le | küçük eşit | |
| Metinsel (String) | = | eşit |
!= | eşit değil | |
-z | boş metin | |
-n | boş olmayan metin | |
| Dosya (File Test) | -d | bu bir dizin mi |
-f | bu normal bir dosya mı | |
-e | dosya var mı | |
-x | çalıştırılabilir mi |
elif If / Elif / Else & Nesting — Çoklu koşullar ve iç içe yapılar
#!/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.
#!/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"
fibool Boolean Operators — Mantıksal operatörler
| Operatör | Anlamı |
|---|---|
! | Değili alır (true ↔ false) |
&& | VE — ikisi de doğruysa true |
|| | VEYA — biri doğruysa true |
#!/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.
#!/bin/bash
read -p "Select an operation (1-4): " operation
case $operation in
"1")
echo "addition"
;;
"2")
echo "subtraction"
;;
*)
echo "Wrong choice..."
;;
esacLinux 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.
| Sembol | Anlamı | Sayısal değer |
|---|---|---|
r | read — okuma | 4 |
w | write — yazma | 2 |
x | execute — çalıştırma (dizinlerde: içine girme) | 1 |
chmod Changing Permissions — İzin değiştirme
| Sayısal (numeric) | Sembolik (symbolic) | Anlamı |
|---|---|---|
chmod 700 dosya | chmod u=rwx,g=,o= dosya | Sadece sahip her şey yapabilir |
chmod 644 dosya | chmod u=rw,g=r,o=r dosya | Sahip okur/yazar, diğerleri sadece okur |
chmod 755 dosya | chmod u=rwx,g=rx,o=rx dosya | Sahip her şey, diğerleri okur+çalıştırır (yaygın script izni) |
chmod 600 dosya | chmod u=rw,g=,o= dosya | Sadece sahip okur/yazar — hassas dosyalar için |
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.
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.)
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.
#!/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.
#!/bin/bash
devops_tools=("docker" "kubernetes" "ansible" "terraform" "jenkins")
for tool in ${devops_tools[@]}
do
echo $tool
done#!/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
donebreak Break & Continue — Break ve Continue
| Komut | Ne yapar |
|---|---|
break | Döngünün TAMAMINI hemen sonlandırır |
continue | Sadece o anki tekrarı atlar, döngü devam eder |
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.
#!/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.
#!/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!)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
| Sembol | Anlamı |
|---|---|
* | 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) |
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
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