- Ç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
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.
readlinekü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âgdbtuigibi şeyler kullanan bir fosil olarak, iyi olan şeylerin gerçekten ölmediğini düşünüyorum.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 geliyorzsh'te şöyle ayarlanıyor
.inputrcdosyasına şunu ekleyin.inputrciçinde de yapılabiliyorTerminalde vim-mode açınca kullanım çok daha rahat oluyor
Üç kelime önce hata mı yaptınız?
3bcwyeterTam satırı silmek için
cc, karmaşık düzenlemeler içinvile doğrudan (neo)vim içinde açabiliyorsunuzZaten (neo)vim kullanıyorsanız yeni kısayollar ezberlemeniz gerekmediği için harika
ctrl-x+eile neovim'de açmak iyi bir orta yolset -o viyazmak oluyorBirinin PATH'ine
\#adlı bir script koyarak pipeline'ın bir kısmını yorum satırına alabilmesini ilginç buldum~/bin/noglobdosyasına bunu koyarak bash içinden zsh script'lerini çağırırken noglob çakışmalarını önlüyorummycmd1 #| mycmd2ile karşılaştırıldığında ne gibi bir avantajı olduğunu merak ediyorum$PATH'ime ekleyeceğimCTRL+W normalde önceki boşluğa kadar siler, bu yüzden
/var/log/nginx/yolunun tamamını silerAlt+Backspace ise alfabetik olmayan karaktere kadar siler
Ancak tarayıcı sekmesini kapatma kısayoluyla çakışabildiği için dikkat etmek gerekiyor
$WORDCHARSayarından/çıkarılırsa istenen davranış elde edilebiliyor (referans bağlantı)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-Cile iptal etmek yerine başına yorum işareti koyup çalıştırıyorum; böylece geçmişte kalıyor"push-line-or-edit"bağlamasıyla yapılabiliyor, bash'te iseC-uardındanC-yile benzeri elde edilebiliyorctrl-uile mevcut satırı kaydedip temizlemek, sonractrl-yile yeniden yapıştırmak. zsh'tealt-qbunu otomatikleştirebiliyoralt-shift-3ile mevcut komutun başına#ekleyip yeni satıra geçebilirsinizLLM 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
zsh yapılandırmamda belirli komutları geçmişten hariç tutan bir fonksiyon kullanıyorum
Örneğin
--forcegibi riskli komutların geçmişte kalmamasını sağlıyorzsh'te global alias otomatik genişletme yapan bir snippet kullanıyorum
Örneğin
alias -G G='rg -s'olarak ayarlarsanız,command | Gyazdığınızda otomatik olarakcommand | rg -sşeklinde genişlerBoşluk tuşuna basınca otomatik genişler ve
\aliasolarak yazarsanız genişletmeyi atlar.bashrciçinde yazdığım bir “deep cd” fonksiyonu varVerilen argümanı içeren ilk dizine otomatik olarak geçiyor
Başta yavaş olur sanmıştım ama beklediğimden daha sık kullanır oldum
jckomutu ya da z, fzf gibi akıllı cd araçlarına da bakmak faydalı olabilirYukarıda üst ok tuşunu yeniden eşleme işini Emacs kullanıcıları zaten
c-rile yapıyor. Özelleştirmenin sonu stok ayarlara dönmek.