Linux Başlangıcı & Temel Linux Komutları — 2
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;
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
- 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 basarakinsert
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