Linux komut satırında hayatta kalma ipuçları — 2

Bu flood’da Linux’u komut satırından çıkmadan etkin olarak kullanabilmek için gerekli araç ve konseptleri tanıtmaya devam edeceğim.

Yeni bir dosya yaratmak için touch komutunu kullanırız. touch aynı zamanda 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 örneklenmiştir.

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ı yeniden derlemeleri (rebuild) sağlanabilir.

Bir dosyanın içeriğini döktürmek için cat komutu kullanılır. cat ekrana sadece 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 bütün karakterleri görmek için -A kullanılır.

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 çok program işletim sistemlerindeki bu ayrımı tolere etse de bazı durumlarda dönüşüm yapmak gerekebilir. VS Code, Notepad++ gibi editörler dosyaların satır sonu karakterleri arasında 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.

cat bütün 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.

tail komutunun sık kullanım alanlarından birisi de dosyalara yazılan satırların anlık olarak takip edilebilmesine imkan tanımasıdır. -f / follow parametresi ile kullanıldığında ilgili dosyaya eklenen satırların izlenebilmesini sağlar. Aşağıda bu kullanım örneklenmiştir.

cat programını parametre vermeden çalıştırdığımızda, program standard input yani klavyeden girdiyi alarak normalde yaptığı işlemi yapar, yani ekrana (standard output) girdiyi basar. Girdinin bittiğini anlatmak için ctrl+d (end-of-file / EOF) tuşlarına basarız.

Yukarıdaki görüldüğü gibi ister bir dosya ister standart girdi ile çalışsın cat aynı biçimde davranmaktadır. Girdi olarak aldığı akışı (stream) çıktı olarak belirlenen yere (bizim durumumuzda ekran - standard output) dosya sonunu (EOF) görene dek yazmaktadır. Bu noktada akla cat'in akışını ekran yerine bir dosyaya yönlendirmek ve cat ile bir dosya oluşturmak gelebilir. Linux'ta akışları (stream) yönlendirmek için >, < operatörleri kullanılır. >, stdout'u, < ise stdin'i sağında verilen dosyaya yönlendirir.

Bu bilgiler ışığında cat > new-file komutunu vererek dosya içeriğini yazmamız ve sonunda yazacaklarımızın bittiğini bildirmek yani 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.

Komut satırında içerik ile birlikte 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 üzere bir magic string belirlenerek << operatörünün sağına yazılır.

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

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

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

echo komutunu ekrana bir mesaj 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çeriği olacaktır. >> operatörü ile yönlendirme yapılırsa da çıktı dosyanın sonuna eklenecektir.

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

Son olarak stderr yani 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ı özel dosyaya yönlendirerek ekrana basılmalarını engelleyebiliriz. Örneğin: my-prog 2> /dev/null.