Bash Tricks
Bash bir yazılımcı için isviçre çakısı gibidir, ve bunu efektif kullanabilmek oldukça önemlidir. Bash’i efektif kullanabilmek için birbirinden güzel 15 bash tekniği.
Sihirli Parantezler⌗
1- Eğer bir dosyanın uzantısını değiştirmek istiyorsanız uzun uzun yazmak yerine, iki süslü parantez koyarak bu sorunu hemen ortadan kaldırabilirsiniz.
>> mv ./file.{html,md}
2- Veya bir sayı kümesi oluşturup bunu iterate edebilirsiniz.
>> echo {1..3}
# {START..END..INCREMENT} pattern
for i in {0..7..2}
do;
echo "for loop n: $i";
done
Klasör İşlemleri⌗
3- Genelde oluşturduğumuz dosyaların içine girmemiz gerekir. Ve bunu 2 komut girerek yapmaktansa kendimiz bir fonksiyon yazarak tek komuta indirebiliriz.
# bunu fonksiyonlarınızın olduğu dosyanın içine yapıştırın
mcd(){
mkdir -p "${1:?Need to specify an argument}" && cd "$1"
}
>> mcd test
4- Özellikle Java, C# gibi dillerle yazılan projelerde çok derin bir klasörleme olabiliyor ve bir süre sonra root
dizine
gitmek epeyce zorlaşabilir. Bunun için bir alias
tanımlayarak hızlı bir şekilde projelerinizin root dizinine
gidebilirsiniz.
# bunu alias'larınızı tanımladığınız dosyanın içine yerleştirin
# not: sadece git ile çalışılan projelerde çalışır
alias cdr='cd $(git rev-parse --show-toplevel)'
5- Bir önceki bulunduğunuz konumamı gitmek istiyorsunuz? O halde bir -
ile bu sorunu çözebilirsiniz.
>> cd -
Semboller⌗
6- Her yerde olduğu gibi değişkenler bash’dede önemlidir. $( )
sembolleri arasına yazdığınız karakterler bash’de
değişken olarak yorumlanır.
>> touch foo-$(date -I)
7- Bir işlem yapıcaksınız ve bu işlemin çok uzun süreceğini mi düşünüyorsunuz? O halde bu işlemi arka planda çalıştırmak
oldukça mantıklı olur. Komutunuzun sonuna &
işareti ekleyerek işlemin arka planda çalışmasını sağlayabilir ve işinize
kaldığınız yerden devam edebilirsiniz.
>> curl --upload-file ./hello.txt https://transfer.sh/hello.txt &
-- OUTPUT --
[1] 1564
[1] + 1564 done curl --upload-file ./default.md https://transfer.sh/default.md
# eğer işlem devam ederken, işlemi öldürmek isterseniz; kill [process id]
>> kill 1564
8- Örneğin üstteki örneğimizde ki gibi işlemi arka plana aldınız ve process id’sini unuttunuz. $!
en son yürüttüğünüz
arka plan işleminin ID’sini size vericektir.
>> sleep 60 &
[1] 1814
>> kill $!
[1] + 1814 terminated sleep 60
9- Son yazdığınız komutu tekrar mı yazmanız gerekiyor? O halde !!
yazarak son yazılan komutu tekrar alabilirsiniz.
NOT: Aslında Terminal emülatörlerinde ileri geri tuşları ile bu daha kolay bir şekilde yapılabiliyor fakat Bash Script yazıyorsanız böyle bir imkanınız olmaz ve son komutu bu şekilde almak zorunda kalırsınız.
>> echo Hello World
Hello World
>> !!
-- RESULT --
>> echo Hello World
10- Peki komutu değilde son parametrelerini almak istiyorsak? Bu durumda ise !$
yardımımıza yetişiyor.
>> echo "Hello World"
Hello World
>> test !$
-- RESULT --
>> test "Hello World"
# farklı kullanımlar;
# * `!:2-3` -> 2. ve 3. parametreyi alır
# * `!:2` -> sadece 2.parametreyi alır
Çeşitli⌗
11- Eğer Linux terminalinde hızlı bir şekilde takvim görmek istiyorsanız, cal
sizin için biçilmiş bir altın kaftandır.
# varsayılan olarak mevcut ayın takvimini gösterir
# Kullanımı: cal [[month] year]
>> cal
--- OUTPUT ---
June 2021
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
>> cal 01 2010
--- OUTPUT ---
January 2010
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
## daha fazla örnek; cal -4, cal 2018
12- watch
ile belirtilen komutu otomatik olarak tekrar tekrar çalıştırabilir ve sonuçları standart çıktıda
görüntüleyebilirsiniz, böylece zaman içindeki değişimini de izleyebilirsiniz. watch
Varsayılan olarak, komutu her iki
saniyede bir çalıştırılır, ancak bu -n secs
argümanı ile bu süreyi ayarlayabilirsiniz.
# mesela tüm nodejs process'lerini görüntüleyelim
>> watch "ps -e | grep node"
-- OUTPUT --
Every 2s: ps -e | grep node Sat Jun 12 21:00:00 2021
PID TTY TIME CMD
1167 pts/1 00:00:00 node
1189 pts/1 00:03:30 node
1224 pts/2 00:00:00 node
1235 pts/2 00:00:40 node
13- Bir çok kişi çok önemsemesede man
komutu da aslında oldukça önemlidir. man
komutu size terminal’de
çalıştrabileceğiniz herhangi bir komutun kullanım klavuzunu gösterir. (İsim, Özet, Açıklama, Seçenekler,
Çıkış Durumu, Dönüş Değerleri, Hatalar, Dosyalar, Versiyonlar, Örnekler, Yazarlar ve daha fazlası)
>> man xargs
Bash Script⌗
14- Diyelim ki bir projemizin kurulumu için bash script yazıyoruz ve insanlar yazdığımız bu script’i wget ile internetten indiriyorlar. Fakat burada düşünmemiz gereken bazı durumlar var, örneğin kullanıcı script’i internetten çekerken internet bağlantısı gidebilir veya kötü bir bağlantıya sahip olabilir, bunlara bağlı olarak script’in sadece bir kısmı gelebilir. Daha sonra kullanıcı bunu çalıştırırsa (veya direk inline çalıştıracak şekilde yazdıysa komutu) sadece var olan kısmı çalışır ve aslında kurulumu yapamamış olur, işleri biraz daha karmaşıklaştırmış olur.
Bunun önüne geçmek bir main
fonksiyon açıp, normalde fonksiyon dışına yazdığımız kodları bu fonksiyonun içerisine
yazıyoruz. En son satırda da bu fonksiyonu çağırıyoruz. Bu sayede kullanıcı eğer script’in tamamını indirmediyse main
fonksiyonu ve ona bağlı olarak çalışan fonksiyonlar da çalışmaz.
// Other Functions
main() {
// Your Codes
}
main "$@"
Klavye Kısayolları⌗
15- İşinize yarıyacak bazı popüler terminal kısayolları.
- Ctrl + R: Komut geçmişinizde arama yapar
- Ctrl + E: İmleci en başa götürür
- Ctrl + A: İmleci en sona götürür
- Ctrl + U: İmlecin solundaki kısmı siler
- Ctrl + K: İmlecin sağındaki kısmı siler
- Ctrl + P: Komut geçmişinizde geri gider
- Ctrl + L: Terminal ekranınızı temizler
- Ctrl + D: Eğer aktif bir process’in içerisinde iseniz onu kapatır, değilseniz ve terminal’de herhangi bir şey yazılıysa imleçten sonraki karakteri siler, eğer hiçbişe yazılı değilse kullanıcıdan veya bulunduğun terminal’den çıkış yapar
Son⌗
Umarım bu yazıyı okuyarak harcadığınız zamanı, buradan öğrendikleriniz ile telafi edebilirsiniz. Sonraki yazılarda görüşmek dileğiyle.