tr | en
15
Kas
2013
Komut Satırında Zaman Kazandıran İpuçları
Yazar: Janos Gyerik   |   Kategori: İpucu
Basit fakat sizi komut satırında şimşek gibi hızlı yapacak kadar etkili ipuçları bu yazıda.

                                                                                                                       

[Özgün yazı: www.linuxjournal.com/content/time-saving-tricks-command-line]

Bir arkadaşımın beni Linux'la tanıştırmasını, ardından komut satırında çalışırken komutların ve dosya yollarının tamamını yazmama gerek kalmadan sadece birkaç karakter yazınca Tab tuşunun kalanı tamamladığını göstermesini hatırlıyorum. Oldukça etkileyiciydi. Bence Tab tuşu ile otomatik tamamlama özelliğini herkes seviyor, çünkü neredeyse kabukta geçirilen her an kullanılan bir özellik. Zamanla birçok başka kısayol ve zaman kazandıran ipuçları keşfettim, bunların birçoğunu da Tab tuşu ile otomatik tamamlama özelliği kadar sık kullanıyorum.

Bu yazıda, sıklıkla karşılaşılabilecek durumlarda kullandığım ve benim için büyük farklar yaratan bazı ipucu setlerinin altını çizeceğim:

  • screen oturumlarıyla çalışmak: Temel özellikleri bilmeniz, epey büyük bir yol almanızı sağlayacak.
  • Komut satırında düzenleme yapmak: Komut satırında hızlı biçimde gezinmek ve düzeltmeler yapmak
  • less komutunu kullanarak dosyaları ya da man sayfalarını görüntülemek
  • Gerekli log parçalarının ya da bazı olayların tetiklediği alarmların kendi kendinize e-postayla gönderilmesini sağlamak

Yazıyı okuduğunuz sırada bir terminal ekranının açık olması en iyisi olur, böylelikle ipuçlarını aynı anda deneyebilirsiniz. Yazıda geçen bütün ipuçlarının Linux, UNIX ya da benzeri sistemlerde herhangi bir konfigürasyona ihtiyaç duyulmadan çalışması gerekir.

 

Screen Oturumlarıyla Çalışmak

Screen konusu daha önce Linux Journal tarafından ele alınmıştı(kaynaklar kısmına göz atın), fakat basitçe ifade etmek gerekirse, screen size bir terminal uygulamasının içinde birden fazla "pencere" kullanma imkanı sağlar. En iyi kısmı, çalışmakta olan bu pencerelere istediğiniz zaman bağlanabilmek ya da istediğiniz anda pencereden ayrılabilmektir. Böylelikle daha sonra geri döndüğünüzde tam olarak kaldığınız yerden işinize devam edebilirsiniz. Özellikle bir sunucuya uzaktan eriştiğinizde en kullanışlı araçlardan biridir.

Neyse ki, screen'in sağladığı avantajları kullanabilmek için onun uzmanı olmanız gerekmez. Onun en kullanışlı özelliğinden faydalanabilmek için sadece birkaç anahtar özelliği bilmeniz gerekir, onları da şöyle listeleyebiliriz:

  • screen -R projectx: "projectx" ismiyle oluşturulmuş olan screen oturumuna yeniden bağlan ya da daha önce oluşturulmamışsa bu isimde bir oturum oluştur.
  • Ctrl-a c: Yeni bir pencere oluştur
  • Ctrl-a n: Bir sonraki pencereye geç
  • Ctrl-a p: Bir önceki pencereye geç
  • Ctrl-a 0: İlk pencereye geç. İkinci pencereye geçmek içinse Ctrl-a 1 kullanılır, sonrakiler de bu sırayla devam eder.
  • Ctrl-a w: Pencerelerin listesini görüntüle
  • Ctrl-a d: Bağlı olunan screen penceresinden ayrılmayı sağlar
  • screen -ls: Screen oturumlarının listesini görüntüle

 

Not: Yukarıdaki listede, Ctrl-a c ifadesi, Ctrl tuşuna basılı durumdayken a tuşuna basılmasını, ardından c tuşuna basılması anlamına gelir. Ctrl-a ikilisi komut anahtarı olarak adlandırılır, tüm screen komutları bu anahtar tuş ikilisi ile başlar.

Şimdi size tüm bunları gerçekçi bir örnek bağlamında göstereyim: Uzaktan eriştiğim yer sağlayıcı sunucumda yer alan bir Django web sitesini debug edeceğim, bunun için aşağıdaki adımları gerçekleştireceğim.

  • Konfigürasyon dosyasını düzenlemek
  • Django operasyonlarını gerçekleştirmek için bazı komutları çalıştırmak
  • Web sitesini yeniden başlatmak
  • Web sitesinin loglarını görüntülemek


Elbette, bunların her birini tek tek de yapabilirdim, fakat her biri için açık ayrı bir bir pencerenin olması çok daha pratik. Her biri için gerçek birer terminal oturumu kullanabilirdim, fakat her ihtiyaç duyduğumda her biri için yeni bir terminal oturumu açmak gibi bir iş bıktırıcı ve yavaş olur. Screen, bunu çok daha hızlı ve kolay biçimde yapabilir.

Screen'i başlatmak: Screen oturumunu başlatmadan önce, konsolda çalışmalarınızın çoğunu yapacağınızı düşündüğünüz dizine geçmeniz iyi olur. Çünkü screen oturumu içinde açılacak olan tüm pencereler, screen oturumunu başlattığınız sırada bulunduğunuz dizinde açılacak. Benim örneğimde, öncelikle işlerimi yapacağım Django projesinin dizinine geçiyorum, böylelikle screen oturumu içinde pencereleri açtığımda gerekli dosyalar doğrudan önümde olacak.

Screen'i başlatmanın birden fazla yolu var, ben şunu öneririm:

screen -R web_sitem

Bu komutu ilk çalıştırdığınızda, "websitem" adında bir screen oturumu yaratır. Aynı komutu daha sonra kullandığınızda ise bu isimle oluşturmuş olduğunuz screen oturumuna yeniden bağlanmanızı sağlar(Bu komuttaki -R parametresi "reattach", yani oturuma yeniden bağlanmaya karşılık gelir).

Pencereler Oluşturmak: Şimdi screen'deyim, diyelim ki Django web sitemin konfigürasyon dosyasını düzenlemeye başlıyorum:

vim mysite/settings.py

Varsayalım bazı değişiklikler yaptım ve şimdi siteyi yeniden başlatmak istiyorum. Siteyi yeniden başlatacak komutu çalıştırabilmek için vim'i kapatabilir ya da arkaplanda çalışmaya yollayabilirdim, fakat tahminimce dosyada başka değişiklikler de yapmam gerekecek. Bu durumda screen komutu Ctrl-a c kombinasyonunu kullanarak yeni bir pencere oluşturmak çok daha kolay.

O anda yapmakta olduğunuz şeyden başka bir iş yapmaya başlamanız gerektiğinde, yeni bir pencere oluşturmak gayet kolay. Bu, özellikle komutları farklı dizinlerde çalıştırmanız gerektiğinde çok kullanışlı. Örneğin, /uzun/bir/dosya/yolu/betikler gibi bir dizinde kullandığınız betikler, /baska/bir/uzun/dosya/yolu/loglar gibi bir dizinde de log dosyalarınız varsa, bu iki dizinin arasında sürekli gidip gelmektense, iki dizin için de birer pencereyi açık tutup çalışabilirsiniz.

Bu örnekte, önce konfigürasyon dosyalarına göz atarak işe başladım. Arıdından, web sitesini yeniden başlatmak istedim. Sonra da bazı Django komutlarını çalıştırmak ve son olarak bazı loglara göz atmak istedim. Debug süresince bütün bu işlemleri defalarca yapmam gerekebilir. Dolayısıyla, her bir işlem için ayrı bir pencere oluşturmak mantıklı geliyor.

Yeni bir pencere oluşturmanın maliyeti oldukça düşük, bu yüzden hiç düşünmeden yapabilirsiniz. O anki işinizi bölmeyin, Ctrl-a c ile yeni bir pencere patlatın ve keyfinize bakın!

Pencereler arasında geçiş yapmak: Screen'de oluşturduğunuz pencereler sıfırdan başlayarak numaralandırılır. Açık bir pencereye, numarasını kullanarak geçiş yapabilirsiniz, örneğin açılmış ilk pencereye geçiş yapmak için Ctrl-a 0, ikinci pencereye geçiş yapmak içinse Ctrl-a 1 kısayolunu kullanabilirsiniz. Duruma göre, bir önceki ya da bir sonraki pencereye geçiş yapmak için Ctrl-a n veya Ctrl-a p kısayolları da kullanışlı olabilir.

Açık Pencerelerinizi Listelemek: Eğer bir süre sonra açık olan pencerelerden hangisinde olduğunuzu takip edememeye başlarsanız, Ctrl-a w ya da Ctrl-a " kısayolları ile açık pencereleri listeleyebilirsiniz. Bu kısayollardan ilki, screen'in durum çubuğunda (konsolun alt kısmında) acık pencereleri listelerken, bulunduğunuz pencereyi * işareti ile işaretli olarak gösterir. İkincisi ise, açık pencereleri daha kullanışlı bir menü gösterimi şeklinde sunar.

Bir oturumdan çıkmak ya da oturuma yeniden bağlanmak: Screen'in en çok zaman kazandırıcı özelliklerinden birisi, mevcut oturumlara yeniden bağlanabilmek. Çalışmakta olduğunuz screen oturumundan Ctrl-a d kısayolu ile temiz bir şekilde ayrılabilirsiniz, ama bunu yapmak zorunda değilsiniz. Basitçe terminal penceresini kapatırsanız da screen oturumundan ayrılmış olursunuz.

Screen oturumlarıyla ilgili en müthiş şey, oturumdan hangi yolla ayrılmış olursanız olun tekrar bağlanabilmenizdir. Gün sonunda uzaktan eriştiğiniz sunucuya bağlantınızı sonlandırmadan lokal bilgisayarınızı kapatsanız bile, ertesi gün geri döndüğünüzde, screen oturumunu başlatırken kullandığınız komutun aynısını, yani bizim örneğimizde screen -R web_sitem komutunu kullanarak screen oturumunuza geri dönebilirsiniz.

Farklı amaçlar için çoklu screen oturumları çalıştırmanız da mümkün. Çalışmakta olan screen oturumlarının tümünü şu komut ile listeleyebilirsiniz:
screen -ls

Eğer bir screen oturumunu sonlandırmadan, beklenmedik şekilde bağlantınızı kopardıysanız, bazen sizin hâlâ bağlı durumda olduğunuzu düşünebilir, ki bu durumda alışıldık "screen -R oturum_adı" komutuyla yeniden aynı oturuma bağlanmanıza izin vermez. Böyle bir durumda, mevcut tüm bağlantıları açık oturumlardan ayrılmaya zorlayacak -D parametresini kullanabilirsiniz:
screen -R web_sitem -D


Screen hakkında daha fazlasını öğrenmek: Daha fazla şey öğrenmek istiyorsanız, man sayfasına ve bu yazının Kaynaklar bölümüne göz atın. Kısayolların listesini görüntüleyebileceğiniz, screen'in dahili kopya sayfasına ise Ctrl-a ? kısayolu ile kolaylıkla göz atabilirsiniz.

Screen'in rakiplerinden birinden de bahsetmeliyim: tmux. Bu yazı için screen'i seçtim çünkü tecrübelerime göre, kontrol edemediğim sistemlerde daha erişilebilir. Yukarıda ele aldığım her şeyi tmux ile de yapabilirsiniz. Uzaktan erişeceğiniz sistemde hangisi bulunuyorsa onu kullanabilirsiniz.

Son olarak belirtmem gereken şu ki, screen'i en çok kullanacağınız durum, mesela bir SSH oturumuyla uzaktan eriştiğiniz bir sistemde çalışmanızdır. Lokal sistemde çalışırken, birden fazla sekme ile bir terminal penceresinde çalışmak muhtemelen daha pratik olacaktır. Tamı tamına aynı şey olmamakla birlikte, birbirine oldukça yakın şeyler.


Komut satırında düzenleme yapmak

Oldukça pratik olan birçok kısayol, komut satırında sizi çeşitli açılardan daha hızlı ve verimli hale getirebilir:

  • Geçmişte kullandığınız uzun ve karmaşık bir komutu bulup tekrar çalıştırmak ya da düzenleyip çalıştırmak
  • Silme(backspace) tuşunu kullanarak silip metni tekrar yazmaktan çok daha hızlı biçimde metni düzenlemek
  • Sola ve sağa ok tuşlarını kullanmaktan çok daha hızlı biçimde satır içinde hareket edebilmek


Geçmişten Bir Komutu Bulmak: Yakın zamanda çalıştırdığınız bir komutu tekrarlamak istiyorsanız, komutu bulana kadar birkaç kez yukarıya ok tuşuna basmanız yeterince kolay olabilir. Fakat aradığınız komutu birkaç adım önce değil de çok daha önce kullandıysanız bu yöntem epey kullanışsız olur. Özellikle aradığınız bir komutu, komutun içinde geçen bazı parçaları kullanıp Ctrl-r kısayoluyla bulmak genelde çok daha pratik bir yoldur.

Geçmişte bir komutu aramak için, Ctrl-r tuşlarına basın ve aradığınız komuttan hatırladığınız bir parçayı yazmaya başlayın. Yazdığınız sürece, yazdığınız komut parçacığına en uygun ve en son kullanılmış olan komut konsolda gösterilir. Bu, artırımlı bir aramadır, yani siz harfleri yazmayı ya da silmeyi sürdürdükçe aramanızla uyuşan komut dinamik olarak değişecektir.

Bir örnekle deneyelim. Diyelim ki aşağıdaki komutları dün çalıştırdım; yani kullandığım komutların tarihçesinde hâlâ yer alıyorlar ancak yukarı ok tuşuyla kolaylıkla erişebileceğim bir yakınlıkta değiller.

...
cd ~/dev/git/github/bashoneliners
. ~/virtualenv/bashoneliners/bin/activate
./run.sh pip install --upgrade django
git push beta master:beta
git push release master:release
git status

...

Diyelim ki virtualenv'i tekrar aktifleştirmek istiyorum. Bu komutu tekrar yazmak can sıkıcı, çünkü Tab tuşu ile otomatik tamamlama özelliğini kullandığım halde, komut yolunun her bölünüşünde klavyeden en azından birkaç karaktere basmam gerekecek. Bunun yerine, Ctrl-r tuşlarına basıp "activate" sözcüğünü yazmaya başlamam çok daha kolay.

Biraz daha karmaşık bir örnek olarak, diyelim ki bir git push komutunu tekrar çalıştırmak istiyorum, fakat hangisi olduğunu tam olarak hatırlayamıyorum. Ctrl-r tuşlarına basıyorum ve "push" yazmaya başlıyorum. Bu durumda en son kullandığım komutla eşleşecek ve o komut görüntülenecek, fakat benim aradığım ondan bir önceki. Aradığım komutu doğrudan bulmamı sağlayacak başka bir parçasını hatırlayamıyorum. Böyle bir durumda çözüm, Ctrl-r tuşlarına yeniden basmak, böylelikle arama için yazdığım aynı komut parçacığıyla eşleşen bir sonraki komut görüntülenecek.

Bu özellik, sadece klavyeden komutu yazma sürecini değil, aynı zamanda düşünme zamanını da azalttığı için son derece kullanışlı. Birçok boru(pipe) ile iç içe bir seri olarak kullandığınız sed, awk, Perl gibi araçları kullanarak bir metin dosyasını işlediğiniz o tek satırlık uzun komutları; bir sürü parametresi ve filtresiyle bir rsync komutunu; ya da "for" ve "while" kullandığınız karmaşık döngüleri hayal edin. Tüm bunları sadece Ctrl-r tuşlarına basıp hatırladığınız birkaç karakterini klavyeden girerek komut satırınıza tekrar getirebilirsiniz.

Not edilmesi gereken birkaç noktayı daha belirtmek gerekirse;

  • Arama sırasında büyük-küçük harf duyarlılığı aktiftir.
  • Arama işlemini Ctrl-c ile sonlandırabilirsiniz.
  • Geçmişten bulduğunuz bir komutu çalıştırmadan önce düzenlemek için, klavyedeki yön tuşlarından herhangi birine basabilirsiniz.


Bazı yeni alışkanlıklar edinmeniz halinde bu ipucu çok daha kullanışlı olabilir. Örneğin, sık kullandığınız bir dosya yolunu komut satırında girerken, bulunduğunuz dizine göre konumunu belirtmek yerine kök dizinden itibaren tam yolunu belirtmek. Bu sayede, yazdığınız komut bir sonraki sefer komut satırında hangi dizinde olursanız olun yeniden kullanılabilir.

Hızlı biçimde gezinmek ve düzenlemek: Komut satırında basit düzeltme işlemi, düzelteceğiniz komutun üzerinde yön tuşlarıyla gezinmeyi ve karakterleri klavyedeki Backspace ya da Delete tuşlarıyla silmeyi gerektirir. Üzerinden atlayıp ilerlenecek ya da silinecek birkaç karakterden daha fazla bir düzeltme işlemi için bu temel tuşları kullanmak oldukça yavaş olur. Aynı işlemleri, el altında bulunan birkaç ilginç kısayolu kullanarak çok daha hızlı biçimde yapabilirsiniz:

  • Ctrl-w: Geriye doğru, ilk boşluk karakterine kadar olan metni kesmeye yarar.
  • Esc-Backspace: Geriye doğru bir sözcük kesmeye yarar.
  • Esc-Delete: İleriye doğru bir sözcük kesmeye yarar.
  • Ctrl-k: Bulunulan pozisyondan satırın sonuna kadar olan metni kesmeye yarar.
  • Ctrl-y: Kesilmiş olan en son metni yapıştırır.


Bu şekilde parça parça silme işleminin daha hızlı olmasının yanı sıra bir de bonusu vardır: Bu şekilde silinen metin bir kenara kaydedilmiş olur, böylelikle daha sonra ihtiyaç duyulduğunda yapıştırılıp kullanılabilir. Aşağıdaki komut dizisini örnek olarak ele alalım:

git init --bare /path/to/repo.git
git remote add origin /path/to/repo.git

İkinci komutun son kısmında ilkiyle aynı dosya yolunun kullanıldığına dikkat edin. Bu yolu ikinci kez yazmaktansa, aşağıdaki tuş dizisini kullanarak ilk komuttan kopyalayıp yapıştırabilirsiniz:

  1. İlk komutu tekrar görüntülemek için yukarı ok tuşuna basın.
  2. /path/to/repo.git kısmını kopyalamak için Ctrl-w tuşlarına basın.
  3. Ekranda görüntülenen güncel komutu iptal etmek için Ctrl-c tuşlarına basın.
  4. Klavyeden git remote add origin yazıp ardından kalanını yapıştırmak için Ctrl-y tuşlarına basın.

Düzeltme kısayollarının bazıları, komut satırında hareket etmeyi kolaylaştıran aşağıdaki kısayollarla birlikte kullanıldıklarında çok daha kullanışlı olurlar:

  • Ctrl-a: Satırın başına git
  • Ctrl-e: Satırın sonuna git
  • Esc-b: Geriye doğru bir sözcük atla
  • Esc-f: İleri doğru bir sözcük atla

Uzun bir komutun ilk sözcüklerini yanlış yazdığınızda satırın başına gitmek oldukça kullanışlıdır. Sola ve sağa yön tuşlarıyla gidebileceğinizden çok daha hızlı bir biçimde satırın başına gidebilirsiniz.

Uzun bir komutun ortasındaki bazı kısımları düzeltecekseniz, ileri ve geriye doğru atlamalar çok pratiktir.


Tümünü birleştirmek: Bu küçük ipuçlarını öğrenmenin yolu, bazı eski verimsiz alışkanlıklardan vazgeçmekten geçer:

  • Komut satırını Backspace tuşu ile temizlemeyin. Onun yerine Ctrl-c kullanın.
  • Uzun parametreleri Backspace tuşu ile silmeyin. Onun yerine Ctrl-w kullanın.
  • Satırın başına ve sonuna giderken sola ve sağa ok tuşlarını kullanmayın. Ctrl-a ve Ctrl-e kısayolları ile atlayın.
  • Uzun terimler arasında yön tuşlarını kullanarak hareket etmeyin. Üzerlerinden Esc-b ve Esc-f ile atlayın.
  • Çok da yakın olmayan bir geçmişte kullandığınız bir komutu bulmak için yukarı ok tuşuna 20 kere basmak yerine Ctrl-r kısayolunu kullanın.
  • Aynı satırda bir ifadeyi ikinci kez kullanmanız gerekiyorsa ifadeyi uzun uzun yazmak yerine Ctrl-w ile kopyalayın, Ctrl-y ile istediğiniz kadar kullanın.

Bir kere kullanmaya alışırsanız, bu kısayolları değişik koşullarda harmanlayıp kullanabileceğiniz ve uzun uzun yazmayı azaltacağınız birçok farklı durumu görmeeye başlayacaksınız.


Komut satırında düzenleme yapmak konusunda daha fazla bilgi edinmek: Eğer burada anlatılanlardan fazlasını öğrenmek istiyorsanız, bash'in man sayfasını görüntüleyin (man bash) ve "READLINE" sözcüğünü aratın, "Commands for Moving" ve "Commands for Changing Text" başlıklı kısımlara göz atın.


less Komutunu Kullanarak Dosyaları ya da man Sayfalarını Görüntülemek

less komutu, dosyaları görüntülemek için oldukça pratik bir araç, aynı zamanda birçok modern sistemde man sayfalarını görüntülemek için kullanılan ön tanımlı uygulama. Üstelik sizi hızlandırıp daha verimli olmanızı sağlayacak ve epeyce pratik olan birçok kısayol barındırıyor:

  • İleriye ve geriye doğru arama yapmak
  • Metinde hızlı biçimde gezinmek
  • İşaretler bırakmak ve o işaretlere atlayabilmek


İleriye ve Geriye Doğru Arama Yapmak: Bir metnin içinde bulmak istediğiniz ifadeyi ileriye doğru aramak için / işaretinin ardından arayacağınız ifadeyi yazıp aratabilirsiniz. Geriye doğru aramak için ise / yerine ? kullanabilirsiniz. Aranacak olan ifade basit bir düzenli ifade(regex) de olabilir. Eğer terminal uygulamanız destekliyorsa, arama sonuçları gösterilirken metin rengi ve arkaplan rengi ters çevrilerek bulunan ifadeler öne çıkarılacaktır.

Arama sonuçları arasında ilerleyip bulunan bir sonraki ifadeye atlamak için N tuşuna basabilirsiniz. İleri ve geri atlamaların yönü, aramanın yönüne göredir. Yani, / işaretiyle ileri doğru arama yaptığınızda bulunan sonuçlar arasında ilerlemek için n tuşuna bastığınızda metin içinde ileriye doğru atlarsınız, ? işaretiyle geriye doğru arama yaptığınızda ise bulunan sonuçlar arasında ilerlemek için n tuşuna bastığınızda metin içinde geriye doğru atlarsınız.

Eğer vim metin düzenleyicisini kullanırsanız, evinizdeymiş gibi rahat edebilirsiniz çünkü bu kısayollar vim'de de aynı şekilde çalışır.

Arama işlemi ön tanımlı olarak büyük-küçük harf duyarlıdır, eğer less'i çalıştırırken -i parametresini kullanmadıysanız.  less'i çalıştırdıktan sonra da, dosya okunurken, -i tuşlarına basarak büyük-küçük harf duyarlılığı modları arasında geçiş yapabilirsiniz.


Metinde Hızlı Biçimde Gezinmek: Metin üzerinde hızlı biçimde gezinmenizi sağlayacak bazı kısayollar burada.

  • g: Dosyanın başına atla
  • G: Dosyanın sonuna atla
  • Boşluk tuşu: Bir pencere boyu kadar ilerle
  • b: Bir pencere boyu kadar geriye git
  • d: Yarım pencere kadar aşağı git
  • u: Yarım pencere kadar yukar git


İşaretler bırakmak ve o işaretlere atlamak: Aynı dosyanın içinde iki ya da daha fazla nokta arasında art arda atlamalar yapmanız gerektiğinde işaretçiler son derece kullanışlıdır.

Örneğin, başlangıcına yakın bir konumda bir servis başlatma bilgisi, orta kısımlarında ise bazı hataların yazıldığı bir log dosyasını görüntülediğinizi varsayalım. Neler olup bittiğini anlayabilmek için bu iki kısım arasında atlamalar yapmanız gerekir, fakat arama işlevini kullanarak ilgili parçaları bulmaya çalışmak, benzer sonuçlar arasından ilgili parçayı bulmaya çalışmak oldukça verimsiz olacaktır.

Uygun çözüm, bu iki lokasyona birer işaret yerleştirmektir, böylelikle doğrudan ikisinin arasında atlamalar yapabilirsiniz. İşaretçiler vim metin düzenleyicisinde de benzer şekilde çalışır: Bulunduğunuz konumu işaretlemek için önce m tuşuna, ardından da o işarete isim olarak vermek istediğiniz herhangi bir küçük harfe basabilirsiniz. Sonrasında ne zaman bu konuma dönmeye ihtiyaç duyarsanız, ' tuşuna basmanızın ardından yine aynı küçük harfe basmanız yeterli olacaktır. Benim örneğimde, servisin başlatıldığı konumu mb tuşlarına basark, hatanın görüldüğü konumu ise mh tuşlarına basarak işaretliyorum. Böylelikle 'b ve 'h tuşlarına basarak iki konuma da kolaylıkla atlayabileceğim. İşaret harfleri de baktığım konumlarla ilgili aklımdaki sözcüklerin ilk harflerinden (başlangıç ve hata) seçtim ki kolaylıkla hatırlayabileyim.

Kısayollar hakkında daha fazla bilgi edinmek: Daha fazlasıyla ilgileniyorsanız, less komutu için man sayfasını görüntüleyin. less'in dahili kopya sayfasına ise h tuşuna basarak kolaylıkla erişebilirsiniz.

 

Kendinize E-posta Göndertmek

Uzaktan erişim yoluyla bir sunucuda çalışırken, veriyi bilgisayarınıza çekmek oldukça zahmetli olabilir; örneğin bilgisayarınız bir NAT arkasında olabilir ve sunucunuz rsync ya da scp gibi araçlarla bilgisayarınıza ulaşamaz. Böyle durumlarda hızlı bir alternatif, veriyi e-posta yoluyla yollamak olabilir.

Kendinize e-posta göndertmenizin gerekeceği başka bir güzel senaryo ise, gerçekleşmesini beklediğiniz bir olay için bir alarmın tetiklenmesi ve e-posta gönderilmesidir. Örneğin kritik bir servisin ya da sistem bileşeninin çökmesi durumunda bir e-posta gönderilmesini tetikletebilirsiniz.

Bir Log Parçasını E-posta ile Göndertmek: Diyelim ki uzaktaki sunucunuzda bir servisin çökmesine neden olan hatanın logunu buldunuz ve bunu kendi bilgisayarınıza hızlıca kopyalamak istiyorsunuz. Dahası, bu log sayfalarca uzunlukta, yani terminal penceresinden kopyalayıp yapıştırmak epeyce zahmetli olacak. İlgili log parçalarını head, tail, grep gibi komutları kullanarak dışarı çıkardınız. Bu log parçasını bir dosyaya kaydedip rsync komutunu çalıştırarak bilgisayarınıza kopyalayabilirsiniz, aynı zamanda şu komutu çalıştırarak pipe yardımıyla logları basitçe kendinize e-posta ile göndertebilirsiniz:

mailx -s 'error logs' me@example.com

Sisteminize bağlı olarak, mailx komutu belki farklı olabilir, fakat parametreler büyük olasılıkla aynıdır: -s parametresi e-postanıza konu eklemenizi sağlar(zorunlu değildir), kalan argüman kısmı hedef e-posta adresleridir, komutun aldığı standart input ise iletinin gövdesi olarak kullanılır.

Uzun Bir İşlemin Ardından E-posta Alarmı Tetiklenmesi: Büyük bir dosyayı kopyalamak gibi uzun sürecek bir işlemi gerçekleştiriyorsanız, işlemin bitmesini beklemek ve bitip bitmediğini kontrol etmek can sıkıcı bir hal alır. Bu bekleyiştense, işlem bittiğinde kendinize bir e-posta gönderilmesini tetiklemek daha iyi. Örneğin:

uzun_suren_islem; date | mailx -s 'islem tamamlandi' me@example.com

Böylelikle, uzun süren işleminiz tamamlandığınızda, e-posta komutu çalışır. Bu örnekte, e-posta gövdesi basitçe date komutunun çıktısı olacaktır. Gerçek bir durumda, muhtemelen yapılan işlemle daha ilgili bir komutun çıktısını gönderebilirsiniz - mesela kopyalama işleminin yapıldığı dizinde ls -lh komutunun çıktısını ya da aşağıdaki gibi çoklu komutların çıktısını:

uzun_suren_islem; { df -h; tail some.log; } | mailx -s 'islem tamamlandi' me@example.com

Herhangi Tür Bir Olay İçin E-posta Tetiklenmesini Sağlamak: Hiç aşağıdaki durumlardan birini yaşadınız mı?

  • Çakılan sunucunuzun tekrar çevrimiçi olmasını beklemek
  • Bir kullanıcının test edeceği yeni uygulama özelliğinizin tetikleyeceği özel bir log için sunucu log dosyasını tail ile takip etmek
  • Geliştirme ekibinin güncellenmiş bir .jar dosyasını deploy etmesini beklemek

Ekrana gözlerinizi dikip beklemekten ya da beklediğiniz olayın gerçekleşip gerçekleşmediğini sürekli kontrol etmektense, tek satırlık şu komutu kullanabilirdiniz:

while :; do date; CONDITION && break; sleep 300; done; MAILME

Bu, aslında gerekli bir sonsuz döngü. Ortada yer alan CONDITION, uygun zaman geldiğinde döngüden çıkılmasını ve böylelikle e-posta komutunun çalışmasını sağlayacak. Döngünün hâlâ aktif olduğunu takip edebilmek için döngü içinde tarihi yazdırıyorum ve her çevrimde 5 dakikalık(300 saniye) bir uykuya gönderiyorum ki çalıştığım makinaya aşırı yüklenme olmasın.

CONDITION herhangi bir kabuk komutu olabilir, bu komutun çıkış kodu da döngüden çıkılıp çıkılmayacağını belirler. Yukarıda belirtilenlere uygun olarak, CONDITION yerine aşağıdakileri yazabilirsiniz:

  • ping -c1 sunucuX: sunucuX'e tek bir ping yollar. Yanıt alırsa, ping komutu başarıyla çıkış yapacaktır ve döngüyü sonlandıracaktır.
  • grep aranacak_ifade /log/dosyasi/yolu/sunucu.log: Log dosyasında istediğiniz bir ifadeyi aratır, eğer bu ifade dosyada bulunursa grep komutu başarıyla sonlanacaktır ve döngüyü sonlandıracaktır.
  • find /jar/dosyası/yolu/jardosyasi -newer /jar/dosyası/yolu/jardosyasi.marker: Bu komutun işlevsel olması için, sonsuz döngünün başlatılmasından önce aşağıdaki gibi bir komutla işaretlenmiş bir dosya oluşturmuş olmanız gerekir:

touch -r /jar/dosyası/yolu/jardosyasi.marker

Yani, izlemek istediğiniz jar dosyasıyla aynı zaman damgasına sahip bir dosyayı önceden oluşturmuş olmalısınız. Orijinal dosya güncellendikten sonra find komutu başarıyla tamamlanacak ve döngüyü sonlandıracak.

Kısacası, uzun süren bir işlemin ya da harici bir olayın bitmesi için oturup beklemeyin. Bir sonsuz döngü kurun ve görmeniz gereken ilginç bir durum olduğunda size e-posta ile alarm gönderilmesini sağlayın.

 

Sonuç

Bu makaledeki ipuçlarının tümü Linux, Unix ve benzeri sistemlerde çalışması gereken standart özelliklerdir. Burada, işinizi yaparken size büyük kolaylık sağlayacak özelliklerinin çok küçük bir kümesini vurgulayabildiğim her bir alana yüzeysel olarak değinebildim. Kullanmaya bir kez alıştığınızda, bu küçük hileler sizi kabukta en az klavye kullanımıyla oradan oraya zıplayan gerçek bir ninja yapacak.

 

Kaynaklar

Konsolda şu komutları çalıştırın:
man screen
man bash
(ardından "READLINE", "Commands for Moving" ve "Commands for Changing Text" ifadelerini arayın)
man less

Janos Gyerik'in Komut Satırında Zaman Kazandıran İpuçları ile ilgili konuşması:
https://speakerdeck.com/janosgyerik/time-saving-tricks-on-the-command-line

"Power Sessions with Screen", Adam Lazur, Linux Journal, Ocak 2013:
http://www.linuxjournal.com/article/6340

"Status Messages in Screen", Kyle Rankin, Linux Journal, Mart 2011:
http://www.linuxjournal.com/article/10950

“Transfer Your Terminal with Screen” (Video), Shawn Powers:
http://www.linuxjournal.com/video/transfer-your-terminal-screen


Yorum Ekle (giriş yapın)