İçindekiler

    Yazıyı Dinle

    Hazır
    Tarayıcınızın yerleşik ses sentezi özelliğini kullanır.

    Yazı Boyutu

    Küçük Aa
    Normal Aa
    Büyük Aa
    Çok Büyük Aa

    Kaydet

    📑

    Bu makaleyi daha sonra okumak için kaydedin

    Yazılımcılar İçin Hayat Kurtaran Linux Komutları ve Püf Noktaları

    Yazıyı dinlemek için oynat butonuna tıklayın

    Geliştiricilere yönelik bu güçlü Linux komutlarıyla üretkenliğinizi artırın!

    Komut satırı arayüzü çoğu teknoloji profesyoneli, özellikle de geliştiriciler ve sistem yöneticileri için ekmek ve tereyağıdır. İster komut dosyaları yazıyor olun, ister sunucuları yapılandırıyor olun, ister görevleri otomatikleştiriyor olun, Linux komutlarını nasıl kullanacağınızı bilmek size saatlerce çalışmaktan tasarruf ettirebilir.

    Bu makalede, eğer bir geliştiriciyseniz hayatınızı kolaylaştırabilecek beş komut satırı hilesini inceleyeceğiz. Bunlar sadece “bilinmesi güzel” kısayollar değil, aynı zamanda size zaman kazandıracak ve terminalle etkileşimlerinizi çok daha verimli hale getirecek, oyunun kurallarını değiştiren şeylerdir.

    mkdir

    Her dizini tek tek oluşturmak yerine mkdir ve {} parantezlerini kullanarak tüm bunları tek bir komutta birleştirebilirsiniz. Bu, dizin kombinasyonlarını verimli bir şekilde oluşturmanıza olanak tanır.

    mkdirmkdir -p {dev,test,prod}/{backend,frontend}

    -p bayrağı, mkdir'e gerektiği gibi üst dizinler oluşturmasını söyler (yani, üst dizinler henüz mevcut değilse hata atmaz).

    mkdir

    İlk set {dev,test,prod} farklı ortamlar için dizinler oluşturur.

    {dev,test,prod}

    İkinci set {backend,frontend} farklı hizmetler için dizinler oluşturur.

    {backend,frontend}

    Bu yöntem, özellikle karmaşık klasör yapılarına sahip büyük projeler kurduğunuzda önemli ölçüde zaman tasarrufu sağlar ve insan hatasını azaltır. Her kombinasyonu manuel olarak yazmak yerine, bunları kısa ve öz bir komutla tanımlayabilirsiniz.

    Tekrar tekrar cd .. Kullanmak Yerine cd - ile Geri Dönün.

    cd .. cd -

    Bir programcı olarak kendinizi derinlemesine iç içe geçmiş dizinler içinde çalışırken bulmanız yaygındır. Örneğin projenizin kök dizininden kod, yapılandırma dosyaları veya günlükler için alt dizinlere geçiyor olabilirsiniz. Ancak başladığınız yere dönme zamanı geldiğinde, manuel olarak birden çok kez cd .. yazarak geri dönmek sinir bozucu ve hataya açık hale gelebilir.

    cd ..

    /home/user/projects/webapp/src/frontend/components

    /home/user/projects/webapp/src/frontend/components

    Proje köküne dönmek için normalde aşağıdaki gibi birkaç kez cd .. yazmanız gerekebilir:

    cd ..

    cd ..
    cd ..
    cd ..
    cd ..

    cd ..
    cd ..
    cd ..
    cd ..

    Bunlar /home/user/projects/'a geri dönmek için gereken dört ayrı komuttur. Bu sadece sıkıcı değil, aynı zamanda nereden geldiğinizi unutmak da kolaydır.

    /home/user/projects/

    İşte daha basit, daha hızlı bir alternatif: İç içe geçmiş bir yapıda ne kadar derine inmiş olursanız olun, anında önceki dizininize dönmek için cd - komutunu kullanın.

    cd -cd -

    cd - komutu önceki dizini bellekte saklar, böylece onu kullandığınızda mevcut dizininizi son dizinle değiştirir. Bu, özellikle çalışan bir dizin ile derinlemesine iç içe geçmiş bir dizin arasında geçiş yaptığınızda, iki dizin arasında ileri geri gezinmenin son derece etkili bir yoludur.

    cd -

    Bu yöntem özellikle hata ayıklarken veya bir projenin birden fazla bölümünde çalışırken kullanışlıdır. Projenin kökü ile derin bir alt dizini arasında sık sık geçiş yapmanız gerekiyorsa, cd - sizi uzun yollar yazmaktan veya adım adım yukarı gitmekten kurtarır.

    cd - touch

    İster test dosyaları, ister yer tutucular veya günlükler oluşturuyor olun, birden fazla dosya oluşturmak geliştiricilerin ortak bir görevidir. Normalde dosyaları birer birer oluşturabilseniz de, çok sayıda dosya için bunu manuel olarak yapmak külfetli hale gelir. Neyse ki Linux, touch ve parantez {} içindeki bir dizi sayıyı kullanarak tek bir komutla birden fazla dosya oluşturmanın bir yolunu sunuyor.

    touch

    test1.txt , test2.txt gibi bir dizi test senaryosu için test100.txt'ye kadar 100 numaralı dosya oluşturmanız gerektiğini düşünün. Bunu tek tek touch komutlarıyla manuel olarak yapmak şuna benzer:

    test1.txt test2.txt test100.txt touch

    touch test1.txt
    touch test2.txt
    touch test3.txt

    touch test100.txt

    touch test1.txt
    touch test2.txt
    touch test3.txt

    touch test100.txt

    Tek seferde hızlı bir şekilde birden fazla dosya oluşturmak için touch komutunu parantez {} içine bir dizi sayı koyarak kullanabilirsiniz

    touchtouch test{1..100}.txttouch test{1..10}.txt

    Dizininizde aşağıdaki dosyaları oluşturur:

    test1.txt
    test2.txt
    test3.txt

    test10.txt

    test1.txt
    test2.txt
    test3.txt

    test10.txt

    history | awk ‘{print $2}’ | sort | uniq -c | sort -nr | head -n 10

    history | awk ‘{print $2}’ | sort | uniq -c | sort -nr | head -n 10

    Bu komut zincirinin detaylı açıklaması:

    • history: Komut geçmişini listeler
    • awk '{print $2}': Her satırdan komutu ayıklar
    • sort: Alfabetik sıralama yapar
    • uniq -c: Tekrar sayısını sayar
    • sort -nr: Sayıya göre ters sıralama yapar
    • head -n 10: İlk 10 sonucu gösterir
    • history: Komut geçmişini listeler

    history

    • awk '{print $2}': Her satırdan komutu ayıklar

    awk '{print $2}'

    • sort: Alfabetik sıralama yapar

    sort

    • uniq -c: Tekrar sayısını sayar

    uniq -c

    • sort -nr: Sayıya göre ters sıralama yapar

    sort -nr

    • head -n 10: İlk 10 sonucu gösterir

    head -n 10echo "alias gl='git log - oneline'" >> ~/.bashrc
    echo "alias gst='git status -sb'" >> ~/.bashrc
    source ~/.bashrc

    Kod Tarama ve Arama

    # JavaScript dosyalarında console.log aramak
    find . -type f -name "*.js" -not -path "./node_modules/*" | xargs grep "console.log"
    # Belirli bir string'i birden fazla dosya tipinde aramak
    find . -type f \( -name "*.js" -o -name "*.ts" \) | xargs grep "TODO"

    Son değiştirilen dosyaları listeleme

    ls -lrt

    Belirli bir süre içinde değiştirilmiş dosyaları bulma

    find . -type f -mtime -7 # Son 7 günde değiştirilmiş dosyalar

    Süreç İzleme ve Yönetimi

    Belirli bir process’i bulma ve yönetme

    ps aux | grep node
    pkill -f "node"ps aux - sort=-%cpu | head -n 10# Anlık CPU ve Bellek kullanımı
    top -o %CPU
    htop

    # Disk I/O izleme
    iostat -x 1# Son 100 satır log takibi
    tail -f -n 100 /var/log/application.log

    # Belirli bir hatayı içeren logları bulma
    grep -r "ERROR" /var/log/* | cut -d: -f2- | sort | uniq -c# 7 günden eski log dosyalarını bulma ve silme
    find /var/log -name "*.log" -type f -mtime +7 -exec rm {} \;

    Port ve Bağlantı İzleme

    # Açık portları listeleme
    netstat -tuln

    # Bağlantıları izleme
    ss -s

    HTTP İsteklerini Test Etme

    # Basit HTTP isteği
    curl -I https://api.example.com

    # Detaylı HTTP isteği
    curl -v -X POST https://api.example.com/data -d '{"key":"value"}'
     

    CTRL+R ile geçmişte arama yapma

    # CTRL+R ile geçmişte arama yapma
    # CTRL+R tuşuna tekrar basarak sonraki sonuca geçme
     

    Çoklu Terminal Yönetimi

    # Screen kullanımı
    screen -S session_name  # Yeni oturum
    screen -r              # Oturuma geri dönme
    CTRL+A+D               # Oturumdan ayrılma

    Disk Kullanımı Analizi

    # Dizin boyutlarını listeleme
    du -sh *

    # En büyük 10 dizini bulma
    du -a / | sort -n -r | head -n 10# Dosya sistemi durumu
    df -h

    # İnode kullanımı
    df -i# Sistem güvenlik loglarını kontrol etme
    sudo grep "authentication failure" /var/log/auth.log
    sudo tail -f /var/log/audit/audit.log

    # Açık portları ve servisleri tarama
    nmap localhost
    netstat -tulpn# Güvenli izin ayarları
    chmod 644 $(find . -type f)
    chmod 755 $(find . -type d)

    # SUID/SGID dosyalarını bulma
    find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;# Veritabanı yedekleme
    mysqldump -u username -p database_name > backup.sql

    # Yedek geri yükleme
    mysql -u username -p database_name < backup.sql

    # Büyük tablolar ve boyutları
    SELECT table_name, table_rows, data_length/1024/1024 'Data MB'
    FROM information_schema.tables
    ORDER BY data_length DESC;

    PostgreSQL Komutları

    # Veritabanı yedekleme
    pg_dump dbname > backup.sql

    # Veritabanı geri yükleme
    psql dbname < backup.sql

    # Aktif bağlantıları listeleme
    SELECT * FROM pg_stat_activity;

    Docker Komutları

    # Container yönetimi
    docker ps -a
    docker stats
    docker system prune -a

    # Image yönetimi
    docker images
    docker rmi $(docker images -f "dangling=true" -q)

    Kubernetes (K8s) Komutları

    # Pod yönetimi
    kubectl get pods -A
    kubectl describe pod pod-name
    kubectl logs pod-name -f

    # Servis kontrolü
    kubectl get services
    kubectl get deployments

    Git İş Akışı

    Git Hooks

    Sed Kullanımı

    # Metin değiştirme
    sed -i 's/eski-text/yeni-text/g' dosya.txt

    # Belirli satırları silme
    sed -i '10,20d' dosya.txt

    # Satır ekleme
    sed -i '5i\Yeni Satır' dosya.txt

    Awk Kullanımı

    # Kolon işlemleri
    awk '{print $1,$4}' dosya.txt

    # Toplam hesaplama
    awk '{sum += $3} END {print sum}' data.txt

    # Koşullu filtreleme
    awk '$3 > 1000 {print $0}' data.txt

    Performans Analizi

    # CPU profili
    perf top
    perf record -F 99 -p `pgrep -n process-name`

    # Sistem çağrıları
    strace -p process_id
    ltrace ./program

    Fonksiyon Örnekleri

    # Hata yakalama
    function error_handle() {
        echo "Hata: $1" >&2
        exit 1
    }
    trap 'error_handle "Beklenmeyen hata!"' ERR

    # Paralel işlem
    function parallel_process() {
        for i in {1..10}; do
            process_item $i &
        done
        wait
    }

    Debug Teknikleri

    # Script debug modu
    set -x  # Debug başlat
    set +x  # Debug bitir

    # Detaylı hata ayıklama
    bash -x script.sh

    Güvenlik Duvarı Yönetimi

    # UFW (Uncomplicated Firewall)
    ufw status verbose
    ufw allow 22/tcp
    ufw deny from 192.168.1.0/24

    # iptables
    iptables -L -n -v
    iptables-save > rules.backup

    Ağ Trafiği Analizi

    # tcpdump kullanımı
    tcpdump -i eth0 port 80
    tcpdump -w capture.pcap

    # Wireshark CLI
    tshark -i eth0 -f "port 443"

    Online Eğitimler

    • Linux Academy
    • Udemy Kursları
    • Linux Foundation Eğitimleri
    • Linux Academy
    • Udemy Kursları
    • Linux Foundation Eğitimleri

    Dokümantasyonlar

    • Man Pages
    • Kernel Dokümantasyonu
    • Distro-spesifik Rehberler
    • Man Pages
    • Kernel Dokümantasyonu
    • Distro-spesifik Rehberler

    Topluluk Kaynakları

    • Stack Overflow
    • Unix & Linux Stack Exchange
    • GitHub Repositories
    • Stack Overflow
    • Unix & Linux Stack Exchange
    • GitHub Repositories

    Bu genişletilmiş rehber, Linux sistem yönetimi ve yazılım geliştirme süreçlerinde karşılaşılabilecek çeşitli senaryolar için kapsamlı bir kaynak sunmaktadır. Komutların ve tekniklerin düzenli pratik edilmesi, sistem yönetimi ve geliştirme süreçlerinde verimliliği artıracaktır.

    https://www.linkedin.com/in/mustafa-%C3%B6nder-ak%C3%B6z-23174592/

    https://github.com/onder7

    Önceki Yazı
    Oracle tablespace doluluk sorunu giderilmesi

    Oracle SQL*Plus’a bağlanılarak tablespace doluluk sorunu giderilmesi ALTER ...

    Sonraki Yazı
    Linux: Kendiliğinden silinen dosyalar nasıl oluşturulur!

    Bu makalede size kendi kendini silen dosyaları nasıl oluşturabileceğinizi, b...