Linux101
Last updated
Last updated
Linux'a biraz arka planda dönen hikayesi ile başlayalım, aslında her şey 1969 yıllarında Thompson ve Dennis Ritchie'nin UNIX işletim sistemini geliştirmesi ile başladı. On yılı geçgin bir süre de Richard Stallman, Hurd adı verilen GNU projesi üzerinde çalışmaya başladı, ne yazık ki projeyi tamamlayamadı. (Kernel, işletim sisteminin en önemli parçasıdır. Donanımın yazılım ile haberleşmesini sağlar.) Bu süre zarfında BSD, MINIX vb. gibi diğer çalışmalar UNIX benzeri sistemler olacak şekilde geliştirildi. Ancak tüm bu UNIX benzeri sistemlerin ortak noktası, birleşik bir kernel'in olmamasıydı. Daha sonra 1991 yılında Linus Torvalds adında genç bir adam, bugün Linux kernel olarak bildiğimiz yazılımı geliştirmeye başladı.
Bir linux sistemi üç ana bölüme ayrılmıştır;
Donanım: Bu sisteminizin üzerinde çalıştığı tüm donanımın yanı sıra bellek, CPU, diskler vb. gibi dahili donanımları da içerir.
Linux Kernel: Kernel işletim sisteminin çekirdeğidir. Donanımı yönetir ve ona sistemle nasıl etkileşim kuracağını söyler.
Kullanıcı Alanı: Bu kısım bizim gibi kullanıcıların sistemle doğrudan iletişime geçeceği yerdir.
Bazı linux dağıtımları şunlardır; Debian Red Hat Enterprise Linux Ubuntu Fedora Linux Mint Gentoo Arch Linux openSUSE Manjaro Slackware CentOS Puppy
Shell, adeta işletim sisteminin eldiveni gibidir. Komutlarınızı alır ve onları sistemle iletişim kuracak şekilde işler. Bazı insanlar ona 'Terminal' derken, diğerleri 'Konsol' diyebilir. Ama sonuçta, işletim sisteminin arka planında dönen sihirli bir şeydir! Farklı kabuk türlerinin varlığından bahsedilebilir. Örneğin Ksh, zsh, ve tsch gibi. Bu farklı kabuklar, kullanıcıların tercihlerine ve ihtiyaçlarına göre farklı özellikler sunabilir. Belki de farkına varmışsınızdır. Komut isteminin başındaki $
işaretini. Farklı kabuklar, farklı komut istemi sembollerine sahip olabilir. Bizim satırımızda, $
sembolü, Bash, Bourne veya Korn kabuklarını kullanan tipik bir kullanıcı için geçerlidir. Komut yazarken bu sembolü eklemeniz gerekmez, ancak her zaman orada olduğunu görebilirsiniz.
Linux, her şeyin bir dosya olduğu garip ve harika bir dünyadır. Ne demek istediğimi daha derine indikçe daha iyi anlayacaksınız, ancak şimdilik bu fikri aklınızda tutun. Her dosya, bir ağaç gibi düzenlenmiş hiyerarşik bir dizin içinde yer alır. Bu dizin ağacının en üstünde kök dizin bulunur ve buradan itibaren daha fazla klasör ve dosya keşfetmeye başlarsınız. Bir nevi, bilgisayarınızın saklambaç oyunu gibi düşünebilirsiniz. İşte size bu dizin ağacın nasıl göründüğüne dair bir örnek:
Bu dosya ve dizinlerin konumu yol olarak adlandırılır. Eğer home adında bir klasörünüz ve içinde user adında bir klasörünüz ve bu klasörün içinde bin adında başka bir klasörünüz varsa, bu yol şöyle görünür: /home/user/bin, oldukça basit değil mi?
Dosya sisteminde gezinmek, gerçek hayatta olduğu gibi nerede olduğunuzu ve nereye gittiğinizi bilmeniz açısından faydalıdır. Nerede olduğunuzu görmek için pwd
komutunu kullanabilirsiniz. Bu komut "çalışma dizinini yazdır" anlamına gelir ve size sadece hangi dizinde olduğunuzu gösterir, yolun kök dizinden kaynaklandığına dikkat edin.
Şimdi, nerede olduğunuzu bildiğinize göre, dosya sisteminde biraz gezinmeye ne dersiniz? Yolları kullanarak yolumuzu bulmamız gerektiğini unutmayın. Dosya sisteminde gezinmek için iki farklı yol türü vardır: mutlak ve göreceli yollar. Hangi yolu seçerseniz seçin, dosya sisteminde kaybolma şansınız yok! Hadi yolculuğa başlayalım!
Resimde görüldüğü gibi dizin konumumuzu "/home/kali" den "/home/kali/dosya" olarak değiştirdik.
cd
komutunun farklı kullanımları da var elbette; cd .
Bu, şu anda içinde bulunduğunuz dizindir. cd ..
Sizi bulunduğunuz dizinin üstündeki dizine götürür. cd ~
Bu dizin varsayılan olarak "ev dizininiz"dir. Örneğin /home/kali.
Şimdi, sistemde nasıl hareket edeceğimizi bildiğimize göre, önümüzde ne olduğunu anlamak için ne yapacağımızı düşünelim. Şu anda, adeta karanlık bir odada ilerliyor gibiyiz. Dizin içeriğini görmek için kullanacağımız harika bir araç var: ls
komutu. Bu komut, varsayılan olarak bulunduğumuz dizindeki dizinleri ve dosyaları listeleyecektir. Ancak, belirli bir yolu listelemek isterseniz, bu da mümkün.
Ancak bazı dosyalar gizlidir ve ls komutu ile gözükmeyebilir bunun için ls -a komutunu kullanabilirsiniz. Dosyaların ayrıntılarını göstermek içinse ls -l ve bu iki komutu beraber kullanabilirsiniz ls -la.
touch komutu yeni boş dosyalar oluşturmanıza olanak tanır. touch newfile
komutunu terminale yapıştırdığınızda newfile adında bir boş dosya oluşturulduğunu görebilirsiniz.
Bir dosyanın ne tür bir dosya olduğunu öğrenmek için file komutunu kullanabilirsiniz. Bu size dosyanın içeriğinin bir açıklamasını gösterecektir.
cat
komutu concatenate'in kısaltmasıdır ve dosya okuma gibi işlemlerde kullanılır. Büyük dosyaları görüntülemek için harika değildir ve yalnızca kısa içerikler içindir.
less
bir dosya okuma komutudur. cat komutundan farkı daha büyük dosyaları okumanıza yardımcı olur. Metin, sayfalı bir şekilde görüntülenir. Böylece bir metin dosyasında sayfa sayfa gezinebilirsiniz.
history
komutu adından da anlaşılacağı gibi shell üzerinde yazdığınız geçmiş komutları gösterir. Daha önce yaptığınız aynı komutu çalıştırmak istiyorsanız, yukarı oka basmanız yeterlidir. Tabii ki de bu geçmişi temizleyebiliriz. Temizlemek için komut satırına clear
yazmamız yeterli olacaktır.
cp
komutu dosya için kullanılır. Kopyalama işlemi için cp
komutundan sonra kaynak dizin/dosya ve hedef dizin/dosya belirtilir.
mv
komutu bir dosyayı bulunduğu dizinden başka bir dizine taşımak için kullanılır. Taşıma işlemi ile birlikte dosya ismi de değiştirilebilmektedir.
Üzerinde çalıştığımız tüm dosyaları düzenli bir şekilde saklamak için bazı dizinlere ihtiyacımız olacak. Bu amaçla mkdir
(Dizin Oluştur) komutu oldukça kullanışlıdır. Eğer zaten mevcut değilse belirttiğiniz dizini oluşturur. Ayrıca aynı anda birden fazla dizin de oluşturabilirsiniz.
rm
komutu fazlalıklardan kurtulmamıza yardımcı olabilir. Bu komutu kullanarak istediğimiz dosyaları silebiliriz.
find
komutu ile sistemde istediğimiz dosyayı kolayca bulabiliriz. Örneğin, find /home -name flag.txt
bu komut flag.txt dosyasını /home dizini altında bizim yerimize arar.
Anlattığımız birçok komut ve anlatmadıklarımızın hepsini görüntüleyebilmek için terminale help
yazmamız yeterli olacaktır.
Her işletim sisteminde olduğu gibi Linux tabanlı bir işletim sisteminde de kullanıcılar ve gruplar vardır. Bu kullanıcıların farklı izinleri ve yetkileri olabilir. Her kullanıcının, kullanıcıya özel dosyaların depolandığı kendi giriş dizini vardır. Bu genellikle "/home/kullanıcı" dizininde bulunur. Tabii farklı linux dağıtımlarında farklılık gösterebilir. Sistem, kullanıcıları yönetmek için kullanıcı kimliklerini (UID) kullanır. Kullanıcı adları, kullanıcıları kimlikle ilişkilendirmenin kolay yoludur. Ancak sistem, kullanıcıları UID'lerine göre tanımlar. Sistem ayrıca izinleri yönetmek için grupları kullanır. Gruplar yalnızca izinleri o grup tarafından belirlenen kullanıcı gruplarıdır ve sistem tarafından grup kimlikleriyle (GID) tanımlanırlar. Arka planda, bu sistem bir ağır metal konserine gizlice girmek isteyen bir grup hacker'ın hikayesini hatırlatıyor. Kimlik hırsızlığı, grup kimliğinin (GID) çalınması ve izinsiz erişim sağlanması gibi karanlık bir hikaye var gibi. Tabii ki gerçek hayatta böyle şeyler olmaz... ya da olur mu? Linux'ta sistemi kullanan normal insanlara ek olarak kullanıcılarınız da olacaktır. Bazen bu kullanıcılar, sistemin işleyişini sürdürmek için sürekli olarak süreçleri çalıştıran sistem arka plan programlarıdır. En önemli kullanıcılardan biri root veya süper kullanıcıdır. root sistemdeki en güçlü kullanıcıdır. root herhangi bir dosyaya erişebilir ve herhangi bir işlemi başlatıp sonlandırabilir. Bu nedenle sürekli root olarak çalışmak tehlikeli olabilir. Sistem açısından kritik dosyaları kaldırma ihtimaliniz vardır. Neyse ki, root erişimi gerekiyorsa ve kullanıcının root erişimi varsa sudo komutu yerine root olarak bir komutu çalıştırabilirler. Sudo komutu (superuser do), root erişimi olan bir komutu çalıştırmak için kullanılır.
shadow dosyasını görüntülemek istediğimizde "Permission denied" hatası ile karşılaşacaksınız. Bu hata, dosyayı okuma iznininzin olmadığı söylemektedir. ls -la /etc/shadow
komutu ile dosyanın izinlerine bakabiliriz. Göreceksiniz ki dosyayı okumak için root yetkilerine sahip olmalıyız. Bunun için sudo cat /etc/shadow
komutu ile kolayca çözebiliriz.
sudo
komutunu kullanarak root kullanıcısının yetkilerini elde etmeyi inceledik. su
komutuyla komutları root kullanıcısı olarak da çalıştırabilirsiniz. Bu komut "kullanıcıların yerini alacak" ve kullanıcı adı belirtilmemişse bir terminal açacaktır. Şifreyi bildiğiniz sürece herhangi bir kullanıcının yerini almak için bu komutu kullanabilirsiniz. Peki sistem Mikail kullanıcısının root kullanıcısı gibi komut çalıştırmasına izin vermiyor. Peki bunu nasıl yapıyor? /etc/sudoers dosyası adında bir dosya var. Bu dosya sudo'yu çalıştırabilen kullanıcıları listeliyor. Bu dosyayı visudo
komutuyla düzenleyebilirsiniz.
Çoğu kurumsal ortamlar; kullanıcıları, hesapları ve parolaları yönetmek için yönetim sistemlerini kullanıyor. Tek makinede bunu yapmak için birkaç komut yeterli olacaktır.
Kullanıcı Ekleme
Adduser veya useradd komutunu kullanabilirsiniz. Adduser komutu, bir giriş dizini oluşturma ve daha fazlası gibi daha yararlı özellikler içerir. Varsayılan kullanıcıya atamak istediğiniz şeye bağlı olarak özelleştirilebilen, yeni kullanıcılar eklemek için yapılandırma dosyaları vardır.
sudo useradd yavuzlar
komutu yavuzlar için /etc/passwd dosyasında bir giriş oluşturduğunu, varsayılan grupları ayarladığını ve /etc/shadow dosyasına eklediğini göreceksiniz.
Kullanıcı Silme
Bir kullanıcıyı kaldırmak için userdel komutunu kullanabiliriz. sudo userdel yavuzlar
bu komut kısaca useradd komutunun passwd ve shadow dosyalarında yaptığı değişiklikleri geri alır.
Kullanıcı Şifre Değiştirme
passwd yavuzlar
komutu yavuazlar kullanıcısnın şifresini değiştirmesine olanak tanıyacaktır.
Paketler nedir? Bunları Chrome, Photoshop vb. olarak biliyor olabilirsiniz ve öyledirler. Ancak gerçekte bunlar yalnızca tek bir dosyada derlenmiş çok sayıda dosyadır. Bu yazılımı yazan kişiler (veya bazen tek bir kişi), upstream sağlayıcıları olarak bilinir. Lodlarını derlerler ve nasıl kurulacağını yazarlar. Bu upstream sağlayıcıları yeni yazılım çıkarmaya ve mevcut yazılımı güncellemeye çalışır. Bunu dünyaya yayınlamaya hazır olduklarında, paketlerini bu yazılımın kullanıcıların eline geçmesiyle ilgilenen paket bakımcılarına gönderirler. Bu paket bakımcıları bu yazılımı paketler halinde inceler, yönetir ve dağıtır.
Muhtemelen bir dosya arşivinin ne olduğunu zaten biliyorsunuzdur. Büyük olasılıkla .rar ve .zip gibi dosya türleriyle karşılaşmışsınızdır. Bunlar bir dosya arşividir. İçlerinde birçok dosya içerirler.
Dosyaları gzip ile sıkıştırmak
gzip, Linux'ta dosyaları sıkıştırmak için kullanılan bir programdır ve .gz uzantısıyla biter. Bir dosyayı sıkıştırmak için: gzip dosya
Sıkıştırılan dosyayı açmak için: gunzip dosya.gz
komutu kullanılır.
Tıpkı .exe'nin tek bir yürütülebilir dosya olması gibi .deb ve .rpm de öyle. Paket depolarını kullanırsanız normalde bunları göremezsiniz. Ancak paketleri doğrudan indirirseniz büyük olasılıkla bunları bu popüler formatta alırsınız. Açıkçası bunlar kendi dağıtımlarına özeldir. Debian tabanlı için .deb ve Red Hat tabanlı için .rpm.
Bu doğrudan paketleri kurmak için paket yönetimi komutlarını kullanabilirsiniz: rpm ve dpkg. Bu araçlar paket dosyalarını yüklemek için kullanılır. Ancak paket bağımlılıklarını yüklemezler. Dolayısıyla paketinizde 10 bağımlılık varsa bu paketleri ayrı ayrı, ardından bağımlılıklarını vb. yüklemeniz gerekir.
Paket Yükeleme
Debian: dpkg -i some_deb_package.deb
RPM: rpm -i some_rpm_package.rpm
i, install anlamına gelir. Daha uzun olan --install biçimini de kullanabilirsiniz.
Paket Silme
Debian: dpkg -r some_deb_package.deb
RPM: rpm -e some_rpm_package.rpm
-r remove u temsil ederken -e erase yi temsil etmektedir
Bu sistemler, paket bağımlılıklarının kurulması da dahil olmak üzere paket kurulumunu, kaldırılmasını ve değişikliklerini kolaylaştırmak için tüm düzeltmelerle birlikte gelir. En popüler yönetim sistemlerinden ikisi yum ve apt'dir. Yum, Red Hat ailesine özeldir ve apt ise yalnızca Debian ailesine özeldir.
Paket Yükeleme
Debian: apt install package_name
RPM: yum install package_name
Paket Silme
Debian: apt remove package_name
RPM: yum erase package_name
Tüm Paketleri Günelleme
Tüm paketleri tek komut ile güncelleyebilirsiniz. Debian: apt update; apt upgrade
RPM: yum update