Cuma , 4 Aralık 2020
Linux Komut İpuçları 1 – 1 LiaWO292bi0QGyDXQgsyvw1

Linux Komut İpuçları

İşletim sistemini komut satırından kullanmak oldukca daha süratli ve güçlüdür. İşletim sistemine komut verip yönetmek için bir shell kullanılır. Kabuğun girdileri almak için klavyeye ve çıktıları basabilmek için ekrana ihtiyacı vardır. Çağıl sistemlerde terminal emulator’lar bu işlevi yerine getirmektedir. Tarihsel olarak console adında olan, klavye ile monitörden oluşarak seri porttan bilgisayara bağlanan hususi tip terminaller de vardır. Çağıl sistemlerde komut satırından başlatılan Linux’ta Alt+F1, Alt+F2 komutları ile sanal konsollar içinde geçiş yapılabilir.

Popüler Linux dağıtımlarında shell olarak çoğu zaman bash yada sh kullanılır. Kullanıcılar sistemde bulunan değişik shell’lerde istediğini seçebilir. Sistemde bulunan tüm kabuklar /etc/shells dosyasında bulunur ve kullanılmak istenilen default shell /etc/passwd dosyasından ayarlanabilir. Aşağıdaki resimde flood kullanıcısı için shell /bin/sh, vagrant kullanıcısı için ise /bin/bash olarak ayarlanmıştır. Çalışırken shell değiştirebilmek için geçiş yapılmak istenen shell’in adı yazılabilir.

Linux Komut İpuçları 2 – 1 8HPCvn12dcOQYkgxlTzQFg1

Shell kullanıcının günlük yapacağı işlemleri kolaylaştırır. Mesela terminali her açışımızda dosya sisteminde emek verme klasörü olarak kullanıcının $HOME klasörüne gidip komutları beklemeye adım atar. bash kabuğunda kullanıcının $HOME klasörünün altındaki .bashrc dosyasının sonuna kabuk başlatılırken yapılması istenenler eklenebilir. Değişikliklerin mevcut kabukta da uygulanması için source .bashrc komutu kullanılabilir. Aşağıda kabuğun başlaması istenen klasör /home/vagrant yerine /vagrant olarak değiştirilmiştir.

Linux Komut İpuçları 3 – 1 mr29N4PAkknsz3MGv4Ca8w1

bash ve öteki kabuklar kullanıcının işletim sistemi ile iletişime geçerek program çalıştırması, çalıştırılan programın ekran çıktılarının gösterilmesi, kullanıcıdan programın emek vermesi esnasında girdi alabilmesi, programlara argüman geçirilmesi, ortam değişkeni (Environment Variable) aktarılması, başlatılan programın parent prosesi olarak çıkış kodunun raporlanmasını sağlarlar. Kabuk sıralanan bu işlemleri yapabilmek için çekirdeğe sistem çağrıları (system call) yapar dolayısıyla Linux çekirdeği ile kullanıcı içinde köprü kurar.

Kabukta tanımlı olan ortam değişkenleri env yada printenv komutu ile ekranda görüntülenebilir. Aşağıda benim kontrol sistemimdeki bash kabuğunda bulunan ortam değişkenleri gösterilmiştir.

Linux Komut İpuçları 4 – 1 BbV7yv5K3LZcnAHU eS6kQ1

Yukarıdaki ekran görüntüsünde $SHELL değişkeninde kullanıcının kullandığı kabuğu, $HOME değişkeninde kullanıcının ana dizini, $USER değişkeninde kabuğa bağlı olan kullanıcı adı görülebilir.

Gene yukarıdaki ekran çıktısındaki $PATH değişkeni üstünde durulmaya değerdir. Bu değişken dosya sisteminde bulunan çalıştırılabilir dosyaların klasörlerini içermektedir. Kabukta dosya sistemindeki tam yolunu vermeden ls yazdığımız vakit, kabuk PATH’te bulunan klasörlere teker teker bakarak içlerinde ls adı ile çalıştırılabilir bir dosya olup olmadığına bakar, ilk bulmuş olduğu çalıştırılabilir dosyayı çalıştırır ve öteki klasörlere bakmaz. Aşağıda $PATH değişkeninin başına mevcut klasör eklenip klasörde bulunan dosyalar $PATH’e eklenmiştir.

Linux Komut İpuçları 5 – 1 tQiObZGznbgEiTwNsa1Hew1

PATH değişkeninde olmayan bir klasördeki çalıştırılabilir bir dosyayı çalıştırabilmemizin tek yolu o dosyanın dosya sistemindeki tam yada relatif yolunu sağlamaktır. PATH içinde bulunmayan /app klasörünün içindeki booking-generator programını çalıştırmak için kabuktan /app/booking komutunu verilir. Aynı şekilde içinde bulunulan klasördeki billing adlı programı çalıştırmanın yolu da ./billing olacaktır. İkinci örnekte bulunan . o an içinde bulunulan klasörü ifade eder. .. ise bir üst klasöre gitmek için kullanılır.

Son olarak kabuğun ve çalıştırılabilir programın Linux çekirdeğine yapmış olduğu tüm sistem çağrılarını görebilmek için strace komutu kullanılabilir. İlerleyen flood’larda detaylı olarak ele alacağımız bu aracı $PATH’in iyi mi çalıştığını gözlemlemek için kullanalım.

which ls komutunu vererek sistemde bulunan ls programının dosya sistemindeki tam yolu bulunabilir. Bu komutu strace ile vererek bash’in $PATH değişkeninde bulunan klasörlerde ls dosyasını teker teker aramış olduğu görülebilir. Aşağıdaki çıktıda bu davranış gösterilmiştir.

Linux Komut İpuçları 6 – 1 gXeTbqwjxgEn4TRo25XWiQ1

Yeni bir dosya oluşturmak için touch komutunu kullanırız. touch hem de bir dosyanın içeriğini değiştirmeden access, modify ve change zamanını değiştirmekte de kullanılır. Bir dosya ile ilgili bilgiler stat ile görüntülenir. Aşağıda bu kullanımlar örneklendirilmiştir.

Linux Komut İpuçları 7 – 1 yoQ8TLQumYAG3ybgZUNMEg1

touch komutu ile dosyaların modify zamanını güncellenerek  make, gradle, msbuild vb araçların kaynak dosyaların değiştiğini düşünmeleri ve kaynak kodları tekrardan derlemeleri (rebuild) sağlanabilir.

Bir dosyanın içeriğini döktürmek için cat komutu kullanılır. cat ekrana yalnız yazılabilir (printable) karakterleri basar. Yazılamayan karakterleri de bastırmak için -v, satır sonlarını $ ile ayırmak için -E ve tüm karakterleri görmek için -A kullanılır.

Linux Komut İpuçları 8 – 1 E6NkeFfW67wjyWWxW5HvRg1

Metin (text) dosyaları için Linux ve macOS satır sonunu belirlemek için LF – Line Feed, Windows ise hem LF hem de CR – Carriage Return karakterlerini kullanır. Pek oldukca program işletim sistemlerindeki bu ayrımı tolere etse de bazı durumlarda dönüşüm yapmak gerekebilir. VS Code, Notepad++ şeklinde editörler dosyaların satır sonu karakterleri içinde dönüşüm yapabilmektedir. Linux ve macOS komut satırında ise unix2dos aracı ile LF -> CRLF ve dos2unix aracı ile de CRLF -> LF dönüşümü yapılabilir. Aşağıda dos2unix örneklenmiştir.

Linux Komut İpuçları 9 – 1 iWkvA5ppCQX weOz6UvbdQ1

cat tüm dosyanın içeriğini göstermek için kullanılırken dosyanın başından ve sonundan birkaç satır görmek istediğimiz durumlarda sırasıyla head ve tail komutları kullanılır. head ve tail komutlarına kaç satır görmek istediğimizi parametre olarak geçeriz.

Linux Komut İpuçları 10 – 1 csbhFOTVMDcitgdzoajP0A1

Bu bilgiler ışığında cat > new-file komutunu vererek dosya içeriğini yazmamız ve sonunda yazacaklarımızın bittiğini bildirmek kısaca dosyanın sonunun geldiğini belirtmek için ctrl+d’ye basmamız yeterlidir. Aşağıda bu yöntem kullanılarak bir dosya oluşturulması gösterilmiştir.

Linux Komut İpuçları 11 – 1 0BwkMgCejpjWyDtsey2cQg1

Komut satırında içerik ile beraber dosya yaratmayı otomize hale getirmek (ctrl+d vermeden yapabilmek) için HEREDOC sentaks kullanılabilir. Bu sentaksta EOF olarak ctrl+d’nin yerine kullanılmak suretiyle bir magic string belirlenerek << operatörünün sağına yazılır.

Linux Komut İpuçları 12 – 1 VBgEHa8xyR4OYFlh3fsAyg1

> operatörü sağındaki dosya mevcut değilse yeni bir dosya yaratır mevcutsa yeni içinde ne olduğu eskisinin üstüne yazar. Dosyaya ekleme yapmak istediğimizde (append) >> operatörünü kullanabiliriz.

> operatörü ile çıktıyı iyi mi yönlendirebileceğimizi gördük. Şimdi de < operatörü ile girdiyi stdin kısaca klavye yerine bir dosyaya yönlendirelim. Bunun için aşağıdaki kullanıcıdan iki sayı alan ve bu tarz şeyleri toplayıp ekrana basan programı kullanacağız.

Linux Komut İpuçları 13 – 1 EA8M6LOkoRl54PYD56omkw1

Aşağıdaki çıktıda program ilk olarak manuel olarak çalıştırılarak girdiler klavyeden verilmiş, sonrasında da sum-numbers-input isminde bir dosya oluşturularak programın stdin’i bu dosyaya yönlendirilmiştir.

Linux Komut İpuçları 14 – 1 sweqepqJ 369q7d2k BsoQ1

echo komutunu ekrana bir bildiri yazdırmak istediğimizde kullanırız. > operatörü ile echo programının çıktısını bir dosyaya yönlendirirsek çıktı dosyanın içinde ne olduğu olacaktır. >> operatörü ile yönlendirme yapılırsa da çıktı dosyanın sonuna eklenecektir.

Linux Komut İpuçları 15 – 1 Cg5uJSNsOOjlXS6K tkRMw1

İki dosyanın içeriğini birleştirmek ve yeni bir dosya oluşturmak için cat komutu ve > operatörleri aşağıdaki şeklinde kullanılabilir. Basitçe yorumlanacağı şeklinde cat kendisine girdi olarak verilen dosyaları döktürmüş, > operatörü de akışı bir dosyaya yönlendirmiştir.

Linux Komut İpuçları 16 – 1 O8X2bK8JLmbRLBv3MGcvAg1

Son olarak stderr kısaca standart hata akışını bir dosyaya yönlendirmek için 2> operatörü kullanılır. Hata akışını görmek istemediğimiz programların çıktılarını /dev/null adlı hususi dosyaya yönlendirerek ekrana basılmalarını engelleyebiliriz. Mesela: my-prog 2> /dev/null.

Aşağıda cat, sort, head ve tail komutları ile değişik işlemler yapılmıştır.

Linux Komut İpuçları 17 – 1 A Cizcfm2VkJ4dBrFo3Luw1

Yukarıdaki örneklere benzer şekilde pipe kullanarak, verilen bir CSV dosyasındaki başlık kısmından sonraki ilk satırı ekrana bastırmak istediğimizi varsayalım. Komutların aşağıdaki şekilde kullanılması ile bu amaca kolayca erişilebilir.

Linux Komut İpuçları 18 – 1 oLVFeVbh3UemTa5c LZNnw1

Pipe ile değişik komutlara aktarılan akışlar (stream), yönlendirme operatörleri ile dosya sistemindeki bir dosyaya ya da bir aygıta aktarılabilir. Aşağıda bundan önceki örnekte verilen CSV dosyasının SHA-1 hash’i hesaplanarak değişik bir dosyaya aktarılmıştır.

Linux Komut İpuçları 19 – 1 LiaWO292bi0QGyDXQgsyvw1 1024x6101 1

Şimdi pipe operatörü ile beraber kullanılabilecek bazı yararlı komutları incelemeye başlamış olalım. wc – word count komutu bir metin dosyası içindeki kelime, satır, bayt ve en uzun satırdaki kolon sayısını göstermeye yarar. Aşağıda bu komut örneklenmiştir.

Linux Komut İpuçları 20 – 1 ebe5256eL84JYWTC3EX9SQ1

Bir komutun çıktısını hem başka bir komuta vermek hem de ekrana yazdırmak istediğimizde tee komutunu kullanabiliriz. Mesela, birkaç pipe yardımıyla işlenen bir akışı hem bir dosyaya yazarak saklamak hem de sonucu doğrulamak suretiyle ekranda göstermek için tee kullanılabilir.

Linux Komut İpuçları 21 – 1 8oOUxF1fvNiB2FLYLNcmhQ1

tr – translate komutu metin akışları içinde karakter değişiklik yapma ve silme işlemleri için kullanılır. tr, akışları stdin kısaca standart girdiden okuyarak stdout’a kısaca standart çıktıya yazar. Aşağıda tr’nin değişik kullanım alanları örneklenmiştir.

Linux Komut İpuçları 22 – 1 sN88Req7qQ3adtt3aC0F3A1

more terminal ekranına sığmayacak büyüklükteki text dosyalarını sayfa sayfa göstermeye yarar. less, more ile aynı amaç için kullanılır sadece more’un aksine kullanıcının bundan önceki sayfaya dönmesi ve birçok başka özelliğe olanak sağlar. Aşağıda more komutu örneklenmiştir.

Linux Komut İpuçları 23 – 1 wsFFItWeMf5iC5B hBmD0g1

İlk örneklerden görüldüğü suretiyle sort komutu bir metin dosyasındaki girdilerin sıralanmasını sağlar. uniq komutu ise bir akışta üst üste tekrarlayan satırları tek bir satıra indirerek gösterir. Aşağıda sort ve uniq komutları örneklenmiştir.

Linux Komut İpuçları 24 – 1 vxmYyKk7UGkK T28u Y7kQ1

grep komutu bir akış içinde kalıp ya da kalıpları (pattern) aramaya yarar. /etc/passwd dosyası içinde root geçen satırları ekrana bastırmak için grep root /etc/passwd, içinde root geçmeyen satırları ekrana bastırmak içinse grep -v /etc/passwd kullanılır.

Linux Komut İpuçları 25 – 1 YmEqs3ySfl GMxfk8HEvUQ1

grep komutu kullanılarak bir dizin ve altındaki tüm dizinlerde bulunan metin dosyalarında bir kalıp aranabilir. Bunun için grep -r <text_pattern> <folder> komutu verilebilir. Aşağıdaki ekran çıktısında /home/vagrant klasörü altında lorem metni aranmıştır.

Linux Komut İpuçları 26 – 1 6O t2iiePLQZmBL9139r7g1

grep’i daha kuvvetli kılan özelliği, metin dosyaları içinde kelime yada kelime gruplarını aramasının yanında tertipli ifadeler (regex) kullanılarak da arama yapılmasına izin vermesidir. regex’i ilerleyen flood’larda grep’teki kullanımı ile beraber inceleyeceğiz.

find komutu kullanılarak bir dizin altındaki tüm klasörlerde bir dosya yada dizin aranabilir. Aşağıda find komutunun değişik kullanım alanları (bir dizindeki tüm dosyaları ve dizinleri arama, dosyaları isimle arama, vb) örneklenmiştir.

Linux Komut İpuçları 27 – 1 VAYyWWKMymdApSOcuJnW9Q1

Anlık olarak işletim sistemi kaynaklarının hangi prosesin ne kadar kullandığını görmek için top komutu kullanılabilir.

Linux Komut İpuçları 28 – 1 JC3KG KzbcXGYzNuW8EMEg1

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir