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
.