Bu proje, bir Linux sunucusunda temel sistem yönetimi becerilerini öğrenmeyi ve uygulamayı amaçlar. Proje kapsamında, bir sanal makine üzerinde temel Linux sistem yönetimi görevlerini gerçekleştirmek için gerekli bilgi ve deneyim kazanılır.
Öncelikle kurulum için github hesabımdaki PDFleri okumanızı ve kurulumu o şekilde tamamlamanızı öneririm. Bu sayfadaki yazılar kurulum için değil, bilgi ve kavramları anlamak içindir.
lsblk
komutu (list block devices), sistemdeki blok aygıtları görüntülemek için kullanılır.
Bu komut sayesinde disklerin bölümleri, boyutları, türleri, bağlama noktaları ve dosya sistemleri
hakkında detaylı bilgi alınabilir.
sda
diskinin bölümleri. Sayılar, bölüm sırasını
gösterir.sda
, sda1
).disk
, part
, rom
).
ext4
, vfat
,
swap
).
/boot
, /
,
/home
).
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
NAME SIZE TYPE FSTYPE MOUNTPOINT
sda 20G disk
├─sda1 1G part ext4 /boot
├─sda2 15G part (extended)
└─sda5 15G part LVM / (şifreli)
LVM, disk bölümlerini dinamik olarak yönetmeye olanak tanır. Normal bölümler sabitken, LVM ile disk
alanları istenildiği gibi büyütülebilir, küçültülebilir ya da taşınabilir.
Volume Group (VG) adı verilen yapılar ile birden fazla fiziksel disk birleştirilerek
mantıksal bölümler (LV) oluşturulur.
Eğer bir disk bölümü şifrelenmişse, lsblk
çıktısında bu sda5_crypt
gibi
isimlerle görünür.
Bu, LUKS veya benzeri bir sistemle şifreleme yapıldığını gösterir. Şifreleme sayesinde veri güvenliği
sağlanır.
Bu bilgiler, disk yapılandırmasını anlamanızı sağlar ve özellikle sistem kurulumları, yedekleme ve
güvenlik işlemleri için temel teşkil eder. lsblk
çıktısını yorumlayabilmek, sistem
yöneticiliğinde önemli bir beceridir.
lsblk
(list block devices) komutu, Linux sistemlerinde disk, bölüm ve bağlı aygıtları
görüntülemek için kullanılır. Bilgileri /sys/dev/block
üzerinden çeker. Çıktısı ağaç
yapısındadır ve genellikle şu şekilde görünür:
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
sda
, sistemdeki ilk disk aygıtıdır. SCSI, SATA gibi diskleri temsil eder. Diğer diskler
sdb
, sdc
olarak devam eder. Disk üzerindeki bölümler sda1
,
sda2
gibi adlandırılır.
sda2
genişletilmiş (extended) bölüm olarak yapılandırılmıştır. Veri içermez, yalnızca mantıksal
bölümleri barındırır. sda5
gibi bölümler bu kapsayıcı içerisinde yer alır.
sda5_crypt
, şifreli bir mantıksal bölümdür. Genellikle LUKS (Linux Unified Key Setup) ile
şifrelenir. Sistemin yeniden başlatılması durumunda bu bölüm açılmadan önce parola sorulur.
LVM, diskleri mantıksal olarak bölümlendirip daha esnek kullanım sağlar. Birden fazla diski tek bir Volume Group (VG) altında toplayabiliriz.
NAME SIZE TYPE FSTYPE MOUNTPOINT
sda 40G disk
├─sda1 512M part ext4 /boot
├─sda2 1K part (extended)
└─sda5 39.5G part crypto_LUKS
└─sda5_crypt
39.5G crypt LVM2_member
├─vg-root 35G lvm ext4 /
└─vg-swap 4.5G lvm swap [SWAP]
SSH
, iki bilgisayar arasında güvenli, şifrelenmiş bir bağlantı sağlayan bir ağ protokolüdür.
Genellikle uzak bir sunucuya terminal üzerinden bağlanmak için kullanılır.
UFW
, iptables’in basitleştirilmiş hali olan bir güvenlik duvarı yönetim aracıdır. Karmaşık
kurallarla uğraşmadan ağ trafiğini kontrol etmeye olanak tanır.
sudo ufw allow ssh
sudo ufw enable
sudo ufw allow 22 # SSH için port açma
sudo ufw deny 80 # HTTP portunu engelleme
sudo ufw status # Durumu kontrol et
sudo ufw disable # Güvenlik duvarını kapat
sudo
, normal kullanıcıların yönetici (root) yetkisiyle geçici olarak komut çalıştırmasına izin
veren bir araçtır.
sudo
ile başlayan işlemler yüksek yetkiyle çalışır./etc/sudoers
dosyası üzerinden tanımlanır.
sudo apt update
sudo reboot
sudo crontab -e # Root kullanıcısı için cron ayarlarını düzenler
Bir kullanıcıya sudo yetkisi vermek için:
sudo usermod -aG sudo kullanici_adi
Bu komut, kullanıcının sudo
grubuna eklenmesini sağlar. Grup eklemesinden sonra çıkış yapıp
yeniden giriş yapmak gerekir.
hostname
, sistemin ağ üzerindeki adını gösterir ya da ayarlamak için kullanılır.
hostname
: Mevcut sistem adını gösterir.sudo hostname yeni_ad
: Geçici olarak sistem adını değiştirir (yeniden başlatmada eski
haline döner).hostnamectl
: Kalıcı hostname değişikliği için kullanılır.
sudo hostnamectl set-hostname yeni_hostname
VM, fiziksel bir bilgisayar içinde çalışan sanal bir işletim sistemidir. Born2beroot projesi VirtualBox gibi yazılımlarla sanal makine üzerinde yapılır.
Linux dünyasında farklı dağıtımlar vardır. İkisi arasında temel farklar:
Her ikisi de Debian tabanlı sistemlerde paket yüklemek için kullanılır.
apt
: Komut satırı için sade, modern bir arayüz.aptitude
: TUI (text UI) arayüze sahip, bağımlılık çözümlemesinde daha akıllıdır.aptitude
ayrı kurulmalıdır.
sudo apt update && sudo apt upgrade
sudo apt install vim
sudo aptitude search apache2
AppArmor
, uygulama düzeyinde güvenlik profilleri oluşturarak, uygulamaların sistem üzerinde
neleri yapıp yapamayacağını belirleyen bir Linux güvenlik modülüdür.
sudo aa-status
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
sudo aa-disable /etc/apparmor.d/usr.sbin.nginx
AppArmor profilleri /etc/apparmor.d/
dizini altında yer alır. Aktif/pasif hale getirme işlemleri
bu dosyalar üzerinden yapılır.
cron
, belirli zamanlarda otomatik olarak komut veya betik çalıştırmak için kullanılan
zamanlayıcı servistir.
crontab
: Kullanıcının zamanlanmış görevlerini düzenlemesini sağlar./etc/crontab
: Tüm sistem genelindeki görevleri içerir.
# Her gün saat 4:00'te sistem güncellemesi yap
0 4 * * * apt update && apt upgrade -y
# Her pazartesi 12:00'de log dosyalarını temizle
0 12 * * 1 rm -rf /var/log/*.log
Root yetkisiyle sistem görevleri eklemek için: sudo crontab -e
uname
, çekirdek (kernel) ve sistem hakkındaki bilgileri gösterir.
uname -a # Tüm bilgileri verir
uname -r # Kernel sürümü
uname -n # Hostname
lscpu
, işlemci mimarisi, çekirdek sayısı, CPU modeli gibi donanım bilgilerini gösterir.
free
, RAM ve swap belleğinin ne kadar kullanıldığını gösterir.
free -m
df
, disk bölümlerinin ne kadar kullanıldığını gösterir.
df -h # İnsan okunabilir formatta (MB, GB)
df -Bm # Sonuçları MB cinsinden verir
top
, sistemin anlık CPU, RAM kullanımı ve işlem bilgilerini canlı olarak gösterir.
top -bn1 # Tek seferlik çıktı verir (n: tekrar sayısı, b: batch mod)
awk
, metin dosyalarındaki sütunları ayıklamak ve filtrelemek için kullanılır.
# /etc/passwd dosyasındaki tüm kullanıcı adlarını al
awk -F: '{print $1}' /etc/passwd
grep
, bir dosyada ya da çıktıda anahtar kelime aramak için kullanılır.
uniq
, tekrarlayan satırları filtreler (genellikle sort
ile birlikte kullanılır).
wc
(word count), dosya içeriğindeki satır, kelime veya karakter sayılarını gösterir.
sort
, verileri alfabetik ya da sayısal olarak sıralamak için kullanılır.
printf
, biçimli çıktı üretir. Özellikle script içinde estetik çıktı için kullanılır.
cat dosya.txt | sort | uniq -c | sort -nr | head -n 10
Yukarıdaki komut, en sık geçen ilk 10 satırı gösterir (log analizi gibi işlemlerde kullanılır).
Bu bash betiği, sistemin genel durumunu gerçek zamanlı olarak değerlendirir ve wall
komutu ile
oturum açmış tüm kullanıcılara özet bilgileri gönderir. Özellikle sunucuların durumu hakkında hızlı bilgi
almak için kullanışlıdır.
#!/bin/bash
# Sistem mimarisi ve çekirdek bilgisi
arc=$(uname -a)
# Fiziksel işlemci (physical CPU) sayısı
pcpu=$(grep "physical id" /proc/cpuinfo | sort | uniq | wc -l)
# Sanal işlemci (vCPU) sayısı
vcpu=$(grep "^processor" /proc/cpuinfo | wc -l)
# RAM bilgileri (toplam, kullanılan, yüzde)
fram=$(free -m | grep Mem: | awk '{print $2}')
uram=$(free -m | grep Mem: | awk '{print $3}')
pram=$(free | grep Mem: | awk '{printf("%.2f"), $3/$2*100}')
# Disk bilgileri (toplam, kullanılan, yüzde)
fdisk=$(df -Bg | grep '^/dev/' | grep -v '/boot$' | awk '{ft += $2} END {print ft}')
udisk=$(df -Bm | grep '^/dev/' | grep -v '/boot$' | awk '{ut += $3} END {print ut}')
pdisk=$(df -Bm | grep '^/dev/' | grep -v '/boot$' | awk '{ut += $3} {ft+= $2} END {printf("%d"), ut/ft*100}')
# CPU yükü (kullanıcı + sistem)
cpul=$(top -bn1 | grep '^%Cpu' | cut -c 9- | xargs | awk '{printf("%.1f%%"), $1 + $3}')
# Sistem en son ne zaman başlatıldı
lb=$(who -b | awk '$1 == "system" {print $3 " " $4}')
# LVM kullanılıyor mu?
lvmt=$(lsblk -o TYPE | grep "lvm" | wc -l)
lvmu=$(if [ $lvmt -eq 0 ]; then echo no; else echo yes; fi)
# Aktif TCP bağlantı sayısı
ctcp=$(cat /proc/net/tcp | wc -l | awk '{print $1-1}' | tr '\n' ' ')
# Sistemde kaç kullanıcı oturum açmış
ulog=$(users | wc -w)
# IP ve MAC adresi
ip=$(hostname -I)
mac=$(ip link show | awk '$1 == "link/ether" {print $2}')
# sudo ile yapılan toplam komut sayısı
cmds=$(journalctl _COMM=sudo | grep COMMAND | wc -l)
# Bilgileri tüm kullanıcı ekranına bastır
wall " #Architecture: $arc
#CPU physical: $pcpu
#vCPU: $vcpu
#Memory Usage: $uram/${fram}MB ($pram%)
#Disk Usage: $udisk/${fdisk}Gb ($pdisk%)
#CPU load: $cpul
#Last boot: $lb
#LVM use: $lvmu
#Connexions TCP : $ctcp ESTABLISHED
#User log: $ulog
#Network: IP $ip ($mac)
#Sudo: $cmds cmd"
Bu script, sistemin sağlık durumunu gerçek zamanlı analiz etmek için idealdir. crontab
ile
zamanlanarak belirli aralıklarla çalıştırılabilir veya açılışta otomatik olarak tetiklenebilir.
Proje hakkında tüm görüş, öneri ve sorularınız için dilediğiniz zaman iletişime geçebilirsiniz.
daha çok yazı, bilgi ve içerik için takipte kalmayı unutmayın.
Projenin orijinal kaynak kodlarına aşağıdaki bağlantıdan ulaşabilirsiniz:
🔗 Proje GitHub Linki