Takip et

UNIX/Linux Temelleri: Neden Herkes Bilmeli? Geleceğin Teknolojisine Bir Bakış

Günümüzün hızla dijitalleşen dünyasında, teknolojinin kalbinde yer alan işletim sistemleri, yazılım geliştiricilerden sistem yöneticilerine, hatta sıradan teknoloji meraklılarına kadar herkes için kritik bir öneme sahiptir.

UNIX/Linux Temelleri: Neden Herkes Bilmeli? Geleceğin Teknolojisine Bir Bakış

Günümüzün hızla dijitalleşen dünyasında, teknolojinin kalbinde yer alan işletim sistemleri, yazılım geliştiricilerden sistem yöneticilerine, hatta sıradan teknoloji meraklılarına kadar herkes için kritik bir öneme sahiptir. Özellikle UNIX ve Linux tabanlı sistemler, sunuculardan akıllı telefonlara, bulut altyapılarından nesnelerin interneti (IoT) cihazlarına kadar geniş bir yelpazede karşımıza çıkmaktadır. Peki, neden bu kadar yaygınlar ve bu sistemlerin temellerini öğrenmek neden herkes için bir zorunluluk haline geldi? Bu makale, sizi UNIX/Linux’un büyüleyici dünyasına davet ederek, temel kavramları, komutları ve bu bilginin kariyerinizde size nasıl bir avantaj sağlayabileceğini adım adım keşfetmenizi sağlayacaktır. Gelin, bu güçlü işletim sistemlerinin derinliklerine inelim ve dijital çağın kapılarını aralayalım.

Teknolojinin her geçen gün daha da karmaşık hale geldiği bir dönemde, temel bilgi birikimine sahip olmak, sorunları çözme ve yenilikçi çözümler üretme yeteneğimizi artırır. UNIX ve Linux, bu temel bilgi birikiminin en önemli yapı taşlarından biridir. Açık kaynak felsefesiyle geliştirilen Linux, dünya genelinde milyonlarca geliştirici ve kuruluş tarafından benimsenmiştir. Bu durum, Linux’u sadece bir işletim sistemi olmaktan çıkarıp, devasa bir ekosistem ve sürekli gelişen bir platform haline getirmiştir. İster bir yazılımcı olun, ister bir ağ uzmanı, isterse de siber güvenlik analisti; Linux bilgisi, size sadece bir araç değil, aynı zamanda bir düşünce yapısı kazandıracaktır. Komut satırının gücünü anlamak, sistemlerle daha derinlemesine etkileşim kurmanızı ve otomasyonun kapılarını aralamanızı sağlar. Bu nedenle, UNIX/Linux temellerini öğrenmek, sadece bugünün değil, geleceğin teknoloji profesyonelleri için de vazgeçilmez bir beceridir. Bu yolculukta, sizi sıkmadan, akademik bir dilden uzak durarak, pratik örneklerle bu temel bilgileri edinmeye teşvik edeceğiz. Hazırsanız, terminal ekranının siyah beyaz dünyasına adım atalım ve renkli bir geleceğin temellerini birlikte atalım.

UNIX ve Linux: Karışıklığı Giderelim ve Temel Kavramları Anlayalım

Çoğu zaman birbirinin yerine kullanılan bu iki terim, aslında farklı anlamlara gelir ve aralarındaki farkı anlamak, bu işletim sistemlerinin felsefesini kavramak için hayati öneme sahiptir. Öncelikle, UNIX bir işletim sistemi ailesi ve bir dizi standartlar bütünüdür. 1960’ların sonlarında Bell Labs’ta geliştirilen UNIX, basitliği, modüler yapısı ve taşınabilirliği ile öne çıkmıştır. Bu özellikler, onun farklı donanım platformlarında çalışabilmesini sağlamış ve zamanla Solaris, AIX, HP-UX gibi birçok ticari türevinin ortaya çıkmasına yol açmıştır. UNIX felsefesi, “her şeyi bir dosya olarak gör” ve “küçük, tek iş yapan programlar yaz ve bunları birleştir” gibi prensiplere dayanır. Bu prensipler, sistemin hem güçlü hem de esnek olmasını sağlamıştır.

Linux ise, 1991 yılında Linus Torvalds tarafından geliştirilen bir çekirdek (kernel) olarak ortaya çıkmıştır. Çekirdek, işletim sisteminin en temel parçasıdır ve donanım ile yazılım arasındaki iletişimi sağlar. Linux çekirdeği, UNIX benzeri bir yapıya sahiptir ve açık kaynak kodludur, yani herkes tarafından incelenebilir, değiştirilebilir ve dağıtılabilir. Bu açık kaynak yapısı, Linux’un hızla büyümesini ve dünya çapında bir geliştirici topluluğu tarafından desteklenmesini sağlamıştır. Bir Linux işletim sistemi, sadece çekirdekten ibaret değildir; aynı zamanda GNU projesi tarafından geliştirilen temel yardımcı programları (shell, dosya yöneticileri, metin düzenleyiciler vb.) ve diğer açık kaynak yazılımları da içerir. İşte bu bütünleşik yapıya genellikle “Linux dağıtımı” denir. Ubuntu, Debian, CentOS, Fedora, openSUSE gibi popüler dağıtımlar, Linux çekirdeğini farklı kullanıcı arayüzleri, yazılım paketleri ve yönetim araçlarıyla birleştirerek farklı kullanım senaryolarına hitap ederler. Örneğin, Ubuntu genellikle masaüstü kullanıcıları ve geliştiriciler arasında popülerken, CentOS ve Debian sunucu ortamlarında yaygın olarak tercih edilir. Bu dağıtımlar arasındaki seçim, genellikle projenin gereksinimlerine, kişisel tercihlere ve topluluk desteğine bağlıdır.

UNIX ve Linux sistemlerinin temel bileşenleri, genellikle şunları içerir:

  • Çekirdek (Kernel): Donanım kaynaklarını yöneten, süreçleri planlayan ve sistem çağrılarını işleyen işletim sisteminin kalbidir. Linux’ta bu, Linux çekirdeğidir.
  • Kabuk (Shell): Kullanıcının komutları girdiği ve işletim sistemiyle etkileşim kurduğu bir komut satırı yorumlayıcısıdır. Bash (Bourne Again SHell) en yaygın kabuktur, ancak Zsh, csh gibi başka seçenekler de mevcuttur. Kabuk, kullanıcıdan aldığı komutları çekirdeğin anlayabileceği bir dile çevirir.
  • Dosya Sistemi (File System): Dosyaların ve dizinlerin (klasörlerin) düzenlendiği hiyerarşik yapıdır. Linux’ta her şey bir dosya olarak kabul edilir ve bu, sistemin tutarlılığını ve esnekliğini artırır.
  • Yardımcı Programlar (Utilities): Dosya yönetimi, metin işleme, ağ yapılandırması gibi çeşitli görevleri yerine getiren küçük, özel amaçlı programlardır.
    ls

    ,

    cp

    ,

    grep

    gibi komutlar bu kategoriye girer.

Bu bileşenlerin uyumlu bir şekilde çalışması, UNIX ve Linux’u güçlü, güvenilir ve esnek işletim sistemleri haline getirir. Bu temelleri anlamak, komut satırında daha yetkin olmanızı ve sistemlerle daha derinlemesine etkileşim kurmanızı sağlayacaktır. Ayrıca, bu sistemlerin açık kaynak doğası, sürekli öğrenme ve geliştirme için sonsuz fırsatlar sunar.

Komut Satırı Dünyasına Giriş: Terminal, Kabuk ve Temel Gezinme Komutları

UNIX/Linux dünyasına adım atmanın ilk ve en önemli adımı, komut satırı arayüzü (CLI) ile tanışmaktır. Grafiksel kullanıcı arayüzlerinin (GUI) aksine, CLI size sistem üzerinde çok daha fazla kontrol ve otomasyon yeteneği sunar. Bu bölümde, terminalin ne olduğunu, kabuğun nasıl çalıştığını ve dosya sistemi üzerinde gezinmek için kullanacağınız temel komutları öğreneceksiniz. Bu bilgiler, sadece bir başlangıç değil, aynı zamanda sistem yönetiminden yazılım geliştirmeye kadar birçok alanda size güç katacak temel becerilerdir.

Terminal Nedir ve Nasıl Açılır?

Terminal, aslında bir programdır ve klavyenizden girilen komutları kabuğa ileten ve kabuktan gelen çıktıları ekranda gösteren bir arayüzdür. Çoğu Linux dağıtımında “Terminal”, “Konsole”, “xterm” veya benzeri isimlerle bir uygulama menüsünde bulunur. Genellikle

Ctrl+Alt+T

kısayolu ile hızlıca açılabilir. Terminali açtığınızda, karşınıza genellikle siyah veya koyu renkli bir ekran ve bir komut istemi (prompt) gelir. Bu istem, genellikle kullanıcının adını, makine adını ve mevcut dizini gösterir ve

$

veya

#

(root kullanıcısı için) ile biter. Örneğin:

kullaniciadi@makineadi:~/belgeler$

Komut Yapısı: Komut, Seçenekler ve Argümanlar

UNIX/Linux komutları genellikle basit bir yapıya sahiptir:

komut [seçenekler] [argümanlar]

.

  • Komut: Yapılacak işi belirten ana kelimedir (örneğin,
    ls

    listelemek için,

    cp

    kopyalamak için).

  • Seçenekler (Options/Flags): Komutun davranışını değiştiren veya özelleştiren tek harfli (genellikle tek tire ile:
    -a

    ) veya kelime tabanlı (genellikle çift tire ile:

    --all

    ) parametrelerdir.

  • Argümanlar (Arguments): Komutun üzerinde işlem yapacağı nesnelerdir, genellikle dosya veya dizin adlarıdır.

Örneğin,

ls -l /home/kullaniciadi

komutunda:

  • ls

    : Komuttur (listele).

  • -l

    : Seçenektir (uzun formatta listele).

  • /home/kullaniciadi

    : Argümandır (listelenecek dizin).

Dosya Sistemi Üzerinde Gezinme: Temel Komutlar

UNIX/Linux dosya sistemi hiyerarşik bir yapıya sahiptir ve kök dizin (

/

) ile başlar. Her şey bu kök dizinin altındadır.

  • pwd

    (Print Working Directory):

    Mevcut çalışma dizininizin (yani, şu anda nerede olduğunuzun) tam yolunu gösterir.
  • pwd
    /home/kullaniciadi/belgeler
  • ls

    (List):

    Mevcut dizindeki dosya ve dizinleri listeler.
    • ls -l

      : Dosya ve dizinleri uzun formatta (izinler, sahip, boyut, tarih vb. detaylarla) listeler.

    • ls -a

      : Gizli dosyalar da dahil olmak üzere tüm dosyaları listeler (gizli dosyalar

      .

      ile başlar).

    • ls -lh

      : Uzun formatta ve insan tarafından okunabilir boyutlarla listeler (örn. KB, MB).

  • ls -lh
    toplam 16K
    drwxr-xr-x 2 kullaniciadi kullaniciadi 4,0K May 10 10:00 Belgeler
    -rw-r--r-- 1 kullaniciadi kullaniciadi  245 May 10 09:30 deneme.txt
    drwxr-xr-x 3 kullaniciadi kullaniciadi 4,0K May 09 15:20 Projeler
  • cd

    (Change Directory):

    Dizinler arasında geçiş yapmanızı sağlar.
    • cd Belgeler

      :

      Belgeler

      dizinine geçer (göreceli yol).

    • cd /home/kullaniciadi/Projeler

      :

      Projeler

      dizinine geçer (mutlak yol).

    • cd ..

      : Bir üst dizine geçer.

    • cd ~

      : Kullanıcının ana dizinine (home directory) döner.

    • cd -

      : Bir önceki çalıştığınız dizine geri döner.

  • cd Projeler
    pwd
    /home/kullaniciadi/Projeler

Dosya ve Dizin Oluşturma, Silme, Kopyalama ve Taşıma

Dosya sistemi üzerinde temel işlemleri gerçekleştirmek için aşağıdaki komutları kullanırız:

  • mkdir

    (Make Directory):

    Yeni bir dizin oluşturur.
    mkdir yeni_proje
    ls
    Belgeler  deneme.txt  Projeler  yeni_proje
  • rmdir

    (Remove Directory):

    Boş bir dizini siler. (Dolu dizinleri silmek için
    rm -r

    kullanılır.)

    rmdir yeni_proje
    ls
    Belgeler  deneme.txt  Projeler
  • touch

    :

    Yeni, boş bir dosya oluşturur veya mevcut bir dosyanın erişim/değiştirilme zamanını günceller.
    touch rapor.txt
    ls
    Belgeler  deneme.txt  Projeler  rapor.txt
  • cp

    (Copy):

    Dosyaları veya dizinleri kopyalar.
    • cp kaynak hedef

      :

      kaynak

      dosyasını

      hedef

      olarak kopyalar.

    • cp -r kaynak_dizin hedef_dizin

      : Dizinleri ve içindeki tüm içerikleri kopyalar (

      -r

      recursive anlamına gelir).

    cp rapor.txt rapor_yedek.txt
    ls
    Belgeler  deneme.txt  Projeler  rapor.txt  rapor_yedek.txt
  • mv

    (Move):

    Dosyaları veya dizinleri taşır veya yeniden adlandırır.
    • mv kaynak hedef

      :

      kaynak

      dosyasını

      hedef

      konumuna taşır. Eğer

      hedef

      bir dosya adı ise, dosya yeniden adlandırılır.

    mv rapor_yedek.txt Belgeler/
    ls
    deneme.txt  Projeler  rapor.txt  Belgeler/
    ls Belgeler/
    rapor_yedek.txt
  • rm

    (Remove):

    Dosyaları veya dizinleri siler.
    • rm dosya.txt

      :

      dosya.txt

      dosyasını siler.

    • rm -r dizin

      : Dizinleri ve içindeki tüm içerikleri siler (dikkatli kullanılmalıdır!).

    • rm -rf dizin

      : Dizinleri ve içindeki tüm içerikleri zorla ve onay almadan siler (çok tehlikeli bir komuttur, dikkatli kullanılmalıdır!).

    rm deneme.txt
    ls
    Belgeler  Projeler  rapor.txt

Vaka Analizi: Bir Web Projesi İçin Klasör Yapısı Oluşturma ve Dosyaları Düzenleme

Bir web geliştiricisi olduğunuzu ve yeni bir proje üzerinde çalıştığınızı varsayalım. Projenizin adı

my_website

ve içinde

html

,

css

,

js

,

img

klasörleri ile bir

index.html

dosyası oluşturmanız gerekiyor. Ayrıca, bir

README.md

dosyası ve

style.css

dosyasını da oluşturup, ardından

index.html

dosyasını

html

klasörüne taşıyacaksınız.

# Ana dizinimize gidelim
cd ~

# Yeni proje dizinini oluşturalım
mkdir my_website

# Proje dizinine girelim
cd my_website

# Alt dizinleri oluşturalım
mkdir html css js img

# Ana dosyaları oluşturalım
touch index.html README.md

# CSS dosyasını oluşturalım ve css dizinine taşıyalım
touch style.css
mv style.css css/

# index.html dosyasını html dizinine taşıyalım
mv index.html html/

# Son durumu kontrol edelim
ls -R
.:
README.md  css  html  img  js

./css:
style.css

./html:
index.html

./img:

./js:

Bu basit örnek, komut satırının dosya yönetimi görevlerinde ne kadar verimli ve güçlü olabileceğini göstermektedir. Birkaç komutla karmaşık bir dizin yapısı oluşturabilir ve dosyaları hızlıca düzenleyebilirsiniz. Bu temel komutlara hakim olmak, UNIX/Linux ortamında daha üretken olmanızın anahtarıdır.

Dosya İçeriklerini Görüntüleme ve Arama: Bilgiye Hızlı Erişim

Komut satırında çalışırken, dosyaların içeriğini hızlıca görüntülemek veya belirli metinleri aramak sıkça karşılaşılan ihtiyaçlardır. UNIX/Linux, bu görevler için oldukça güçlü ve esnek araçlar sunar. Bu araçlar sayesinde, büyük log dosyalarını inceleyebilir, yapılandırma dosyalarında değişiklik yapabilir veya belirli bir metin parçasını saniyeler içinde bulabilirsiniz. Bu bölümde, bu temel ancak güçlü komutları ve pratik kullanımlarını inceleyeceğiz.

Dosya İçeriklerini Görüntüleme Komutları

Dosyaların içeriğini görüntülemek için farklı ihtiyaçlara yönelik çeşitli komutlar bulunmaktadır:

  • cat

    (Concatenate):

    Bir veya birden fazla dosyanın içeriğini standart çıktıya (genellikle terminal ekranına) basar. Küçük dosyaları hızlıca okumak için idealdir.
    cat /etc/os-release
    NAME="Ubuntu"
    VERSION="22.04.4 LTS (Jammy Jellyfish)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 22.04.4 LTS"
    VERSION_ID="22.04"
    HOME_URL="https://www.ubuntu.com/"
    SUPPORT_URL="https://help.ubuntu.com/"
    BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
    PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/privacy-policy"
    VERSION_CODENAME=jammy
    UBUNTU_CODENAME=jammy

    Eğer dosya çok büyükse,

    cat

    komutu tüm içeriği ekrana bir anda basacağı için okuması zor olabilir. Bu durumda

    less

    veya

    more

    gibi komutlar daha kullanışlıdır.

  • less

    :

    Dosya içeriğini sayfa sayfa görüntülemenizi sağlar. İleri ve geri gidebilir, arama yapabilir ve dosyayı kapatmak için
    q

    tuşuna basabilirsiniz. Büyük dosyalar için tercih edilen yöntemdir.

    less /var/log/syslog

    Bu komutla log dosyasını açtığınızda,

    Page Up

    /

    Page Down

    tuşları ile gezinebilir,

    /

    tuşuna basıp bir kelime yazarak arama yapabilirsiniz.

  • more

    :

    less

    komutuna benzer şekilde sayfa sayfa görüntüleme yapar, ancak

    less

    kadar gelişmiş değildir (örneğin, genellikle geriye gidemezsiniz).

    more /etc/passwd
  • head

    :

    Bir dosyanın ilk birkaç satırını (varsayılan olarak ilk 10 satır) görüntüler.
    head -n 5 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync

    -n

    seçeneği ile istediğiniz satır sayısını belirtebilirsiniz.

  • tail

    :

    Bir dosyanın son birkaç satırını (varsayılan olarak son 10 satır) görüntüler. Özellikle sürekli güncellenen log dosyalarını izlemek için çok kullanışlıdır.
    tail -n 3 /var/log/auth.log
    May 10 10:30:01 makineadi sshd[1234]: Accepted password for user from 192.168.1.10 port 54321 ssh2
    May 10 10:30:05 makineadi sudo: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/apt update
    May 10 10:30:05 makineadi sudo: pam_unix(sudo:session): session opened for user root(uid=0) by user(uid=1000)

    tail -f /var/log/syslog

    komutu, dosyanın sonuna eklenen yeni satırları gerçek zamanlı olarak ekranda gösterir (

    -f

    follow anlamına gelir). Bu, bir servisin veya uygulamanın loglarını izlemek için vazgeçilmez bir araçtır.

Dosya İçeriklerinde Arama Komutları

Belirli bir metin parçasını veya deseni (pattern) aramak için

grep

ve

find

komutları kullanılır.

  • grep

    (Global Regular Expression Print):

    Bir dosya veya birden fazla dosya içinde belirli bir metin deseni arar ve eşleşen satırları görüntüler. Düzenli ifadeler (regular expressions) kullanarak karmaşık aramalar yapabilir.
    grep "error" /var/log/syslog
    # syslog dosyasında "error" kelimesini içeren satırları bulur.
    
    grep -i "warning" /var/log/syslog
    # "-i" seçeneği ile büyük/küçük harf duyarsız arama yapar.
    
    grep -v "info" /var/log/syslog
    # "-v" seçeneği ile "info" kelimesini içermeyen satırları görüntüler.
    
    grep -r "config" /etc/
    # "-r" (recursive) seçeneği ile /etc dizini altındaki tüm dosyalarda "config" kelimesini arar.

    grep

    , borulama (

    |

    ) operatörü ile diğer komutların çıktısını filtrelemek için de sıkça kullanılır. Örneğin,

    ps aux | grep firefox

    komutu, çalışan tüm süreçler arasında “firefox” kelimesini içerenleri bulur.

  • find

    :

    Belirli bir dizin hiyerarşisi içinde dosya ve dizinleri belirli kriterlere göre arar. Kriterler dosya adı, boyutu, türü, değiştirilme tarihi, izinler vb. olabilir.
    find . -name "*.txt"
    # Mevcut dizin ve alt dizinlerde .txt uzantılı tüm dosyaları bulur.
    
    find /home/kullaniciadi -type d -name "proje*"
    # /home/kullaniciadi dizininde "proje" ile başlayan tüm dizinleri bulur.
    
    find /var/log -size +10M
    # /var/log dizininde boyutu 10MB'tan büyük olan dosyaları bulur.
    
    find /tmp -mtime +7 -delete
    # /tmp dizininde 7 günden daha eski olan dosyaları bulur ve siler (dikkatli kullanılmalıdır!).

    find

    komutu, arama sonuçları üzerinde

    -exec

    seçeneği ile başka komutlar çalıştırma yeteneği sayesinde inanılmaz derecede güçlüdür. Örneğin, belirli bir türdeki tüm dosyaların izinlerini değiştirebilirsiniz.

Bu komutlar, UNIX/Linux sistemlerinde bilgiye erişim ve dosya yönetimi süreçlerini büyük ölçüde hızlandırır. Bu araçlara hakim olmak, hem günlük görevlerinizde hem de daha karmaşık sistem yönetimi senaryolarında size büyük avantaj sağlayacaktır. Unutmayın, pratik yapmak bu komutları öğrenmenin en iyi yoludur.

Kullanıcılar, İzinler ve Süreçler: Sistem Yönetiminin Temel Taşları

UNIX/Linux işletim sistemlerinin güvenli ve düzenli çalışmasının temelinde, kullanıcıların ve grupların yönetimi, dosya ve dizin izinlerinin doğru yapılandırılması ve sistemde çalışan süreçlerin etkin bir şekilde izlenip kontrol edilmesi yatar. Bu kavramlar, çok kullanıcılı ortamlarda sistemin kararlılığını, veri güvenliğini ve kaynak kullanımını optimize etmek için vazgeçilmezdir. Bu bölümde, bu temel sistem yönetimi prensiplerini ve bunlarla etkileşim kurmanızı sağlayacak komutları detaylı bir şekilde inceleyeceğiz.

Kullanıcılar ve Gruplar: Kim Kimdir ve Neye Sahiptir?

UNIX/Linux sistemleri, birden fazla kullanıcının aynı anda çalışmasına olanak tanıyan çok kullanıcılı sistemlerdir. Her kullanıcının kendine ait bir kimliği (UID – User ID) ve birincil bir grubu (GID – Group ID) vardır. Ayrıca, kullanıcılar birden fazla gruba üye olabilirler. Gruplar, dosya ve dizin erişimini daha kolay yönetmek için kullanılır; örneğin, bir projedeki tüm geliştiricileri aynı gruba ekleyerek, o projenin dosyalarına toplu erişim yetkisi verebilirsiniz.

  • whoami

    :

    Mevcut kullanıcının adını gösterir.
    whoami
    kullaniciadi
  • id

    :

    Mevcut kullanıcının UID’sini, birincil grubunu ve üye olduğu tüm grupları gösterir.
    id
    uid=1000(kullaniciadi) gid=1000(kullaniciadi) groups=1000(kullaniciadi),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),126(sambashare)
  • groups

    :

    Mevcut kullanıcının üye olduğu grupları listeler.
    groups
    kullaniciadi adm cdrom sudo dip plugdev lpadmin sambashare

Dosya İzinleri: Erişim Kontrolünün Anahtarı

UNIX/Linux’ta her dosya ve dizinin belirli izinleri vardır. Bu izinler, kimin dosyayı okuyabileceğini, yazabileceğini veya çalıştırabileceğini belirler.

ls -l

komutunun çıktısındaki ilk karakter dizisi bu izinleri gösterir. Örneğin:

-rwxr-xr--

Bu izin dizisi üç ana bölüme ayrılır:

  • İlk Karakter: Dosya türünü belirtir (
    -

    normal dosya,

    d

    dizin,

    l

    sembolik bağlantı vb.).

  • Sonraki Üç Karakter (
    rwx

    ):

    Dosyanın sahibinin (owner) izinleri.
  • Sonraki Üç Karakter (
    r-x

    ):

    Dosyanın grubunun (group) izinleri.
  • Sonraki Üç Karakter (
    r--

    ):

    Diğer kullanıcıların (others) izinleri.

Her bir karakterin anlamı:

  • r

    : Okuma (Read) izni (4)

  • w

    : Yazma (Write) izni (2)

  • x

    : Çalıştırma (Execute) izni (1)

  • -

    : İzin yok (0)

Bu izinler sayısal (oktal) değerlerle de ifade edilebilir. Örneğin,

rwx

= 4+2+1 = 7;

r-x

= 4+0+1 = 5;

r--

= 4+0+0 = 4. Yani

-rwxr-xr--

izinleri

754

olarak ifade edilebilir.

chmod

(Change Mode): Dosya İzinlerini Değiştirme

chmod

komutu, dosya ve dizin izinlerini değiştirmek için kullanılır. Hem sayısal (oktal) hem de sembolik modda kullanılabilir.

  • Sayısal Mod:
    chmod 755 dosya.sh
    # dosya.sh için sahibine okuma, yazma, çalıştırma (7); gruba ve diğerlerine okuma, çalıştırma (5) izni verir.
    
    chmod 644 belge.txt
    # belge.txt için sahibine okuma, yazma (6); gruba ve diğerlerine sadece okuma (4) izni verir.
  • Sembolik Mod:
    chmod u+x script.sh
    # script.sh için sahibine (u) çalıştırma (x) izni ekler.
    
    chmod g-w belge.txt
    # belge.txt için gruptan (g) yazma (w) iznini kaldırır.
    
    chmod o=r index.html
    # index.html için diğerlerine (o) sadece okuma (r) izni verir (diğer tüm izinleri siler).
    
    chmod a+rwx dizin/
    # dizin için tüm kullanıcılara (a - all) okuma, yazma, çalıştırma izni verir (dizinler için çalıştırma izni, içine girme anlamına gelir).

chown

(Change Owner) ve

chgrp

(Change Group): Sahip ve Grup Değiştirme

Bu komutlar, bir dosya veya dizinin sahibini veya grubunu değiştirmek için kullanılır. Genellikle

sudo

ile birlikte root yetkisi gerektirirler.

  • chown yeni_sahip dosya.txt

    :

    dosya.txt

    dosyasının sahibini

    yeni_sahip

    olarak değiştirir.

  • chown yeni_sahip:yeni_grup dosya.txt

    : Dosyanın hem sahibini hem de grubunu değiştirir.

  • chgrp yeni_grup dosya.txt

    : Dosyanın grubunu değiştirir.

  • chown -R yeni_sahip:yeni_grup dizin/

    :

    -R

    (recursive) seçeneği ile dizinin ve altındaki tüm dosyaların/dizinlerin sahibini ve grubunu değiştirir.

sudo

Komutu: Yetkilendirme ve Güvenlik

sudo

(superuser do) komutu, normal kullanıcıların belirli komutları root (süper kullanıcı) yetkileriyle çalıştırmasına olanak tanır. Bu, sistemi sürekli root olarak kullanmaktan çok daha güvenlidir, çünkü sadece ihtiyaç duyulduğunda yüksek yetkiler kullanılır ve her komut için parola doğrulaması istenebilir.

sudo apt update
# Sistemdeki paket listesini günceller (root yetkisi gerektirir).

sudo systemctl restart apache2
# Apache web sunucusunu yeniden başlatır.
sudo

kullanıcısının yetkileri

/etc/sudoers

dosyasında tanımlanır. Bu dosya sadece

visudo

komutu ile düzenlenmelidir, çünkü hatalı bir yapılandırma sistemi kullanılamaz hale getirebilir.

Süreç Yönetimi: Ne Çalışıyor, Nasıl Durdurulur?

Süreçler (processes), çalışan programların örnekleridir. Bir sistemin sağlıklı çalışması için süreçleri izlemek ve gerektiğinde yönetmek kritik öneme sahiptir.

  • ps

    (Process Status):

    Mevcut süreçleri listeler.
    • ps aux

      : Tüm kullanıcıların tüm süreçlerini detaylı bir şekilde listeler.

    • ps -ef

      : Tüm süreçleri hiyerarşik bir şekilde listeler.

    ps aux | grep firefox
    kullaniciadi 1234  5.0  2.5 1234567 234567 ?        Sl   May10 0:30 /usr/lib/firefox/firefox

    Çıktıda PID (Process ID), CPU ve bellek kullanımı gibi bilgiler bulunur.

  • top

    :

    Sistem kaynaklarını ve çalışan süreçleri gerçek zamanlı olarak izler. CPU, bellek kullanımı ve en çok kaynak tüketen süreçleri dinamik olarak gösterir.
    top

    top

    ekranında

    k

    tuşuna basarak bir süreci PID’si ile sonlandırabilirsiniz.

  • htop

    :

    top

    komutunun daha kullanıcı dostu ve renkli bir alternatifidir. Genellikle ayrı olarak kurulması gerekir (

    sudo apt install htop

    ).

    htop
  • kill

    ve

    killall

    : Süreçleri Sonlandırma

    • kill PID

      : Belirli bir PID’ye sahip süreci sonlandırmak için kullanılır. Varsayılan olarak TERM (15) sinyalini gönderir.

    • kill -9 PID

      : Süreci zorla sonlandırmak için KILL (9) sinyalini gönderir. Bu, süreç yanıt vermediğinde kullanılır, ancak verilerin kaybolmasına neden olabilir.

    • killall program_adi

      : Belirli bir program adına sahip tüm süreçleri sonlandırır.

    kill 1234
    # PID'si 1234 olan süreci sonlandırır.
    
    killall firefox
    # Tüm firefox süreçlerini sonlandırır.
  • &

    (Arka Planda Çalıştırma):

    Bir komutu veya programı terminali meşgul etmeden arka planda çalıştırmak için komutun sonuna
    &

    eklenir.

    firefox &
    # Firefox'u arka planda başlatır ve terminali kullanmaya devam edebilirsiniz.

Vaka Analizi: Paylaşımlı Bir Sunucuda Dosya Erişimi ve Hatalı Çalışan Bir Servisi Durdurma

Bir web sunucusunda çalıştığınızı ve bir projenin dosyalarının yanlış izinlere sahip olduğunu varsayalım. Proje dosyaları

/var/www/html/proje_adi

dizininde bulunuyor ve web sunucusu (Apache veya Nginx) bu dosyalara erişemediği için 403 Forbidden hatası veriyor. Ayrıca, bir uygulama sunucusu (örneğin, Node.js uygulaması) yüksek CPU tüketimi nedeniyle sistemi yavaşlatıyor ve yeniden başlatılması gerekiyor.

Adım 1: Dosya İzinlerini Düzeltme

Öncelikle, proje dizinindeki dosya ve dizinlerin sahibini ve izinlerini kontrol edelim. Web sunucusu genellikle

www-data

kullanıcısı ve grubunda çalışır.

# Proje dizinine gidelim
cd /var/www/html/proje_adi

# Mevcut izinleri kontrol edelim
ls -l

# Dosyaların sahibini ve grubunu www-data olarak değiştirelim (root yetkisi ile)
sudo chown -R www-data:www-data .

# Dizinler için çalıştırma ve okuma izni (755), dosyalar için okuma ve yazma izni (644) verelim
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;

# İzinleri tekrar kontrol edelim
ls -l

Bu adımlarla, web sunucusunun proje dosyalarına doğru şekilde erişebilmesi sağlanır.

Adım 2: Hatalı Çalışan Uygulama Sunucusunu Durdurma

Yüksek CPU tüketen Node.js uygulamasını bulup sonlandırmak için

top

veya

htop

kullanabiliriz.

# top komutunu çalıştırın
top

# Çıktıda CPU kullanımı yüksek olan Node.js sürecinin PID'sini bulun (örneğin, 5678)

# Süreci sonlandırın
sudo kill 5678

# Eğer süreç yanıt vermezse, zorla sonlandırın
sudo kill -9 5678

# Sürecin gerçekten sonlanıp sonlanmadığını kontrol edin
ps aux | grep node

Bu vaka analizi, kullanıcı, izin ve süreç yönetiminin gerçek dünya senaryolarında ne kadar kritik olduğunu göstermektedir. Bu temel komutlara hakim olmak, sistem sorunlarını teşhis etme ve çözme yeteneğinizi büyük ölçüde artıracaktır.

Sonuç: UNIX/Linux Yolculuğunuz Başlıyor!

Bu makale boyunca, UNIX/Linux dünyasının temellerini keşfettik. Neden bu işletim sistemlerinin modern teknoloji dünyasında bu kadar kritik bir rol oynadığını, UNIX ve Linux arasındaki farkları, komut satırının gücünü ve dosya sistemi üzerinde gezinme, dosya yönetimi, kullanıcı/izin yönetimi ve süreç kontrolü gibi temel becerileri öğrendik. Gördüğünüz gibi, komut satırı sadece siyah bir ekran ve metinlerden ibaret değil; doğru kullanıldığında inanılmaz derecede güçlü, verimli ve esnek bir araçtır. Bu temel bilgiler, size sadece bir başlangıç noktası sunmakla kalmayacak, aynı zamanda yazılım geliştirme, sistem yönetimi, DevOps, siber güvenlik ve bulut bilişim gibi birçok alanda kariyer kapılarını aralayacaktır. Unutmayın, UNIX/Linux öğrenmek bir yolculuktur ve bu yolculukta sürekli pratik yapmak, yeni komutlar keşfetmek ve sorunlarla yüzleşmek, bilginizi pekiştirmenin en iyi yoludur. Terminali açmaktan çekinmeyin, komutları deneyin ve sistemin nasıl çalıştığını anlamaya çalışın. Bu merak ve pratik, sizi gerçek bir UNIX/Linux ustası yapacaktır. Geleceğin teknolojisini şekillendiren bu güçlü platformun temellerine artık hakimsiniz. Şimdi, bu bilgiyi kullanarak neler başarabileceğinizi görme zamanı!

Sıkça Sorulan Sorular (SSS)

1. Linux öğrenmek ne kadar sürer?

Linux öğrenmek, kişisel hedeflerinize ve ne kadar zaman ayırdığınıza bağlı olarak değişir. Temel komutları ve dosya sistemi mantığını kavramak birkaç hafta sürebilirken, ileri düzey sistem yönetimi, ağ yapılandırması veya kabuk betikleme gibi konular yıllarca pratik gerektirebilir. Önemli olan, sürekli öğrenmeye ve pratik yapmaya devam etmektir. Günlük olarak terminalde zaman geçirmek, bu süreci hızlandıracaktır.

2. Hangi Linux dağıtımını seçmeliyim?

Başlangıç için Ubuntu veya Linux Mint gibi kullanıcı dostu dağıtımlar önerilir. Bu dağıtımlar geniş bir topluluk desteğine, zengin dokümantasyona ve kolay kuruluma sahiptir. Daha sonra ihtiyaçlarınıza göre Debian, Fedora, CentOS gibi farklı dağıtımları deneyebilirsiniz. Sunucu ortamları için genellikle Debian veya CentOS tercih edilirken, geliştiriciler arasında Ubuntu ve Fedora popülerdir.

3. UNIX/Linux bilgisi hangi kariyerlerde avantaj sağlar?

UNIX/Linux bilgisi, yazılım geliştiriciler (özellikle backend, web ve mobil), sistem yöneticileri, DevOps mühendisleri, bulut mühendisleri, siber güvenlik analistleri, veri bilimcileri ve ağ yöneticileri gibi birçok teknoloji kariyerinde büyük bir avantaj sağlar. Sunucuların, bulut altyapılarının ve gömülü sistemlerin çoğu Linux tabanlı olduğu için bu bilgi, sektördeki talebi yüksek olan bir beceridir.

4. Terminalde hata yaptığımda ne yapmalıyım?

Hata yapmak öğrenme sürecinin doğal bir parçasıdır. Yanlış bir komut girdiğinizde veya bir hata mesajı aldığınızda:

  1. Hata mesajını dikkatlice okuyun. Genellikle sorun hakkında ipuçları içerir.
  2. Komutun manuel sayfasını okuyun:
    man [komut_adı]

    komutu size komutun tüm seçeneklerini ve kullanımını gösterir.

  3. İnternette arama yapın: Hata mesajını veya komutu arama motorlarında arayarak benzer sorunları yaşamış diğer kullanıcıların çözümlerini bulabilirsiniz. Stack Overflow veya Linux forumları gibi kaynaklar çok faydalıdır.
  4. Panik yapmayın ve denemekten çekinmeyin (ancak
    sudo rm -rf /

    gibi yıkıcı komutlardan uzak durun!).

#UNIX #Linux #TemelKomutlar #KomutSatırı #SistemYönetimi #AçıkKaynak #Teknoloji #ITKariyer #DevOps #SiberGüvenlik

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık