Joker karakterler Günlük Linux kullanımında çok defa bir operasyonu tek seferde birden fazla nesne için çalıştırmak isteyebileceğiniz (rm gibi) durumlarla karşılaşabilirsiniz. Böyle durumlarda, aşağıdaki gibi bütün dosyaları komut satırına yazmak çok gereksizdir: $ rm dosya1 dosya2 dosya3 dosya4 dosya5 dosya6 dosya7 dosya8 Bu problemi çözmek için, Linux un kendi içinde yer alan joker karakter desteğinin getirdiği avantajdan yararlanabilirsiniz. Aynı zamanda (tarihsel nedenlerden dolayı) globbing olarak da adlandırılan bu destek, joker karakter modelini kullanarak tek seferde birden fazla dosyayı belirlemenize olanak sağlar. Joker karakter sözdizimi: * tanesi: * Joker karakterler arasında birkaç özel karakter kullanabilirsiniz; işte bunlardan bir Yıldız (asterix) * işareti sıfır veya daha fazla karakterle eşleşecektir. Bunun anlamı * olan yere herhangi bir şey gelebileceğidir. Örnekler: /etc/g* belirtimi /etc nin altında g ile başlayan tüm nesnelerle eşleşir. /tmp/my*1 belirtimi /tmp nin altında my ile başlayan ve 1 ile biten tüm nesnelerle eşleşir. Joker karakter sözdizimi:? Soru işareti? herhangi bir tek karakterle eşleşir. Örnekler: dosyam? belirtimi dosyam ile başlayıp bir tane daha karakter içeren nesnelerle eşleşir. /tmp/notlar?txt belirtimi hem /tmp/notlar.txt, hem /tmp/notlar_txt dosyasıyla eşleşir, eğer mevcutlarsa. Joker karakter sözdizimi: [] Bu joker karakterler? ile benzerdir, ancak daha fazla kesinlikte ayrım yapma şansını verir. Bu joker karakterleri kullanmak için, [] arasında eşlemek istediğiniz tüm karakterleri koymalısınız. Sonuçta elde edilen eşleşme bu karakterlerin herhangi birinin tek eşleşmesini verecektir. - (eksi) işaretini bir aralık vermek için kullanabilirsiniz, hatta birden fazla aralığı birlikte kullanabilirsiniz. Örnekler: dosyam[12] belirtimi dosyam1 ve dosyam2 ile eşleşecektir. Wildcard, çalışılan dizindeki karakterlerden en az bir tanesi mevcut olacak şekilde genişletilecektir. 1
[Cc]hange[Ll]og belirtimi Changelog, ChangeLog, changelog, ve changelog ile eşleşecektir. Gördüğünüz gibi, köşeli parantez joker karakterlerini kullanmak küçük / büyük harf eşleşmelerindeki kombinasyonları yakalamak için faydalı olacaktır. ls /etc/[0-9]* komutu /etc nin altında rakamla başlayan tüm dosyaları listeler. ls /tmp/[a-za-z]* komutu /tmp nin altında küçük ya da büyük harfle başlayan tüm dosyaları listeler. Joker karakter sözdizimi: [!] [!] yapısı [] yapısına benzemektedir. Ancak bu sefer [] parantezde yer alan karakterle eşleştirme yerine, parantezler içerisinde bulunmayan karakterler ile eşleştirme yapılmaktadır. Örnekler: rm dosyam[!9] Bu komut ismi dosyam9 olan dosya dışındaki tüm dosyaları yok eder. Joker karakter ile ilgili uyarılar Burada joker karakter kullanırken dikkat edilmesi gereken bazı noktalara değineceğiz. Bash wildcard ile ilgili karakterler (?, [, ], *) yazıldığı zaman buna göre özel bir işlem yapacağından, bir komuta parametre geçirirken bu karakterler kullanılacaksa dikkat edilmelidir. Örneğin, [fo]* ifadesini içeren bir dosya yaratmak istediğimizde aşağıdaki yazılı olan komut yapmak istediğimiz şeyi gerçekleştirmeyecektir: $ echo [fo]* > /tmp/yenidosyam.txt Eğer [fo]* modeli, dizin içerisinde herhangi bir dosya ile eşleşiyorsa, bu durumda /tmp/yenidosyam.txt dosyası içerisinde görmeyi beklediğiniz [fo]* ifadesi yerine bu eşleşen dosyaları göreceksiniz. O halde çözüm nedir? Bunun için gerekli çözümlerden birisi karakterlerinizi tek tırnak içerisinde yazmanızdır. Bu yaklaşım, kabuğa bu karakterler üzerinde hiç bir joker karakter işlemi yapmaması gerektiğini anlatır. $ echo [fo]* > /tmp/yenidosyam.txt Bu yaklaşımı kullandığınızda yeni dosyanız beklediğiniz gibi [fo]* karakter dizimini içerecektir. Alternatif olarak, ters bölü (backslash) kullanarak karakterlerinizin bash için, joker karakter yerine normal karakter anlamına gelmesini sağlayabilirsiniz. (escape characters) $ echo \[fo\]\* > /tmp/yenidosyam.txt 2
Yukarıda anlatılan her iki yaklaşımda aynı şekilde çalışacaktır. Ters bölü (backslash) karakterinin bu şekilde kullanımından da bahsettiğimize göre, eğer karakter olarak backslash (\) kullanmak istiyorsanız bunu tek tırnak içinde ya da \\ şeklinde yazabileceğinizi söyleyebiliriz. 3
man Her Linux sürümü, ihtiyacınız olan her türlü bilgiye ulaşmanızı sağlayan belgelerle donatılmıştır. Kullanıcı komutları, sistem çağrıları, subroutine ler, donanım, oyunlar, sistem yönetimi ve benzer konularda, bu belgelerden yardım alabilirsiniz. Bu belgelerdeki bilgilere nasıl ulaşacağınız, aşağıda açıklanmıştır: En çok kullanılan belge cinsi, man sayfaları denen, programcının rehberi olarak geçen belgelerdir. /usr/man dizini altında bulunurlar. Herhangi bir program veya komut için yardım almanız için, $ man <program veya komutun ismi> $ man rm Ekrana çıkan dokümandan çıkmak için q ya basmanız gerekir. Aşağıdaki tabloda man komutu ile elde edilebilecek yardım sayfaları içindeki konular ve bölümleri verilmiştir: Bölüm Konu 1 Kullanıcı Araçları (user tools) 2 Sistem Çağrıları (system tools) 3 C Kitaplık Çağrıları (C library tools) 4 Cihaz Sürücü Bilgisi (device driver information) 5 Konfigürasyon Dosyaları (configuration tools) 6 Oyunlar (games) 7 Paketler (packages) 8 Sistem Araçları (system tools) Aranan konu ile ilgili bilgi birden fazla bölüm içinde var olabilir, bu durumda her bölüm kendi alanı ile ilgili kısmını size aktarır. Örneğin C deki printf fonksiyonu ile ilgili olarak hem 3. hem de 1. bölümde bilgi bulunabilir. 1. bölümdeki açıklama komut satırı bakış açısından 3. bölümdeki açıklama ise fonksiyonun C dilindeki kullanımı açısından olacaktır. Bu bilgilere erişmek için: $ man 1 printf Veya $ man 3 printf yazılmalı. Belirli bir komutun tüm yardım sayfalarındaki tekrarını görmek ve bu konuda özet bilgi almak için, komutu aşağıdaki gibi, -k parametresi ile girmek gerekir. $ man -k printf 4
aprospos ve info man içinde herhangi bir kelimeyi de arattırabiliriz. Diyelim modemle ilgili bir sorun var ve çözmek için hangi programlara ihtiyacınız olduğunu bilmiyorsunuz. 'man modem' yazarsanız sonuç alamazsınız, çünkü bu isimli bir komut veya program mevcut değildir. Ancak içinde 'modem' kelimesi geçen man sayfalarının bir dökümünü almak işe yarayabilir. Bu işlem için, 'apropos' komutu kullanılır: $ apropos modem info komutu ile de komutlar ve konuları hakkında bilgi almak mümkündür. $ info emacs Bazı komutlar Aşağıda bazı temel Linux/Unix komutlarının kısa tanımları verilmiştir: *Mevcut işletim sisteminin isminin görüntülenmesi $ uname *O anki tarih ve zamanın görüntülenmesi $ date Fri Feb 25 12:55:29 MST 2003 *Takvimin öğrenilmesi $ cal * Belirli bir yıl ay için takvimin çağırılması $ cal 12 2003 *Sistemi aktif olarak kullanan mevcut kullanıcıların listelenmesi $ who *Mevcut kullanıcı isminin öğrenilmesi (ben kimim) $ whoami *Komut satırından birden fazla komutun devreye sokulması $ date;cal;whoami 5
Grep ve Düzenli İfadeler Düzenli ifadeler ( regex veya regexp de denir) yazı kalıplarını ifade etmek için kullanılan özel bir biçimdir. Linux sistemlerinde, arama ve değiştirme işlerinde olduğu kadar yazı kalıplarının bulunmasında da düzenli ifadeler kullanılır. Kaynaklar C ve Sistem Programcılar Derneği, 2002, Unix/Linux Sistem Programlama Ders Notları Çetin G., 1999, Linux İşletim sistemi, Seçkin Yayınevi İstanbul Bilgi Üniversitesi Bilgisayar Bilimleri Bölümü, 2007, Open Source Enterprise Centre GNU/Linux Sertifikasyon Programı Linux 101 Ders Notları Özbilen A., 2013, Linux Sistem ve Ağ Yönetimi, Pusula Yayınları Özkan Y., 2004, Linux İşletim Sistemi, Alfa Yayınları UYBHM, Temel Linux işlemleri, İTÜ Yazıcı M., 2014, Açık Kaynak İşletim Sistemleri Ders Notu, www.muratyazıcı.com 6