Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Eğer yerel ortamımızda fiziksel bir sunucu ile çalışmak istiyorsak ya ek bilgisayarlar kullanmalı ya da bunun için malzeme temin etmeliyiz. Ancak bu yol hem gereksiz maliyetli hem de kullanışsız olduğundan çoğu geliştirici yerel ortamını sanallaştırma yardımı ile hazırlamaktadır.
Biz de kendi sunucularımızı VirtualBox ile sanal olarak oluşturacak ve bunlar üzerinden işlemler yürüteceğiz.
Sanallaştırma kavramı ilk olarak 1950'lerde ortaya atılır. 1960'larda IBM'in bu konu üzerinde çalışmaları olur ve 1990'larda VMware ile popülerlik kazanır. VMware'in ardından XenSource, Microsoft ve Oracle da bu kavram üzerinde çalışmaya başlar.
Sanallaştırma teorik olarak bilgisayar kaynaklarının bilgisayar kullanıcılardan soyutlanmasını ifade eder. Bunu sağlamak için bir soyutlama tabakası kullanılır. Bu tabaka çoğunlukla Hypervisor ya da Virtual Machine Monitor (VMM) olarak adlandırılır. Hypervisor'un üzerinde çalıştığı kaynak ana kaynak, bu kaynakta çalışan sanal yazılımlar da misafir yazılım olarak adlandırılır. Sanallaştırma amaçlarına ve teknolojisine göre iki farklı başlıkta incelenilir.
Ağ sanallaştırma, geleneksel olarak donanımdan yazılıma teslim edilen ağ kaynaklarının soyutlanması anlamına gelir. Bu sanallaştırma çeşidinde, birden çok fiziksel ağı tek bir sanal ağda birleştirebilir veya bir fiziksel ağı ayrı, bağımsız sanal ağlara bölebilir.
Sunucu sanallaştırma, fiziksel bir sunucuyu birden çok yalıtılmış sanal sunucuya bölme işlemidir. Her sanal sunucu kendi işletim sistemlerini bağımsız olarak çalıştırabilir. Bu sanallaştırma çoğunlukla sunucu kaynaklarını sunucu kullanıcılarından gizlemek için kullanılır.
Masaüstü sanallaştırma, uzak bir cihazdan erişilebilmesi için bir kullanıcının masaüstünün simüle edilmesidir. Bu sayede kurumlar, çalışanlarının bağlanmak için kullandıkları cihazlarının konumlarından, kaynaklarından, işletim sisteminde ve benzeri diğer etkilerinden etkilenmeden bağlandıkları cihazlarda çalışmasına izin verir.
İşletim sistemi sanallaştırma, doğrudan fiziksel bir donanım üzerinde ya da bir işletim sistemi üzerinde aynı fiziksel kaynakları kullanarak birden fazla misafir işletim sisteminin çalıştırılmasıdır.
Depolamanın sağlanması ve yönetiminin fiziksel donanımdan ayrılması için veri depolamayı soyutlayan bir sistemdir. Bu sanallaştırma, ayrı fiziksel depolama kaynakları tek bir mantıksal aygıt olarak yönetebilir. Sunucu sanallaştırmasından farklı olarak sanal depolama, yazılım kullanılarak oluşturulan bellekte çalışan depolama kontrolcüsüdür.
Hypervisor tabanlı sanallaştırma teknolojisi uzun süredir kullanılmaktadır. Fiziksel kaynaklar ile yazılımları birbirinden soyutlayan hypervisor katmanı kullanılarak bu tür sanallaştırma elde edilir. Bu sanallaştırma iki türlü elde edilir.
Tip 2'de Hypervisor doğrudan fiziksel kaynak üzerine kurulur. Fiziksel kaynak ile Hypervisor katmanı arasında herhangi bir işletim sistemi bulunmaz. Fiziksel kaynak doğrudan kullanıldığı için Tip 1'e göre daha performanslıdır. Bu tür sanallaştırma Apple Boot Camp, Microsoft Hyper-V, Proxmox ve VMware ESXi ile sağlanabilir.
Tip 1'de Hypervisor fiziksel kaynak üzerine kurulmuş işletim sisteminin üzerine kurulur. Fiziksel kaynakla iletişim ana işletim sistemi tarafından sağlanacağı için Tip 2'ye göre daha az performanslıdır. Bu sanallaştırma teknolojisi genellikle test amaçlı kullanılır. Bu tür sanallaştırma Oracle VirtualBox ve VMware Player ile sağlanabilir.
Linux tabanlı geliştirilmiş yeni bir sanallaştırma teknolojisidir. Tip 1'deki Hypervisor katmanı yerine işletim sisteminin üzerinde Docker Engine denilen bir katman bulunur. Bu katman sanallaştırılacak her bir uygulama için ayrı bir işletim sistemi gibi davranır. Bu sayede diğer sanallaştırma türlerine göre tek bir fiziksel kaynakta daha çok yazılım sanallaştırılabilir.
İnternette bulunan detaylı içeriklere nazaran daha özet bilgileri içermeye çalışan temel GNU/Linux komutlarının ve kavramların bulunduğu bir rehber. Umarım faydalı olacaktır.
Bu aşamada önceden Sanal Makine üzerinden ayarların gösterildiği ve ISO dosyalarının indirildiği GNU/Linux dağıtımlarının, VirtualBox yardımı ile kurulumu anlatılmaktadır.
Kurulan uzak sunucuda kimi zaman SSH paketi yüklü olmayabilir. Bu sebepten ötürü de sunucuya SSH ile bağlanmak imkansızdır. Öncelikle karşı sunucuya aşağıdaki komutlar yardımı ile SSH paketi yüklenmeli ve parolasız bağlantı için gerekli dizin ve dosyalar oluşturulmalıdır.
Kurduğumuz sunucuya kişisel bilgisayarımızdan bağlanmak için Türkçe anlamı Güvenli Kabuk Protokolü olan SSH komutunu kullanacağız.
SSH komutunu kullanırken username yerine sunucuya bağlanmak istediğiniz kullanıcı adını, serverip yerine ise sunucu parolası yazılması gerekmektedir.
Bu komutu çalıştırıp uzak sunucudaki kullanıcı parolasını girildiğinde, artık kişisel bilgisayar üzerinden belirtilen sunucuya komut gönderilebilir.
SSH sunuculara ve bilgisayarlara uzaktan bağlantı yapılmasını sağlayan bir araçtır. SSH kişisel bilgisayar üzerinde konfigüre edilmesi ve sunuculara kişisel bilgisayarın tanıtılması yardımı ile parolasız ssh bağlantısı yapılması mümkündür.
Config dosyasının düzenlenmesi
Windows üzerinde C:\Users\username\ .ssh\config , GNU/Linux sistemlerde ise /home/username/.ssh/config dizininde bulunan konfigürasyon dosyası sık olarak bağlanılan sunucuların bağlantı ayarlarının özelleştirilmesi için sıkça kullanılmaktadır. Örnek bir konfigürasyon dosyasını inceleyelim.
Temel anahtar kelimeleri tanıyalım.
Host : Sunucu için özgürce koyabileceğimiz bir isimdir. Örneğin Liman sunucusu için limanmys ya da limansunucu tercih edilebilir.
HostName : Sunucunun ip adresidir.
User : Sunucuya hangi kullanıcı ile bağlanılmak isteniyorsa, o kullanıcı verilmelidir. Liman sunucusu için liman tercih edilebilir.
Bu anahtar kelimeler dışında port vs. gibi başka ayarlar da bulunsa da, temel olarak bu anahtar kelimeler ile SSH konfigürasyon dosyası özelleştirilebilir.
Kişisel bilgisayarınız üzerinde (Windows ya da bir GNU/Linux dağıtımı),
komutu ile ssh anahtarı oluşturulabilir. SSH anahtarını bir parola ile oluşturmak mümkündür ancak parola konulmazsa gönderilen sunuculara parolasız erişim imkanı tanır.
SSH anahtarının uzak sunucuya gönderilmesi
Burada GNU/Linux dağıtımları ve Windows işletim sistemi arasında fark bulunmaktadır.
GNU/Linux için,
kullanılabilir. Bunun yanında konfigürasyon dosyasındaki Host anahtar kelimesi de bu işlem için kullanılabilir. Örneği Liman sunucusu için,
Windows için,
Windows için de konfigürasyon dosyasındaki Host anahtar kelimesinin kullanılması mümkündür.
Bu adımdan sonra artık sunucularınıza parolasız erişmeniz mümkün olacaktır. Erişmenin yanı sıra VSCode SSH eklentisini de parolasız kullanabilirsiniz.
echo komutu ile "standart çıktı" üzerine "Merhabalar, Hoşgeldim" yazısının yazdırılması.
echo komutu ile bulunduğunuz konumda daha önce oluşturulmayan "merhaba.txt" dosyası içinde "bir" yazdırılmasının sağlanması.
echo komutu ile bulunduğunuz konumda daha önce oluşturulmuş olan "merhaba.txt" dosyası içinde daha önceki içeriği silmeden "iki" yazdırılmasının sağlanması.
Oluşturulmuş olan "merhaba.txt" dosyasının standart çıktı'ya yazdırılması için hangi komut kullanılmaktadır ve yazdırınız.
Daha önce oluşturulmuş olan "merhaba.txt" dosyasının en altına "üç" yazısının eklenmesi ve dosya içeriğinin standart çıktı'ya yazdırılması.
mkdir komutu ile "yenidizin" isimli bir klasör oluşturun.
cd komutunu kullanmadan yenidizin klasörü içinde daha önce oluşturlmayan "ikinci.txt" isimli bir dosyanın içerisinde "bir" yazısının eklenmesini sağlayın.
cd komutunu kullanmadan yenidizin klasörü içinde daha önce oluşturulmuş olan "ikinci.txt" dosyası içeriğini standart çıktı ekranına yazdırın.
cd komutu kullanmadan "ikinci.txt" dosyası içine eski içeriğine dokunmadan "iki" yazısını ekleyin.
cd komutu kullanmadan "ikinci.txt" dosyası içindekileri silecek şekilde "silindi" yazısının eklenmesini sağlayın ve dosya içeriğini standart çıktı ekranına yazdırın.
yenidizin klasörü içindeki dosyaların listesini cd komutu kullanmadan standart çıktıya yazdırın.
yenidizin klasörü içindeki dosyaları listelemek için cd komutunu da kullanarak hangi iki komut ile ekrana yazdırabilirsiniz. sıra ile yazınız.
yenidizin klasörü içinde iken (cd kullanmadan) ilk oluşturduğunuz merhaba.txt dosyasının içeriğini ekrana yazdırın.
yeni dizin klasörü içinde iken (cd kullanmadan) merhaba.txt dosyası içine "dort" yazısının eklenmesini sağlayın ve dosya içeriğini standart çıktı ekranına yazdırın.
bulunduğunuz konumu ekrana yazdırın.
GNU/Linux sistemlerde üzerinde, üçüncü parti uygulamalar loglarını farklı dizinlerde tutsalar da hali hazırda sistem üzerinde çalışan programların kayıtları /var/log altındaki çeşitli dosyalarda tutulur. Bu dosyalardan bazı önemli olanları inceleyelim.
Genel sistem kayıtlarını tutar. Sistem üzerinde kritik bir durum yaşandığında ilk bakılması gereken kayıt dosyasıdır.
Adını İngilizce authentication kelimesinden alır. Sistem üzerinde hatalı giriş yapıldığında ya da root kullanıcısına hatalı giriş yapılmaya çalışılırsa olaylar bu dosyaya kayıt edilir.
GNU/Linux sistemlerde, sistem açılışında gerçekleşen olaylar bu dosyaya yazılır. Bunun dışında donanımsal hatalar ya da çekirdekte yaşanan problemler de bu dosyaya kaydedilir.
Zamanlanmış görevlerin kayıtları bu dosyaya yazılır. Ayrıca zamanlanmış görevleri yöneten cron servisinin kayıtları da bu dosyada tutulur.
İşletim sistemini kurduktan sonra en önemli ayarlardan birisi sistemin güncel olup olmamasıdır. Bu hem güvenlik nedeni ile hem de güncel sistem araçlarının kullanılması ihtiyaçları nedeniyle önemli bir davranıştır.
Sistemin güncelliğini kontrol edilmesi için Debian tabanlı tüm sistemlerde aşağıdaki komut uygulanır.
Bu komut ile birlikte sisteminizde güncellenme ihtiyacı bulunan paket olup olmadığı gösterilmektedir. Fakat herhangi bir güncelleme işlemi yapmaz. İlgili paketleri güncellemek istediğinizde ise aşağıdaki komut uygulanır.
Bu işlem tamamlandığında herhangi bir problem yoksa sisteminiz güncellenmiş olacaktır.
Pardus ve Ubuntu kurulumunda eğer Elle IP ayarı girmediyseniz varsayılan olarak sisteminizde DHCP varsa, ilgili sunucu tarafından size bir IP atanacaktır. Fakat bu IP adresi belirli kurallarla belirli zaman sonra değişebilir. Bu nedenle bunu sabit hale getirmek için sistem üzerinden sabit IP tanımlamanız gerekmektedir.
Hem Pardus 17.x hem de Pardus 19.x sürümlerinde statik IP verme süreci aynıdır. Bu nedenle /etc/network/interfaces dosyası içerisine girilir. Bu dosya içerisinde aşağıdaki gibi bir satır bulunması gerekir.
Bu ve benzeri yapıda anlatılan şey eth0 ağ arabiriminde DHCP ile otomatik IP alınmasıdır. Dolayısıyla bu dosyadaki tek satırı yönetici yetkili bir hesap ile vim veya nano gibi bir araç ile açıp, aşağıdaki gibi değiştirmeniz gerekmektedir:
Bu kod dizisindeki IP adresi olarak belirtilen 192.168.1.67 IP'si yerine sizin daha önce aldığınız ip adresini yazabilirsiniz. Bunun için dosyayı düzenlemeye başlamadan "ip a" komutu ile DHCP'nin size verdiği IP adresini öğrenip onu yazabilirsiniz. Bu adımdan sonra IP adresini temizleyip, networking servisini yeniden başlatmak ip adresinin sabitlenmesi için yeterli olacaktır.
Ubuntu, 18.04 sürümünden sonra klasik ağ yapısı yerine netplan sistemine geçmiştir. İlk olarak ağ arabirimi ve mevcut IP'nin belirlenmesi için "ip a" komutunu uygulayarak eth0 veya ens0s3 gibi değer belirlenir.
Bu adımdan sonra /etc/netplan/01-netcfg.yaml dosyası içerisine girilir. Bu dosya içerisinde aşağıdaki gibi bir görüntü bulunmaktadır:
Bu içerik, aşağıdaki gibi bir hale getirilir:
Yaml dosyası olduğu için boşluklar önemlidir. Ve bu düzenleme yapıldıktan sonra aşağıdaki komut ile netplan uygulanmış olur:
Böylelikle IP adresi alınmış olur. Daha detaylı bilgi için internette çok daha detaylı bilgilere erişebilirsiniz.
Cron, Linux işletim sistemlerinde komutları belirli aralıklarla otomatik olarak çalıştırmak üzere kullanılan standart bir yardımcı programdır. Her dakika cron servisi o dakika için zamanlanan bir komut olup olmadığını kontrol eder. Komut olması durumunda çalıştırılır. Cron ile sistem genelinde olduğu gibi kullanıcılar da yetkilerinin olması durumunda kendi zamanlanmış görevlerini tanımlayabilirler.
Sistem geneline ait işler /etc/crontab
dosyasında tutulur. Bu dosyanın içeriği cat
komutu ile görüntülenebilir.
Dosyanın içeriğinde bir zamanlanmış görevin nasıl yazılması gerektiğini gösteren aşağıdaki satır da yer alır.
Kısaltma
İngilizce
Türkçe
Açıklama
m
Minute
Dakika
0-59 arası bir değer alır.
h
Hour
Saat
0-23 arası bir değer alır.
dom
Day of Month
Ayın Günü
0-31 arası bir değer alır.
mon
Month
Ay
1-12 arası bir değer alır.
dow
Day of Week
Haftanın Günü
0-7 arası bir değer alır. 0 ve 7 pazar günüdür.
user
User
Kullanıcı
command
Command
Komut
Zamanlanmış bir görev yazılırken tarih ile ilgili sutünlara "*" sembolü konularak, zamanlanmış görevin o alandaki her değer için çalıştırması sağlanır. Her bir sutün için "-" sembolü ile aralık, "," sembolü ile birden fazla değer ve "/" sembolü ile o işin periyodik olarak çalışacağı belirtilir.
Her gün saat 12'de çalışacak zamanlanmış görev:
Her gün saat 8'de ve 14'de çalışacak zamanlanmış görev:
10 dakikalık periyotlarla çalışacak zamanlanmış görev:
Hafta içi günler sabah 9 akşam 18 arası her saat çalışacak zamanlanmış görev:
Saatlik yapılan zamanlanmış görevler /etc/cron.hourly
dizininde, günlük yapılan zamanlanmış görevler /etc/cron.daily
dizininde, haftalık yapılan zamanlanmış görevler /etc/periodic/weekly
dizininde, aylık yapılan zamanlanmış görevler /etc/periodic/monthly
dizininde tanımlanır.
Yukarıdaki örnekler sistem genelinde kullanılan /etc/crontab
dosyasında tanımlanarak yapıldı. İstenmesi durumunda her kullanıcı kendi zamanlanmış görevlerini crontab
komutu ile yönetebilir.
-l paremetresi ile var olan zamanlanmış görevler listelenir.
-e paremetresi ile zamanlanmış görevler düzenlenir.
crontab
komutu ile eklenen zamanlanmış görevler için kullanıcı belirtilmez, zamanlanmış görevi komutu çalıştıran kullanıcı çalıştırır.
-u parametresi ile root kullanıcısı başka kullanıcılar için zamanlanmış görev ekleyebilir.
/etc/cron.allow
dosyası oluşturularak zamanlanmış görev kullanabilecek kullanıcılar belirtilir. Bu dosyada yer almayan kullanıcılar zamanlanmış görev oluşturamaz.
/etc/cron.deny
dosyası oluşturularak zamanlanmış görev kullanamayacak kullanıcılar belirtilir. Bu dosyada yer alan kullanıcılar zamanlanmış görev oluşturamaz.
at, Linux işletim sistemlerinde komutları belirli bir zamanda otomatik olarak çalıştırmak üzere kullanılan standart bir yardımcı programdır. Cron'un aksine tekrarlı işler için kullanılmaz.
Kabuk programlama olarak da bilinen betik programlama, sistem üzerinde sürekli olarak gerçekleştirilecek olan işlemlerin tek bir dosyada toplanarak otomatikleştirilmesini amaçlar.
Örneğin kurulumlar birden fazla adımdan oluşan uzun işlemler olarak bilinir. Eğer bir kurulumu birden fazla kez yapacağımızı biliyorsak ya da böyle bir ihtimal bulunuyorsa, kurulum adımlarını sürekli tekrarlamak yerine tamamını bir kabuk programı haline getirip her seferinde uğraşmak yerine sadece bir dosyayı çalıştırarak gerçekleştirebiliriz.
Bunun dışında, bir veya birden fazla sistem üzerinde her gün, her hafta veya her ay düzenli yapılacak işlemler için, sistemde sürekli olarak seyreden hataların çözümleri için de kabuk programlamadan faydalanılabilir.
Bu bölümde bash kabuğu üzerinde programlama adımları anlatılmaktadır. Bu sebeple başlamadan önce bash kabuğuna sahip bir GNU/Linux dağıtımı kullanıldığından emin olunması gerekmektedir.
GNU/Linux sistemlerde bir programın çalışabilmesi için her zaman bulunulan kullanıcıya ait çalıştırma yetkisi gerekmektedir. Öncelikle betiğe ait bir dizin oluşturulup ilgili izinler aşağıdaki gibi verilebilir.
Betik geliştirmeye ait dizini oluşturup izinlerini verdikten sonra ekrana 'Merhaba Dünya' yazmak için echo komutu betik içerisinde kullanılabilir.
Kodumuzu yazdıktan sonra çalıştıralım.
Betik içerisinde terminal komutlarının sırayla çalıştığını kavradıktan sonra ekrana sistem saatini basıp her çalıştığında /tmp/log altına da kaydeden bir betik yazalım.
Bu betik her çalıştığında ekrana bastığı donanım saatini aynı zamanda /tmp/log adındaki dosyaya kaydetmektedir.
Betik içerisinde değişken tanımlamak için sembol kullanılmazken, değişken çağırılırken $ sembolü kullanılır. Ayrıca aritmetik işlemleri yapmak için $(( )) yapısının kullanılması gerekmektedir.
Betik içerisinde if yapısının kullanılması için öncelikle if yapısının karşılaştırma operatörlerinin bilinmesi gerekmektedir.
-eq : Birinci değişken ikinciye eşittir.
-ge : Birinci değişken ikinciden büyüktür ya da eşittir.
-gt : Birinci değişken ikinciden büyüktür.
-le : Birinci değişken ikinciden küçüktür ya da eşittir.
-lt : Birinci değişken ikinciden küçüktür.
Not: Bu operatörler ve daha fazlası man test ile de görüntülenebilir.
Tıpkı diğer programlama dillerinde de olduğu gibi bash programlamada da for ve while döngüleri kullanılabilir.
Yazılan bir betiğe parametre vermek kabuk programlamada sıkça karşılaşılan bir durumdur. Parametreler otomatik olarak verilme sırasına göre 1 2 3... değişkenlerine atanır. Bu değişkenlere proogram içerisinde erişmek için başına $ değişkeni konularak erişilebilir.
Kabuk üzerinde komutlar ile ilgili yardım alma.
Kurulu işletim sistemi hakkında bilgi toplama.
Makine üzeerindeki donanımlar hakkında bilgi toplama.
help, whatis, apropos
uname, lscpu, lshw, lspci, lsscsi, lsusb, df, du, free
Kabuk üzerinde iken çoğu zaman kendinizi çok yalnız hissedebilirsiniz. Bunun bir nedeni bir çok komutun hangi parametrelere sahip olduğunu bilmemeniz veya ezberlememenizdir. Her iki durum da gayet anlaşılabilir bir durumdur. Bu nedenle çok kullanılan komutlarda detaylı, üçüncü parti komutlarda ise kısmi yardım metinleri bulunmaktadır. Bu metinlerde komutun neler yaptığı, hangi parametreleri aldığı, parametrelerin hangi değerleri alabildiği gibi içerikler yer almaktadır.
Kabuk üzerinde help parametresi ve help komutu bulunmaktadır. Fakat her zaman aynı çıktıyı vermemektedir. Örneğin ls --help yardım çıktısı verirken help ls yardım çıktısı vermemektedir. Fakat cd --help ile help cd aynı çıktıyı vermektedir. Bu nedenle komut olarak değil de parametre olarak kullanmak daha sağlıklı olabilmektedir.
Bu parametre ile bir komutun ne işe yaradığı, parametrelerini ve parametrelerinin hangi değerleri aldığını görebilmekteyiz. Örnek kullanımı aşağıdaki gibidir.
man komutu, herhangi bir komutun manuel yani kılavuz sayfasının gösterilmesini sağlar. Bu kılavuz sayfaları /usr/share/man/ klasörü altında bulunmaktadır. İlgili çıktı içerisinde help parametresi ile aldığımız değerler ve biraz daha fazlasına ulaşılabilmekteyiz. En yaygın kullanımı olarak aşağıdaki gibi kullanılabilinir.
whatis komutu, sonrasında aldığı komut değerinin kılavuz sayfası olarak hangi kategoride olduğunu ve komutun ne işe yaradığını kısaca açıklamaya yaramaktadır. Örnek kullanımı aşağıdaki gibidir.
apropos komutu, sonrasında aldığı komutun hangi komutlarda geçtiğini göstermektedir. dolayısıyla bir komutun yakın amaçlı kullanılan komutlarını bulabilmede yardımcı olmaktadır. ayrıca bu komut aslında man -k komut çıktısını vermektedir. Örnek kullanımında çıktı olarak bir çok satır vermektedir.
Bu bölümde temel sistem bilgilerini görüntülemeye yarayan komutlar anlatılacaktır. Bölüm boyunca anlatılacak olan komutların bir çoğu Debian ve RHEL sistemlerde varsayılan olarak bulunmamaktadır. Bu sebeple komut kullanımından önce ilgili sistemin paket yöneticisi ile kurulumun yapılması gerekmektedir.
Bilgisayarın ağ üzerindeki adını görüntülemektedir
Fiziksel makine adı dahil olmak üzere bir çok bilgiyi bir arada elde etmemizi sağlayan uname komutu parametreler ile filtreleme yapmamıza olanak sağlamaktadır. Yalnızca fiziksel makine adı görüntülenmek istenirse,
kullanılması gerekirken uname ile elde edilebilecek tüm bilgileri görüntülemek için,
kullanılması gerekmektedir.
İşlemci ile alakalı detaylı bilgileri lscpu ile görüntüleriz. Tüm bilgiler görüntülenmek istenirse,
şeklinde kullanılır. Eğer özellikle bir bilgi görüntülenmek istenirse grep komutundan yardım alınabilir.
lshw
lshw sistem üzerinde bulunan farklı türde bir çok donanım için ayrıntılı bilgi verir. Bu sebeple kullanıcılar arasında -short parametresi oldukça yaygınlaşmıştır.
Not: Yetkili kullanıcı ile çalıştırılmalıdır.
hwinfo
hwinfo sistem üzerindeki donanımlar ile alakalı lshw'den daha detaylı bilgiler verir. Tıpkı lshw'de olduğu gibi hwinfo için de -short parametresi yaygınlaşmıştır.
Not: Yetkili kullanıcı ile çalıştırılmalıdır. Her dağıtımda yüklü olarak gelmemektedir.
lspci sistem üzerindeki veriyolları ile alakalı bilgileri ekrana bastırır.
Sistem üzerindeki sabit ve optik diskleri görüntülemek için lsscsi komutu kullanılır.
Not: Yetkili kullanıcı ile çalıştırılmalıdır. Her dağıtımda yüklü olarak gelmemektedir.
Sistem üzerindeki usb aygıtlarını listelemek için lsusb komutu kullanılır.
Sistem üzerindeki disklerin bağlantı noktalarını, boş kalan alanları görüntülemeye yarar.
du komutu geçerli dizin ve alt dizinlerinin dsik üzerinde ne kadar yer kapladığını gösteririr
Boşta kalan veya kullanılan ram miktarını görüntülemek için free komutu kullanılır.
Komut çalıştırmak
Komutları birbirine bağlamak.
Girdi ve çıktı türlerine hakim olmak
; & && || | < > >>
stdin, stdout, stderror
Bir komutun ardından başka bir komut çalıştırılmak istendiğinde sıkça kullanılan ; operatörü ilk komutu çalışmasından bağımsız olarak ikinci komutu hemen ardından çalıştırır.
Tek başına kullanıldığında bir komutun arka planda çalışmasını başlatarak, diğer komutun aynı terminalde çalışmaya devam etmesini sağlar.
Terminal üzerinde kullanılan mantıksal operatörlerden biridir. VE anlamına gelir. Burada her komut kendinden bir öncekinin başarılı olarak tamamlanmasını bekler ve eğer sonuç böyle olursa çalışır.
Terminal üzerinde kullanılan mantıksal operatörlerden biridir. VEYA anlamına gelir. Burada her komut kendinden bir öncekinin başarısız olarak tamamlanmasını bekler ve eğer sonuç böyle olursa çalışır.
Ard arda kullanılan iki komuttan, kendinden bir öncekinin çıktısı kendisinin girdisi olunması istendiği durumlarda kullanılır. Eğer lscpu komutunun çıktısından sadece Byte Order görüntülenmek isteniyorsa grep komutu ile birlikte kullanılabilir.
Bir komutun çıktısını direkt olarak dosyaya yazmak için kullanılır. Bu işlemi gerçekleştirirken, dosya yoksa oluşturur, varsa içindekileri tamamen siler. Sistemlerde çoğunlukla log dosyalarını oluşturmak için kullanılır.
Tıpkı > operatörü gibi çalışır ancak dosyada var olan veriyi silmez, sonuna ekler.
Komuta girdi olarak verilir.
Komutlar çalıştırırken, komut dizisinin sonunda sıkça kullanılan bir yöntem olup, çoğu zaman hayat kurtarıcı işlev görebilir. Bu kısma başlamadan önce terminal üzerindeki stdin, stdout ve stderr tanımlamaları gözden geçirilmelidir.
0 : stdin
1 : stdout
2 : stderr
Yukarıda geçen terimler, terminal üzerinde 0, 1, 2 olmak üzere 3 adet sayı ile temsil edilir ve yönlendirmeleri de yukarıda bahsi geçen > operatörü yardımı ile yapılır.
Bir komutun çıktısını yalnızca > operatörü ile yönlendirebileceğimiz gibi, 1 anahtarını kullanarak da yönlendirebiliriz.
Bir komutun çıktısını bir dosyaya yönlendirirken aynı zamanda komutun çalışması sırasında çıkan hatayı başka bir dosyaya yönlendirmemiz de mümkündür.
Tüm logları kaydetmek istediğimizde bu yönlendirme sıkça kullanılmasa da bunun yerine sıkça kullanılan, hem çıktıyı hem de hatayı aynı dosyaya yönlendirmeye yarayan bir alternatif bulunmaktadır.
Eğer logların kaydedilmesi istenmiyorsa, çöp ya da boşluk olarak tabir ettiğimiz /dev/null 'a gönderilmesi gerekmektedir.
süreçlerin listelenmesi ve yönetilmesi
Süreç, PID, PPID, UID
ps, kill, pkill, killall
İşletim sistemi üzerinde ön planda ya da arka planda çalışan program parçalarından her birine process yani süreç denir. Süreçlerin yönetilebilmesi için bazı kavramların bilinmesi gerekmektedir.
Her bir sürecin kendisine ait bir süreç kimliği vardır (PID)
Her sürecin bir ata süreci vardır (PPID)
USER Sürecin sahibi olan kullanıcı.
TTY Kullanıcının o an yapmış oldığı kabuğu ifade eder.
COMMAND Süreci başlatan komutu ifade eder.
TIME Sürecin CPU'da harcadığı süre.
START Sürecin başladığı saat
STAT Sürecin o anki durumunu ifade eder.
-S : Sürecin beklemede olduğunu gösterir.
-R : Sürecin o an çalıştığını,CPU'da işlem gördüğünü belirtir.
-D : Süreç kesilemez bir şekilde uykuda.
-T : Sürecin debugger'da incelendiğini ya da durdurulduğunu gösterir.
-Z : Süreç zombi durumunda.
CPU kullanımının yüzde kaçının ilgili sürece ait olduğu %CPU sütununda gösterilir.
Sürecin belleğin yüzde kaçını kullandığı bilgisi %MEM sütununda gösterilir.
İşletim sistemi üzerinde o an çalışan işlemleri izleyebileceğimiz bir komuttur.
En çok kullanılan parametreler aşağıdakilerdir:
-a: Belirli bir terminal kontrölündeki o an çalışan süreçleri listeler -u: Süreç sahiplerini de listeler -x: Bir kabul kontrolünde olmayan süreçleri listeler. (TTY sütununda ? ile ifade edilirler.)
Diğer parametreler:
-A : Sistemdeki bütün süreçleri listeler.
-r : Sadece çalışmakta olan süreçleri listeler.
-f : Süreçler arasındaki parent-child ilişkilerini gösterir.
-l : Uzun formatlı bir liste üretir.
-w : Bir sürecin komut satırı parametrelerini gösterir.
-C : Bir süreç ile birlikte o sürecin alt süreçlerini listeler.
T : Komutun girildiği terminalde başlatılan süreçleri listeler.
p : PID değeri girilen sürecin bilgilerini gösterir.
Bir önceki ps komutu yalnızca o anki süreçleri listeleyen bir komuttur. Süreçler durumlarını dinamik olarak görüntülenmek isteniyorsa top komutu kullanılır.
top aynı zamanda sistem üzerindeki süreçlerin sayısını ve bu süreçlerin kaçınının çalıştığını, uyuduğunu, durduğunu ya da zombi sürece dönüştüğünü gösterir.
ps'den farklı olarak pstree, çalışan işlemleri bir ağaç yapısında gösterir. Bu sayede görsellik artar ve bir sürecin ebeveyn süreçlerini bulmak kolaylaşır.
pstree bazı sistemlerde kurulu gelmediğinden ötürü öncelikle sistem üzerine psmisc paketini kurmak gerekmektedir.
Paket kurulduktan sonra pstree komutu ile süreç ağacı görüntülenebilir.
Tıpkı diğer işletim sistemlerinde olduğu gibi GNU/Linux sistemler üzerinde de kimi zaman bazı komut ya da programlar çalışmasını tamamlayamamaktadır. Bu da sistemin ya da ilgili komut/programın yanıt vermemesine sebep olmaktadır.
Yanıt vermeyen programlarla baş etmenin bazı zamanlarda tek çözümü programa ait süreç veya süreçlerin durdurulmasıdır.
Bu noktada durdurmak istediğimiz sürecin tekil süreç veya süreç ailesi olmasına göre iki farklı yöntem izleyebiliriz
Sistem üzerinde çalışan herhangi bir sürecin pid numarasını parametre olarak alır ve parametre olarak aldığı bu değerin ait olduğu süreci öldürür.
Eğer birden fazla process pid'si ile birlikte öldürülmek isteniyorsa -9 parametresi kullanılmalıdır.
Eğer sistem üzerinde öldürülmek istenen süreç, pid'si yerine adı ile öldürülmek isteniyorsa pkill komutu kullanılır.
Eğer öldürülmek istenen tekil bir süreç yerine süreç ailesi ise killall komutu kullanılmalıdır.
Terminal üzerinde komutları kullanabilmek.
echo, cat, pwd, ls, cd
history, clear
whoami
echo komutu en temel komutlardan birisidir. kabuk üzerinde yazdırma işlemi yapmak istediğiniz durumlarda kullanabilirsiniz.
En basit uygulamalarından birisi terminal ekranına yazı yazmak olarak düşünülebilinir. Aşağıdaki komut ve sonrasındaki string değeri ile ekrana "Merhaba Dünya" çıktısı verilebilmektedir.
Çevre değişkenlerinin değerleri bu komut işle ekrana yazdırılabilir.
İleriki bölümlerde detaylı görülecek olan operatörler kullanarak herhangi bir dosyanın içerisine bu yazıyı yazabilirsiniz
cat komutu, genellikle kabuk üzerinde dosyaları birleştirmek veya dosya içeriğini yazmak için kullanılan bir komuttur. En basit uygulaması herhangi bir dosyanın ekrana yazılması olarak düşünebiliriz.
cd komutu, kabuk üzerinde bulunduğunuz dizinden başka bir dizine geçmenizi sağlamaktadır. Ve en basit uygulaması olarak komut sonrasında gidilmek istenen yol şeklinde kullanılmaktadır. Örneğin /etc klasörüne gitmek isterseniz aşağıdaki gibi kullanmanız gerekmektedir.
Bu şekilde ilgili klasöre geçiş yapılabilmektedir.
cd komutuna herhangi bir dizin argüman olarak verilmediğinde o anki kullanıcının ev dizinine yani $HOME değişkeninde tanımlı olan dizine gider.
Ev dizini aynı zamanda ~ (tilda) işareti ile de ifade edilebilir.
pwd komutu, kabuk üzerinde iken, dosya sistemi üzerinde tam olarak hangi konumda olduğunuzu göstermektedir. Bu kavram yeni başlayan arkadaşlar için biraz ilginç gelebilir ama çoğu zaman hangi dizinde olduğunuzu bilemeyebilirsiniz. Özellikle BASH yerine SH kullandığınızda uçbirim ekranında da bu ipucuya ulaşamayacaksınız. pwd komutunun tek başına kullanımı ile bulunduğunuz yolun adresini uçbirim ekranına düşürebiliyorsunuz.
ls komutu, kabuk üzerinde bulunduğunuz konumdaki dosyaları listelemektedir. (pratikte dizinleri ve kısayolları da görmektesiniz ama aslında hepsi birer dosya) Ve daha önce öğrendiğimiz komutlara ek olarak, genellikle kullanımı sırasında parametreleriyle birlikte kullanılmaktadır. Bu parametreler daha sonra detaylandırılabileceği gibi basitçe a (gizli dosyaları da göster), l (alt alta sırala), t(zamana göre sırala), r (terse göre sırala) özetlenebilir.
En basit uygulaması bulunduğunuz dizindeki tüm dosyaları değişim zamanına göre listelemek için aşağıdaki komut kullanılabilmektedir. Parametreleri aşağıdaki iki farklı şekilde de kullanabilirsiniz:
Ayrıca ls komutunun bir diğer kullanımı da bulunduğunuz dizinde değil de, herhangi bir dizin içerisindeki dosyaların listelenmesidir. Bunun için aşağıdaki gibi komut ve parametreden sonra yol adresini yazmanız gerekmektedir.
Hiçbir seçenek olmadan, geçmiş listesini satır numaralarıyla görüntüler. Her bir kabuğun kendine ait geçmişi tutulur. Kabuktan çıkış yapılırken bellekte tutulan bu geçmiş, kullanıcının ev dizinindeki .bash_history dosyasına kaydedilir.
Terminal ekranını temizler.
isim adlı bir değişlene bir isim tanımlanarak bunun ekrana yazdırılması
isim ve soyisim değişkenleri tanımlanarak bunlara birer değeri verilmeli, bunların birleştirilmiş halleri bir kisi değişkenine eşitlenmeli ve kişi değişkeni ekrana yazdırılmalı.
/home/ dizininde iken /etc/systemd/system dizinine tek komut ile gidilmeli.
GNU/Linux dağıtımları bilindiği üzere kendi aralarında da bir kaç kategoriye ayrılmıştır. Bu kategorilere göre de gerek dosya yolları, gerek paket yöneticileri gerek başka özellikleri farklılık gösterebilmektedir.
Örneğin Debian tabanlı sistemler apt paket yöneticisini kullanırken, RHEL tabanlı sistemler yum paket yöneticisini kullanmaktadır. Bunlar en bilinenler olduğundan örnek olarak verilse de diğer dağıtımlarda da çeşitli paket yöneticileri kullanılmaktadır.
Pardus da Debian tabanlı bir dağıtım olduğundan, bu yazımızda dpkg ve apt paket yöneticilerini inceleyeceğiz.
Debian Package Manager'ın kısaltması olan dpkg, debian tabanlı sistemlerde kullanılan bir paket yöneticisidir.
Kullanıcı dostu bir paket yöneticisi olmadığından yerini daha kullanıcı dostu olan apt'ye bırakmıştır. dpkg'yi apt'den ayıran en önemli özellik bağımlılıklar bu paket yöneticisi ile yüklenmemektedir.
Sistemde kurulu paketler için,
bir kapeti kurmak için
bir paketin sistemde yüklü olup olmadığı
komutları ile kontrol edilebilir.
apt paket yöneticisi giriş yazısında da belirtildiği üzere, debian tabanlı sistemlerde paket yükleme, silme, paket ve paket listelerini güncelleme için kullanılmaktadır. apt sistem paketleri üzerinde değişiklik yaptığından ve bu değişiklikler sistem üzerinde hasara yol açabileceğinden çalıştırırken yetkili kullanıcı olarak ya da sudo yetkisi ile çalıştırılmalıdır.
update, sistem üzerindeki paket listelerini güncellemekte kullanılır. Böylece uzak depo sunucusundaki uygulama listesi, yerel bilgisayar üzerine çekilir. Çoğu zaman sistemin ilk açılışında paket listelerinin güncellenmesi, sunucunun internete çıkabildiğinin testi ya da paket listelerine yeni bir tanesi eklendiğinde kullanılır.
Bunun için /var/lib/apt/lists/
dizini altındaki InRelease dosyaları kontrol edilebilir.
Eğer bir paketi yüklemek istiyor ve o paketin depolarda olup olmadığını, varsa hangi versiyonunun olduğunu ya da hangi depoda olduğunu öğrenmek için kullanılabilir.
install, sisteme yeni paket yüklemek için kullanılır. Eğer yüklenecek paket, paket listelerindeki bir depoda bulunuyorsa paket rahatlıkla indirilecektir. Ancak bulunmuyorsa önce paket listelerine bu deponun eklenmesi gerekmektedir.
Aynı zamanda hali hazırda .deb uzantılı bir paketi sisteme yüklemede de kullanılabilir.
remove, sistemde yüklü olan bir paketi silmek için kullanılır.
Bu komut paket kaldırılırken bağımlılıkları ve config dosyalarını kaldırmaz. Paketin yapılandırma dosyaları ile birlikte kaldırılması isteniyorsa aşağıdaki komut kullanılır
upgrade, paket yükseltmelerinde kullanılır. Örneğin sambahvl paketi sistem üzerinde 14.0 versiyonunda iken depolarda 14.5 versiyonu bulunuyorsa upgrade ile paket güncelleştirilebilir.
İstenirse tüm sistemdeki paketler de tek seferde güncellenebilir.
apt install ile sisteme bir paket kurulduğunda, paketin yanında bağımlılıkları da sisteme yüklenmektedir. Paket kaldırılmak istendiğinde eğer tek başına paket kaldırılırsa yüklenen bağımlılıklar sistemde kalmaya devam edecektir.
autoremove, kaldırılan paketin bağımlılıklarını eğer sistemde başka bir paket kullanmıyorsa paketle beraber kaldırır.
Bu paket yöneticisinin en büyük özelliği dağıtım tabanlı olmamasıdır. Bağımlılıkları da içermesinden dolayı rpm tabanlı Centos işletim sisteminde de Debian tabanlı Pardus işletim sisteminde de aynı şekilde kullanılabilir.
Sistemde artık gerekli olmayan paketler hangi apt komutu ile temizlenir?
IP Adresi: Ağa bağlanan her bilgisayarın bir IP adresine sahip olması gerekir. DHCP sunucusu ağa bağlanan her bilgisayarın farklı ve özgün bir IP adresine sahip olmasını sağlar. Gateway Adresi: Eğer bilgisayarların bağlı bulunduğu ağın internet bağlantısı var ise ağda bulunup internete bağlanacak olan bilgisayarların bir gateway(geçit) IP adresine sahip olması gerekir. DNS Adresi : Bir ağ için en az bir, tercihen iki adet DNS IP adresinin önceden belirlenmiş olması gerekir. DNS IP adresi , ağdaki bir bilgisayar için name resolving işlemi yapacak olan sunucunun IP adresidir. Netmask Adresi: İki cihaz veya bilgisayarın aynı ağda olup olmadıklarını kullandıkları ağ alt maskeleri belirler. Ağ alt maskesi IP adresinin ilk 24 bitine karşı gelen kısımdır. Ağa bağlı her ethernet kartı için bir ağ alt maskesi bulunmalıdır.
Terminal üzerinde ip bilgilerimizi görmek için aşağıdaki komutu çalıştırırız
Bilgisayardaki ağların gateway adreslerini bulmak için aşağıdaki komut çalıştırılır.
DNS Sunucusu
DHCP Sunucusu
Network ayarları aşağıdaki dosya ve dizinlerde bulunur.
/etc/hosts
/etc/resolv.conf
/etc/network/interfaces
Bir adresi kontrol etmek için ping komutu kullanılır.
Uzaktaki makineye telnet protokolü ile bağlanmak için telnet komutu kullanılır.
Bir adrese erişim için kullanılan yol ile ilgili bilgi almak için traceroute komutu kullanılır.
Bir alan adına bağlı IP adresini veya bir IP adresine bağlı alan adını araştırır.
Belirli bir ağı keşfetmek için kullanılır.
Mevcut makine üzerindeki soketleri dinlemek için kullanlır. Örneğin TCP bağlantılarını dinlemek için
Makineye sağ tıklanarak Ayarlar açılır.
Ağ sekmesindeki Bağdaştırıcı 1 sekmesindeki, etkinleştir kutucuğunun işaretli olduğundan emin olunur. Takılı birim olarak NAT yazmalıdır.
Ağ sekmesindeki Bağdaştırıcı 2 sekmesindeki, etkinleştir kutucuğunun işaretli olduğundan emin olunur. Takılı birim olarak Köprü Bağdaştırıcısı ya da Bridged Adapter yazmalıdır.
Makine açıldıktan sonra root kullanıcısına giriş yapılarak aşağıdaki komut ile ağ yöneticisi açılır.
Yukarıdaki her iki aygıt için de aşağıdaki ayarlar kontrol edilmelidir.
Debian'ın 11 numaralı sürümü olan Bullseye'ın kararlı versiyonu 14 Ağustos Cumartesi günü yayınlandı ! Bu heyecan verici olayın üzerinden henüz saatler geçmişken Debian'ın bu çok beklenen sürümü nasıl kurulur, beraber inceleyelim.
Debian 11 Disk Kalıbının İndirilmesi
Debian 11 disk kalıbını buradaki adresten indirelim.
Kurulum Başlat butonu ile makinemizi başlatalım.
Graphical Install seçeneği ile devam edelim.
Bu aşamada belirleyeceğimiz sistem dili, kullanım aşamasında deneyimimizi oldukça etkileyecek bir opsiyon olduğundan dikkatli karar verilmelidir.
Türkçe kurulan dağıtımlar çoğunlukla dil desteği açısından Türkçe'yi kapsamayan yazılımlar için çeşitli kurulum/kullanım sorunlarına sebep olduğundan önerimiz, sorunsuz bir kullanıcı deneyimi için İngilizce seçeneğinin tercih edilmesidir.
İngilizce seçeneği ile devam edelim, sonrasında gelecek olan lokasyon bilgilerini de son adım Türkiye olacak şekilde dolduralım.
Eğer Türkçe Q dizilimine sahip bir klavyeye sahipseniz bu aşamada Türkçe Q klavye dizilimini tercih edebilirsiniz.
Başlangıç ayarlarını tamamladıktan sonra konfigürasyonun tamamlanmasını bekleyelim.
Konfigürasyon tamamlandıktan sonra makine ve kullanıcı ayarlarını belirleyelim.
Eğer sanal makinenizi bir alan adına dahil etmek istemiyorsanız bu adımı boş bırakarak devam edebilirsiniz.
Root kullanıcı parolamızı belirleyelim.
Kişisel kullanıcımızı oluşturmak için istenilen bilgileri dolduralım.
İsteğe bağlı olarak bu adım sahte veri ile doldurulabilir ya da boş bırakılarak devam edilebilir.
Sisteme giriş yapacağımız kullanıcı adını belirleyelim.
Oluşturduğumuz kullanıcıya ait parolayı belirleyelim.
Tavsiye edilen disk seçenekleri ile devam edelim.
Tüm ayarları eksiksiz doldurduktan sonra son adım olan sistemin kurulmasını bekleyelim. Bu adımda sistemin kurulması fiziksel bilgisayarınızın kaynakları ve diskinizin hızı ile doğru orantılı olarak daha uzun/kısa sürecektir.
Sistem kurulumu adımında bize sorulan apt paket yöneticisi yapılandırmasını aşağıdaki seçenekler ile yapılandıralım.
Debian 11'i hangi opsiyonlarla kullanmak istediğimizi işaretleyelim. İsteğe bağlı olarak kendi istediğiniz seçeneklerle kendi Debian 11'inizi oluşturabilirsiniz.
GRUB boot loaderı kurmak için Yes seçeneği ile devam edelim.
GRUB boot loader'ın nereye kurulacağını seçelim. Sanal makinede tek parça bir disk yapılandırdığımız için önümüze çıkan tek seçenek çıkmakta ancak birden fazla disk bölümü ile kurulum yapan okuyucularımız kurmak istediği başka bir disk bölümünü kurulum için işaretleyebilir.
Ve son ! Debian 11'i başarı ile kurduğumuzun göstergesi olan son kurulum adımını da geçerek Debian'ın yeni sürümünü karşılayalım !
Kurulum adımında oluşturduğumuz kullanıcımızı seçerek giriş yapalım.
Debian'ın son sürümü olan Debian 11 Bullseye'ı başarı ile sanal makinemize kurduk ve doğru ayarlarla yapılandırdık. Burdan sonraki deneyim tamamen sizin ihtiyaçlarınız ve istekleriniz doğrultusunda şekillenecek !
Çekirdek, Linux/GNU işletim sisteminlerinin ana bileşeni ve Linux olarak adlandırılan parçasıdır. Bilgisayarın donanım ile ilgili süreçlerini yönetir. Kısacası yazılım ile donanımı birbirine bağlayan köprü görevi görmektedir. Bu çekirdeğin bu kadar önemli olmasının sebebi ise diğer ticari çekirdeklerden farklı olarak özgür olmasıdır.
Linux/GNU işletim sisteminde kullandığımız mevcut çekirdek sürümüne aşağıdaki komutlardan biri ile bakabiliriz.
Kabuk (shell), bir işletim sistemi için bilgisayarı kullanabilmek adına; kullanıcı ile çekirdek arasında haberleşmeyi sağlayan ortama verilen addır. Kullanıcı tarafından kabuk üzerinden gönderilen komutlar, sistem çağrıları vasıtasıyla çekirdeğe ulaşarak işlenmektedir. Tabi ki bir çok durumda kabuk üzerinde de işlemler yapılabilmektedir.
GNU/Linux sistemlerde bir çok kabuk bulunmaktadır. Genellikle BASH, SH ve ZSH kabukları ile karşılaşmış olma ihtimaliniz oldukça yüksektir. Mecut GNU/Linux dağıtımında yüklü gelen kabuklar, /etc/shells dosyasında yazmaktadır.
Sisteme giriş yapmış her kullanıcı için bir kabuk programı çalışır. Çalışan kabuk kullanıcın bir komut girmesini bekler, kumutu yorumlayarak gerekli programları çalıştırır ve programın sonlanmasını bekler.
Bunun yanında herhangi bir betik programlama dilinin kendine özgü kabukları da bulunmaktadır. Bunlara basit örnekler vermemiz gerekirse Python ve PHP diyebiliriz.
Bu belge içerisinde genellikle BASH kabuğundan bahsedeceğiz. Linux kabuk üzerinde değişkenler tanımlayabilmemize olanak tanır. Açılan her kabuğun değişken listesine kendisine özgüdür. Bir kabuğun sahip olduğu öntanımlı değişkenleri görebilmek için env ya da printenv komutu çalıştırılabilir.
Buradaki değişkenlerden en yaygın kullanılanları $HOME, $USER ve $PATH değişkenleridir. Bir değişkenin değerini ekrana yazdırmak için ecko komutu kullanılabilir
Linux üzerinde her şey bir dosyadır. Kabuk üzerinde çalıştırdığımız dosyalar da birer dosyadır. Bunların sistem tarafından tanınmaları için belirli dizinler altında saklanmaktadır. $PATH değişkeninde bulunan dizinler sistemin çalıştırılabilir uygulamalarının bulunduğu dizinlerdir. Eğer bu değişken olmasa idi tüm komutları tam adres vererek girmek gerekecekti.
Kullanıcının yaptığı programların kabuk tarafından tanınması için $PATH değişkeninde bulunan dizinlerden birisine taşınması yeterlidir.
unset: Bir değişkeni çevre değişkenlerinden çıkarır.
export: O anki kullanıcı kabuğunun çevre değişkenlerine ekler.
Her bir kullanıcının ev dizini altında bulunan .bashrc
gizli dosyası, kullanıcı oturum açtığında bir dizi yapılandırma yapar. Bunlar renklendirme ayarları ya da yukarıda belirttiğimiz değişken tanımlama gibi ayarlar olabilir.
Terminal(uçbirim) kullanıcının kabuk ile etkileşim kurmasını sağlayan programdır. Bu uçbirim için ise çeşitli masaüstü ortamlarında bulunan emülatörler bulunmaktadır. Bu terminal emülatörleri ile birlikte son kullanıcı komutları klavye yardımı ile kullanabilmektedir. Terminal emülatörlerine örnek olarak gnome terminal, terminator, guake, yakuake verilebilir.
Bir kabuk üzerinde boşluk veya girdi(enter) karakterine kadar olan yazılan kısma komut denmektedir.
GNU/Linux sistemlerde komutlar, aslında sistem içerisinde bulunan, kimi zaman bash kimi zaman python kimi zamansa başka bir dille yazılmış betiklerdir. Komut olarak terminale gönderilen kelimeler çoğu zaman sadece o betikleri uygun parametreler ile tetikleyen minik kod parçaları olmaktadır.
Bu betikler her dağıtımın altlığına göre, dosya sistemine göre değişmektedir. Ancak çoğunda standart bir formata uygun olarak geliştiriciler tarafından ayarlanmaktadır. Örneğin yeni bir komut geliştirdiyseniz ve bunu .deb paketi ile dağıtıyorsanız, komut dosyalarınızı sistemde uygun yerlere koymanız gerekmektedir.
Aşağıdaki site sayesinde komutları öğrenebilirsiniz:
Standart çıktı (standart output), özetle bir kabuk üzerindeki ekranda gördüğünüz çıktı olarak düşünebilirsiniz. Genellikle bir terminal üzerindeki ekran sizin için standart çıktı olarak karşınıza çıkacaktır. Standart çıktı'nın bir alternatifi disk üzerindeki herhangi bir dosyanın içeriği olarak düşünülebilir.
GNU/Linux sistemlerde tıpkı komutların belli bir dosya yolu olduğu gibi, komut geliştiricileri çoğunlukla komutları aynı formata göre tasarlarlar. Örneğin tüm komutlarda, kısa parametreler tek - ile yazılırken, uzun parametreler -- ile yazılır.
Hemen hemen tüm komutlarda bulunan yardım, yani help parametresini ele alalım.
-h ile parametresi yerine --h denersek,
hata çıktısını alırız. Onun yerine --help denersek,
çıktısını alırız. Aynı şekilde -help için de hata mesajı görmemiz muhtemeldir.
Bunun yanında GNU/Linux komutlarında komut içerisindeki parametreler ve parametrelerin değerleri boşluk ile ayrılır. Yani her boşluktan sonraki kelimeyi komut yeni bir değer olarak algılar. Örneğin, Komut Dokümantasyonu adında bir dizini,
şeklinde oluşturmayı denersek, ayrı ayrı Komut ve Dokümantasyonu adında iki dizin oluşur. Bunun yerine,
şeklinde boşluksuz isim vermemiz gerekmektedir.
Terminalde komut yazarken çoğunlukla kullanılan bazı pratikler bulunmaktadır. Örneğin afyonkarahisarlılaştıramadıklarımızdanmısınız isminde bir dizine erişmek istediğimizi düşünelim. Elimizle teker teker bu dizinin adını yazmak yerine,
şeklinde kelimenin bir kısmını yazıp tab tuşu ile tamamlamak kullanım hızı ve pratikliği arttıracaktır.
Not: Aynı dizinde afyon ile başlayan başka bir dizin varsa ortak olan kısma kadar tab eşitler, sonrası için kullanıcının hangi dizine gidecekse o dizinin bir sonraki harfini yazıp tekrar tab demesi gerekmektedir.
Terminalde yazılan her komut kaydedilmektedir. Kaydedilen bu komutlara sonradan erişmek veya yazılan tüm komutlara erişmek mümkündür. Eğer bir komut kabuğa yanlış gönderildiyse, üst yön oku ile komut tekrar terminal ekranına getirilip düzenlenebilir.
Bunun yanında şu ana kadar yazdığını komutların listesini de,
komutu ile görüntüleyebilirsiniz.
Terminalde komut yazdıktan sonra düzenleme yapıldığında, illa satırın en sonuna gidip ENTER demek gerekmez. Yani bir komut satırının ortasındayken de ENTER tuşu ile komut kabuğa gönderilebilir.
bash ve sh kabuklarının çevre değişkenlerini kıyaslama
Bir uçbirim açın ve mevcut kabuğu ekrana yazdırın
bash kabuğuna geçerek çevre değişkenlerini ekrana yazdırın
sh kabuğuna geçerek çevre değişkenlerini ekrana yazdırın
Python kabuğu üzerinde basit fonksiyon geliştirme
Uçbirim üzerinde python kabuğu açılmalı, python kabuğu üzerinde fibo (fibınacci dizisi için) kütüphanesini içeri aktararak, dizinin ilk 10 sayısını döndüren bir fonksiyon yazın.
Kullanıcı bazlı değil, sistem genelinde kalıcı bir çevre değişkeni tanımlanmak istense, hangi sistem dosyası kullanılabilir.
Kullanıcı ana dizininde bulunan dosyalardan hangisi Bash geçmişini depolamak için kullanılır?
Tüm Linux işletim sisteminde, neredeyse hiçbir kısıtlaması olmadan tüm işlemleri gerçekleştirme yetkisine sahip olan root kullanıcısı bulunmaktadır. Bazı dağıtımlarda kurulum sırasında bu kullanıcı için parola oluşturulurken bazı dağıtımlarda oluşturulmaz.
root dışında oluşturulan normal kullanıcıların yalnızca kendi ev dizinlerinde ve /tmp dizininde değişiklik yapma yetkisi bulunmaktadır. Bunun dışındaki sistem dosyalarında işlem yapılmak isteniyorsa yetki yükseltme işlemi gerekmektedir.
Son kullanıcı sudo komutu ile kendisinden sonra gelen komutların root kullanıcısı tarafından yapılmasını sağlar. Tabiki bu işlem eğer yetkisi varsa yapılır.
root kullanıcısı dışında sistemde neredeyse hiçbir kısıtlaması olmadan tüm işlemleri gerçekleştirme yetkisine sahip gruba sudo grubu denir. Son kullanıcı bu gruba dahil ise sudo komutu ile yetkili işlemler yapabilir.
Peki root kullanıcısının ya da sudo grubunun hangi işlemleri yapabileceğini sistem nasıl anlar. Kullanıcı ve grup yetkileri /etc/sudoers dosyasında tanımlanır.
root
ALL=(ALL:ALL) ALL
İlk sütun hangi kullanıcı ya da grubu etkileyeceğini ifade eder
root ALL
=(ALL:ALL) ALL
İkinci sutün hangi makine ve terminaller üzerinde uygulanacağını ifade eder.
root ALL=(ALL
:ALL) ALL
Üçüncü sütun, komutların tüm kullanıcılar olarak çalıştırabileceğini gösterir.
root ALL=(ALL:ALL
) ALL
Dördüncü sütun, komutların tüm gruplar olarak çalıştırabileceğini gösterir.
root ALL=(ALL:ALL) ALL
Son olarak son sütun hangi komutlara yetki verildiğini ifade eder
Dosyaların aynı anda bir kişi tarafından düzenlendiğinden emin olmak için sudoers dosyası visodu komutu ile düzenlenir
GNU/Linux sistemler, hızlı ve pratik olmasının yanında güvenlik açısından kale gibi olması sebebi ile de sunucularda sıklıkla kullanılırlar. Bunun sebebi de teker teker her dosyanın ve dizinin sahip olduğu yetki sistemidir.
Her dosya veya dizin 3 ayrı alan için yetkilendirmeye sahip olabilir. Bu yetkilendirmeler,
Aynı zamanda yukarıda belirtilenlerden her biri için ayrı ayrı okuma, yazma ve çalıştırma yetkisi bulunmaktadır.
Bu iki bilgiyi birbiri ile birleştirdiğimizde, sıklıkla ls -la komut çıktısında gördüğümüz her dosyanın başında yer alan izinleri anlamlandırabiliriz.
Sol tarafta yer alan 10 karakterden, ilki dosyanın türünü belirtir. Örneğin,
anlamına gelmektedir.
Sonraki dokuz hane ise izinleri temsil eder. İlk 3 hane dosya sahibinin izinleri, sonraki 3 hane dosya grubunun izinleri, en son hane ise sistemdeki diğer kullanıcının izinlerini göstermektedir.
Dosyalar ve dizinlerin okuma yazma, ve çalıştırma için uygun gruplara uygun izinlere ihtiyacı olduğundan bahsettik. Şimdi bu izinlerin nasıl verildiğinden bahsedelim.
Eğer bir betiğe dosya sahibi için çalıştırma yetkisi vermek istiyorsak,
komutlarını kullanabiliriz. Ya da dosyanın herkes için tüm izinlerini silip sadece okuma izni vermek istiyorsak,
komutunu kullanmamız gerekir. Dosyadan yetki silmek için ise,
komutu kullanılmalıdır.
Dosya izinleri yukarıdaki gibi kullanıcı, grup ve diğer kullanıcılar için ayrı ayrı verilebilse de bazı durumlarda tercih edilmemektedir. Bunun yerine Eğer bir dosyayı herkes tarafından okunabilir yapmak istiyorsak, Binary Dosya İzinleri diye de bilinen İkili Dosya İzinleri kullanılmaktadır.
Bu sistemde izinler 3erli olarak ayrılır. Ayrılan her bir grup için sağdan sola 2 üzeri 0, 2 üzeri 1 ve 2 üzeri 2 olarak numaralandılır. Eğer izinlerin hepsi açıksa, yani rwx durumunda ise tüm bu rakamlar toplanır ve o gruba 7 değeri atanır. Eğer bu izinlerden biri bile yoksa, onun yerine 0 yazılarak toplanır.
Örneğin izinleri,
olan bir dosya için,
753 iznine sahip denilebilir. chmod ile binary izinleri de,
şeklinde kullanılabilir.
Linux dosya sistemi yapısına hakim olmak
Terminal dosya ve dizinleri yönetebilmek.
Metin editörleri ile dosyaları düzenlemek
mkdir, rmdir, touch, cp, mv, rm
nano, vi
GNU/Linux tabanlı sistemlerde diğer işletim sistemlerine göre farklı bir dosya hiyerarşisi bulunmaktadır. GNU/Linux'da her şey / ile gösterdiğimiz ve root dizini olarak da tabir ettiğimiz kök dizin'den başlar.
Kök dizin tüm hiyerarşinin en üst noktasında yer alır ve diğer tüm dizinler ondan türer.
Kökün altında bulunan bu ana dizinler çeşitli görevler ve kullanım alanlarına göre ayrılmıştır. Adları aynı olsa da dağıtımlara göre kullanım amaçları bile değişebilir. Bu bölümde dizinler, ne işe yaradıkları ve kullanım amaçları en yaygın bilinen hali ile açıklanacaktır.
Linux dosya sisteminde iki çeşit adres bulunmaktadır. / işareti ile başlayıp kök dizininden itibaren bütün dosya yolunu yazmaya mutlak adres belirtme denir. Bulunduğunuz dizinin alt dizinlerine dair bir adres yazılacaksa buna bağıl adres belirtme denir.
Yeni dizin oluşturmak için kullanılır.
Eğer iç içe dizin oluşturulmak istenirse -p parametresi kullanılmalıdır.
Eğer aynı seviyede birden fazla dizin oluşturulması gerekiyorsa dizinler boşluk ile yazılmalıdır.
Dizin silmek için kullanılır. Ancak silinecek dizinin boş olması gerekmektedir.
Dosya oluşturmak için kullanılır.
Eğer birden fazla dosya oluşturulması gerekiyorsa dizinler boşluk ile yazılmalıdır.
Not: touch ile olmayan dizinlerde dosya oluşturulamaz.
Dosyaları veya dizinleri kopyalamak için kullanılır.
Eğer bir dizindeki aynı uzantılı tüm dosyaları kopyalamak istersek,
Eğer bir dizin ve altındakileri kopyalanmak istenirse -R parametresi kullanılır.
mv'nin iki adet kullanım şekli bulunmaktadır. Bunlardan ilki dosya/dizinlerin adlarını değiştirmede kullanımıdır.
mv buna ek olarak dosya/dizinlerin taşınmasında da kullanılır.
Dosya ve dizinlerin silinmesinde kullanılır. Rm ile bir dosya veya dizinin silinmesi isteniyorsa içinin boş olması gerekir ve gelen sorunun y ile onaylanması gerekir.
rm komutu ayrıca -r ve -f parametreleri ile beraber de sıkça kullanılır.
Eğer dolu bir dizin veya dosyayı onay beklemeden, kesinlikle silinmek isteniyorsa şu şekilde kullanılmalıdır;
nano çoğu dağıtım ile beraber kurulu olarak gelen en temel dosya düzenleyicisidir. Basit olması aynı zamanda yalnızca basit işler için kullanımına izin verir. Örneğin basit bir konfigürasyon dosyasını nano ile düzenleyebilir ya da notlarınızı hızlıca bir dosyaya yazabilirsiniz. Ancak çoğu zaman nano ile yazılım geliştirmeniz ya da daha karmaşık işleri halletmeniz mümkün olmayacaktır.
Not : Eğer yazmak istediğiniz dosya yoksa, nano dosyayı direkt olarak oluşturup yazmanıza olanak sağlar.
CTRL+S : O ana kadar yapılan değişikliklerin kaydedilmesini sağlar.
CTRL+W : Dosya üzerinde arama yapılmasını sağlar.
CTRL+K : Bulunulan satırı kesmeye yarar.
CTRL+U : Kesilen satır işlemini geri alır.
CTRL+X : Dosyada yapılan değişiklikler kaydedilmişse direkt çıkar, kaydedilmemiş ise kaydedilsin mi diye sorup çıkmaya yarar.
vi nanoya göre daha karmaşık bir yapıya sahipken, terminal üzerinde yazılım geliştiren çoğu geliştiricinin favori editörüdür.
Temel olarak gezinti ve komut modu olarak iki moda sahiptir. Bunlardan gezinti modunda metin ile alakalı kısayollar kullanılırken, komut modunda ise çık, kaydet ve çık gibi dosya ile alakalı işlemler yapılabilir.
Tıpkı görsel arayüze sahip masaüstü editörleri gibi yazılım geliştirmeye yardımcı çeşitli eklentilere sahiptir.
Gezinti modu
J : Sonraki satır
K : Önceki satır
H : Sol
L : Sağ
Komut modu
Bir kaç kez esc tuşuna tıklayarak komut moduna geçilir.
:w - Yaz
:q - Çık
:q! - Kaydetmeden çık
:wq - Kaydet ve çık
vi düzenleyicide, imleci hareket ettirme veya satırları arabelleğe kopyalama gibi komutlar nasıl birden çok kez verilebilir veya birden çok satıra nasıl uygulanabilir?
Tek komut ile aşağıdaki yapıda dizin nasıl oluşturulur.
3. Vi düzenleyicide hangi komut ya da komutlar açılan belgeyi kaydeder ve düzenleyiciden çıkar? 4. deneme1'den başlayarak deneme10'a kadar olan dosyaları tek bir komutla nasıl oluştururuz?
Bilgisayarın beyni konumundaki bu bölüm donanımın kullanımını sağlayan küçük bir yazılımdır. Bilgisayarı oluşturan parçalarla donanımların kullanımını sağlayan driverler arasında iletişimi sağlar.
Bilgisayarın açılışı sırasında donanım kontrollerini yaparak hayati bir rol oynar.
Herhangi bir sabit diskin ilk sektörüdür. Disk içerisinde MBR alanı 512 bayt büyüklüğündedir.
Disk içerisindeki bölümlerin konumlarını belirler. İşletim sistemlerinin nereye ve nasıl kurulması gerektiğini belirler. İşletim sistemlerinin bilgisayarda açılabilmesi için önyükleme görevini yerine getirir.
Ayrıca MBR disklerde en fazla 4 birincil bölüm oluşturulabilmektedir. 2T üzerindeki bir diski bölümlendirememektedir. Bunun yerine GPT kullanılır.
GRUB, önyükleme(boot) sürecinin yüklenmesi ve yönetilmesi için gerekli olan eksiksiz bir programdır. Linux dağıtımlarında kullanılan en yaygın önyükleyicidir.
Önce işletim sisteminin çekirdeğini yükler. Çekirdek ise hemen ardından işletim sisteminin geri kalanını başlatır: kabuk, görüntü yöneticisi, masaüstü ortamı vb.
Çekirdek , gerçek dosya sistemi bağlanana kadar İlk RAM Diski (initrd) kullanarak geçici bir kök dosya sistemi kurar. Çekirdek çalışmaya başladığı anda bir PID değeri alır ve bu 1 dir.
Eskiden çekirdeğin çalıştırdığı ilk program /sbin/init iken artık yerini systemd'ye bırakmıştır. init yapısında çalışma seviyeleri vardır ve servisler bu çalışma seviyelerine göre açılırlardı. Her bir çalışma seviyesi için, init tarafından başlatılan süreçler /etc/inittab dosyası içinde tanımlıdır.
Runlevel
Target Unit
Açıklama
0
runlevel0.target, poweroff.target
Poweroff target
Linux işletim sistemini çok kullanıcılı modda çalışır. İkinci seviyeden fark olarak NFS desteği bulunmaktadır.
1
runlevel1.target, rescue.target
Rescue yani kurtarma target’ı
Linux işletim sistemi tek kullanıcılı modda çalışır. Bu mod çoğunlukla bakım ve kurtarma için kullanılır. Varsayılan olarak ağ ayarları geçerli değildir.
2
runlevel2.target, multi-user.target
Çoklu kullanıcı target’ı (runlevel 2,runlevel 3 ve 4 aynı)
Linux işletim sistemi çok kullanıcılı modda çalışır fakat NFS sunucuları çalıştırılmaz ve NFS dosya sistemleri bağlanmaz.
3
runlevel3.target, multi-user.target
Çoklu kullanıcı target’ı (runlevel 2,runlevel 3 ve 4 aynı)
Linux işletim sistemini çok kullanıcılı modda çalışır. İkinci seviyeden fark olarak NFS desteği bulunmaktadır.
4
runlevel4.target, multi-user.target
Çoklu kullanıcı target’ı (runlevel 2,runlevel 3 ve 4 aynı)
Hiç bir şey tanımlanmamıştır.
5
runlevel5.target, graphical.target
Grafik ekranın başlatıldığı target
Üçüncü seviyenin yanı sıra, X Window sisteminin çalışmasını sağlar.
6
runlevel6.target, reboot.target
Reboot target
Multics, daha çok program geliştiricileri için düşünülmüş, çok kullanıcılı bir işletim sistemi projesidir. Kapsamının dışına çıkması ve projenin yavaşlaması nedeniyle projeye son verilir. Bu işletim sistemi 1969 yılında Bell laboratuvarlarında, kapsamı küçültülerek UNICS adıyla yeniden yayınlanır. Düşük seviyeli bir dil ile geliştirilen bu işletim sistemi 1973 yılında Dennis Ritchie (C programlama dilinin yaratıcısı) ve Ken Thompson tarafından C dilinde yeniden yazılır. UNIX adındaki bu işletim sistemi farklı bilgisayar platformlarına kolayca taşınır ve popülerleşir. Hızlı bir şekilde üniversite ve şirketlerde yaygınlaşan UNIX ile birlikte benzer sistemlerinin de geliştirilmesi uzun sürmez.
1980’li yılların başında AT&T şirketi para kazanmak amacıyla UNIX işletim sistemini pazarlamaya başlar. MIT’nin Yapay Zeka laboratuvarlarında 1980’li yılların başına kadar yazılım geliştirici olarak çalışan Richard Stallman, bir röportajında şu sözleri söyler:
Bu kararının ardından 1984 yılında tamamen özgür yazılımlardan meydana gelen bir işletim sistemi ve bu işletim sisteminin araçlarının geliştirilmesine başlar. Kısaca GNU adı verilen bu çalışmanın açılımı GNU is Not Unix yani GNU, Unix değildir. Stallman sonrasında yazılan diğer özgür yazılımların bir şemsiye altında toplanması için Free Software Foundation'ı yani Özgür Yazılım Derneği'ni kurar ve bu yazılımları korumak üzere General Public License yani Genel Kamu Lisansı adı verilen yazılım lisansını oluşturur. Bu derneğin amacı, özgürce dağıtımı yapılabilecek ve kodları üzerinde değişiklik yapılabilecek GNU projesine destek vermektir. GPL lisansı da temelinde, GNU projesi kapsamında geliştirilen uygulamaların, istenilen herhangi bir amaç doğrultusunda çalıştırma, kopyalama, dağıtma ve geliştirme özgürlüğünün korumasını hedefler.
Linux, Linus Torvalds adında Finlandiyalı bir bilgisayar mühendisinin 1991 yılında Helsinki Üniversitesi’nde henüz bir öğrenciyken, kişisel bilgisayarında kullanmak üzere geliştirmeye başladığı bir işletim sistemi çekirdeğidir. İnternet üzerinden duyurulan Linux çekirdeği, açık kaynak kodlu ve özgür bir yazılım olması sebebiyle programcıların büyük ilgisini çekmiştir ve kısa süre sonra, GNU hareketinin bir meyvesi ve aynı zamanda taşıyıcısı haline gelir. GNU için yazılmış özgür yazılımlar da çok kısa süre içerisinde Linux çekirdeği ile uyumlu hale getirilir ve ortaya güçlü, esnek ve açık kaynak kodlu bir işletim sistemi çıkar. GNU araçlarından ve Linux çekirdeğinden oluşan GNU/Linux işletim sistemi zaman içerisinde telaffuz kolaylıklarından ötürü Linux olarak adlandırılmaya başlanmıştır.
Özgür yazılım, kullanıcıların özgürlüğüne ve topluluğa saygı duyan yazılım demektir. Kısaca, kullanıcıların bir yazılımı çalıştırma, kopyalama, dağıtma, değiştirme ve geliştirme özgürlüğüne sahip olduğu anlamına gelir.
Özgür yazılımın kopyalarına sahip olmak için duruma göre ücret ödemeniz gerekebilir. Ancak kopyalarına nasıl sahip olduğunuzdan bağımsız olarak, her zaman için yazılımın kopyalama, değiştirme ve hatta kopyalarını satma özgürlüğüne sahipsinizdir.
Öyleyse, özgür yazılım bir fiyat değil, özgürlük meselesidir. İngilizcedeki "free software" kavramını anlamak için, bedava ekmeği değil ifade özgürlüğünü düşünmek gerekir. GNU’nun savunduğu dört temel özgürlük bulunmaktadır. Bir yazılım bu dört temel özgürlüğe sahipse, o yazılım özgür yazılımdır.
0 Numaralı Özgürlük: Herhangi bir amaç için, istediğiniz şekilde yazılımı çalıştırma özgürlüğü.
1 Numaralı Özgürlük: Her ne istiyorsanız onu yaptırmak için programın nasıl çalıştığını ögrenmek ve onu değiştirme özgürlüğü. Yazılımın kaynak koduna ulaşabilmek, bu iş için ön koşuldur.
2 Numaralı Özgürlük: Kopyaları dağıtma özgürlüğü.
3 Numaralı Özgürlük: Değiştirilmiş sürümlerinizin kopyalarını dağıtma özgürlüğü.
2 Numaralı Özgürlük sayesinde yazılımı dağıtarak başkalarına yardım edebilirsiniz. 3 Numaralı Özgürlük sayesinde de topluluğun sizin değişikliklerinizden faydalanmasını sağlayabilirsiniz.
Özgür yazılımlar tek çeşit lisansa sahip değildir. Temelde bütün lisanslar benzer olmalarına rağmen, farklı kullanımlara özgü onlarca lisans bulunmaktadır. En çok kullanılan örnekleri aşağıdaki gibidir.
GPL: (Genel Kamu Lisansı) Özgür yazılımların %66'sı tarafından tercih ediliyor. Yazılımın özgür olmasının yanı sıra, özgürlüğünü sürdürmesini de garanti altına alır.
LGPL: (Kısıtlı Genel Kamu Lisansı) GPL'den farklı olarak, yazılımın özgür olmayan yazılımlar tarafından da kullanılabilmesine olanak tanıyor.
Apache Lisansı GPL'e ek olarak, patentlere yönelik belirli kısıtlamalar içeriyor.
Açık kaynak kodlu bir yazılım özgür olmayabilir. Ancak, özgür bir yazılım açık kaynak kodludur. Açık kaynak teknik avantajlara odaklanır. Yazılımı açık kaynak olarak geliştirmek teknik olarak daha başarılı bir model olduğu için tercih edilir. Özgür yazılım ise teknik avantajlarının yanı sıra işin toplumsal boyutunu ve özgürlük kavramını da ele alır.
Güvenilirlik: Açık kaynak kodlu yazılımların belki de en büyük artısı olan güvenilir oluşları, kimi çevreler tarafından doğru olmayan bir mantıkla bir dezavantaj gibi gösterilmeye çalışılmakta ve topluma ‘Açık kaynak kodlu bir yazılımın tam olarak nasıl çalıştığı kaynak koduna bakılarak bilinebildiği için yazılımın barındırdığı güvenlik problemleri saldırganlar tarafından kolaylıkla tespit edilip kullanılabilmektedir’ gibi bir düşünce yerleştirilmeye çalışılmaktadır. Fakat açık kaynak kodlu bir yazılım, doğası gereği geliştirilmesi sürecinden kullanımı zamanına değin onbinlerce göz tarafından denetlenmektedir. Var olması muhtemel bir güvenlik problemi ya da kötü niyetli bir programcı tarafından bilinçli olarak yerleştirilebilecek bir kod parçası yazılım sizin elinize ulaşmadan tespit edilmekte ve hızla düzeltilmekte ya da size ulaşması engellenmektedir. Ayrıca kimse, binlerce insanın kollektif bir şekilde geliştirdiği bir yazılımın güvenilmez olduğunu idda ederken, sınırlı sayıda kişinin geliştirdiği ve kaynak kodunu kapattığı bir yazılımın güvenilirliğini kimin ve nasıl garanti edeceği sorusuna yanıt veremez.
Sağlamlık: Yine açık kaynak kodlu yazılımların doğal geliştirme süreci içerisinde çok sayıda insan tarafından denenmeleri ve kaynak kodlarının gözden geçirilmesi sonucunca ortaya yüksek kalitede, stabil ve kuvvetli yazılımlar çıkmaktadır.
Esneklik: Kaynak kodu açık bir yazılım hızla ve kolaylıkla yeni bir sistem üzerinde çalışacak şekilde yeniden yapılandırılabilmekte, bir kısmı çıkarılarak kapsamı daraltılabilmekte ya da eklenen yeni fonksiyonlarla kapsamı genişletilebilmektedir.
Uygulama Desteği: Çok geniş bir yelpazede ve çeşitlilikteki bir çok açık kaynak kodlu özgür yazılım her gün duyurulmaktadır. Herhangi bir konudaki ihtiyaç açık kaynak kodlu yazılımlarla hızlı ve kaliteli bir şekilde çözüme kavuşturulabilmektedir.