72 puan yazan GN⁺ 2026-03-27 | 3 yorum | WhatsApp'ta paylaş
  • Çeşitli klavye kısayolları ve komut birleşimlerini kullanarak shell ortamında çalışma hızını ve verimliliği artırma yöntemlerinin özeti
  • CTRL + W, U, K, Y gibi temel kısayollarla satır düzenleme, CTRL + A/E, ALT + B/F ile imleç taşıma ve reset ile terminali kurtarma mümkün
  • Bash ve Zsh'de CTRL + R ile komut geçmişinde arama, !!·!$·ESC+. ile önceki komutları yeniden kullanma, Brace Expansion ve Globstar ile tekrar eden işleri otomatikleştirme
  • Process Substitution, tee, bg/disown gibi gelişmiş özelliklerle süreç kontrolü ve log yönetimini daha verimli hale getirme
  • Shell'i bir alet çantası gibi ustalıkla kullanmak, üretkenliği ve odağı artırabilir; kilit nokta kısayolları tek tek alışkanlık haline getirmektir

Neredeyse tüm shell'lerde çalışan temel kısayollar ve özellikler

  • CTRL + W, U, K, Y** birleşimi, imleç konumuna göre kelimeyi veya satırın önünü/arkasını hızlıca silip geri yüklemeyi sağlayan** satır düzenleme kısayollarıdır

    • CTRL + W, imlecin önündeki kelimeyi siler
    • CTRL + U, imleçten satırın başına kadar keser; CTRL + Y ile yeniden yapıştırılabilir
    • CTRL + K, imleçten satır sonuna kadar keser
    • CTRL + A / E satırın başına ve sonuna gider, ALT + B / F ise kelime bazında geri/ileri hareket eder
    • Çoğu terminalde varsayılan olarak etkindir; Mac'te çalışması için Option tuşunun Meta olarak ayarlanması gerekir
    • reset veya stty sane komutu, bir binary dosya yanlışlıkla ekrana basılıp terminal bozulduğunda kurtarma sağlar
    • Ekran bozulsa bile giriş yapmak mümkündür; reset yazıp Enter'a basarak geri yükleyebilirsiniz
    • CTRL + C / D sırasıyla komutu durdurur ve EOF (dosya sonu) sinyali gönderir
    • CTRL + D, boş bir prompt'ta basılırsa shell'i kapatır
    • CTRL + L, clear komutuyla aynı şekilde ekranı anında temizler
    • O anda yazmakta olduğunuz komutu koruyarak prompt'u ekranın üstüne taşır
    • cd - önceki dizine anında döner; pushd / popd ise dizin yığınıyla birden çok konum arasında gidip gelmeyi sağlar
    • > file.txt, dosyayı silmeden içeriğini boşaltır; böylece izinler ve sahiplik korunur
    • $_ değişkeni, önceki komutun son argümanını yeniden kullanır
    • Örnek: mkdir -p /path/newdir && cd "$_"
    • set -e, set -u betik güvenliğini artıran seçeneklerdir
    • set -e, hata oluştuğunda hemen çıkar
    • set -u, tanımlanmamış bir değişkene başvurulursa bunu hata olarak işler
    • set -euo pipefail birleşimi daha güçlü bir koruma sağlar

Bash ve Zsh'de gelişmiş kısayollar ve özellikler

  • CTRL + R, komut geçmişinde ters yönde artımlı arama yapar
    • Anahtar kelime girildiğinde geçmişteki komutlar anında bulunup yeniden kullanılabilir
  • !!, önceki komutun tamamını yeniden çalıştırır
    • sudo !! ile bir önceki komutu yönetici yetkisiyle yeniden çalıştırabilirsiniz
  • CTRL + X, CTRL + E, o anda yazılmakta olan komutu varsayılan düzenleyicide (Vim, Nano vb.) açıp düzenledikten sonra çalıştırır
    • Zsh'de ek yapılandırma gerekir
    • fc komutu, önceki komutu $EDITOR içinde açıp düzenlemenin geleneksel yoludur
  • ESC + . veya ALT + ., önceki komutun son argümanını imleç konumuna ekler
    • Tekrar tekrar basıldığında daha eski komutların argümanları arasında dolaşır
    • !$, aynı işlevi etkileşimsiz biçimde yapar
  • Brace Expansion**, tekrar eden girişleri azaltan** süslü parantez genişletme özelliğidir

    • cp pf.conf{,.bak}cp pf.conf pf.conf.bak
    • mv filename.{txt,md}mv filename.txt filename.md
    • mkdir -p project/{src,tests,docs} ile birden çok dizin oluşturulur
    • Process Substitution <(command), komut çıktısını bir dosyaymış gibi ele alır
    • Örnek: diff <(sort file1.txt) <(sort file2.txt) ile geçici dosya oluşturmadan karşılaştırma yapılır
    • Globstar(**), alt dizinleri de kapsayacak şekilde dosyaları özyinelemeli olarak arar
    • Bash'te shopt -s globstar ile etkinleştirilir, Zsh'de varsayılan olarak etkindir
    • Örnek: ls **/*.js ile tüm alt klasörlerdeki JS dosyaları bulunur
  • CTRL + Z**,** bg**,** disown** birleşimi, süreçleri**arka planda çalıştırmayı ve shell'den ayırmayı sağlar

    • CTRL + Z ile duraklat → bg ile arka planda çalıştır → disown ile shell'den ayır
    • SSH bağlantısı kapansa bile süreç çalışmaya devam edebilir
    • command |& tee file.log, standart çıktıyı (stdout) ve standart hatayı (stderr) aynı anda pipe üzerinden iletir
    • |&, 2>&1 | ifadesinin kısa biçimidir
    • tee ile ekrana yazdırma ve log kaydetme aynı anda yapılabilir

Shell kullanımına dair temel tavsiyeler

  • Shell bir alet çantasıdır; ustalıkla kullanıldığında üretkenliği büyük ölçüde artırabilir
  • Tüm kısayolları bir anda öğrenmek yerine teker teker alışkanlık haline getirmek daha etkilidir
  • Tekrarlayan girişleri ve gereksiz yazmayı azaltarak iş akışını sadeleştirmek mümkündür
  • Alışınca terminal artık bir engel değil, kendi çalışma alanınız haline gelir

3 yorum

 
phoon 2026-03-30

Neredeyse hepsi Emacs keybinding’leri ama Emacs’tan neredeyse hiç söz edilmiyor; bunların bugünlerde ipucu gibi sıkça paylaşılmasına bakınca zamanın ne kadar değiştiğini hissediyorum. readline kütüphanesi zaten bu Emacs keybinding’lerinin hepsini uyguluyor. Herkesin IDE’lere geçmesinin üzerinden neredeyse 20 yıl geçmiş gibi ama hâlâ gdbtui gibi şeyler kullanan bir fosil olarak, iyi olan şeylerin gerçekten ölmediğini düşünüyorum.

 
GN⁺ 2026-03-27
Hacker News yorumları
  • Hayatımı değiştirdiğini hissettiğim an, yukarı ok tuşunu yeniden eşlediğim andı
    Artık tüm komutları tek tek dolaşmak yerine, yalnızca daha önce yazdığım karakterlerle başlayan komutlar arasında geziniyorum
    Örneğin tar - yazıp yukarı oka basınca, daha önce kullandığım tar seçenekleri hemen geliyor
    zsh'te şöyle ayarlanıyor

    bindkey "^[OA" up-line-or-beginning-search # Up  
    bindkey "^[OB" down-line-or-beginning-search # Down
    
    • CTRL+r kullanmaya başlayınca yukarı oku bir daha kullanmıyorsunuz
    • Bunun tam bir oyun değiştirici olduğunu düşünüyorum. bash'te benzerini yapmak için .inputrc dosyasına şunu ekleyin
      "\e[A":history-search-backward  
      "\e[B":history-search-forward
      
    • fish shell'de bu varsayılan davranış. Yazdığınız sözcüğe göre yukarı/aşağı oklarla komutlar arasında gezinebiliyor, alt+yukarı/aşağı ile yalnızca argümanlar arasında da dolaşabiliyorsunuz
    • Aynısı .inputrc içinde de yapılabiliyor
    • Ben yukarı/aşağı okları olduğu gibi bırakıp bunun yerine ctrl+p ve ctrl+n tuşlarını bu şekilde ayarlıyorum
  • Terminalde vim-mode açınca kullanım çok daha rahat oluyor
    Üç kelime önce hata mı yaptınız? 3bcw yeter
    Tam satırı silmek için cc, karmaşık düzenlemeler için v ile doğrudan (neo)vim içinde açabiliyorsunuz
    Zaten (neo)vim kullanıyorsanız yeni kısayollar ezberlemeniz gerekmediği için harika

    • Eski Emacs kılavuzundan bir bölüm aklıma geliyor. Karmaşık komutlar yerine fare ayarlarını önermeyi isterim
    • 20 yılı aşkın süredir (n)vim kullanıyorum ama shell'deki vi-mode'u sevmiyorum. Karmaşık komutlar gerektiğinde ctrl-x+e ile neovim'de açmak iyi bir orta yol
    • Ben de vim'i sık kullanıyorum ama shell'de kullanmıyorum. Onun yerine Emacs tarzı kısayolları (ctrl-a, ctrl-e vb.) macOS genelinde kullanıyorum. vim'in insert modunda emacs bağlarını desteklemesini isterdim
    • “readline vi-mode” diye bir özellik olduğunu ilk kez öğrendim. Biraz daha bakacağım
    • emacs modunun neden varsayılan olduğunu anlayamıyorum. Yeni bir shell açınca ilk yaptığım şey set -o vi yazmak oluyor
  • Birinin PATH'ine \# adlı bir script koyarak pipeline'ın bir kısmını yorum satırına alabilmesini ilginç buldum

    #!/bin/sh
    cat
    
    • Ben de benzer bir numara kullanıyorum. ~/bin/noglob dosyasına
      #!/bin/sh
      $*
      
      bunu koyarak bash içinden zsh script'lerini çağırırken noglob çakışmalarını önlüyorum
    • Ben parantezli yorumlar kullanıyorum. Script dokümantasyonu için güzel ama etkileşimli shell'de zahmetli. Yine de yaratıcı bir yorum yöntemi olduğu için hoşuma gidiyor
    • mycmd1 #| mycmd2 ile karşılaştırıldığında ne gibi bir avantajı olduğunu merak ediyorum
    • Bu gerçekten kullanışlı, ben de $PATH'ime ekleyeceğim
  • CTRL+W normalde önceki boşluğa kadar siler, bu yüzden /var/log/nginx/ yolunun tamamını siler
    Alt+Backspace ise alfabetik olmayan karaktere kadar siler
    Ancak tarayıcı sekmesini kapatma kısayoluyla çakışabildiği için dikkat etmek gerekiyor

    • Firefox v147 ile birlikte kısayol yeniden tanımlama özelliği geldi. İlgili bağlantı
    • macOS'ta GUI kısayolları ile terminal kısayolları ayrıldığı için böyle bir sorun yok. ⌘C, ⌘W gibi kısayollar terminalde de aynı şekilde çalışıyor
    • Benim ortamımda (fish + Alacritty) tam tersi çalışıyor. Yine de Ctrl-Shift-T ile kapatılan sekmeyi geri getirebildiğim için sorun olmuyor
    • $WORDCHARS ayarından / çıkarılırsa istenen davranış elde edilebiliyor (referans bağlantı)
    • Ctrl-Shift-T ile sekmeyi anında geri getirebilirsiniz
  • fzf shell integration ile geçmiş aramayı yükseltmeyi öneririm
    Demo videosu / resmî belge

  • Sık kullandığım bir numara var
    Uzun bir komut yazarken önce başka bir şey yapmam gerekirse, Ctrl-C ile iptal etmek yerine başına yorum işareti koyup çalıştırıyorum; böylece geçmişte kalıyor

    $ long_command  
    $ #long_command  
    $ stuff_1  
    $ stuff_2  
    $ #long_command  
    $ long_command
    
    • zsh'te "push-line-or-edit" bağlamasıyla yapılabiliyor, bash'te ise C-u ardından C-y ile benzeri elde edilebiliyor
    • Daha kolay yöntem, ctrl-u ile mevcut satırı kaydedip temizlemek, sonra ctrl-y ile yeniden yapıştırmak. zsh'te alt-q bunu otomatikleştirebiliyor
    • bash'te alt-shift-3 ile mevcut komutun başına # ekleyip yeni satıra geçebilirsiniz
  • LLM tarzı başlığı pek beğenmedim ama bazı ipuçları faydalı görünüyor, deneyeceğim
    brace expansion'ın sekme tamamlama ile çok iyi anlaşmaması üzücü. Son token'ı kopyalama ya da dosya uzantısını kaldırma gibi işlevler olsa iyi olurdu

    • Yazının üslubu da baştan sona LLM hissi veriyor. Mesela “The shell is a toolbox, not an obstacle course.” gibi cümleler
    • PowerShell'de de readline modu var; bu da WSL ile birlikte kullanırken geçiş yükünü azaltıyor
    • readline, bash'in bir parçası gibi çalıştığı için bu tip ipuçlarına shell özelliği demenin makul olduğunu düşünüyorum
  • zsh yapılandırmamda belirli komutları geçmişten hariç tutan bir fonksiyon kullanıyorum
    Örneğin --force gibi riskli komutların geçmişte kalmamasını sağlıyor

    function zshaddhistory() {
      emulate -L zsh
      if ! [[ "$1" =~ "(^ |--force|whatever)" ]] ; then
        print -sr -- "${1%%$'\n'}"
        fc -p
      else
        return 1
      fi
    }
    
    • Ben de benzer şekilde, kaydedilmesini istemediğim komutlara başına boşluk ekleyen bir alias tanımlıyorum
      unhist () { alias $1=" $1"; }
      unhist unhist
      unhist fzf
      unhist rghist
      
  • zsh'te global alias otomatik genişletme yapan bir snippet kullanıyorum
    Örneğin alias -G G='rg -s' olarak ayarlarsanız, command | G yazdığınızda otomatik olarak command | rg -s şeklinde genişler
    Boşluk tuşuna basınca otomatik genişler ve \alias olarak yazarsanız genişletmeyi atlar

  • .bashrc içinde yazdığım bir “deep cd” fonksiyonu var
    Verilen argümanı içeren ilk dizine otomatik olarak geçiyor

    dcd() {
      [ -z "$1" ] && return
      local dir
      dir=$(find . -type d -path "*$1*" -print -quit 2>/dev/null)
      [ -n "$dir" ] && cd "$dir"
    }
    

    Başta yavaş olur sanmıştım ama beklediğimden daha sık kullanır oldum

    • autojump'ın jc komutu ya da z, fzf gibi akıllı cd araçlarına da bakmak faydalı olabilir
 
phoon 2026-03-30

Yukarıda üst ok tuşunu yeniden eşleme işini Emacs kullanıcıları zaten c-r ile yapıyor. Özelleştirmenin sonu stok ayarlara dönmek.