Linux Nasıl Çalışır?
Bu yazımda sizlere Linux hakkında temel bilgiler vereceğim, ardından Linux ile ilgili olan TryHackMe odalarının çözümlerini paylaşacağım. Son olarak da Linux Crontab nedir ve ne işe yarar bundan bahsedeceğim.
Linux İşletim Sistemleri Nelerdir?
Öncelikle Linux’un ne olduğuna bakalım. Linux açık kaynak kodlu bir işletim sistemidir, Unix benzeri bir işletim sistemi olmakla birlikte temel felsefesi kullanıcılara özgürlük ve esneklik sunmaktır. İşletim sisteminin kodunun incelenip ihtiyaca göre özelleştirilmesine olanak sağlar ve bu şekilde farklı Linux versiyonları mevcuttur.
Linux Çeşitleri
UBUNTU: Açık kaynak kodlu ve Debian tabanlı bir işletim sistemidir. Genel kullanıma uygun, kullanıcı dostu bir işletim sistemi olmakla birlikte günümüzde 40 milyondan fazla kullanıcısı vardır. GNOME masaüstü ortamını kullanır.
FEDORA: Yazılım geliştiricilerinin işlerini kolaylaştırmak ve bir topluluk oluşturmak için kullanıma açılmış bir işletim sistemidir.
DEBIAN: Stabil ve güvenilir, açık kaynak kodlu projeler için temel teşkil eden bir Linux dağıtımıdır.
CENTOS: Sunucu odaklı bir işletim sistemidir. Bu işletim sistemi web hosting alanında Cpanel kontrol paneli üzerinden çalıştığı için kullanıcılar tarafından yoğun şekilde tercih edilir.
LINUX MINT: Ubuntu tabanlı olan Linux Mint ekstra kod ve sürücüleri içerir. 60.000'den fazla yazılım paketine kolay erişim sağlanır. Blender, Gimp, Inkscape vs.
KUBUNTU: Ubuntu gibi Debian dağıtımı olan KUBUNTU, Ubuntu’nun aksine KDE masaüstü ortamını kullanır.
SOLUS: Kullanıcı dostu olan, renkli ve canlı arayüzü ile ilk defa Linux dağıtımı kullanacak olan kişiler için en iyi seçim olabilecek bir dağıtımdır. Hafif ve kolay kullanımı vardır.
MANJARO: En popüler Arch tabanlı Linux dağıtımıdır.Birçok yazılımın en güncel ve stabil sürümlerini sunan bir işletim sistemidir.
KDE NEON: Kubuntu tabanlı birişletim sistemidir.
POP!_OS: Oyun, otomasyon ve yapay zeka için geliştirilmiş GNOME arayüzü kullanan Ubuntu tabanlı bir işletim sistemidir.
ZORIN_OS: Linux’a yeni başlayanlar için geliştirilen, Windows kullanıcılarına geçiş yapmayı kolaylaştıran bir Linux dağıtımıdır.
MX LINUX: Kullanıcı dostu bir arayüze sahip olan MX, Debian tabanlıdır ve Xfce masaüstü ortamını kullanır.
OPENSUSE: Esneklik ve güçlü yönetim özellikleriyle var olan bir Linux dağıtımıdır.
GENTOO: Kaynak kod temelli bir Linux dağıtımıdır. Yani kurulumun büyük bir kısmı kullanıcı tarafından manuel olarak yapılmalıdır. Kullanıcı istediği paketleri yükler ve kişiselleştirir. Bu özelliği sebebiyle GENTOO özellikle sunucu sistemleri için tercih edilen bir işletim sistemidir.
Linux/UNIX Çalışma Mantığı
Linux işletim sistemi iki temel birimden oluşur. Kernel(çekirdek) ve shell(kabuk).
Çekirdek (Kernel): Çekirdek, işletim sisteminin temel parçasıdır ve tüm donanım kaynaklarını yönetir. Bellek, işlemci, depolama aygıtları ve diğer donanım bileşenleriyle iletişim kurarak uygulamaların ve kullanıcıların işlerini yerine getirmesini sağlar.
Kabuk (Shell): Kullanıcılar, kabuk adı verilen komut satırı arayüzü aracılığıyla işletim sistemiyle etkileşim kurar. Kabuk, kullanıcının komutlarını alır, işletim sistemi tarafından anlaşılabilir hale dönüştürür ve sonra ilgili işlemleri gerçekleştirir. Ayrıca, kabuk kullanıcı arayüzü için grafiksel bir masaüstü ortamı sağlayabilir.
Linux Dosya Sistemi
Linux/UNIX, dosya sistemi üzerinde çalışır. Dosya sistemi, verilerin nasıl depolanacağını ve düzenleneceğini belirleyen bir yapıdır. Her şey dosyalar ve dizinler (klasörler) olarak temsil edilir ve düzenlenir.
Düz Metin Dosyaları (.txt): Yalnızca düz metin içeren temel dosya türüdür, biçimlendirme veya stil özellikleri içermez.
Yürütülebilir Dosyalar (.bin, .sh, .run): Komut dosyaları ve uygulamalar, çalıştırılabilir dosya formatında olabilir.
Kabuk Betikleri (.sh, .bash): Shell komutları içeren metin dosyalarıdır, kabukta çalıştırılarak komutları otomatikleştirir.
Program Dosyaları (.exe): Windows işletim sisteminde yürütülebilir dosyalar olarak bilinen, Linux’ta özel uygulamalara karşılık gelir.
Sistem Yapılandırma Dosyaları: Sistem ayarlarını ve yapılandırmalarını içeren dosyalardır; örneğin /etc dizininde bulunurlar.
Yapı Taşları (Library) Dosyaları (.so): Paylaşımlı kütüphaneler, birden fazla program tarafından kullanılan kod parçalarını içerir ve sistemde tekrar kullanımı sağlar.
Aygıt Dosyaları (/dev): Donanım ve diğer aygıtlara erişimi sağlayan sanal dosyalardır; örneğin /dev/sda, sabit disk gibi bir aygıtı temsil eder.
Dizinler (Klasörler): Dosyaları ve diğer dizinleri içeren yapılandırmalardır, hiyerarşik bir yapı oluşturur ve dosyaları düzenler.
Yedekleme Dosyaları (.bak, .backup): Önemli dosyaların yedeklerini içeren dosyalardır, veri kaybını önlemek için kullanılır.
Sıkıştırılmış Dosyalar (.zip, .tar.gz): Birden fazla dosyanın tek bir dosya içine sıkıştırıldığı dosya türleridir, depolamayı ve paylaşımı kolaylaştırır.
Konfigürasyon Dosyaları (.conf): Uygulama ve hizmetlerin yapılandırma ayarlarını içeren dosyalardır.
Özet olarak Linux çalışma sistemi şu şekildedir:
- Kullanıcılar, kabuk aracılığıyla komutlar veya grafik arayüzler aracılığıyla işletim sistemiyle etkileşime girer.
- Kabuk, kullanıcıların komutlarını işletim sistemine iletir ve uygun işlemi yapmasını sağlar.
- İşletim sistemi, çekirdek üzerinden donanım kaynaklarına erişir, gerekli işlemleri yürütür ve sonuçları kullanıcıya veya uygulamalara geri bildirir.
- Dosya sistemi, verileri depolar ve işletim sistemi, verileri okur veya yazabilir.
Temel Linux Komutları
- ls: Dizin içeriğini listeler. Örneğin, ls komutu dosya ve dizinleri gösterir.
>>> ls
- cd: Dizinleri değiştirmek için kullanılır. Örneğin, cd Desktop komutu Masaüstü dizinine geçiş yapar.
>>> cd Desktop
- pwd: Mevcut dizinin tam yolunu gösterir (Present Working Directory).
>>> pwd
- mkdir: Yeni bir dizin oluşturur. Örneğin, mkdir yeni komutu “yeni” adında bir dizin oluşturur.
>>> mkdir yeni
- rmdir: Boş bir dizini siler. Örneğin, rmdir eski komutu “eski” adlı boş bir dizini siler.
>>> rmdir eski
- rm: Dosyaları veya dizinleri siler. Örneğin, rm dosya.txt komutu “dosya.txt” adlı bir dosyayı siler.
>>> rm dosya.txt
- cp: Dosya ve dizinleri kopyalar. Örneğin, cp dosya.txt hedef_klasor/ komutu “dosya.txt” dosyasını “hedef_klasor” adlı klasöre kopyalar.
>>> cp dosya.txt hedef_klasor/
- mv: Dosya ve dizinleri taşır veya adlarını değiştirir. Örneğin, mv eski_klasor/ yeni_klasor/ komutu “eski_klasor” adlı klasörü “yeni_klasor” adlı klasöre taşır.
>>> mv eski_klasor/ yeni_klasor/
- touch: Dosya oluşturur veya dosyanın zaman damgasını günceller. Örneğin, touch dosya.txt komutu “dosya.txt” adında boş bir dosya oluşturur veya mevcut dosyanın değişiklik tarihini günceller.
>>> touch dosya.txt
- cat: Dosya içeriğini terminale yazdırır. Örneğin, cat dosya.txt komutu “dosya.txt” adlı dosyanın içeriğini gösterir.
>>> cat dosya.txt
- grep: Metin içinde arama yapar. Örneğin, grep “arama_metni” dosya.txt komutu “dosya.txt” dosyasında “arama_metni” ifadesini arar.
>>> grep “arama_metni” dosya.txt
- chmod: Dosya izinlerini değiştirir. Örneğin, chmod +x dosya.sh komutu “dosya.sh” adlı betik dosyasını çalıştırılabilir hale getirir.
>>> chmod +x dosya.sh
- sudo: Yönetici (root) yetkileriyle komutları çalıştırır. Örneğin, sudo apt-get update komutu paket yöneticisini güncellemek için yönetici yetkisi gerektirir.
>>> sudo apt-get update
- man: Komutların kılavuzunu gösterir. Örneğin, man ls komutu “ls” komutunun kılavuzunu gösterir.
>>> man ls
TryHackMe Çözümleri
LINK 1: https://tryhackme.com/room/linuxfundamentalspart1
Notlar:
whoami komutu: whoami komutu, mevcut kullanıcı adını (current user) döndüren bir Linux komutudur. Bu, şu anda oturum açmış olan kullanıcının adını gösterir.
echo komutu: echo komutu, verilen metni standart çıktıya (genellikle terminal ekranına) yazdırmak için kullanılır. Bu, basit metin veya değişken değerlerini yazdırmak için kullanışlıdır.
>: Bir komutun çıktısını belirtilen dosyaya yazdırır ve dosyanın içeriğini önce siler. Eğer dosya yoksa, yeni bir dosya oluşturur.
>>: Bir komutun çıktısını belirtilen dosyaya ekler. Eğer dosya yoksa, yeni bir dosya oluşturur.
&: “&” işareti, bir komutu arka planda çalıştırmak için kullanılan bir işlem yönlendirme işaretidir. Bu, komutu çalıştırdıktan sonra kullanıcıya başka komutlar veya işlemler yapma olanağı sağlar.
LINK 2: https://tryhackme.com/room/linuxfundamentalspart2
Notlar:
Linux’ta “file” komutu, bir dosyanın türünü belirlemek için kullanılır. Bu komut, dosyanın içeriğine bakarak dosyanın türünü tahmin etmeye çalışır.
GİRDİ= file belge
ÇIKTI= belge: ASCII text
Linux’ta “ssh kullaniciadi@ip” komutu, SSH (Secure Shell) protokolü aracılığıyla belirtilen IP adresine veya uzak bir makineye güvenli bir şekilde bağlanmayı sağlar. Bu komut, bir terminal üzerinden başka bir bilgisayara erişim ve komutları çalıştırma imkanı tanır.
Yani;
- “ssh”: Secure Shell protokolünü kullanarak uzaktaki bir makineye erişim sağlayan komut.
- “kullaniciadi”: Uzaktaki makinenin adı veya hostname’ı. IP adresini kullanmak yerine makineye verilen isimle de bağlanabilirsiniz.
- “@”: Kullanıcı adı ve makine adı arasında ayraçtır. Ssh bağlantısında kullanılacak olan kullanıcı adını ve uzak makinenin adını veya IP adresini belirlerken bu ayraç kullanılır.
- “ip”: Uzaktaki makinenin IP adresi. Bu, SSH bağlantısı kurmak istediğiniz hedefin IP adresidir.
Linux’ta “ls -lh” komutu, mevcut dizindeki dosya ve dizinleri listeleyen bir komuttur. “ls” komutu, dosyaları ve dizinleri görüntülemek için kullanılırken;
- “ls”: “list” anlamına gelir ve mevcut dizindeki dosyaları ve dizinleri listeler.
- “-l”: “long” anlamına gelir ve uzun formatlı bir çıktı sağlar. Bu format, dosya ve dizinlerin ayrıntılı bilgilerini, izinlerini, sahiplerini, gruplarını, boyutlarını, değiştirilme tarihlerini ve isimlerini gösterir.
- “-h”: “human-readable” anlamına gelir ve dosya boyutların kullanıcı dostu bir formatta gösterir. Yani, büyük boyutları daha anlaşılır bir şekilde (KB, MB, GB gibi) ifade eder.
LINK 3: https://tryhackme.com/room/linuxfundamentalspart3
Notlar:
Nano, Linux ve diğer Unix tabanlı işletim sistemlerinde kullanılan metin düzenleyicilerden biridir. Temel olarak metin dosyalarını düzenlemek için kullanılır ve terminal tabanlı bir arayüze sahiptir.
>>> nano dosya.txt
“wget “ komutu, Linux ve diğer Unix benzeri işletim sistemlerinde kullanılan bir komuttur. Adından da anlaşılacağı gibi, “wget” (Web Get) web üzerinden dosya indirmek için kullanılır. Bu komut, bir URL’yi belirtilen adreste belirtilen dosya adıyla indirir ve mevcut dizine kaydeder.
>>> wget https://example.com/dosya.txt
- Bu komut, “dosya.txt” adında bir dosyayı “example.com” adresinden indirecek ve mevcut dizine kaydedecektir.
“scp” komutu, Linux ve diğer Unix tabanlı işletim sistemlerinde kullanılan bir komuttur ve “Secure Copy Protocol” (Güvenli Kopyalama Protokolü) ile dosya ve dizinleri güvenli bir şekilde kopyalamak için kullanılır. scp komutu, SSH (Secure Shell) protokolünü kullanarak dosyaları yerel ve uzak makina arasında kopyalamak için kullanıcı dostu bir yol sağlar.
>>> scp kaynak_dosya_konumu hedef_dosya_konumu
- kaynak_dosya_konumu: Kopyalanacak olan dosyanın veya dizinin konumunu belirtir. Bu, yerel makinede veya uzak bir sunucuda olabilir. Eğer kaynak dosya uzak bir sunucudaysa, uzak sunucunun kullanıcı adı ve IP adresi veya hostname’i belirtilmelidir. Örneğin, kullanici@uzak_sunucu:/path/to/kaynak_dosya.
- hedef_dosya_konumu: Dosyanın veya dizinin kopyalanacağı konumu belirtir. Yine, bu yerel makinede veya uzak bir sunucuda olabilir. Eğer hedef dosya uzak bir sunucudaysa, uzak sunucunun kullanıcı adı ve IP adresi veya hostname’i belirtilmelidir. Örneğin, kullanici@uzak_sunucu:/path/to/hedef_dosya.
ps:
- ps (Process Status) komutu, Linux ve diğer Unix tabanlı işletim sistemlerinde çalışan süreçlerin durumunu ve bilgilerini görüntülemek için kullanılır. Bu komut, etkin süreçleri listeler ve süreçlerin kimlik numarası (PID), kullanıcı kimlik numarası (UID), CPU ve bellek kullanımı gibi çeşitli bilgileri gösterir. ps komutu, sistem yöneticileri ve kullanıcılar tarafından, çalışan süreçleri incelemek, sistem performansını değerlendirmek ve hatalı süreçleri tespit etmek için yaygın olarak kullanılır.
top:
- top komutu, Linux ve diğer Unix benzeri işletim sistemlerinde sistemdeki etkin süreçleri gerçek zamanlı olarak izlemek için kullanılır. Terminalde çalıştırıldığında, top komutu, sistemdeki süreçleri ve sistem kaynaklarının (CPU, bellek, swap, vb.) kullanımını sürekli olarak güncellenen bir tablo şeklinde gösterir. Bu, sistem yöneticilerinin önemli sistem bilgilerini kolayca izlemesini ve performans sorunlarını hızlı bir şekilde tespit etmesini sağlar.
kill:
- kill komutu, Linux ve diğer Unix tabanlı işletim sistemlerinde çalışan süreçlere sinyaller göndermek için kullanılır. Özellikle, bir süreci sonlandırmak için sıklıkla kullanılır. kill komutu, bir sürecin PID’sini veya kullanıcının süreçlerini belirtmek için kullanılan diğer yöntemlerle birlikte kullanılır. Varsayılan olarak, kill komutu TERM (15) sinyalini gönderir, bu da hedef süreci kibar bir şekilde sonlandırır. Ancak, farklı bir sinyal türü göndermek için farklı sinyal numaraları kullanılabilir.
systemctl:
- systemctl, Linux tabanlı işletim sistemlerinde systemd adı verilen sistem yönetimi ve hizmet kontrol sistemini yönetmek için kullanılan bir komuttur. Sistemde çalışan hizmetleri (servisleri) yönetmek, durdurmak, başlatmak, yeniden başlatmak ve hizmetlerin durumunu kontrol etmek için kullanılır. Sistem yöneticileri, systemctl komutunu, oturum yönetimi, ağ hizmetleri, dosya sistemleri ve diğer sistem hizmetlerini yönetmek için kullanır. Örnek kullanımlar şunlardır: systemctl start servis_adi, systemctl stop servis_adi, systemctl restart servis_adi, systemctl status servis_adi, vb.
fg:
- fg (Foreground) komutu, bir işlemi arka plandan ön plana getirmek için kullanılır. Özellikle, arka planda çalışan bir işlemi (örneğin, ctrl+z ile durdurulan bir işlem) ön plana getirip tekrar çalıştırmak için kullanılır. fg komutunu kullanırken, genellikle işlem numarası veya % işareti ile işlem adı belirtilir. Örnek kullanım: fg %1 veya fg 1 (1. işlemi ön plana getir). Bu komut, önceden durdurulan işlemi tekrar devam ettirir ve terminaldeki komut istemine geri döner.
Linux Crontab Nedir?
Linux’ta “cron” ve “crontab,” periyodik görevleri otomatik olarak zamanlanmasını sağlayan ve sistemlerde sürekli çalışan görevleri yönetmeye yarayan önemli araçlardır.
Cron:
“Cron,” Unix ve Unix benzeri işletim sistemlerinde, belirli zaman aralıklarında, belirli tarihlerde veya belirli bir sıklıkta çalıştırılacak görevleri zamanlama ve yönetme mekanizmasıdır. Bu görevler, sistem bakımı, veritabanı yedeklemeleri, log temizleme gibi otomatikleştirilebilecek işlemleri içerebilir. Cron, özel bir servis olarak çalışır ve genellikle sistem başlangıcında otomatik olarak başlar.
Crontab:
“Crontab” ise, cron’un görevlerini ve zamanlamasını belirlediği metin tablosudur. “Crontab” dosyası, kullanıcının belirlediği zaman aralığında ve frekansta çalışacak komutları ve komut dosyalarını içerir. Her kullanıcı kendi crontab dosyasına sahiptir ve kendi süreçlerini yönetebilir.
Linux sistemlerde, kullanıcıların crontab dosyalarını düzenlemek için “crontab” komutu kullanılır.
Crontab dosyasını düzenlemek için: crontab -e
Kullanıcının mevcut crontab görevlerini listelemek için: crontab -l
Kullanıcının crontab dosyasını silmek için: crontab -r
Linux Crontab ile aktif dosyaları yazdırmak:
crontab -e komutundan sonra karşımıza hangi metin düzenleyici ile işlem yapmak istiyorsak onu seçmemiz için rakam çıkar. 1'i seçersek nano ile çalışmış oluruz.
* * * * * ps aux >>
komutu, bir "Cron" görevi oluşturmak için kullanılan bir komuttur. Cron, Linux işletim sistemlerinde belirli zaman dilimlerinde belirli görevleri düzenlemek için kullanılan bir zamanlanmış görev yöneticisidir.
* * * * *
ifadesi, beş alanlı bir zamanlama düzenlemesini temsil eder ve her alanın anlamı şu şekildedir:
- Dakika (0–59)
- Saat (0–23)
- Gün (1–31)
- Ay (1–12)
- Haftanın günü (0–7) (0 ve 7, Pazar gününü temsil eder)
(*) karakteri, herhangi bir değeri ifade eder. Yani, bu ifade her dakika, her saat, her gün, her ay ve her haftanın her günü için geçerli olacak demektir.
Sonraki kısmı, ps aux >>
ifadesi, ps aux
komutunun sonuçlarını bir dosyaya yönlendirmek için kullanılır. ps aux
, sistemde çalışan tüm kullanıcıların işlem listesini gösteren bir komuttur. >>
ise, çıktının yönlendirileceği dosyanın sonuna eklemeyi sağlayan bir "dosya ekleme" işlemi gerçekleştirir.
Sonrasında nano dosyasından CTRL + O, ENTER, CTRL + X yapılarak, kaydedip çıkılmış oluruz.
txt dosyasında aktif processler bu şekilde gözükür.