Ocak 15, 2020

Temel GNU/Linux Bilgisi

İzmir Fen Lisesi

@boratanrikulu

Bora Tanrıkulu

Linux nedir?

Bir çekirdek.

Linux Torvalds

tarafından 1991'de yazılmıştır.

(dipnot: "just for fun")

UNIX'den

esinlenerek, kapalı bir kaynak olan UNIX'e bir alternatif olması amacıyla yazılmıştır.

UNIX çatallanması (fork) değildir. Direkt alınmış hiç bir kod yoktur.

Çekirdek nedir?

İşletim sisteminin

bir bölümü.

İşletim sisteminin kalbidir diyebiliriz.

Fakat kalp tek başına bir vücud değildir, değil mi?

İşletim sistemleri

iki ana kısımdan oluşur.

Kernel (çekirdek) ve Shell (kabuk).

Kernel

uygulamalar ile donanım arasında çevirici görev görür. Çevirmendir.

Fiziksel donanımla yazılım arasındaki haberleşmeyi sağlar.

Shell

işletim sistemindeki uygulamaların, kernel ile haberleşmesinin arasında bulunan ara bir katmandır. Kernel'e kabuk üzerinden erişiriz.

İşletim sistemi.

O halde, hani nerede işletim sistemi?

GNU

Özgür yazılımı amaç edinmiş bu işletim sistemi, 1983 yılında

Richard Stallman

tarafından geliştirilmeye başlanmıştır.

Belli bir süre HURD çekirdeğini kullanan GNU;

1991'de Linux'un duyurulması ve Linux çekirdeğinin popülerlik kazanmasıyla, GNU işletim sisteminde, çekirdek olarak Linux'a geçiş yapılmıştır.

GNU (Hurd)

GNU/Linux

1991'den sonra.

Bu sebeplerden dolayı

yalnızca Linux demek yanlıştır.

GNU/Linux

olarak söylenmesi daha doğrudur.

GNU/Linux'a

neden ihtiyacımız var?

GNU/Linux'a

Neden İhtiyacımız Var ?

GNU/Linux'un size sağlayacağı bir çok avantaj var.

  • Yüksek düzeyde özelleştirilebilmesi.
  • Ücretsiz olması. (Her dağıtım ücretsiz değildir.)
  • Hızlı ve Kararlıdır. (Donanım desteği olduğu taktirde.)
  • GNU/Linux için zararlı yazılım sayısının az olması.
  • Özgür Yazılım olması.
  • Açık kaynak olduğu için, sorun tespitinin
    ve çözümünün oldukça hızlı olması.
    (Community.)
  • Yardım bulabilmeniz için bir çok topluluğun olması;
    bir şirkete bağlı değilsiniz, yalnız değilsiniz!

GNU/Linux

özgür bir yazılımdır.

 

Peki özgürlük nedir?

Hayır, hayır.

 

Yazılımsal olarak değil.

Gerçekten özgürlük nedir?

Bir şeyin özgür olması için bu 4 şartın yerine getirilmesi gerekir.

 

  1. Çalıştırılabilirlik: İlgili şeyin istendiği şekilde ve doğrultuda çalıştırılabilmesi.

  2. Değiştirilebilirlik: İlgili şeyin şeyin istendiği amaç doğrultusunda değiştirilebilmesi. İstediğimiz şekilde ekleme çıkarma yapılabilmesi.

  3. Dağıtılabilirlik: İlgili şeyin herhangi biri tarafından tekrardan dağıtılabilir, toplulukla bunu paylaşabilmesi.

  4. Değiştirip dağıtılabilirlik: İlgili şeyi istenildiği gibi çalıştırılması, o şeyi istediğimiz doğrultuda değiştirip ve geliştirip bu haliyle yeniden dağıtabiliriz.

Bu şartları yerine getiren

her şey özgürdür.

 

İster kitap olsun,

ister donanım,

ister yazılım,

ister bir bira..

Özgür yazılım,

ücretsiz anlamına gelmez.

Özgürlük şartılarında ücretsiz olmalıdır diye bir şart yoktur.

 

To understand the concept, you should think of “free” as in “free speech,” not as in “free beer”.

Özgürlüğün getirisi,

çeşitlilik.

Distro (dagıtım) nedir?

GNU/Linux isimli indirip kurabileceğiniz bir işletim sistemi aslında yoktur.

Bir çok distro vardır.

Distro, yani dağıtım, özgür yazılım felsefesinin çok alternatifli dünyasının bir sonucu olarak ortaya çıkmış, GNU/Linux'a özgü bir terimdir.

Binlerce dağıtım..

Ubuntu

Archlinux

Temel dagıtımlar

  • Debian

    • Ubuntu
    • Pardus
  • Red Hat

    • CentOS
    • Fedora
  • Slackware

  • Arch <3

    • Manjaro
  • OpenSuse

Terminal nedir?

Terminal, işletim sisteminizi shell ile kullanmanızı sağlayan bir arayüzdür.

 

Girdi ve çıktı şeklinde çalışır.

 

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

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

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;

  • sh
  • bash
  • zsh
  • csh
  • ksh
  • tcsh

Temel komutlar

  • ls (list)
  • man (manuel, tldr)
  • cd (change directory)
  • pwd (print working directory)
  • touch
  • cat (tac)
  • echo (>>, >)
  • less (more)
  • mkdir (make directory)
  • mv (move)
  • cp (copy, -r)
  • rm (remove, -r)
  • wget (curl)
  • !!
  • history

Terminal kısa yolları

  • 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 ve ctrl + shift + v ile kopyalama - 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 kullanılan metin düzenleyicileri

  • Nano
  • 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.

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.

 

"/" ile "/root" birbirinden farklıdır.

  • / [root(kök) dizini]

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

 

  • /bin

    Sisteminin 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
    	|-----> f  
    	|-----> boratanrikulu

     

  • /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çersinde 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. "Bağımlılık" kavramına uymayan bu programlar sistemden yalıtılmış halde /opt dizini altından çalışmayı sürdür.

     

     

GNU/Linux sistemlerde

herzaman 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 kavramı vardır.

Bunlar tam yol ve göreceli yoldur.

"/var/log" dizi altında olduğumuzu düşünelim.

Yani pwd komutunun çıktısı

 

 

Bu dizinin içersinde de

"http" diye bir dizin var.

/var/log

Bu dizine girmek istersek,

tüm adresini yazmadan,

 

yapmamız yeterlidir.

 

Buna göreceli yol denir.

cd http

Fakat eğer /var/log altında değilsek

ve /var/log/http'e girmek istiyorsak,

 

 

Buna da tam yol denir.

cd /var/log/http

Paket yöneticisi nedir?

Paket yöneticisi ile tek bir komut ile istediğiniz uygulamayı kullandığınız dağıtımın repo'larından direkt olarak çekip kurabilmenize olanak sağlayan,

El ile derlemeden, kolacak sisteminize paketleri kurabileceğiz bir programdır.

Paket yöneticisi yalnızca bir programdır ama dağıtımdan dağıtıma farklılık gösterir.

 

Her paket yöneticisi her dağıtımda kullanamazsınız.

Paket yöneticisi yalnızca bir programdır ama dağıtımdan dağıtıma farklılık gösterir.

 

Her paket yöneticisi her dağıtımda kullanamazsınız.

Örneğin, archlinux tabanlı dağıtımlarda Pacman isimli paket yöneticisi kullanılır.

 

Pacman dışında, archlinux tabanlı olmayadan dağıtımlarda kullanılan,

bir çok paket yöneticisi vardır.

  • dnf(yum) - fedora
  • apt - debian
  • portage - gentoo
  • zypper - opensuse

 

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

 

Dağıtımın repolarında bulunan paketlerin sisteme indirilmesi, kurulması.

Örneğin archlinux tabanlı bir dağıtımda,

firefox'u kurmak istersek,

aşağıdaki gibi kurulumu yapabiliriz.

pacman -S firefox
sudo pacman -S firefox
 |     |     |   |_________ Parametre 2
 |     |     |
 |     |     |_____________ Parametre 1
 |     |
 |     |___________________ Paket yöneticisi
 |
 |_________________________ Yetki

Burada sudo ifadesini kullanma sebebimiz işlemin sistem dosyaları üzerinde

işlemler gerçekleşiyor olması.

 

Bu yüzden

komutun root yetkisi ile çalışması için komutun başına sudo ifadesini ekledik.

Pacman ve APT cheatsheet

 

boratanrikulu.dev/pacman-ve-apt-cheatsheet/

Repo kavramı.

Bu paketler nereden geliyor?

Peki bu paketler nereden geliyor?

İşte burada "repo" kavramı ortaya çıkar.

 

Her dağıtımın kendisine ait bir repo'su vardır.

 

Paket yöneticisi ile indirilip kurulan uygulamalar bu repo'lardan gelir.

vim /etc/apt/source.list

Kullanıcı nedir?

Grup nedir?

GNU/Linux'da yürütülecek tüm komutların

bir yetki sınırı vardır.

Bu yetki sınırı, kullanıcı kavramı ile belirlenir.

Ortak yetki sahipliği bulunan kullanıcıları

Bir grup haline getirerek, işlem kolaylığı sağlanır.

Bu da grup kavramını açıklar.

Sistem kullanıcı eklenmesi

 

"useradd" komutu ile yapılır.

Kullanıcıyı kendi istediğimiz şekilde eklemek amacıyla,

parametreler ile kullanıcıyı özelleştiririz.

Sisteme bir kullanıcı ekleyelim.

sudo useradd --create-home \
             --shell /bin/zsh \
             --groups users \
             yenikullanici

Bu kullanıcıya bir parola verelim.

sudo passwd yenikullanici

Kullanıcıya root yetkili gruba ekleyelim.

sudo gpasswd --add yenikullanici wheel

Grupların root yetkisi sudoers dizininden belirlenir.

Sistemideki kullanıcılar "/etc/passwd" altında görülebilir.

Bu ifadeyi aşağıdaki gibi okuruz.

root:x:0:0::/root:/bin/bash
  • root - kullanıcı adı.
  • x - kullanıcının parolasını temsil eder.
  • 0 - kullanıcının id'si. (uid)
  • 0 - kullanıcının ait olduğu grubun id'si. (gid)
  • /root - kullanıcının ev dizini.
  • /bin/bash - kullanıcın varsayılan shell'i.

Sisteme bir grup ekleyelim.

sudo groupadd yenigrup

Oluşturduğumuz kullanıcıyı bu gruba ekleyelim.

sudo gpasswd --add yenikullanici yenigrup

Not : Burada --add parametresi oldukça kritiktir. Eğer kullanılmaz ise kullanıcıyı hali hazırda bulunduğu tüm gruplardan çıkarır

ve yeni gruba ekler.

Sistemideki gruplar "/etc/group" altında görülebilir.

Sistemdeki kullanıcıların parolaları "/etc/shadow"'da tutulur.

Buradaki veriler hash'lenmiştir.

Dosya ve dizin

farklı şeyler mi?

Hayır. Aynı.

 

GNU/Linux'ta her şey birer dosyadır.

Dizinler, dosyaların konumunu belirten

birer özel dosyadır.

 

Dizinler veri içeremez,

yalnızca konum belirtmek

amaçlı kullanılabilirler.

 

Dizinlerin bir türü yoktur, uzantısı yoktur.

Dosyaların ise bir türü vardır, uzantısı bulunabilir.

 

Dizin ve dosya isimleri aynı olamaz.

Dosya izinleri.

"ls" ile dosyalarının izin ve sahipliklerini inceleyebiliriz.

ls -l

Dosya ve dizin işlemlerine bakıldığında 10 karakterden oluşan bir yapı görünür.

Bu karakterler

  • dosyalar için r[read] okumak, w[write] yazmak, x[execute] çalıştırmak
  • dizinler için r[read] içeriğini görüntüleyebilmek, w[write] alt dosya ve dizinler oluşturabilmek, x[execute] cd ile içine girebilmek

izinlerini temsilen kullanılır.

Bunları aşağıdaki gibi üçerli olarak gruplandırarak incelemekte fayda vardır.

Yani bu örnektekinin;

  • bir dizin olduğunu,
  • dosya kullanıcısının okuma/yazma/çalıştırma,
  • dosya grubunun okuma/çalıştırma,
  • diğer herkesin de okuma/çalıştırma

iznine sahip olduğunu görüyoruz. Ayrıca bu dosyaların fsutil kullanıcısına ait olduğunu ve group'unun users olduğunu incelemiş olduk.

Sahipliğin değiştirilmesi.

chown yeni_sahip:yeni_group dosya_adi

İzinlerin değiştirimesi.

chmod kim=izin_yetkisi dosya_adi

İki türü var.

 

  • Text
  • Numerik

Text.

chmod o-rwx -R dizin/
Text Class Açıklama
u Owner Dosyaya sahip olan kullanıcı
g Group Dosyanın ait olduğu grup
o Other Diğer herkes
a All Herkes (ugo ile aynı anlama gelir)
Operator Açıklama
+ Yetkiyi ilgili kullanıcılara ekler
- Yetkiyi ilgili kullanıcılardan çıkarır
= Yetkiyi eşitler

Numerik.

chmod 744 -R dizin/
İzin Numara Karşılığı
r 4
w 2
x 1

Numarasal izni görüntüleme.

stat -c %a dosya_adi

Dosyanı kilitlemek.

chattr +i dosya_adi
chattr -i dosya_adi

Ssh.

Systemctl.