Linux Başlangıcı & Temel Linux Komutları — 2

Oğuz Erdoğan
7 min readNov 6, 2020

Merhabalar geçen yazımda Linux’un tanınımdan temel komutlarından ve her dizinde çalıştırılabilir bir script için PATH mantığını anlatmıştım. Eğer Linux’a yeni başlıyor ve temel komutları incelemek istiyorsanız ilk yazımı okumanızı tavsiye ederim. Aşağıdaki linkten serinin ilk yazısını okuyabilirsiniz.

Serinin ilk yazısını okumak için;

Linux Başlangıcı & Temel Linux Komutları — 1

Bu yazımda;

Klasör ve dosya işlemlerinden,

Hata raporlarını bir dosyaya nasıl aktarabileceğimizden,

Sıralama işlemlerinden

Dosya ve klasörleri sıkıştırma ve arşivleme işlemlerinden

Vi Text Editöründen bahsedeceğim.

Herkese keyifli okumalar ve güzel bir keşif süreci diliyorum!

Linux Klasör İşlemleri

mkdir ile yeni klasör açıyoruz

touch yeni boş dosya oluşturmamıza yarıyor.

nano myfile ile de bu boş dosyayı düzenleyebiliriz.

rm myfile dosyayı siliyor

rm myfolder bu şekilde klasör silemiyoruz. Silmek istersek;

rm -r myfolder komutunu kullanıyoruz.

copy

dosya kopyalama işlemini bu komut ile yapıyoruz

cp kaynak hedef

cp myfolder/myfile .

myfolder/myfile dosyasını bulunduğumuz dizine "." ile kopyaladık.

klasör kopyalama işlemi

cp -r myfolder myfolder_copy

move

dosya taşımak için kullanıyoruz.

mv myfolder/myfile .

Burada . ile bulunduğumuz dizine myfile dosyasını taşıdık.

Klasör taşımak içinde aynı şekilde kullanıyoruz.

mv myfile myfolder/

Dosya ismi değiştirme

aynı şekilde mv komutu ile yapılıyor

mv myfolder/myfile myfolder/myfile2

Dosya okuma işlemleri

cat myfolder/myfile2less ~/datasets/words.txt

profesyonel hayatta linuxlarda arayüz bulamıyoruz, bu yüzden terminal editörleri kullanıyoruz. terminalde dosya içerisini less ile okuyup içerisinde gezebiliyoruz.

more ile de aynı işlemi yapabiliyoruz

head ilk 15 satırı aşağıdaki kod ile görebiliriz

head -n 15 ~/datasets/words.txt

tail ile de son satırları görebiliyoruz.

sed komutu ile satır silme

sedfile diye bir dosya oluşturuyorum ve gözlemlemek için içerisini şu şekilde dolduruyorum.

[train@localhost ~]$ cd kurs/
[train@localhost kurs]$ touch sedfile
[train@localhost kurs]$ nano sedfile
[train@localhost kurs]$ cat sedfile

sedfile içerisini bu şekilde doldurdum.

1. line-1
2. line-2
3. line-3
4. line-4
5. line-5
  1. satırı silme
[train@localhost kurs]$ sed -i '1d' sedfile

2. satırı silme

[train@localhost kurs]$ sed -i '2d' sedfile

sed komutu ile bu şekilde satır işlemlerini yapabiliyoruz.

| pipe komutu

pipe ile bir komutu ardından yazacağımız komuta girdi olarak yönlendiriyoruz. grep ile de filtreleme işlemi yapıyoruz.

[train@localhost kurs]$ cat sed_file | grep line-1çıktı:
1. line-1

direction >

herhangi bir çıktıyı başka bir dosyaya yazdırırken kullanıyoruz

[train@localhost kurs]$  cat sed_file > sed_file2
[train@localhost kurs]$ cat sed_file2
1. line-1
2. line-2
3. line-3
4. line-4
5. line-5

>> altina ekleme yapıyor

[train@localhost kurs]$ cat sedfile >> sedfile2
[train@localhost kurs]$ cat sedfile2
1. line-1
2. line-2
3. line-3
4. line-4
5. line-5
1. line-1
2. line-2
3. line-3
4. line-4
5. line-5

sedfile2 dosyası çok rahatsız edici oldu bunu temizlemek istiyorum dersek;

> sedfile2

bu şekilde kolayca içini boşaltabiliyoruz.

> aynı zamanda touch gibi boş bir dosya açmak için de kullanabiliyoruz.

> sedfile3

Hata Yönlendirme

direction diye bir script oluşturuyorum ve içine aşağıdaki kodları yazıyorum

nano direction.sh

direction.sh içerisini aşağıdaki gibi dolduruyorum.

#!/bin/bash

ls -l oguz
ls -l /etc | head -n 10
# çalıştırılabilir yetkisi veriyorum
chmod 755 direction.sh
# ayrıca bash ile yetki vermeden çalıştırabiliriz
bash direction.sh

Hata ve çıktıyı bir dosyaya yönlendirme &>

Komutta bir hata varsa o hatayı ve çıktıyı bir dosyada toplamak için kullanılıyor.

[train@localhost kurs]$ ./direction.sh &> medium_err

Çıktı:

# medium_err içerisine bakma
[train@localhost kurs]$ cat medium_errr
ls: cannot access oguz: No such file or directory
total 1436
drwxr-xr-x. 3 root root 101 Jul 21 00:01 abrt
-rw-r--r--. 1 root root 16 Jul 21 00:17 adjtime

Sadece hatayı yönlendirme 2>

Yönlendirme işlemi:

./direction.sh 2> medium_err[train@localhost kurs]$ cat medium_err

ls: cannot access oguz: No such file or directory

cat <<EOF >

Terminal üzerinden editör içerisine girmeden içerisine girdi girebilmemizi sağlıyor.

[train@localhost medium]$ cat <<EOF> bilgi
> insan rüyasında asla kendisinin öldüğünü görmez,
> beyin bir şekilde bunu elimine eder.
> bu durum, vücudun kendini savunma mekanizmasıdır.
> EOF

Çıktısını görelim:

[train@localhost medium]$ cat bilgi

insan rüyasında asla kendisinin öldüğünü görmez,
beyin bir şekilde bunu elimine eder.
bu durum, vücudun kendini savunma mekanizmasıdır.

Alıştırma zamanı

Öğrendiklerimiz ile oguzerdogan.com’a 3 kere ping gönderip sonuçları bir dosyaya kaydedelim.

ping -c 3 oguzerdogan.com > ping_file

Sort — Sıralama İşlemleri

Sıralama yapmak için kullanıyoruz. Hemen örneklerine bakalım.

<<EOF > yapısını kullanarak sortfile diye bir dosya oluşturalım.

[train@localhost kurs]$ cat <<EOF> sortfile
> ali
> mahmut
> cemal
> gizem
> burcu
> EOF

Z — a sıralama

[train@localhost kurs]$ sort -r sortfile
mahmut
gizem
cemal
burcu
ali

A — z sıralama

[train@localhost kurs]$ sort sortfile
ali
burcu
cemal
gizem
mahmut

Sayısal değerler ile birlikte sıralama işlemleri

Önce bir sortfile dosyası oluşturalım ve aşağıdakileri içerisine girelim.

[train@localhost kurs]$ cat <<EOF > sortfile
- ali;33
- mahmut;25
- cemal;41
- gizem;27
- burcu;33
- EOF

Dosyamız hazır şimdi sıralama fonksiyonu olan sort u burada kullanmaya hazırız.

burada sort sortfile dediğimizde sıralamayı alfabetik sıralamaya göre yapıyor. Sayısal bir sıralama istediğimiz zaman;

Şunlar önemli;

-t sütunlar birbirinden nasıl ayrılıyor

-k kaçıncı indexi ayırmak istiyoruz (index 1den başlıyor)

[train@localhost kurs]$ sort -t\; -k2 sortfile
mahmut;25
gizem;27
ali;33
burcu;33
cemal;41

tersini yapmak istersek;

[train@localhost kurs]$ sort -t\; -k2 -r sortfile

Önemli not

Linux komut satırında ; komutun sonlandığı anlamına geliyor, dolayısıyla buradaki kullandığımız örnekte ; dan sonra escape ( kaçış ifadesi ) kullanmamız gerekiyor.

Linux Sıkıştırma İşlemleri

Çok büyük, çok yer kaplayan veriler için kullanıyoruz.

Bazen 70%, 80% lere varan sıkıştırmalar yapabiliyoruz.

Sıkıştırmanın temel mantığı; tekrarlanan veriyi algılayıp onu kodluyor, açarken de o koda göre açıp bize veriyor.

gzip

gzip advertising.csv # üstüne yazıyor
gzip -c advertising.csv > advertising.csv.gz # ayrıca sıkıştırılmış dosya oluşturuyor

Bu komut, dosyayı sıkıştırmaya yarıyor, fakat dosyanın üstüne yazıyor, yani sıkıştırılmış bir dosyayı ayrıca oluşturmuyor.

Sıkıştırmadan sonra advertising.csv.gz şeklinde oluyor.

Pandas bu haliyle bu dosyadan veriyi okuyabiliyor, dolayısıyla sıkıştırılmış şekilde tutmakta fayda var.

gunzip

bu komut ile sıkıştırılmış bir dosyayı normal haline çevirebiliyoruz.

gunzip advertising.csv.gz

Klasör sıkıştırma

[train@localhost kurs]$ gzip -r retail_db/

[train@localhost kurs]$ ll retail_db/
total 1756
-rw-r--r--. 1 train train 612 Oct 29 03:24 categories.csv.gz
-rw-r--r--. 1 train train 250493 Oct 29 03:24 customers.csv.gz
-rw-r--r--. 1 train train 115 Oct 29 03:24

Burada Windowstaki gibi dosyayı sıkıştırmıyor, klasörün içerisindekileri sıkıştırıyor.

Sıkıştırılmış dosyayı çevirme

[train@localhost kurs]$ gunzip -r retail_db/

Dosya arşivleme

Aslında sıkıştırma değil, sadece dosyaları bir arada tutuyor.

-c arşivlemek için

-x arşiv açmak için

Arşiv dosyası oluşturma:

[train@localhost kurs]$ tar -cf retail_db.tar retail_db
# buradaki -cf file anlamına geliyor

Artık içerisine giremiyoruz.

-bash: cd: retail_db.tar: Not a directory

Tar dosyasının içerisini listeleme:

[train@localhost kurs]$ tar -tvf retail_db.tar

Arşivlenmiş dosyayı açma

tar -xf retail_db.tar

tar.gz yaparak hem arşivleyip hem de sıkıştırma

tar -czf retail_db.tar.gz retail_db

Alıştırma

Sparkı indirelim ve sıkıştırılmış dosyayı açalım.

wget https://kozyatagi.mirror.guzel.net.tr/apache/spark/spark-3.0.1/spark-3.0.1-bin-hadoop2.7.tgz

Bu tarz sıkıştırılmış bir dosyayı açmak için:

tar -xzf spark-3.0.1-bin-hadoop2.7.tgz

Linux arama işlemleri

locate

Linuxun tuttuğu özel bir veritabanında arama yapıyor. Yapılan işlemleri belirli periyotlarda veritabanına kaydettiği için en güncel sonuçları vermeyebilir.

[train@localhost kurs]$ locate Churn_Modelling.csv


/home/train/datasets/Churn_Modelling.csv

find

Tek tek bütün dizinleri dolaşıp arıyor.

[train@localhost kurs]$ find /home/train -name "Churn_Modelling.csv"

/home/train/datasets/Churn_Modelling.csv
[train@localhost kurs]$ find /home/train -name "*_Modelling.csv"

/home/train/datasets/Churn_Modelling.csv

Vi Text Editörü

Modlarını bilmediğimiz zaman saç baş yolduruyor.

vi ping_file
  • nanodan farklı, içerisinde edit yapabilmek için insert moduna geçmeliyiz. i ye basarak insert moduna alıyoruz.
  • çıkmak istediğimizde esc + :wq yazarak çıkıyoruz. bu yaptığımız değişiklikleri üstüne yazarak kaydediyor.
  • kaydetmeden çıkmak istediğimizde esc + :q! yapıyoruz.

Neler yaptık?

Yazımda sizlere Linux terminalinde en sık kullandığımız komutlardan, klasör ve dosya işlemlerinden, hata & çıktı yönlendirmelerinden, dosya ve klasör sıkıştırma işlemlerinden, EOF ve Vi yapısından bahsettim.

Bir sonraki yazımda;

Bir sonraki yazımda, Linux üzerindeki yetki konularını, terminal üzerinden belirli patternlere uyan kelimeleri çekmeyi (Regex) ve kullandığımız diğer komutları göstermeye çalışacağım.

Son olarak;

Bana bu adreslerden ulaşabilirsiniz.

Kişisel Web Sitem: https://www.oguzerdogan.com

Linkedin: https://www.linkedin.com/in/oguzerdo/

Github : https://github.com/oguzerdo

Mail: mail@oguzerdogan.com

Referanslar

Erkan Şirin

Advanced Big Data & Data Science At Scale Bootcamp Eğitimi

https://github.com/erkansirin78

--

--