Unix/Linux Shell ve Shell Script

15 Eki

Kullanıcıların bir bilgisayar organizasyonuna iş yaptırabilmesi için onunla iletişime geçebilmesi gerekir. İşletim sistemi çekirdek yazılımları, son kullanıcıların erişip işlem yapabileceği ortamlar değildir. Bu nedenle kullanıcıların programlar ve komutlar aracılığı ile işletim sistemine ulaşabilmesi ve bilgisayara iş yaptırabilmesi için ara yazılımlar geliştirilmektedir. Bu ara yazılımlar komut satırı veya grafik arabirimi şeklinde olabilmektedir.

Unix veya Linux shell, Linux işletim sistemine erişmek için kullanılan bir kullanıcı arayüzüdür. Kullanıcıların dosya sisteminde gezinmek, dosyaları yönetmek, programları çalıştırmak ve sistemi yapılandırmak gibi görevleri gerçekleştirmek için komutlar yazmasına imkan tanıyan bir programdır.

Linux Ubuntu Shell

Command Prompt olarak adlandırılan $ promptu shell tarafından kullanıcıya sunulur. Shell girilen komutları buradan okur.

Shell Türleri

İki temel shell türü bulunmaktadır.

  • Bourne shell − Eğer Bourne shell kullanılıyorsa, $ karakteri default prompt olarak gelir.
  • C shell − Eğer C shell kullanılıyorsa, % karakteri default prompt olarak gelir.

Bourne shell alt türleri

  • Bourne shell (sh), bulunduğu dizin /bin/sh
  • Korn shell (ksh), bulunduğu dizin /bin/ksh or /bin/ksh93
  • Bourne Again shell (bash), bulunduğu dizin /bin/bash
  • POSIX shell (sh), bulunduğu dizin /bin/ps

C shell alt türleri

  • C shell (csh), bulunduğu dizin /bin/csh
  • TENEX/TOPS C shell (tcsh), bulunduğu dizin /bin/tcsh

Shell Sctipt

Bir shell script temel olarak, yürütme sırasına göre sıralanan komutlar bir listesidir. İyi bir shell scriptte, # işaretinin önünde adımları açıklayan açıklamalar bulunur.

Script içerisinde programlama mantıığında kullanılan koşullu ifadeler, döngüler, dosya işlemleri, değişken tanımlama ve okuma gibi işlemlerin yanısıra fonksiyonlar da tanımlanabilir.

Örnek shell script

Script dosyaları .sh uzantılı olmalıdır. Script’e bir şey eklemeden önce, sistemi bir shell script başlatıldığı konusunda uyarmak gerekir. Bu uyarı aşağıdaki gibi yapılır.

#!/bin/sh

Bu ifade, sisteme aşağıdaki komutların Bourne shell tarafından yürütüleceğini bildirir. Buna shebang denir çünkü # sembolüne hash denir ve ! sembole bang denir.

#!/bin/bash

# Author : Bayram Üçüncü
# Copyright (c) bayramucuncu.com
# Script follows here:
pwd
ls

Bu dosyayı test.sh olarak kaydederek çalıştırılabilir hale getirmek gereklidir.

$ chmod +x test.sh

Çalıştırılabilr test.sh dosyası aşağıdaki şekilde çalıştırılır.

$ ./test.sh

Programın çalıştırılması için ./program_adı kullanılır.

Merhaba Linux Ubuntu Desktop

9 Eki

İş dünyasındaki sunucu ortamlarda sürekli haşır neşir olduğum linux işletim sistemi, son yıllarda container ortamların iyice yaygınlaşmasıyla birlikte yol arkadaşım oldu.

Kişisel bilgisayarımda Linux işletim sistemine taşınmak, uzun süredir aklımda olan planlardan biriydi. Bunun en önemli nedeni, bilgisayrımda yaşadığım kaynak yetersizliğiydi. Bu yetersizliğin en önemli nedenlerinden biri de Windows işletim sistemi üzerinde Linux tabanlı araçlarının kurulabilmesi için yüklenen sanallaştırma platformlarıydı. Bir süre sonra windows üzerinde terminali bile linux tabanlı kullanmaya başlamıştım. O halde uzun süredir kullandığım Windows işletim sisteminden Linux ortamında bir desktop dağıtıma geçme vaktinin geldiğine karar verdim. Community desteğinin de geniş olması nedeniyle seçimim Ubuntu desktop oldu.

Linux dünyasına geçmeden önce geliştirme araçlarımın linux desteğini inceledim ve artık geçişi başlatmaya karar verdim. Refus programı ile bir USB kurlum olşuturdum ve yedekteki SSD diskim üzerine kurulumu yaptım.

Windows çok kullanışlı ve alışık olduğum bir işletim sistemi olması nedeniyle, Linux desktopa alışamam bir hafta kadar sürdü. Kurulumlar, dosya sistemi, sürücülerin tanıtılması vs. derken bir hafta sonunda acemiliğimi atmış oldum. Server versiyondan alışık olduğum için bir çok kurulumu terminal ile yapmaya çalıştım.

Performans konusunda gayet memnun kaldım. Windows üzerinde container ortamlarda ayağa kaldırdığım araçları Linux üzerinde kaldırdığımda kaynak kullanımı neredeyse %50 civarında fark ettiğini gördüm. Bilgisayarın rahatlamasıyla bende rahat bir nefes almış oldum.

Sonuç olarak, eğer geliştirme değil de ofis veya ev amaçlı bir desktop işletim sistemi seçecek olursam yine windows tercih ederdim. Ancak yazılım ve mühendislik amaçlı kullanımda Unix tabanlı bir işletim sistemini (Linux veya Mac) tercih ederim.

WSL Ubuntu Versiyon Güncelleme

26 Ağu

WSL üzerinde çalışan ubuntu veya diğer ürünlerin versionunu görüntülemek için aşağıdaki komut kullanılır.

wsl -l -v

 NAME                   STATE           VERSION
 docker-desktop-data    Stopped         2
 Ubuntu-20.04           Running         1
 docker-desktop         Stopped         2 

Ubuntu versionunu 2 yapmak için kullanılacak komut, kurulu olan ubuntu versiyonuna göre aşağıdaki şekilde yapılmaktadır. Örnekteki 20.04 sürümü kurulumunuza göre değişebilir.

wsl --set-version Ubuntu-20.04 2

 Conversion in progress, this may take a few minutes…
 For information on key differences with WSL 2 please visit https://aka.ms/wsl2
 Conversion complete.

İşlem tamamlandıktan sonra yeni version listesi aşağıdaki gibi olacaktır.

wsl -l -v

 NAME                   STATE           VERSION
 docker-desktop-data    Stopped         2
 Ubuntu-20.04           Running         2
 docker-desktop         Stopped         2 

Docker Nedir?

24 Ağu

Docker nasıl ortaya çıkmıştır?

Docker container teknolojisi, Linux işletim sisteminin çekirdeğine 2008 yılında eklenen Linux Containers (LXC) özelliği ile birlikte doğmuş bir fikirdir. LXC, Linux işletim sistemindeki control groups (cgroups) ve namespaces özellikleri kullanılarak uygulandı ve herhangi bir patch gerektirmeden tek bir Linux çekirdeği üzerinden çalıştırıldı.

Namespaces özelliği, işletim sistemi üzerinde birden fazla process yada uygulama birbirinden izole bir şekilde uygulanbilirliği sağlar. Örneğin Network, Mount, User, Control Group gibi birden fazla namespace bulunabilmektedir.

Control Groups (cgroups) özelliği ise google mühendisleri tarafından linux işletim sistemine eklenmiş bir özelliktir. Bu özellik sayesinde namespace ile izole edilen process’lere ya da uygulamalara CPU, I/O, memory, network gibi kaynak sınırlaması getirilebilmektedir.

Bu gelişmeler ile birlikte Linux işletim sisteminde çalışan iki farklı A ve B uygulamlarını Linux namespaces özelliği ile izeole edip, control groups özelliği ile de A uygulamasına 4Gb Ram, 2 CPU ve B uygulamasına da 2Gb Ram, 1CPU kullanım sınırlaması gibi yapılandırmalar sağlanabilir hale geldi.

Uygulamaların izolasyonu sayesinde her uygulama için bir sanal makine açmak yerine, bir LXC açarak daha ölçeklenebilir bir mimari tasarlanmıştır. Çünkü her uygulama için açılan sanal makinede kullanılamayan atıl kapasiteler meydana gelmektedir. Container yapısı sayesinde atıl kapasiteler daha uygun bir biçimde bölüştürülerek daha fazla uygulamaya hizmet verebilecek hale gelmiştir.

Linux Container ile uygulamaların izolasyonu için ayarlamaların yapılması, paket halinde sunulmuş bir çözüm değildi. Bu nedenle uygulamalarını izole etmek isteyen developer’lar için LXC kullanmak biraz zahmetliydi. Bunun çözümünü 2013 yılında San Francisco’da dotClud firması, Docker isimli açık kaynak kodlu biz çözüm geliştirerek kullanıcılara sunmuştur. Bu gelişme ile birlikte developer ve mühendisler, Docker teknolojisi ile çalışarak, uygulama izolasyonunu kolay bir şekilde sağlayabilmiş ve bu nedenle Docker teknolojisi çok hızlı bir biçimde yaygınlaşmıştır.

Docker her ne kadar açık kaynak ve ücretsiz olsa da, 2014 yıllarında Docker firması şirketlerin ihtiyaçlarını karşılayacak ürünler geliştirerek Docker Enterprise versiyonunu da piyasaya sunmuştur.

Docker nasıl çalışır?

Docker’ın çalışabilmesi için öncelikle siteme bir docker engine kurulmalıdır. Docker engine, aşağıdaki üç temel bileşeni kullanarak uygulamaları geliştirmenize, birleştirmenize, göndermenize ve çalıştırmanıza imkan sağlar. (https://www.docker.com üzerinden indirilerek kurulum yapılabilir.)

Docker Daemon: Docker imajları, container’ları, ağları ve depolama birimlerini oluşturup yöneten bileşendir.

Docker Engine REST API: Docker daemon servisine dışarıdan CLI veya uygulamalar tarafından Rest API aracılığı ile erişerek komutlar verebilmeyi sağlayan bileşendir.

Docker CLI: Docker daemon ile iletişim kurmayı sağlayan komut satırı ya da konsol arayüz bileşenidir.

Docker sayesinde tek bir işletim sistemi üzerinde birden fazla uygulama birbirinden izole bir şekilde çalışabilmektedir.

Windows Üzerinde Docker Kullanımı

Docker kurulabilmesi için Windows’un sanallaştırma özelliğinin açılması istenir. Docker mimarisi Linux üzerinde inşa edildiğinden dolayı Windows işletim sisteminde de kurulan Docker desktop uygulaması, Windows işletim sistemi üzerinde bir Linux sanal makine oluşturmaktadır. Bu sanal makine üzerine docker kurulmaktadır.

Docker Mimarisi

Docker mimarisi, client-server modelini kullanır ve Docker Client, Docker Host, Network, Storage ve Docker Registery/Hub bileşenlerinden oluşur.

Docker Mimarisi

Docker Client

Kullanıcıların Docker Daemon ile iletişim kurabilmesini sağlar. Bir client aynı hostta bulunan Daemon ile veya uzaktaki bir hostta bulunan Daemon ile bağlantı kurabilir. Docker client, kullanıcılara sunduğu komut satırı arabirimi (CLI) ile daemon üzerinde build, run, stop gibi komutlar ile işlemler yapabilmeyi sağlar. Temel amacı, imajların regestry kaynağından çekilerek host’ta çalışmasını sağlamaktır. Genel client komutları:

docker build
docker pull
docker run

Docker Host

Uygulamaları çalıştırmak ve yürütmek için sunulan ortamdır. Host bileşenleri; Docker Daemon, Imaj, Container, Nerwork ve Storage şeklindedir. Docker daemon bütün komutları CLI üzerinden Rest API aracılığı ile alır. Gerektiğinde hizmetlerini yürütebilmek için diğer daemon’lar ile iletişim kurabilir. Daemon, client tarafından istenen container imajlarını çeker ve build eder. Client tarafından istenen imajı çektikten sonra build file(Dockerfile) olarak adlandırılan dosyadaki talimatları uygulayarak container için çalışan bir model oluşturur. Dockerfile içerisinde, container çalıştırılmadan önce Daemon tarafından yüklenmesi gereken bileşenlere ait yönergeler veya container çalıştırıldıktan sonra komut satırından çalıştırılacak talimat ve komutlar bulunmaktadır.

Docker Objects

Uygulamanın container üzerinde ayağa kaldırılması sırasında birçok obje kullanılır. Bunlar:

  • Image
  • Container
  • Network
  • Storage

Image

Image nesnesi, container oluşturmak için kullanılan salt okunur bir binary şablondur. Container ihtiyaçlarını ve yeteneklerini açıklayan meta veriler içerir. Temel olarak uygulamaları depolamak ve taşımak için kullanılır. Örneğin bir asp.net uygulaması yazdığınızda, bu uygulama için oluşturulan container image nesnesi, uygulamanın bütün bağımlılıklarını ve runtime ortamını içeren bir paket şablon oluşturulur. Bu imajlar, şirket içerisinde özel olarak veya dış dünya ile genel olarak Docker Hub gibi genel kayıt alanlarına aktarılarak paylaşılabilir.

Container

Imaj ile planlanmış ve hazırlanmış uygulamanın çalışan haline container denir. Bir imajdan container oluşturulurken network ve storage gibi ek sınırlamalar belirlenebilir. Container çalıştırıldıktan sonra, çalışan container’a bağlanarak içerisinde konfigurasyon ayarları yapmak ta mümkündür. Ancak bu pek önerilen bir işlem değildir. Bunun yerine imaj içerisinde gerekli düzenlemeler yaparak yeniden bir container oluşturmak daha iyi bir yöntemdir. Çünkü container’lar kullan at mantığında çalıştırılan objeler olduğu için, container içerisinde bir problemin çözülmesi durumunda o anlık çözüm oluşturulmuş olur. Container yeniden oluşturulduğunda aynı problem ile ayağa kalkacaktır.

Bir imajdan bir container oluşturulurken ek erişim belirtilmedikçe container sadece imajda belirlenen kaynaklara erişebilir. Container’lar sanal makinelerden çok daha küçük boyutta olduğundan dolayı saniyeler içinde ayağa kalkabilirler. Aynı imajdan birden fazla container oluşturmak da mümkündür.

Network

Docker uygulama odaklı bir biçimde ağ oluşturmayı sağlar ve geliştiricilere ağ ayarlarını belirleme imkanı sunar. Temel olarak Default Doceker Network ve User Defined Network olmak üzere iki türlü ağ kullanılabilmektedir. Varsayılan olarak Default kurulumunda None, Bridge ve Host olmak üzere üç farklı ağ tanımlıdır. None ve Host ağları Docker’daki ağ yığınının bir parçasıdır. Bridge ise otomatik olarak bir gateway ve IP subnet oluşturur ve bu ağa dahil tüm container’lar IP adresleme yoluyla birbirleri ile konuşabilirler. Ancak default bridge network iyi ölçeklenemediği ve ağ kullanılabilirliği açısından kısıtlamaları olduğu için pek tercih edilmez.

Dİğer bir tür ise user-defined ağlardır. Yöneticiler, birden çok kullanıcı tanımlı ağı yapılandırabilir. Bunlar:

  • Bridge Network: Default bridge network ile benzer şekilde çalışır ancak farklı olarak ağ içindeki konteynerlerin birbirleriyle iletişim kurmaları için port yönlendirmeye gerek yoktur. Diğer fark, otomatik ağ keşfi için tam desteğe sahip olmasıdır.
  • Overlay Network: Container’ların farklı host’larda barındırıldığı durumda overlay network (yerel paylaşım ağı) kullanılır. Burada dikkat edilmesi gereken şey, Docker engine’lerin swarm modunun cluster için etkinleştirilmesi gerekir.
  • Macvlan Network: Bridge ve Overlay ağlarını kullanırken, container ile host arasında bir köprü bulunur. Bir Macvlan ağı bu köprüyü kaldırarak, port yönlendirme ile uğraşmadan container kaynaklarını harici ağlara gösterme imkanı sağlar. Bu işlem, IP adresleri yerine MAC adresleri kullanılarak gerçekleştirilir.

Storage

Container içerisinde veri saklayabilmek için bir writable layer bulunur. Container silindiğinde bu writable-layer da silineceğinden dolayı veri kaybı yaşanır. Örneğin bir postgresql container oluşturulup içerisine veriler kaydedildikten sonra container silinirse veritabanına kaydedilen bütün bilgiler de silinmiş olur. Kalıcı veri depolaması için Docker dört seçenek sunar.

  • Data Volumes: Kalıcı bir depolama birimi oluşturma, birim ismini değiştirme, birimleri listeleme ve ayrıca birim ile ilişkili container’ları listelemeyi sağlar. Depolama birimi(volume) host dosya sistemi üzerinde oluşturulur. Veriler container dışına aktarıldığı için container silindiğinde kaybolmaz. Yeni oluşturulan container için aynı dosya yolu berlilendiğinde yeni container da aynı yere yazabilir.
  • Data Volume Container: Özel bir container üzerine bir depolama birimi oluşturularak diğer container’ların da buraya yazması sağlanabilir. Bu sayede volume container ile application container birbirinden bağımsız olur ve bu sayade birden fazla container ile paylaşılabilir.
  • Directory Mounts: Host’ta bulunan bir dizinin bir container’a monte edilmesidir. Önceki bahsedilen durumlarda depolama birimlerin(Volume) Docker birimleri klasörü içinde olması gerekirken, directory mout söz konusu olduğunda, host’taki herhangi bir dizin birim için kaynak olarak kullanılabilir.
  • Storage Plugins: Harici depolama platformlarına bağlanma yeteneği sağlar. Bu eklentiler, depolamayı ana bilgisayardan bir depolama dizisi veya bir cihaz gibi harici bir kaynağa eşler. Docker’ın Eklenti sayfasında bir depolama eklentisi listesi bulunabilir.
    • HPE 3PAR
    • EMC (ScaleIO, XtremIO, VMAX, Isilon)
    • NetApp
    • Azure File Storage
    • Google Compute Platform

Docker Registries

Imajları depolayabileceğiniz ve indirebileceğiniz konumlar sağlayan hizmetlerdir. Başka bir deyişle, bir Docker registry, bir veya daha fazla Docker imajını barındıran Docker depolarını içerir. Public regitery’ler Docker Hub ve Docker Cloud ortamlarıdır. Genel registery komutları:

docker push
docker pull
docker run

Kaynaklar

  • https://www.aquasec.com/cloud-native-academy/docker-container/docker-architecture
  • https://docs.docker.com/get-started/overview

Linux Distribution – Linux Dağıtımı nedir?

21 Ağu

Linux distribution yani Linux dağıtımları, işletim sistemi çekirdeği üzerine yazılmış uygulamalar ve bu uygulamaları kullanmayı sağlayan grafik (GUI) veya komut (CLI) kullanıcı arayüzler ile paketlenmiş ürünlere Linux distribution denir. Bunun yanında, mevcut bir dağıtımı temel alarak da yeni dağıtımlar üretilebilmektedir. Örnek Linux dağıtımları;

  • Debian
  • Ubuntu
  • Red Hat
  • Fedora
  • Mint
  • Alphine

Tüm linux dağıtımları çekirdek olarak aynıdır. Ancak kullanıcı arayüzleri ve programları ile farklılık gösterirler. Bazı linux dağıtımlarında kullanıcı dostu arayüzler sağlanırken bazı dağıtımlarda gereksiz olan her şey çıkartılarak iş odaklı ve light weight ürünler sunulmaktadır.

Linux dağıtımları, bilgisayarın diski üzerine kurulabildiği gibi, hiç kurulum yapmadan flash disk veya cd üzerinden de kullanılabilmektedir.

İsteyen herkes kendi Linux dağıtımını geliştirip sunabilir. Bu durum linux dünyasının özgür yazılım ilkesine uygundur.

Ülkemizde geliştirilen Linux dağıtımları aşağıdaki gibidir.

Günümüzde binlerce Linux dağıtımı piyasaya sürülmüş durumdadır. Bu sürümlerden bazıları geniş bütçeli şirketler tarafından desteklenerek finanse edilmektedir. Her ne kadar özgür bir dünya sunulsa da bazı Linux dağıtımları için sunulan destek ve ürünler firmalar tarafından ücretli bir şekilde sunulmaktadır.

Linux Dosya Sistemi (Filesystem)

9 Haz

Linux dosya türlerini tanıdıktan sonra anlaşılması gereken diğer konu dosya sistemidir. Linux veya Unix işletim sistemlerinde tek bir kök dizin (root directory) bulunur. Windows işletim sisteminde partition sayısına bağlı olarak C, D, E gibi birden fazla kök dizin bulunabilmektedir. Ancak Linux ve Unix işletim sisteminde tüm dosya ve dizinler tek bir kök dizin altında hiyerarşik olarak bulunurlar. Kök dizin “/” karakteri ile temsil edilmektedir. Sürücü bölümleri, kök dizinin altındaki dizinlere monte edilir.

  • /
    • /bin
    • /boot
    • /dev
    • /home
    • /lib
    • /media
    • /mnt
    • /opt
    • /proc
    • /proc
    • /root
    • /sbin
    • /srv
    • /sys
    • /tmp
    • /usr
    • /var
    • /lib64

/bin (Temel kullanıcı komutları)

Linux işletim sisteminin bir parçası olan ve tüm kullanıcılar tarafından yürütülebilir programları içerir. Cat, cp, ls, more ve tar gibi birçok Linux komutu bu dizinde bulunur.

/boot (Sabit önyükleme dosyaları)

Kernel ve bootloader dosyalarını içerir.

/dev (Aygıt dosyaları)

Aygıt dosyalarını içerir.

/etc (Konfigürasyon noktaları)

İşletim sistemine özel konfigürasyon dosyalarını içerir.

/home (Kullanıcı ana dizinleri)

Kullanıcılara ait ana dizindir. Örneğin kullanıcı adı “bayram” olan bir kullanıcı için sistemde /home/bayram şeklinde bir dizin mevcuttur.

/lib (Temel paylaşılan kütüphaneler)

32 bit sistemler için kernel modülleri ve paylaşılan program kütüphanelerini içerir.

/media (Takılıp çıkarılabilir medya)

Bilgisayara takılıp çıkarılabilir medya aygıtlarının bağlandığı alt dizinleri içerir. Örneğin, Linux sisteminize bir CD yerleştirdiğinizde, /media dizininde otomatik olarak bir dizin oluşturulur ve bu dizinin üzerinden CD’nin içeriğine erişebilirsiniz.

/mnt (Geçici bağlanma noktaları)

Boş bir dizindir. Geçici olarak monte (mount) edilen dosya sistemleri için kullanılan bir dizindir. Montaj, bir dosya sistemini sistem tarafından kullanılabilir hale getirme işlemidir. Standart bağlama noktaları /mnt/cdrom ve /mnt/floppy şeklindedir.

/opt (İsteğe bağlı paketler)

İsteğe bağlı yazılım paketleri için alt dizinler içerir. Genellikle derlediğiniz yazılımların bulunduğu yerdir. Uygulamalar /opt/bin dizininde ve /opt/lib dizinindeki kitaplıklarda bulunur.

/proc (Kernel ve işlem dosyaları)

Sistem durumu ve işlemlerin durumlarını içerir. /dev gibi sanal bir dizindir. Bilgisayarınız hakkında, CPU’nuz ve Linux sisteminizin çalıştırdığı çekirdek gibi bilgiler içerir.

/root (Kök giriş dizini)

Bu dizin, superuser olan ve administrator olarak bilinen root kullanıcısına ait ana dizindir. root kullanıcısının dosyaları /home yerine burada bulunur.

/sbin (Sistem yönetim dosyaları)

Sistem binary komutlarını içerir. Superuser kullanıcısının çalıştırabileceyi uygulamaları içerir. Bu uygulamaları sudo komutu ile kullanabilirsiniz.

/srv (Servis verisi)

Sistem tarafından sunulan hizmetler (HTTP, FTP vb.) İçin veri içerir. Linux kutunuzdan bir web sunucusu çalıştırıyorsanız, siteleriniz için HTML dosyalarınız /srv/http (veya /srv/www) içine gider. Bir FTP sunucusu çalıştırıyorsanız, dosyalarınız /srv/ftp‘ye gider.

/sys

Linux çekirdeği tarafından görüldüğü gibi, aygıtlar hakkında bilgi içeren özel bir dizin.

/tmp (Geçici dosyalar)

Uygulamalar geçici dosyaları /tmp dizininde depolar. Bu dosyalar genellikle sisteminiz her yeniden başlatıldığında silinir ve tmpwatch gibi yardımcı programlar tarafından herhangi bir zamanda silinebilir.

/usr (Kullanıcı dosyaları ve salt okunur Veriler)

Sistem tarafından kullanılan uygulamaların ve dosyaların aksine, kullanıcılar tarafından kullanılan uygulamaları ve dosyaları içerir. Örneğin, temel olmayan uygulamalar /bin dizini yerine /usr/bin dizininde bulunur ve temel olmayan sistem yönetim ikili dosyaları /sbin dizini yerine /usr/sbin dizininde bulunur.

/var (Değişken veri dosyaları)

Zaman, sayı ve boyut olarak zamanla değişme eğilimi olan log, mail dizinleri, yazdırma kuyruğu biriktirme gibi çeşitli sistem dosyalarını içerir.

/lib64

64 bit sistemler için kernel modülleri ve paylaşılan program kütüphanelerini içerir.

Linux Dosya Türleri

8 Haz

Linux ve Unix öğrenirken bilinmesi gereken önemli konulardan biri dosya sistemidir.

Anlamamız gereken ilk şey, Linux ve Unix’in genel olarak, donanım birimleri de dahil her şeye bir dosya olarak davranacak şekilde tasarlanmış olmasıdır. Linux işletim sistemi çalışırken, gerekli olan dosyayı açar okur veya yazar ardından da kapatır. Her şeye dosya olarak bakıldığından dolayı dosya sistemine ait standartlar oluşturulmuştur.

Regular (Normal)

Normal dosyalar genel olarak html, text, word veya çalıştırılabilir dosyalardır.

Directory (Dizin)

Linux işletim sisteminde dizin, diğer dosya türlerini tutmak veya işaret etmek için özel olarak tasarlanmış bir dosya türüdür.

Link (Bağlantı)

Linux / UNIX sistemlerinde iki tür link (bağlantı) vardır.

  • Soft/Symbolic Link: Bir dosya veya dizinin dolaylı bir göstergesidir. Sabit bağlantının aksine, sembolik bağlantı farklı bir dosya sistemindeki veya bölümdeki bir dosyayı veya dizini işaret edebilir. Windows işletim sistemindeki bir kısayol gibidir.
  • Hard Link: Sabit bir bağlantıyı mevcut bir dosya için ek bir ad olarak düşünebilirsiniz. Sabit bağlantılar iki veya daha fazla dosya adını aynı inode ile ilişkilendirir. Çok fazla tercih edilmez.

Special (Aygıtlara özel)

  • Character File: Tek karakterlik girişi kabul edereler. Klavye Giriş/Çıkış işlemleri, yazıcı, teyp sürücüsü veya terminal gibi gerçek bir fiziksel aygıtı temsil etmek için kullanılır.
  • Block File: Sabit disk gibi depolama aygıtlarını gösterir.
  • Pipe File: Uygulamalar arasında bilgi göndermeye izin verir. Bir uygulama, başka bir uygulamaya bilgi gönderecekse pipe file kullanır.
  • Socket File: Pipe file gibi çalışır. Ancak bilgi alışverişinin ağ ortamında yapıldığında devreye girer.

Temel Linux Bileşenleri

7 Haz

Linux işletim sistemin nasıl çalıştığını anlamak için, Linux temel bileşenlerini bilmek gerekmektedir.

Kernel (Çekirdek)

Bir işletim sisteminin çekirdeği ve en temel birimidir. Her işletim sisteminde sadece bir tane Kernel bulunur. Ağırlıklı olarak C programlama dili ile geliştirilmiş programlardan meydana gelmiştir. Kernel, bilgisayar donanımı ile doğrudan iletişim kurar. Kernel’in işletim sistemindeki bazı temel görevleri:

  • Kullanıcının yetkili bir kullanıcı olup olmadığını kontrol etmek.
  • Çalıştırılan programları izlemek ve her programa belirli bir zaman ayırmak..
  • Sistemdeki dosyalar için depolama alanı atamak.
  • Shell programlarını çalıştırmak.
  • Bilgisayarlar ve terminaller arasında bilgi aktarımı yapmak.

Shell (Kabuk)

Linux işletim sistemi, komutları klavyeden bilgisayara aktarmak için shell bileşenini kullanır. Shell de C programlama dili ile yazılmış bir programdır. Kullanıcı programları ve kernel arasında tercüman görevi görür. Kullanıcı komutlarını eyleme dönüştürür. Shell, komutları alan ve uygun programı yürüten ya da çekirdeğin anladığı yönergelere çeviren bir programdır.

Shell kullanıcılarla etkileşime girerken, kernel makinenin donanımıyla etkileşime girer.

Örneğin shell, klavyeden girdiğimiz “ls” komutunu kernel tarafından anlaşılabilecek bir formata dönüştürür.

Linux’ta varsayılan shell bash’tir.

User Programs (Kullanıcı Programları)

Linux işletim sisteminde bir takım araçlar vardır. Bu araçlar, işletim sisteminin kullanımını kolaylaştırmak amacıyla üçüncü şahıslar veya firmalar tarafından yazılmış kullanıcı programlarıdır. Bu araçlar, programlama, iş uygulamaları ve Office, vi gibi kelime işleme uygulamaları şeklinde gruplandırılabilir.

Ubuntu 18.04 üzerine PostgreSQL 12 kurulumu

17 May

PostgreSQL veritabanı, Linux gibi tamamen ücretsizdir ve açık kaynak kodludur. Bu yazıda Linux Ubuntu 18.04 dağıtımı üzerine PostgreSQL kurulumu anlatılmaktadır.

Ubuntu 18.04 dağıtımı üzerine Postgresql 12 kurulumu yapmak için öncelikle repository paket versiyonunu kontrol etmek gerekmektedir. Repository paket kontrolünün nasıl yapıldığına bir önceki yazıdan ulaşabilirsiniz.

PostgreSQL Kurulumu

Ubuntu sürümünüzde bulunan PostgreSQL sürüm istediğiniz sürüm değilse, güncellemek için PostgreSQL Apt Repository kullanılabilir. Bunun için öncelikle yapılması gereken:

/etc/apt/sources.list.d/pgdg.list

dosyası oluşturmaktır. Bu dosyanın içerisine aşağıdaki satır eklenmelidir.

deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main

Daha sonra depo imzalama anahtarını (signing key) içe aktarılmalı ve paket listeleri güncellenmelidir.

sudo apt-get update

Artık ortam postgresql 12 yüklemesi için hazır durumdadır. Yükleme komutu:

sudo apt-get -y install postgresql-12 postgresql-client-12

Yükleme tamamlandığında, postgresql servisini başlatmak için gerekli komut:

sudo systemctl start postgresql

artık servis durumu kontrol edilebilir.

sudo systemctl status postgresql

PostgreSQL Bağlantısı

PostgreSQL kurulumu sonrasında Ubuntu kullanıcılarına postgres adında bir sistem kullanıcısı otomatik olarak oluşturulur. Başlangıçta, diğer kullanıcılar oluşturulana kadar bu kullanıcısı ile PostgreSQL’e bağlanmanız gerekir.

sudo su postgres

komutu ile postgres kullanıcısına geçilerek psql komutu çalıştırıldığında artık veritabanı komutlarını kullanabilirsiniz.

\l

komutu ile veritabanları listelenebilir.

\c postgres

komutu ile postgres veri tabanına bağlanabilirsiniz. (Kurulum sırasında postgres veritabanı otomatik olarak oluşturulur.)

Postgresql veritabanını konsol ortamından yönetmek biraz kullanışsızdır. Bunun yerine pgAdmin, Datagrip gibi araçlar tercih edilmelidir.

PostgreSQL Remote Ayarları

Postgresql sunucusu dışından bağlantı yapabilmek için uzak bağlantı ayarlarını yapmak gerekmektedir. Bu ayarlar aşağıdaki dosyada bulunmaktadır.

/etc/postgresql/12/main/postgresql.conf

Bu dosya vim editörü ile açılarak

listen_addresses = '*'

satırı açık konuma getirilmelidir.

Daha sonra,

etc/postgresql/12/main/pg_hba.conf

dosyasında ip tanımlaması yapılmalıdır. (hba: host based authentication)

  • “host   all   all   212.0.103.8/32   md5″ şeklinde ayarlama yaparsanız istediğiniz tek bir adresten erişim sağlayabilirsiniz. Bu ip dışından bağlantı sağlanamaz.
  • “host   all   all   0.0.0.0/0          md5″ şeklinde ayarlama yaparsanız herhangi bir ip üzerinden sunucuya bağlanabilirsiniz. Burada password authentication kimlik doğrulama yöntemi ve  md5 algoritması kullanılmıştır. (Postgresql veri tabanında ayrıca trust, ident, peer, GSSAPI, LDAP kimlik doğrulama yöntemleri de mevcuttur.)

(Postgre

Bu ayarların yapıldıktan sonra aktif olabilmesi için postgresql servisinin yeniden başlatılması gerekmektedir.

sudo systemctl restart postgresql

Artık veritabanına uzak bağlantı sağlanabilir.

Ubuntu repository paketi sürüm kontrolü

16 May

Window gibi işletim sistemlerinde, kullanmak istediğimiz programlar exe, msi gibi paketler halinde dağıtılırken, Ubuntu gibi sistemlerde, ihtiyacınız olan programlar ve kitaplıklar .deb dosyalarında paketlenir ve dağıtılır. Bu dosyalar indirilebilir veya CD ortamında size gelebilir.

Ubuntu gibi sistemlerde “repository” diye adlandırılan paket depoları mahiyetinde kullanılan sunucular bulunmaktadır. Bu depolarda bulunan paketlere genellikle Synaptic gibi araçlarla erişirsiniz. Bu araçlar, sisteminizde yüklü olan paketleri ve depoda yüklemeye hazır durumda bulunan paketlerin listeler.

Ubuntu kurulduğunda mevcut Synaptic repository listesinde, kullanıcılara gerekli olan  programların o güne kadar güncellenmiş sürümleri bulunmaktadır. Ancak programlar işletim sistemlerinden daha hızlı gelişim gösterebilmektedirler. Ubuntu ortamına kurulmak istenen bir program “apt-get install” komutu ile yüklenirse, listedeki son sürümü indirip yüklenir. Bu nedenle, bir programı yüklemeden önce versiyon kontrolü yapmak faydalı olabilir. Örneğin postgresql versiyon kontrolü için kullanılacak komut şu şekildedir:

apt-cache policy postgresql

Bu komut çalıştırıldığında, sistemdeki postgresql durumunu listeler.

  • Listede 3 farklı sürümden bahseder. Bunlar;  10.13-1.pgdg18.04, 10.12-0ubuntu0.18.04.1 ve  10.3-1. Ayrıca hangi depolardan geldiklerini de gösterir.
  • Installed (none) bilgisi bize sistemde yüklü bir postgresql kurulumu olmadığını gösterir.
  • Candidate bilgisi, şu anda apt-get install komutu çalıştırıldığında yüklenecek sürüm bilgisini verir.