Hafta 1

Enes Kaya, gnu/linux
Back

Amaç : Terminal kullanımını kavratmak, dosya sistem hiyerarşisini kavratmak, paket yöneticisi kavramından bahsetmek.

Yazarlar : boratanrikulu && hasantezcan


Terminal Nedir ?

Terminal, işletim sisteminizi shell ile kullanmanızı sağlayan bir arayüzdür. GNU/Linux dağıtımlarında SHELL olarak genellikle BASH kabuğu (shell) kullanılır.

Windows'ta bunun karşılığı CMD denebilir.

Windows'ta şuana kadar hiç CMD'ye girmeden hayatta kalabiliyorsanız, aslında GNU/Linux dağıtımlarının birçoğunda da terminale hiç uğramadan hayatta kalabilirsiniz.

cmd

Peki neden size terminal kullanımı anlatıyoruz ?

İşletim sistemine tamamen hakim olmak, isteklerinizi grafik arayüzünün hantallığına takılmadan yapmak ve işlerinizi çok daha hızlı görmek açısından terminal kullanımı önemlidir.

Ayrıca mesleğimiz gereği burada çok işimiz oluyor :).

Örneğin en basitinden, birkaç hafta içerisinde eğitimini alacağınız git kullanımının terminal üzerinden yapılması gibi. Onun dışında, yazdığınız herhangi bir programı derlerken terminal kullanmanız gerektiği gibi faktörler terminal kullanımına alışmanız açısından önemlidir.

Yani şuan öğreneceğiniz bilgiler başta anlamsız, hantal ve yavaş olarak gözükecek olsa bile aslında ileriki mesleki hayatınızda çokça rahat etmenizi sağlayacaktır.

Ne kadar erken öğrenmeniz sizin için o kadar iyi olacaktır.


SHELL Nedir ?

SHELL işletim sistemlerinin servislerini kullanmak amacıyla kullanılan bir kullanıcı arabirimidir (user interface), bir programdır.

Kabuk (shell) , çekirdek ile kullanıcı arasında ara görev görür.

Birçok kabuk çeşidi vardır;

PauSiber Dev'de ise kabuk yani shell olarak ZSH kullanılmaktadır. Kabuk olarak BASH yerine ZSH kullanma sebebimiz; ZSH'ın BASH'e göre daha fazla özellik içermesi.

Bi de şekil filan yani .s.s.s

zsh
bash

Temel Komutlar

Terminalda kullanabileceğiniz sayısız uygulama, sayısız komut var. Biz bu eğitim sırasında yalnızca temel düzeyde olan komutları göstereceğiz.


ls [list]

Herhangi bir dizinin içini görmek için kullandığımız komuttur.

Örneğin terminalde aşağıdaki gibi bir komut yürütürsek, o sırada bulunduğumuz dizinin içindeki tüm dosya dizinlerin çıktısını görürüz.

	ls
ls

GNU/Linux'da bir dosyanın gizli olması için başına "." konması yeterlidir. Eğer bir dosyanın başında "." ifadesin var ise ls sorgularında gösterilmez.

Bu yüzden az önce yaptığımız sorguda gördüklerimiz, bulunduğumuz satırdaki tüm dosya ya da dizinleri göstermedi.

Gizli dosya ve dizinler dahil tüm her şeyi görmek istiyor isek --all ya da -a parametresi kullanmamız gerekir.

Yani aşağıdaki gibi bir komut yürütürüz.

	ls -a
ls - show them all

Peki örneğin bulunduğumuz dizin altında bulunan tüm dosyaları tarihe göre sıralı şekilde görüntülemek istersek ne yapmalıyız ? Aşağıdaki parametreleri kullanabiliriz.

	ls -lat
ls - show them all with ordering by date

man [manual]

EE tüm parametreleri böyle tek tek öğrenecek miyiz ? Evet.

Peki ezberleyecek miyiz ? HAYIR !

Kullanılan neredeyse her komutun bir manual sayfası vardır. Bunları okumak için man komutunu kullanabiliriz. Örneğin ls komutunun manual sayfasını okumak için man ls dememiz yeterlidir.

	man ls

Son derece detaylı olan bu manual sayfalarında ilgili komutla ilgili tüm detaya ulaşabilirsiniz.

Not : manual sayfasından q'a basarak çıkabilirsiniz.

man ls

Ayrıca ek bir öneri olarak; okuma kolaylığı sağlaması, aranan şeylere daha kolay ulaşma imkanı vermesi açısından, man kullanmak yerine tldr uygulamasını kullanabilirsiniz.

github.com/tldr-pages/tldr tl;dr : "too long; didn't read"

man ls

cd [change directory]

Bulunduğumuz dizini değiştirmek için cd komutunu kullanırız.

	cd Documents/
cd

Eğer bulunduğumuz dizinin bir üstüne gitmek istiyorsak aşağıdaki gibi yapmalıyız.

	cd ..

pwd [print working directory]

Bu komut bize hangi dizinin içinde olduğumuzu söyler. Yani bulunduğumuz dizinin path'ini verir.

	pwd
pwd

touch

İçi boş bir dosya oluşturmak amacıyla kullanılır.

	touch yeni_bir_dosya
touch

cat

Bir dosyanın içeriğini terminale basar.

	cat beni_oku
cat

tac

Bir dosyanın içeriğini, ters sırada terminale basar.

	tac beni_tersten_oku
tac

echo

Terminal ekrana string bir ifadeyi basmak amacıyla kullanılabilir.

	echo "MESAJ"
echo

echo daha çok dosyaların içerisine veri yazılırken kullanılır.

Örneğin aşağıdaki gibi bir ifade, file.txt dosyasının en son satırına "yeni veri" string'ini ekler.

	echo "yeni veri" >> file.txt

Eğer hali hazırda bulunan dosyadaki tüm verileri silmek ve yerine yazmak istersek ">" diyebiliriz.

	echo "hepsini sil yerine yaz" > file.txt

less

Dosya içeriğini vim'e benzer bir şekilde görüntelememizi sağlayan bir programdır.

	less dosya_adi
less

mkdir [make directory]

Dizin (klasör) oluşturmak amacıyla kullanılır. Aynı anda birden fazla klasör oluşturulabilir.

Hatta aynı anda iç içe klasörler de direkt olarak tek komutta oluşturulabilir.

	mkdir klasor_adi
mkdir

mv [move]

Dosya ya da dizinlerin taşınmasını sağlar.

Bu arada, GNU/Linux'da dosya ve dizin aynı şeydir, buna ileride değineceğiz.

	mv pamuk_seker tatli_bisey/
mv

cp [copy]

Dosya ya da dizinlerin kopyalanması sağlar.

	cp dosya dosya.backup

"-r" parametresi ise dizinlerin kopyalanması sağlanırken kullanılır.

	cp -r sutlac/ tatli_bisey/
cp

rm [remove]

Dosya ya da dizinlerin silinmesi amacıyla kullanılır.

	rm dosya
	rm -r dizin/

Örneğin aşağıdaki gibi tüm sistemi tek bir komut ile silebilirsiniz. Lakin bu komutun bir çok GNU/Linux dağıtımında çalıştırılması engellidir.

	rm -rf /
sil cnm

wget

Wget; internet protokolleri üzerinden dosya indirme aracıdır.

	wget https://raw.githubusercontent.com/PauSiber/gnulinux/master/hafta1/hafta1.md
wget

!!

Son komutu tekrar yürütür.

!!-elif-hocama-selamlar

history

Önceden yürütülen komutları listeli halde gösterir.

	history

Daha düzenli şekilde görebilmek aşağıdaki gibi bir komut yürütebilirsiniz.

	history | less
history

Bir Kaç Kısa Yol

ctrl + a ile terminalde yazılı olan ifadenin ilk başına gidilir.

ctrl + e ile terminalde yazılı olan ifadenin en sonuna gidilir.

ctrl + l ile terminal temizlenir.

ctrl + d ile terminalden çıkış sağlanır.

ctrl + shift + c ile kopyalama yapılır.

ctrl + shift + v ile yapıştırma yapılır.

ctrl + c ile çalışan uygulama durdurulabilir.

ctrl + z çalışan uygulama arkaya atılır.

ctrl + u o anda satıra yazılan herşeyi siler, temizler.


Terminal'de Çalışan Metin Editörleri

nano

nano

vim

vim

GNU/Linux'da Dosya Sistem Hiyerarşisi

UNIX tabanlı ya da esinlenilmiş işletim sistemlerinin dosya sistem hiyerarşisi Windows işletim sisteminden oldukça farklıdır.

windows-my-computer
windows-my-computer

GNU/Linux sistemlerde bir dosya dizin hiyerarşisi vardır. Bu hiyerarşinin en üstünde "/" yani root(kök) dizini bulunur. Bu, tüm sistemin referans noktasıdır.

dosya-sistem-hiyerarşisi

/ [root(kök) dizini]

Tüm dizinlerin üzerinde bulunan dizindir. Tüm dizinler buradan dallanarak oluşturulur.

/bin

Sistemin temel komutlarının bulunduğu dizindir.

Kullandığımız çoğu komut bu dizin altında bulunur. (cat, mkdir, cp, ls, mv, rm )

/etc

Sistemin bütün yapılandırma dosyaları bu dizin altında bulunur. Yapılandırma dosyası; bir programın işleyişini kontrol etmek için kullanılan yerel bir dosyadır.

/home

Kullanıcıların kayıtlı dosyalarını, kişisel ayarlarını vb. içeren ev dizinleridir. Windows'daki Documents and Settings'e benzetebiliriz. Her bir yeni kullanıcı için alt dizin olarak altına oluşturulur.

- /home
	|-----> dev
	|-----> hasantezcan  
	|-----> boratanrıkulu

/root

Root kullanıcısının home dizinidir. Diğer home dizinlerinden bi farkı yoktur.

/lib

Kernel modülleri ve paylaşılan kütüphane dosyaları bu klasörde bulunur. Var olan çekirdek modüllerini /lib/modules/[versiyon_numarası] içerisinde bulabilirsiniz.

/var

Sistem değişkenlerini saklar. Home dizini kullanıcıların dosyalarını depolarken, /var dizini içinde de programların oluşturduğu veriler tutulur.

/opt

GNU/Linux dosya dizin hiyerarşisine uymayan programların kurulduğu dizindir. Henüz sizlere bahsetmediğimiz "Bağımlılık" kavramına uymayan bu programlar sistemden yalıtılmış halde /opt dizini altından çalışmayı sürdürür.

opt

Not : GNU/Linux sistemlerde her zaman bir dizin içersinde bulunursunuz. Yani ağaç yapısının dışına çıkamazsınız.


Bir dosyanın yeri tarif ederken kullanıdığımız iki türlü yol vardır. Bunlar Tam Yol ve Göreceli Yol dur.

Tam Yol : Her zaman root dizininden başlar ve hedef gösterdiğimiz dizine kadar devam eder. Bu komutu hangi dizinde olursak olalım çalıştırdığımızda sonuç alırız. Çünkü bu tarif hiçbir zaman değişmez. Bunun nedeni de referans aldığı ilk yolun root olmasıdır.

Göreceli Yol : Bu tarifin her zaman geçerliliği yoktur. İçersinde bulununan dizine göre değişiklik gösterir.


Paket Yöneticisi Nedir ?

Hadi şimdi gidip Windows bir sistemde deneme amaçlı bir uygulama kuralım. Örnek olması açısından firefox kurulumu yapalım.

Kurulum için ilk olarak browser açılmalı, ilgili site bulunmalı, ilgili exe dosyası sisteme indirilip, çalıştırılmalı ve ardından kurulum adımları uygulanmalıdır.

Ne kadar ilkelce değil mi ?

GNU/Linux dağıtımlarında böyle bir şey yok arkadaşlar. Paket yöneticisi diye bir kavram var. Paket yöneticisi ile tek bir komut ile istediğiniz uygulamayı kullandığınız dağıtımın repo'larından direkt olarak çekip kurabilirsiniz.

Paket yöneticisi yalnızca bir programdır ama dağıtımdan dağıtıma farklılık gösterir, her paket yöneticisini her dağıtımda kullanamazsınız.

Örneğin Debian'dan türemiş olan Ubuntu, APT isimli bir paket yöneticisi kullanır.

Yani Debian tabanlı dağıtımlarda APT paket yöneticisi kullanılır.

APT dışında, debian tabanlı olmayadan dağıtımlarda kullanılan, birçok paket yöneticisi vardır.

Paket yöneticilerinin kullanımları farklılık gösterebilir. Ancak temelde bütün paket yöneticileri aynı işi yaparlar.

Hadi şimdi bir de terminal üzerinden firefox kurulumunu gerçekleştirelim. Bunun için aşağıdaki komutu yürütmemiz yeterlidir.

	sudo apt install firefox
apt

Şimdi bu komutu inceleyelim..

apt

Burada sudo ifadesini kullanma sebebimiz işlemin sistem dosyaları üzerinde gerçekleşiyor olması. Bu yüzden komutun root yetkisi ile çalışması için komutun başına sudo ifadesini ekledik.

Gördüğünüz gibi kullanımı oldukça basit. APT paket yöneticisinin parametreleri ile ilgili bilgiye aşağıdaki tablodan erişebilirisiniz.

Tablo başlangıçta oldukça korkunç gözükecektir ama paket yöneticisi kullandıkça alışacağınızın garantisini veririz :) .

APTAçıklama
apt search packageNamepaket arar
apt install packageNamepaket yükler
apt remove packageNamepaket siler
apt autoremoveherhangi bir pakete bağlı olmayan gereksiz paketleri siler
apt updaterepo paket bilgilerini günceller
apt update && apt upgradeyüklü paketleri günceller
apt update && apt dist-upgradesistemin tam güncellemesini yapar
apt install –download-only packageNamepaketi yalnızca indirir (paket yöneticisi cache konumuna)
ls /var/cache/apt/archives/paket yöneticisi cache'ni görüntüler
apt install /path/to/packageName.debpaketi dosya ile yükler
tail -f /var/log/dpkg.logpaket yöneticisi log'larını gösterir
apt show packageNamerepo'daki bir paketin bilgisini gösterir
dpkg -s packageNameyüklü olan bir paketin bilgisini gösterir
dpkg -L packageNameyüklü olan paketin dosyalarının konumlarını gösterir
apt-cache policypaket kaynak adreslerini listeler

REPO Kavramı Nedir ?

Az önce paket yöneticisi ile birlikte uygulamaların nasıl kurulacağını öğrendik.

Peki bu paketler nereden geliyor.. İşte burada REPO kavramı ortaya çıkıyor. Her dağıtımın kendisine ait bir REPO'su vardır. Paket yöneticisi ile indirilip kurulan uygulamalar bu REPO'lardan gelir.

REPO adreslerini aşağıdaki gibi görüntüleyebiliriz. Ama lütfen bu dosyaları bir bilginiz yok ise değiştirmeyin.

	vim /etc/apt/source.list

PauSiber Dev'de REPO olarak http://archive.ubuntu.com/ubuntu/ kullanılmaktadır.

repo

REPO'da Olmayan Uygulamalar

REPO'larda yalnızca açık kaynak uygulamalar bulunabilir. Örneğin Google Chrome kapalı kaynak bir uygulamadır. Bu durumda ne yapacağız ?

Not : Chromium açık kaynak olduğu için REPO'larda mevcuttur.

Eğer REPO'larda bulunmayan bir uygulama kurulacak ise ilk yapılması gereken, uygulamanın dağıtıcının sitesinden hangi şekilde edinilmesi gerektiğine bakmaktır. Çünkü birçok farklı şekilde dağıtılıyor olabilir.

Örneğin Google Chrome için bir deb paketi indirmek gerekirken, Spotify kurulumu için REPO listemize ek bir kaynak adresi eklememiz gerekir.

Bu yüzden lütfen dışarıdan bir uygulama kuracaksanız, forumlara ya da youtube'a bakmak yerine, dağıtıcının sitesinden bakın. Orada kesinlikle bir bilgi olacaktır.

chrome
spotify

Bu hafta neler yaptık ?

© PauSiber