Linux Dersleri - Taylan Bildik

2020-07-06

Bu çalışma Taylan Bildik’in ürünüdür, bu web sitesinde öneri ve arşivlenme için durmaktadır.

Asıl projeyi ziyaret etmek için:

taylanbildik/Linux_Dersleri is licensed under the

GNU General Public License v3.0

Linux Nedir ?

Başlamadan.. Şunu bilin ki Linux tek başına işletim sistemi değil çekirdektir!

UNIX

Burada sizlere çok tarihi veya çok teknik olmayan bir üslupla, Linux hakkında genel bilgi sahibi olmanızı sağlayacak şekilde Linux’un ortaya çıkış hikayesini anlatacağım. Zamanında Bell Laboratuvarı’nda geliştirilen UNIX adında bir işletim sistemi vardı. Bu sistem kendi bünyesinde bulundurduğu araçları sayesinde çeşitli üniversiteler ve diğer ihtiyaç duyulan kurumlarda kullanılıyordu. Buraya kadar her şey gayet güzel ancak Unix lisans ücreti istiyordu ve tabii ki bu durum sistemi kullanabilecek kişilerin sayısını da oldukça azaltıyordu. Yani insanlar ihtiyaç duysalar dahi lisans ücretinden dolayı bu sistemi kullanamıyorlardı. Bunun sonucunda “para ödemek yerine bende kendi işletim sistemimi yazarım” diye düşünenler ortaya çıktı ve bu da UNIX’e mecbur olunmadığı, eğer istenirse yeni bir sistemin yazılabileceği düşüncesini ortaya koydu. Bunun sonucunda birçok işletim sistemi geliştirme girişimleri oldu ancak sonuçta geliştirilen sistemler stabil şekilde çalışmıyorlardı. Tabi bu durum sonsuza kadar böyle kalmayacaktı..

Linus Torvalds

Bir efsanenin doğuşu..

Buralar her ne kadar istemesem de kısaca geçmek durumundayım ama eğer “Linux kullanıyorum” demek istiyorsanız kesinlikle bu konuları araştırın ve ayrıca Revolution OS belgeselini de mutlaka izleyin derim.

İnsanların lisans ücretinden kaçmak için kendi işletim sistemini yazma akımı devam ediyorken bu durum Linus Torvalds ‘ı da etkilemiş olacak ki Linus, UNIX ’ten esinlenerek Helsinki Üniversitesi’ndeyken kendi işletim sistemi çekirdeğini yazdı. UNIX’ten esinlendi ancak bunu hiçbir kod alıntısı yapmadan sıfırdan yazarak başardı. Daha sonra Linus, bu geliştirdiği çekirdeğin çeşitli insanlara ve gruplara(geliştirici topluluklar vb..) ulaşmasını sağlayarak, insanların verdiği dönütlerle düzenlemeler yaptı. Böylelikle Linus, çekirdeğin daha da kullanışlı hale gelmesini sağlamış oldu. Ve en nihayetinde Linus, bu geliştirdiği çekirdeğe(kernel) “Linux ” adını verdi. Ancak Linux bir çekirdekti ve içerisinde UNIX gibi kullanışlı araçları bulundurmuyordu.

Linux cephesinde bunlar yaşanıyorken Richard Stallman ‘da , GNU genel kamu lisansı nı ortaya atarak özgür yazılım ı savunuyordu. Nedir bu genel kamu lisansı ve özgür yazılım diyecek olursanız lütfen okumaya devam edin.

GPL

GNU GPL (General Public License - Genel Kamu Lisansı) açık kaynağı destekleyici bir lisans türü olup, ilk defa açık kaynak kodlu yazılımların kapalı kaynak kodlu hale getirilerek satılmasından rahatsız olunması sonucu öneri olarak geliştirilmiştir.

GPL 4 temel özgürlük üzerine kurulmuştur bunlar:

  • Özgürlük 1: Programı sınırsız kullanma özgürlüğü.
  • Özgürlük 2: Programın nasıl çalıştığını inceleme ve amaçlara uygun değiştirme özgürlüğü.
  • Özgürlük 3: Programın kopyalarını sınırsız dağıtma özgürlüğü.
  • Özgürlük 4: Programın değiştirilmiş halini dağıtma özgürlüğü.

GPL, Richard Stallman tarafından geliştirilmiş çok akıllıca detaylarla bağlayıcılığı bulunan lisans türüdür. Burda herkes kazançlıdır. Kaynak kodları paylaşılmak zorunda olduğu için her şey şeffaf ve dolayısıyla oldukça berraktır . Burada insani bir hizmet vardır. Yani savunulan şey daha fazla rant değil, insanların gönül rahatlığı ile sınır olmadan ihtiyaçlarını karşılamasıdır. Bu konu hakkında ayrıca avantajları ve dezavantajları sıralayabiliriz ancak konuyu çok genişletmemek ve sizlere araştırma, kendi kendine bulup öğrenme alışkanlığı kazandırmak adına bu konuyu burada kesiyorum. Ben yazmaktan üşenmiyorum ancak benim burada yazıyı genişletmem, sizin araştırıp kendi kendinize öğrenmenizden ve bu araştırma alışkanlığını kazanmanızdan daha yararınıza olmayacaktır. Bir de benim konu içinde veya dışında belirtmiş olduğum kaynaklarla sakın ola sınırlı kalmayın. Ben sadece bir başlangıç noktası ve referans olması adına sizlerle bunları paylaşıyorum. Bu durumdan hiç hoşlanmamış olabilirsiniz, ancak araştırma ve kendi kendine öğrenme ateşi sizi sardığında bana bu konuda hak vereceğinizi umuyorum. Bu noktada söylediklerimin daha net anlaşılması için sözümü Konfüçyüs’ün en bilindik sözü ile noktalamak istiyorum.

“Bir kişiye iyilik yapmak istiyorsan ona balık verme, balık tutmayı öğret.” Konfüçyüs

GNU

GNU (Gnu is Not Unix/GNU Unix Değildir), açık kaynak hareketinin doğrultusunda geliştirilen araçların içinde bulunduğu ücretsiz ve herkes için ulaşılabilir bir işletim sistemidir. Ancak GNU için her ey her daim güllük gülistanlık değildi. GNU, içerisinde kendine ait güçlü araçları bulundurmasının yanı sıra kararlı bir çekirdeğe sahip değildi. Çekirdek için denemeler yapılmış ancak kararlı bir çekirdek oluşturulamamıştı.

Tam da bu noktada Linus Torvalds‘ın geliştirip topluluğa sunduğu ve topluluk doğrultusunda geliştirdiği çekirdek yazılımı, GNU ile tencere kapak uyumu olacak şekilde bir araya geldi. Böylelikle ortaya bir GNU/Linux efsanesi çıktı. İşte GNU/Linux devrimi kısaca bu şekilde oldu. Hem GNU’nun hem de Linux‘un topluluğa bağlı dönütlerle geliştirilmesi doğrultusunda herkese açık, ücretsiz ve sınırsız geliştirilme potansiyeline sahip, gerçek anlamda insana hizmet eden özgür bir işletim sistemi ortaya çıkmış oldu.

Sonuç Olarak

Linux bir işletim sistemi değil, çekirdektir(kernel). GNU/Linux bütünü bir işletim sistemidir. Ancak genellikle söylenmesi uzun veya zor geldiği için, zamanla sadece Linux olarak geçmeye başlamıştır. Ben de yazılarımda GNU/Linux yerine Linux kullanıyor olacağım. Ancak emin olun çekirdekten(kernel) yani Linux’tan bahsettiğimde ve GNU/Linux(işletim sistemi)’tan bahsettiğimde hangisini kastettiğimi anlıyor olacaksınız.


Gerekli Ortamın Kurulması

Linux işletim sistemini kurmak veya Linux’u herhangi bir kurulum işlemi gerçekleştirmeden kullanmak için çok fazla seçenek bulunuyor. Ben sadece içlerinde bilmediğiniz bir alternatif seçenek olması ihtimaline karşı genel kullanım seçeneklerini aşağıda listeliyorum.

Kurulum ve Kullanım Metodları

  • Sanal olarak kurulum (Vmware & Virtualbox)
  • İkincil işletim sistemi olarak kurmak (Dualboot)
  • Live versiyon olarak kullanmak.
  • Linux VPS aracılığı ile kullanmak.

Sanal Olarak Kullanmak;

Sanallaştırma işlemi kısaca; kurmak istediğiniz yeni bir işletim sistemini, diske kalıcı kuruluma ihtiyaç duymadan, mevcut işletim sistemi üzerinden sanallaştırma teknolojisi ile çalıştırabilmeniz anlamına gelir. Sanallaştırma teknolojisi sayesinde, kullanmakta olduğunuz işletim sisteminden çıkmadan, tıpkı program çalıştırır gibi; herhangi bir işletim sistemini sanal olarak çalıştırabilirsiniz. Sanallaştırma işlemini; bu iş için geliştirilmiş olan vmware ve virtualbox gibi özel yazılımlar yerine getiriyor.

Avantajları

  • Sistemin yedeğini alarak, büyük bir sorun ile karşılaştığımızda aldığımız yedeği kolaylıkla geri yükleyebiliriz.
  • Snapshot(anlık görüntü) özelliği sayesinde sistemi olduğu gibi kaydedip, daha sonra istediğimiz zaman kaldığı yerden çalışmaya devam edebiliriz.
  • Diske kalıcı kurulum gerektirmez, ve kurulu olan sistemin dosyalarına kesinlikle müdahale etmez. Yani kurulu sisteme hiç bir zarar vermeden sanal olarak çalışır.
  • Aynı anda birden çok işletim sistemini çalıştırabilir.(Bilgisayarınızın performansına göre değişiklik gösterebilir.)
  • Kendinize göre ayarladığınız sanal makineyi kopyalayıp istediğiniz bilgisayarda aynı şekilde çalıştırabilirsiniz.

Kısacası; yeni öğrenmeye başlayan kişiler için test alanı görevi görür, snapsot ve yedekleme özellikleri sayesinde hatalardan kolaylıkla geri dönülmesi mümkündür. Eğer; sisteme zarar vermeden gönül rahatlığı ile her şeyi kurcalayayım, deneme yanılma ile öğreneyim derseniz sizin için biçilmiş kaftandır.

Dezavantajları

Sanallaştırmanın sağladığı avantajlarının yanında, dezavantajlarının sayısı ve etkisi çok büyük değildir.

  • Mevcut işletim sistemi üzerinde çalıştığı için performans sorunları yaşanabilir.(Bilgisayarınızın performansına göre değişiklik gösterir.)
  • Fiziksel ortamda oluşan herhangi bir donanım sorunu sanal makineyi de etkiler.

Vmware; ücretli bir yazılımdır ve içerisinde bir çok ekstra özellik barındırır. Bu özellikler genellikle işletmelerin işine yarayacak türdendir. Eğer bireysel bir kullanıcıysanız muhtemelen bir çok ekstra özelliği kullanmanız gerekmez.(Bu fazla özellikler sistemin daha hantal çalışmasına neden olabilir.)

Virtualbox: tamamen ücretsiz, vmware ile hemen hemen aynı özelliklere sahip yazılımdır. Eğer bireysel bir kullanıcıysanız; virtualbox yazılımını tercih edebilirsiniz.(Virtualbox yazılımı içerisinde çok fazla ekstra özellik barındırmadığından bireysel kullanıcılar için vmware yazılımına oranla daha performanslı çalışır.)

İkincil İşletim Sistemi Olarak Kullanmak

Bu yöntem, özetle; mevcut işletim sisteminin yanına, diskte alan açarak ikincil bir sistem olarak kurmak ve kullanmaktır. Bu kurulumun ardından sistem, başlangıçta hangi işletim sistemini kullanmak istediğinizi sorar ve seçiminize göre ilgili sistemi başlatır.

Avantajları

  • Sanal kuruluma oranla performans açısında oldukça verimlidir.
  • Var olan sistemi silmeden yanına kurduğunuz için, ihtiyacınız olduğunda diğer sisteme geçiş yapabilirsiniz.

Dezavantajları

  • Sistem yedeğini almak ve ilgili yedeğe dönmek, sanal kullanıma oranla daha zahmetlidir.
  • Snapshot özelliği olmadığından sistemde herhangi bir kritik hata meydana geldiğinde, sistemi onarması çok daha uzun sürer.
  • Kurulum işlemi ve kurulum sonrası sistem ayarlarının yapılandırılması, diğer kurulum işlemlerine oranla biraz daha uğraştırıcı olabilir.

Öğrenme aşamasında, kullanıcıların hata yapması çok doğal bir durumdur. Etkili öğrenim için bire bir uygulama şart, bu yüzden kullanıcılar sürekli deneme yanılma yöntemiyle yeni şeyler keşfeder ve daha fazlası için sistemi kurcalar. Bu duruma bağlı olarak kullanıcının alıştırmaları sırasında meydana gelebilecek olası hatalar, kullanıcının öğrenme şevkini kırarak, öğrenme sürecini sekteye uğratabilir. Eğer Linux işletim sistemini ilk defa kullanacaksınız, daha hızlı ve etkili öğrenebilmek için bu yöntemi kullanmayın. Ancak sanal olarak kullandığınızda sistem performansı sizin için çok sorun oluyorsa olabilir, ama bundan önce diğer kullanım alternatiflerini de değerlendirebilirsiniz. Bu yüzden lütfen yazının tamamını okuyup sizin için en ideal olanına kendiniz karar verin.

Live Versiyon Olarak Kullanmak

Live olarak kullanmak; Linux işletim sistemini USB diskimiz üzerine kurup, sistemi bu USB disk ile başlatıp Linux işletim sistemini bu USB disk üzerinden kullanmaktır. Üstelik USB üzerinden kullanımda tek bir kullanım modu da bulunmuyor. Aşağıda farklı kullanım modları sırasıyla açıklanmıştır. “Live Versiyon Olarak Kullanma” seçeneğini, sanal kullanımda performans sorunu yaşayan arkadaşlara kesinlikle öneririm.

Boot Menüsünde Yer Alan Seçenekler

Live:

Kali Linux işletim sistemini USB diskiniz üzerinden kullanırsınız ve sistemi kapattığınızda veya USB diskinizi bilgisayardan çıkardığınızda sistemde yaptığınız tüm değişiklikler silinir. Yani bu mod isminden de anlaşılacağı gibi yalnızca kullanım sırasında bilgileri tutar, daha sonra sistem kapandığında tüm bilgiler silinir ve sistem ilk baştaki haline döner. Bu mod sayesinde her defasında üzerinde hiç bir değişiklik yapılmamış temiz bir sistem üzerinde çalışabilirsiniz.

Live (failsafe):

Tıpkı live modunda olduğu gibi bilgileri yalnızca kullanım sırasında tutar. Genellikle sistemde sorun meydana geldiğinde sorunun kaynağını anlamak adına kullanılan, güvenli mod diye tabir edilen moddur.

Live (forensic mode):

Adli moddur, ve mevcut sistem üzerinde inceleme yapılacağı zaman tercih edilir. Bu mod mevcut sistemde hiç bir kalıntı bırakmadan sistemi inceleme işleminde kullanıldığı ve genellikle bir suçun kanıtlanması gibi olaylarda tercih edildiği için adli(forensic) mod olarak tabir edilir.

Live USB Persistence:

Kali Linux işletim sistemini USB diskiniz üzerinden tıpkı sabit bir diske kurmuşcasına kullanabilmenize olanak sağlayan moddur. Bu mod ile sistemde yapılan tüm değişiklikler USB disk üzerinde kayıt olur ve daha sonra bu bilgilere tekrar bu mod aracılığı ile ulaşabilirsiniz. Yani live modun kalıcı halidir. Sistemde yapılan tüm değişiklikler tekrar ulaşabileceğiniz şekilde kalıcı olarak USB üzerine yazılır.

Live USB Encrypted Persistence:

Bu mod ise bir üst kısımda bahsedilen kalıcı(persistence) modun şifrelenmiş halidir. Diğer moddan farklı olarak isminden de anlaşılacağı üzere bu mod sistemde yapılan değişiklikleri kaydederken bu bilgileri şifreleyerek kayıt eder.

Install:

Sabit diske kurulum işlemini başlatmak için kullanılan seçenektir.

Graphical Install:

Sabit diske kurulum işlemini grafiksel arayüz ile başlatmak için kullanılan seçenektir.

Avantajları

  • Sabit diske kurulum gerektirmez, yalnızca USB disk yeterlidir.
  • Bir çok ihtiyaca göre bir çok kullanım modu vardır.
  • Live modu sayesinde sistemi kurcalamaktan korkmadan etkili öğrenme sağlayabilirsiniz.

Dezavantajları

  • Bu kullanımdan verim alabilmek için en az 8 GB USB diskiniz olmalı.
  • Boot etmek için bir kaç ön hazırlık gerekir.

VPS Üzerinden Kullanım

Bu kullanım yöntemi de, uzaktaki özel bir sunucu sistemine bağlanılarak, bağlanılan sistemi herhangi bir yüksek donanım gücüne ihtiyaç duymadan yönetebilmemize olarak tanır. Özetle; uzaktaki sunucu sisteminde, sizin istediğiniz işletim sisteminiz başlatılır, siz de bu sistemi uzaktan komutlar vererek yönetirsiniz.

Avantajları

  • Mevcut donanımınızın çok güçlü olması gerekmez.
  • İstenilen yerden ve istenilen cihazdan(pc, laptop, tablet, telefon..) uzak sunucudaki sisteme komut verilebilir.
  • Sistem yedeği alma ve üst düzey sistem performans imkanı vardır.

Dezavantajları

  • Bu hizmetler ücretlidir.

Bu kısımda neden kurulum detaylarını anlatmıyorsun diyecek olursanız, burada izahı dokümantasyonu uzatacak ve çok da verimli olmayacaktır. Kurulum işlemini verimli şekilde anlatabilmek için en iyi yol, kurulum işlemlerini videolu şekilde göstermektir. Bu noktada hem bana destek olmak hem de kurulumları ve diğer tüm içerikleri videolu şekilde takip edebilmek için buradan kursumu indirimli olarak satın alıp devam edebilirsiniz. Ancak kursu almak gibi bir niyetiniz yoksa, elbette bu kursu almadan da internet üzerinden araştırarak çok fazla kaynağa ulaşabilirsiniz. Yine de; ilerleyen kısımlarda işleyeceğimiz konular da aynı şekilde videolu ve özellikle renklendirilmiş görsel animasyonlar ile çok daha net anlaşılabilecek konulardır. Yani bu dokümantasyonda temel linux öğrenimi için gereken her bilgi mevcut, ancak benim kurs videolarımın artısı buraya bağlantılı ve açıklık getirici şekilde ilerliyor olmasıdır. Bu yüzden lütfen burada yazdıklarıma reklam gözü ile bakmayın, ben sadece bir eğitimin tamamlayıcı bütünü olan videolardan bahsediyorum. Yani burada herhangi bir dayatma söz konusu değil kesinlikle, kursa kayıt olup olmamak tamamen sizlerin isteğine bağlı bir durum. Eğer buradaki kavramları öğrenmekte güçlük çekerseniz; içerisinde alıştırmaları, pratik testleri ve soru-cevap imkanı olan kursuma göz atabilirsiniz. Üstelik kursu beğenmemeniz halinde 30 gün içinde koşulsuz şartsız olarak kursu iade edebilirsiniz. Kursun kalitesi hakkında fikir sahibi olmak için bu dokümantasyona, kurs müfredatına ve kurs yorumlarına bakarak bilgi edinebilirsiniz.


Komut Satırı

Esaslı bir giriş yapabilmemiz için öğrenmemiz gereken ilk kavram Linux Komut Satırı diğer bir adıyla Linux Terminali (konsol) olacaktır. Ancak bundan önce Linux işletim sisteminin(GNU/Linux) çekirdeğini ele almalıyız. Linux çekirdeği Linux’un kalbi kabul edilir. En önemli ana görevinin tanımı kısaca; yazılımla donanımın haberleşmesini sağlamaktır. Ayrıca Linux’un yani çekirdeğin ingilizce karşılığı “kernel“dir. Yabancı terimleri sizlere aktarıyor olma nedenim; eninde sonunda bu terimlere alışmamız gerektiği ve bu durumun ne kadar erken olursa bizim için o kadar iyi olacağıdır. Kernel, yani çekirdeği biraz daha açıklayacak olursak:

Kernel

Biz ister grafiksel arayüzü kullanalım, istersek de yalnızca komut satırını kullanacak olalım; örneğin bir dosyayı bir yerden başka bir yere taşırken; ister sürükle bırak yöntemiyle(grafiksel arayüz kullanarak) taşıyalım, istersek de bu işi komut satırından komutlar yardımı ile gerçekleştirelim; neticede yapılan işlem aslında arka tarafta komutların yorumlanarak çalıştırılması ile gerçekleşmektedir. enter image description here İşte tüm bu işlemleri gerçekleştirmekle görevli bazı yapılar vardır. Çekirdek(kernel) de kullanıcıdan gelen girdilerle birlikte sistemin işleyebilmesi (process) için donanıma iş yaptırmakla görevlidir. Ancak direk olarak kullanıcıdan alınan komutlar Kernel’e geçmez. Bundan önce komut satırı dediğimiz bir kabuk(shell) programını temel alarak çalışan bir yapı, kullanıcı ile çekirdek arasında aracı bir katman görevi görür.

Shell(kabuk) programını açıklayacak olursak:

Shell

Mantığını oturtmanız ve kavramların daha kolay yerleşmesi açısından bir fıstık düünün. Bu fıstığın dış katmanı Kabuk (Shell) iç kısmı ise Çekirdek (Kernel) olacaktır. enter image description here Bu benzetme sayesinde isimlerin de nereden geldiği az çok açıklığa kavuşmuş oldu. Shell’in görevi bir üst kısımda belirttiğimiz gibi kullanıcı ile kernel arasında aracı bir katman olarak kullanıcıdan gelen girdileri kernele uygun şekilde iletmektir. Sistemde yapmak istediklerimiz ve yapabileceklerimiz Shell’in esnek ve kullanışlı yapısına yani yeteneklerine bağlı olarak değişmektedir. Bu bağlamda Shell’in sisteme hükmetmekteki anahtarlardan olduğunu söyleyebiliriz. Shell hakkındaki biraz önceki açıklamalara(“yeteneklerine bağlı olarak değişmektedir”) bakarak birden fazla Shell programının olduğunu tahmin etmiş olabilirsiniz. Tebrik ederim çok doğru, Linux sistemlerinde BASH dışında (ksh,tcsh,zsh,fish…) gibi birçok Shell (kabuk) programı mevcuttur. Ancak yetenekleri dolayısıyla olsa gerek en çok tercih edilen kabuk programı BASH kabuk programıdır.

enter image description here

İnanmıyorsanız bir test edelim sizin sisteminizde hangi kabuk programı kullanılıyor.

Bunun için konsolunuzu açın ve aşağıdaki komutu girin diyecektim ki… “Hayda.. daha konsol nedir açıklamadın ki !” diyeceksiniz, haklısınız temeli oturtmak adına buralara kadar geldik ama direk konsol şudur demedik. Ancak zaten bu kısıma kadar Konsol‘un ne olduğunu dolaylı olarak da olsa açıklamış olduk.

Konsol, kullanıcı ile Shell arasından yer alarak kullanıcının komut girmesini sağlayan grafiksel ve komut satırı arayüzüne sahip bir araçtır. Biz komutlarımızı bu araç aracılığı ile Shell’e ulaştırırız Shell ise kullanıcıdan gelen girdileri yorumlayarak Kernel’e aktarır.

Aşağıdaki basit diyagrama bakarak bu yapıları daha net kavrayabilirsiniz.

enter image description here

Konsol Ekranı Açmak (Terminal/Komut Satırı)

Konsolu daha yakından incelemek adına öncelikle bir konsol ekranı açalım. Konsol ekranını açmak için kısayol tuşları olduğu gibi grafiksel arayüz aracılığı ile de açmak mümkündür. Ayrıca aynı anda birden fazla konsol ekranı da kullanabiliyoruz. Yani Linux bize çok sayıda konsol açma imkanı tanıyor. Örenğin aynı anda 6 ayrı konsol açıp hepsinde ayrı işlem yapabiliriz. Bunu kanıtlamak istersek..(Anlatımlar Kali linux işletim sistemi üzerinden gerçekleştirilmektedir. Dolayısıyla anlatım sırasında anlatılanların uygulanması noktasına gelindiğinde sizlerden kali linux işletim sistemini halihazırda açık ve kullanıma hazır şekilde bekletiyor olmanız beklenmektir.) Grafiksel arayüzden komut satırına geçmek için Crtl + Alt + (f1,f2,f3,f4,f5,f6) tuş kombinasyonlarını kullanabiliriz. Demiştim ya 6 farklı konsol açılabiliyor işte açtığınız konsolun numarası da tty1,tty2,tty3,tty4,tty5,tty6 gibi “tty_konsol_numarası” şeklinde konsolda görülüyor. Örneğin ben Ctrl + Alt + f3 tuş kombinasyonunu uyguladığımda karşıma aşağıdakine benzer bir komut satırı geliyor ve benden login olmamı yani kullanıcı adımı ve sonrasında şifremi yazarak giriş yapmamı bekliyor.

enter image description here Eğer bu komut satırından çıkıp tekrar kullanıcı arayüzüne yani grafiksel arayüze geçmek isterseniz Ctrl + Alt + (f7,f8,f9,f10,f11,f12) tuş kombinasyonlarından herhangi birini kullanarak bunu başarabilirsiniz. Ancak kimi Kali Linux sürümlerinde durum böyle olamayabiliyor yani eğer Ctrl + Alt + f7 ve sonrası tuş kombinasyonu grafik arayüze dönmenizi sağlamaz ise bu sefer Ctrl+Alt+f1 veya Ctrl + Alt + f2 şeklinde dönmeye çalışın. Grafik arayüzden Terminal(konsol) ile çalışmak isterseniz; masaüstünde bulunan Terminal simgesine tıklamanız yeterli olacaktır.(Genelde görev çubuğunda sabit şekilde yer alır.) Eğer masaüstünde yok bulamıyorum diyorsanız arama çubuğu ve benzeri yardımcılar aracılığı ile lütfen “konsol” veya “terminal” şeklinde aratarak kendiniz bulun. Konsol(terminal) açma işlemi hemen aşağıda gif resmi ile gösterilmiştir.

enter image description here

Bu işlemeler için kısayolların da kullanılabildiğinden bahsetmiştim, örneğin bazı dağıtımlarda Ctrl + Alt + T tuş kombinasyonu direk olarak terminal ekranını açıyor. Ancak sistemdeki kısayollar; ayarlar aracılığı ile ve ayrıca da dağıtımdan dağıtıma farklılık gösterdiği için bu kısayolları sizin kendi kullandığınız dağıtıma göre araştırarak bulmanız gerekiyor. Korkmayın inanılmaz kolay bir işlem, hem böylelikle yavaş yavaş Linux öğrenmenin aslında araştırmak ve kendi kendine öğrenmek olduğunu kavrıyoruz. Zaten ileride Kali Linux için kısayollar konularına ayrıca değineceğim. Yani ileride kısayollar konusunu teferruatlıca işleyeceğiz merak etmeyin. Şimdilik konumuza dönecek olursak Shell’in ne olduğunu açıklamıştık ve en çok tercih edilen kabuk programının BASH kabuk programı olduğunu söylemiştik. Bunu teyit etmek için komut satırına echo $SHELL komutumuzu giriyoruz. Girdiğimiz komutu açıklayacak olursak ’ echo ’ komut satırında ekrana yazdırma işlevini görür örneğin ben komut satırına echo “Merhabalar” yazarsam komut satırı ’ Merhabalar ’ çıktısını verecektir.$ işareti ise bir parametre ve tanımlanan değişkene normal bir kullanıcı olarak erişebilmeyi sağlıyor. Şimdilik bu komut bütünü hakkında bu kadar bilgi yeterli. Eğer komutun açıklamasını anlamadıysanız hiç bir sorun yok. Okumaya devam ettikçe parçalar yerine oturmaya başlayacak. Zaten ileride bu konuların her birine sırasıyla tek tek değineceğiz ve sizler de anlamış olacaksınız. Şimdi devam edecek olursak:

enter image description here

Konsola girmiş olduğumuz komut yorumlandı ve neticesinde bize /bin/bash şeklinde bir çıktı verdi. Bu çıktı bize mevcut sistemde kullanılan ana kabuk programının BASH olduğunu bildirmiş oldu. Burada komut yorumlandı dedik ancak neye göre oldu bu iş ? İşte bu noktada devreye ortam değişkenleri(çevre değişkenleri) giriyor..

Bu kısımları fazlaca incelediğimi, gereksiz detaylara girdiğimi düşünenler olabilir ancak emin olun öğrendiğiniz her şey birbiri ile bağlı ve bütünü anlamak için bilinmesi gerekli olan kavramlardır. İleride yeri geldikçe bunları daha net kavrayacağız zaten. Anlatımları mümkün oldukça teknik dilden uzak sade anlaşılır ve sizlerin de sürekli etkileşimde olacağı şekilde aktarmaya çalışıyorum. Yani sizler burada yazanları yalnızca kuru kuruya okumayacak, ilerleyiş sırasında konu içerisinde gösterilen uygulamalar ile konuları ve kavramları tam olarak özümsemiş olacaksınız. Tam da bu noktada uygulama yaparak öğrenmenin önemini belirten Konfüçyüs‘ün bir sözünü hatırlatmak istiyorum:

“Bana anlat unuturum, bana göster hatırlarım, beni dahil et, anlarım.” Konfüçyüs

İlerleyişimize gelin ortam değişkenlerini tanıyarak devam edelim.

Ortam Değişkenleri (Çevre Değişkenleri)

Ortam değişkenlerini anlamak için bir örnek üzerinden gidelim. Örneğin grafiksel arayüzde komut satırına leafpad yazdığımızda karşımıza leafpad(metin editörü) programı gelir. (Özellikle grafiksel arayüz diye belirttim çünkü leafpad uygulaması grafiksel arayüz ile çalışmaktadır yani tek başına komut satırının olduğu durumda çalışmayacaktır. )

Fark ettiyseniz bu komutu yazarken programın bulunduğu konumu belirtmeme gerek kalmadı. Yalnızca programın ismini Terminale girmemiz sonucu leafpad programı açılmış oldu. Bunun nedeni programın dosya dizinlerinin PATH(yol) ortam değişkeni üzerinde ekli olmasıdır. Sonuç olarak konsoldan girilen leafpad komutu bu yol üzerinde arandı ve yol üzerinde var olan leafpad uygulaması çalıştırıldı. Daha iyi anlayabilmek adına, bize PATH(yol) bilgisini veren komutumuzu kullanalım ve terminalin bize vereceği tepkiye göre açıklamaya devam edelim. Komut satırımıza echo $PATH komutunu verelim:

enter image description here

Çıktının bize gösterdiği yani konsolun demek istediği şu: Konsoldan girilen herhangi bir komutu çalıştırabilmem için sırasıyla bu /usr/local/sbin: /usr/local/bin: /usr/sbin: /usr/bin: /sbin: /bin dizinlere bakmam gerek. Eğer verilen komutun çalıştırılabilir dosyası bu dizinlerin içerisinde ise çalıştırırım, yoksa çalıştıramam. Çıktıda görülen iki nokta üst üste (:) işareti ile ayrılmış dizinlere PATH(yol) ortam değişkeni deniyor. Ben yine de emin olamadım diyenler için gelin PATH yoluna ekli olmayan bir progamı kendimiz ekleyelim ve konsoldan vereceğimiz bir komutla direk olarak çalışmasını sağlayalım. Adım adım ilerleyelim.

Ben masaüstünde “yeni_dizin” adında bir klasör oluşturdum daha sonra içerisine “yeni” diye başka bir klasör daha oluşturdum son olarak bu klasrün de içerisine “en_yeni” şeklinde bir klasör daha oluşturdum. Yani oluşturduğum dizinin tam adresi yeni_dizin /yeni /en_yeni şeklinde oluşmuş oldu. Şimdi oluşturduğum dizinin en alt klasörünün(en_yeni) içine girerek leafpad programı aracılığı ile metin belgesi oluşturuyorum ve belgenin içine echo “Program Çalıştı” yazarak, oluşturmuş olduğum klasör dizininin en altındaki klasöre yani “en_yeni” ismindeki klasöre dosyamı “komut.sh” ismiyle kaydediyorum. Dosya sonuna eklediğimiz .sh eki ile dosyamız bir betik dosyası halini almış oldu. Burada bahsi geçen betik dosyasının genel tanımı; içerisine yazılmış olan konsol komutlarını tek seferde bir bütün halinde düzenli şekilde çalıştırabilen dosya formatı şeklinde yapılabilir. Yani bizler böylelikle betik dosyası programlayıp konsola yapması gereken bir çok işlemi tek bir dosya ile yaptırabiliriz. Anlayacağınız bu betik dosyas sradan bir dosya değil, program yerine geçen bir formattır. Konsol programıdır yani.. Zaten fark ettiyseniz dosyamızın içerisine daha önce de konsolda verdiğimiz komutlardan birini olan echo komutunu ekledik. Yani bu oluşturmuş olduğumuz betik dosyası Terminal üzerinden çalıştığında komut satırına “Program Çalıştı” şeklinde bir çıktı verecek. Oluşturmuş olduğum betik dosyasının dizin içerisindeki tam konumu aşağıdaki şekildedir.

enter image description here

Programımızın dizin adresi belli olduğuna göre artık bu dizini PATH ortam değişkenine ekleyip istediğimiz zaman, istediğimiz yerden programımızı(komut.sh) çalıştırabiliriz.

Oluşturmuş olduğumuz komut.sh dosyasına konsol üzerinden sadece ismini kullanarak ulaşabilmek için uygulayabileceğimiz iki yöntem bulunuyor. Şimdi sırasıyla bu iki yöntemi de ele alalım.

PATH(yola)Dizin Adresi Ekleme

PATH yolu üzerine ekleyeceğimiz yeni dizini, her oturum başlangıcında sistem tarafından otomatik olarak okunan bir dosya içerisinde belirtmeliyiz ki yaptığımız değişiklik biz silene kadar geçerli olsun. Ekleme işlemi için kullanacağımız dosya, oturum başlangıcında okunan herhangi bir dosya olabilir. Biz örnek olması açısından /etc dizini altında yer alan bash.bashrc dosyası üzerinden çalışalım. bash.bashrc dosyasında değişiklik yapmak için komut satırına dosyamızın bulunduğu tam konumu belirtmek üzere nano /etc/bash.bashrc komutunu giriyoruz.

enter image description here

Ve komut satırında karşımıza yukarıdaki gibi bash.bashrc dosyasının içeriği geliyor. Şimdi yapmamız gereken; programımızın (komut.sh) bulunduğu tam dizin konumunu bu dosyaya uygun şekilde eklemek.

Bunun için dosyanın en alt satıra inerek, eklemek istediğim dosyanın tam dizin adresini aşağıdaki şeklinde dosyaya ekliyorum.

PATH="/root/Desktop/yeni_dizin/yeni/en_yeni":$PATH

enter image description here

Yazma işlemi bittikten sonra dosyada yaptığımız değişiklikleri kaydedip dosyayı kapatmak için Ctrl + X tuş kombinasyonu uyguluyoruz. Bana, “Değiştirilen tampon kaydedilsin mi? (“Hayır” demek değişiklikleri SİLECEK.) " şeklinde bir uyarı veriyor. Dosyada yaptığım değişikliği kaydetmek için e tuşuna basarak devam ediyorum.

enter image description here

Son olarak bana, “Yazılacak Dosya Adı: /etc/bash.bashrc” diye belirtiyor, buradaki ismi değiştirmeden kaydediyoruz. Eğer ismi değiştirirsek sistem bu dosyayı okuyamayacağı için problem çıkacaktır.

enter image description here

Bu adımları geçtikten sonra istediğimiz dizin PATH(yol) ortam değişkenine eklenmiş oldu. Ancak yaptığımız değişikliklerin geçerli olabilmesi için, oturumun kapatılıp tekrar açılması ya da source komutu ile değiştirmiş olduğumuz dosyanın tekrar konfigüre edilmesi gerekiyor.

source /etc/bash.bashrc

Neticede yeni dizini PATH yolu üzerine ekleyip, yapılan bu değişikliğin sistem tarafından algınlanmasını sağladık. Şimdi de bu değişikliği teyit etmek üzere konsola echo $PATH komutunu girelim.

Gördüğünüz gibi dizin, yola(PATH) eklenmiş bulunuyor. Artık dosyayı çalıştırmadan önce son bir ayar daha yapmamız gerek. Daha sonra “komut.sh” dosyamızı aynı leafpad programında olduğu gibi istediğimiz zaman komut satırından ismi ile çalıştırabiliyor olacağız.

Son işlemimiz yetkilendirme işlemi. Bu neden gerekli diyecek olursanız işlemin gerekliliğini kendi gözlerinizle görmek için bu kısmı atlayarak dosyayı çalıştırmaya çalışın. Bunun için komut satırına komut.sh yazalım.

enter image description here

Gördüğünüz gibi konsol bize “Erişim engellendi” diye bildirdi ve dosyayı bulmasına rağmen çalıştıramadı. İşte bu durumu yaşamamak için “komut.sh” dosyamızın bulunduğu konuma giderek (cd Desktop/yeni_dizin/yeni/en_yeni/) chmod +rwx komut.sh komutunu vermemiz gerekiyor. Böylelikle dosyayı çalıştırma izni de elde etmiş olacağız.

Yani artık konsola komut.sh yazdığımız anda bizim oluşturmuş olduğumuz “komut.sh” betik dosyası çalışarak “Program Çalıştı” yazısını konsola basacak.

enter image description here

Sizler de bu yolla sıklıkla kullandığınız dosyaları kolay erişilebilir kılabilirsiniz. Burada kullanımış olduğumuz komutları ve komutlar ile bağlantılı konuları ileriki bölümlerde zaten tek tek ele alacağız. Sizler şimdilik konunun temelinde ne var ve hangi işlemi neden yaptık ona hakim olsanız yeter. Ancak kafalarda soru işareti ile devam etmemek adına ben yinede tek tek izah edeyim hangi komutu neden kullandık.

nano /etc/bash.bashrc bu komutta; nano komutu, konsol üzerinden dosya içeriğini okumamıza olanak sağlayan bir araçtır. Geri kalan /etc/bash.bashrc kısmı ise bash.bashrc dosyasının bulunduğu konumu belirtiyor. Bu sayede nano aracı ile /etc dizininde bulunan bash.bashrc dosyasını komut satırı üzerinden görebiliyor ve değişiklik yapabiliyoruz.

PATH="/root/Desktop/yeni_dizin/yeni/en_yeni:$PATH" ifadesi ise mevcut PATH yoluna yeni dizin eklememize olanak sağlayan bir bütündür. Burada yazdığımız ifade, PATH yolunda yer alan eski dizin adreslerine zarar vermeden yeni dizin ekleme işlemi için gereken ifade bütünüdür.

echo $PATH komutunu daha önce de görmüştük buradaki echo komutu PATH değişken değerini konsola bastırarak PATH ortam değişkeninde bulunan dizinleri görmemizi sağlıyor. chmod +rwx komut.sh komutunda, chmod yetkilendirme ayarlamaları yapmamıza olanak sağlıyor. +rwx parametrelerinden “+” işareti ekleme, “r " işareti okuma, " w “işareti yazma, “x” işareti ise çalıştırma yetkisi olmak üzere bizlere bir bütün olarak dosyayı çalıştırabilmemiz için gereken yetkilendirmeyi sağlıyor. Geri kalan komut.sh kısım ise zaten yetkilendirme vermek istediğimiz dosyanın adı.

PATH Yoluna Dosya Ekleme

PATH yoluna yeni dizin adresi tanımlamadan, komut dosyamızı PATH üzerinde var olan bir konuma taşıyarak da dosyamızın çalıştırılmak üzere bulunabilmesini sağlayabiliriz.

Üstelik bu ikinci yöntem yani var olan PATH yolu üzerine komut dosyamızı taşıma işlemi, ilk işleme oranla çok daha güvenli bir yoldur. Özellikle sunucu yönetiminde erişim yetkilerinin kısıtlanması ve sunucu güvenliğinin sağlanması açısından istisnai durumlar hariç ikinci yöntem tercih edilir. Benim önerim de, yeni bir PATH yolu belirtmek yerine var olan yolları kullanmanızdır. Hemen söylediklerimizi teyit etmek için PATH yolu üzerinde yer alan bir dizine komut dosyamızı taşıyalım ve dosyamızı konsoldan çalıştırmayı deneyelim. Ben örnek olması açısından /usr/local/sbin konumuna dosyamı taşıyorum.

Taşımanın ardından komut satırından dosyamı ismi ile çalıştırmayı deniyorum.

Gördüğünüz gibi sistem tarafından tanımlanmış olan PATH yolu üzerinde yer alan herhangi bir dizine taşımış olduğumuz komut dosyamız bulunup çalıştırılabildi. Burada dosyamızın çalıştırma yetkisi bulunduğundan herhangi bir sorun çıkmadı. Ancak ilk kullanımda olduğu gibi çalıştırma yetkisi bulunmayan bir dosyayı PATH yolu üzerindeki bir konuma taşıdığımızda da çalıştırma yetkisine ihtiyaç duyulur. Yani her iki kullanımda da dosyanın çalıştırılabilirlik yetkisinin bulunması gerektiğini lütfen unutmayın.

Böylelikle iki farklı yöntemle PATH ortam değişkeninin işlevinden nasıl faydalanabileceğimizi net bir biçimde görmüş olduk.

Şimdi bu kısımlar sizlere çok fazla detaya girilmiş belki de gereksiz yere eklenmiş gibi gelebilir ancak bu dokümanı bir bütün olarak kabul etmelisiniz. Dokümantasyon bir sefer okudum bitti değil ihtiyacınız oldukça tekrar tekrar bakasınız diye var. Yani buraları okuyup uygulayıp kavradıktan sonra böyle bir ihtiyacınız olduğunda bu konunun burada olduğunu bilin. Burada yer alan anlatımlar temeli oluşturma üzerine sıralı ve bağlantılı şekilde ilerliyor. Burada bunları ezberlemenize gerek yok zaten öğrenmenin temelinde de ezber yok.(Aman M.E.B. duymasın*!) O yüzden rahat olun her şey kullandıkça gelişecek ancak dediğim gibi artık böyle bir şeyin varlığından haberdarsınız yeri geldiğinde ihtiyacınız olan bilgiler burada olacak.

Ortam Değişkenlerini Görüntülemek

Ortam değişkenleri dedik ancak şu ana kadar sadece PATH değişkeninden bahsettik. Tabii ki sistemde sadece PATH değişkeni bulunmuyor bu değişken dışında da pek çok ortam değişkeni mevcut. Bunları görmek istersek komut satırına set , env ya da printenv komutlarından birini ihtiyacımıza göre kullanabiliriz. Bu üç komut arasındaki farklar aşağıdaki şekildedir.

set : Shell’e ait olan değişkenlerin adını ve değerlerini verir.

printenv : Sistemde bulunan bütün çevresel değişkenleri verir.

env : Sistemde bulunan bütün “export” edilmiş yani dışa(alt kabuklara) aktarılmış değişkenlerle beraber değişkenleri gösterir.

Ben aşağıda sadece printenv komutunun çıktısını veriyorum. Sizler diğer komutları da mutlaka uygulayarak aralarındaki farkları kendi gözlerinizle görün.

enter image description here

Evet bize burada pek çok ortam değişkeni sıralandı. Ben her birini açıklamayacağım. Neden diye soracak olursanız; mevcut dökümantasyonda temel anlatım içerisinde olduğumuz için, sizlere mümkün olduğunca ilk adım için gerekli olan bilgileri vermeye çalışıyorum. Yani benim burada anlattığım her bilgi sizlere konuyu açıklamak ve konuyu daha iyi şekilde kavratmak için var. İlk aşama için gereksiz, yorucu bilgilere ihtiyacımız yok. Ancak buradan açıkladıklarım haricindekiler gereksiz gibi bir anlam çıkmasın lütfen. Zaten temeli yani asıl işlevlerini kavradıktan sonra yeri geldikçe diğer değişkenleri de biliyor ve kullanıyor olacaksınız. Ancak ben yinede şimdi diğer bir değişken olan HOME değişkenini de kısaca açıklayarak örneklendirmiş olacağım. Merak eden arkadaşlar şimdiden diğer ortam değişkenlerini de araştırıp kurcalayabilir.

HOME değişkenini örnekleyerek açıklayacak olursak:

Şöyle bir durum düşünün; bir programcı, yazmış olduğu programının kurulduğu zaman masaüstüne bir kısayol oluşturmasını istiyor olsun. Ancak böyle bir şey yapabilmek için, kullanıcıların masaüstüne giden yolunun tespit edilebilmesi lazım. Ama öyle bir problem var; Bildiğiniz gibi herkesin masaüstüne giden yol aynı değil. Bir bilgisayardaki masaüstü dizinini bulabilmek için, o bilgisayarı kullanan kişinin kullanıcı adını da biliyor olmanız lazım. Çünkü masaüstünün bulunduğu dizin kullanıcı adına bağlı olarak değişiklik gösterecektir.

Mesela bende /home/taylan/Desktop olan masaüstü dizini sizde /home/burak/Desktop şeklinde olabilir. Hatta işletim sisteminin dilinin Türkçe veya İngilizce (diğer tüm diller de dahil..) olmasına göre de masaüstünün yolu farklı olabilir. Yani demem o ki bu kadar basit bir işlem için bile tahmin edilemez bu yolun bilinmesi veya bulunması gerek. Ama masaüstüne kısayol oluşturma çok olağan bir durum.. bir imkansız değil. İşte tam bu noktada neden ortam değişkenlerinin var olduğunu biraz daha net kavrıyoruz. Ortam değişkenleri, kullandığımız işletim sisteminde belli değerlere daha sonra kolaylıkla ve kararlılıkla ulaşabilmemiz ve işleyebilmemiz için oluşturulan ifadelerdir. Bahsettiğimiz konuda, örneğin masaüstüne herhangi bir yerden ulaşmak istersek, komut satırına ev dizininin yol bilgisini tutan değişken olan HOME değişkenini cd $HOME şeklide girmemiz yeterli oluyor. Yani bizler bu değişken sayede, hiç aramamıza gerek kalmadan ev dizini içerisinde yer alan Desktop konumuna da ulaşabiliyor olacağız.

enter image description here

Ayrıca burada ekstra bir bilgi olsun diye belirtmek isterim ki ev dizinine gitmek için iki farklı yol daha bulunmaktadır. Bunlardan ilki yalnızca cd komutunu kullanmak diğeri ise cd ~ komutunu kullanmaktır. ( Burada yer alan ~ işareti Türkçe klavyede Alt Gr + Ü tuş kombinaysonu ile oluşturuluyor. )

enter image description here enter image description here

Komutumuzu girdikten sonra ulaştığımız konumda hangi dosyaların olduğunu görmek için konsola ls komutunu verdik. Konsol bize Desktop(masaüstü) ve ev dizininde bulunan diğer dosyalarında çıktılarını verdi. Yani bu demek oluyor ki ev dizinine, kullanıcı ismini bilmemize gerek olmadan kolayca ulaştık. Yani gördüğünüz gibi örnek durumda açıkladığımız program kısayolu oluşturma işlemi ana dizini tutan HOME ortam değişkeni sayesinde kolayca gerçekleştirilebilir oluyor.

Komutu biraz açıklayacak olursak cd dizinler arası geçiş yapmamızı sağlayan bir komut. $ (dolar işareti) tanımlanmış olan değişkene erişme işlemini yapan parametremiz, HOME ise ev dizinini tutan ortam değişkeni. Son olarak ls komutu bulunduğumuz konumdaki dosyaları listeliyor. Burada bahsi geçen tüm komutları ileride ele alacağız şimdilik bu açıklama yeterli.

Temel ve sık kullanılan değişkenlerden birkaçını da kısaca açıklayacak olursak:

SHELL: Çalışmakta olan kabuk programının adını ve yerini verir.

PATH: Konsola komut girildiğinde, komut için gereken ilgili dosyaların aranacağı dizinler diğer bir adıyla yol.

HOME: Kullanıncının ev dizinini içeren değişken.

TERM: Komut satırı uygulamalarının hangi terminalde çalışacağını belirtir. Birçok çeşidi vardır ancak xterm yaygın şekilde karşımıza çıkmaktadır.

Ortam değişkenlerinin değerlerini tek tek kontrol etmek istersek, konsola echo $ORTAM_DEĞİŞKENİ şeklinde komut vererek ilgili bilgilere ulaşabiliriz. Örneğin TERM değişkenine bir bakalım.

enter image description here

Gördüğünüz üzere konsol TERM değişkeninin değerini **xterm__ olduğunu göstermiş oldu. Zaten daha önce yaygın olarak kullanıldığından söz ettiğimiz için bu çıktı bizi şaşırtmadı. Eğer bu çıktıyı teyit etmek istersek konsola xterm komutunu verdiğimizde *xterm açılacak ve çıktı teyit edilmiş olacaktır.

enter image description here

İstersek diğer ortam değişkenleri için de aynı şekilde tek tek bilgi alabiliriz. Ancak ortam değişkenleri sabit ve sınırlı değildir. Sistemde var olanların haricinde bizde kendimiz ortam değişkenleri tanımlayabiliriz. Tanımlamaları üç farklı kategoriye ayırabiliriz;

  • konsola(terminal) özel : yalnızca açık olan mevcut terminaldeki uygulamalar için kullanılabilen
  • kullanıcı : yalnızca tek kullanıcı için geçerli ve o kullanıcının her oturum açtında kullanabildiği
  • sistem geneli : sistemde öntanımlı olarak ayarlanmış sürekli kullanılabilir

Gelin şimdi teker teker kullanımlarına değinelim.

Mevcut Konsola Özel

Sadece o an kullanmakta olduğumuz terminale(konsol) özel olan ve terminali kapattıktan sonra sıfırlanan ortam değişkenidir. Aşağıdaki örnek ile adım adım açıklayalım bu durumu:

Terminali açtım ve komut satırına “asdf “(anlamsız karşılığı olmayan bir ifade/komut) yazdım. Konsol yanıt olarak " bash: asdf: komut yok " yazısını ekrana bastı.

enter image description here

Görüldüğü gibi konsol çıktısı Türkçe oldu ancak ben bu çıktıları İngilizceye çevirmek istiyorum diyelim. Bunun için konsola export LANG=C komutunu veriyorum. Ve sonrasında tekrar komut satırına asdf yazıp dilin değişip değişmediğini kontrol ediyorum.

enter image description here

Çıktıda da görüldüğü gibi dil değişmiş ve yazdığımız asdf komutunun neticesinde konsol, ekrana bash: asdf: command not found yazısını basmış oldu. Sonuç olarak geçerli terminal için dil ingilizceye çevrilmiş oldu.

Bütün bu işlemler sadece bu komut penceresi için sınırlı. Yani açmış olduğumuz terminal ekranını(konsol/komut penceresi) kapatırsak yeni bir tane açtığımızda başlangıçta olduğu gibi konsol bize Türkçe yanıt verecektir. Yani bu şekilde yapılan tüm değişiklikler sadece yapıldığı konsol için geçerli. Bunu kendiniz de deneyerek görebilirsiniz.

Kullanıcıya (Oturuma) Özel

Daha önce BASH kabuğundan bahsetmiştik ve mevcut sistemimizde bulunup bulunmadığını da kontrol etmiştik. BASH her oturum açtığımızda tüm ayarlarını ve davranışlarını " .bashrc " isimli gizli bir dosyadan okur. Ufak bir bilgi daha; başında . (nokta) olan dosyalar gizli dosya görevindedir. Konuya dönecek olursak bizim mevcut oturumumuzda ortam değişkenlerinde kalıcı değişiklik yapabilmemiz için yapmak istediğimiz değişiklikleri " .bashrc " isimli dosyaya eklememiz gerekiyor ki oturum açtığımızda sistem burada yaptığımız değişiklikleri her seferinde görebilsin.

Bulunduğumuz oturumda kalıcı değişiklik yapmak için birisi grafiksel diğeri ise sadece komut satırı arayüzü olmak üzere iki farklı yoldan nasıl değişiklik yaparız onu görelim. İsterseniz ilk olarak grafiksel arayüz ile başlayalım. Öncelikle .bashrc dosyasını açmalıyız. Dosyayı açmak için konsola leafpad ~/.bashrc komutunu veriyoruz.

Kodu kısaca açıklayacak olursak leafpad sistemde mevcut bulunan basit metin düzenleyicisinin adıdır, ~(Alt Gr + ü kombinasyonu ile oluşturulan “tilde” karakteri) karakteri ev dizinini temsil ediyor /.bashrc ise düzenleme yapacağımız dosyanın adıdır. Bu kısa açıklama sonrası komutları tam olarak anlamamış olabilirsiniz. Ancak yakında her birine değineceğiz ve bu kısımlar da tam anlamıyla oturmuş olacak. Yani şimdilik bu kodlara çok takılmadan asıl anlatılmak istenilene odaklanın lütfen.

leafpad ~/.bashrc komutunu verdikten sonra karşınıza .bashrc dosyasının açılmış olması gerek.

enter image description here

Şimdi yapmak istediğimiz değişikliği dosyanın en alt satırına yani dosyanın sonuna eklemeliyiz. Bu eklemeyi export DEĞİŞKEN_ADI=değeri şeklinde yapıyoruz. Ben örnek olması açısından dil değişikliğini ele aldım. Bu sebepten dil değişimi(Türkçe olan dili ingilizceye çevirmek) için gerekli olan yazı dizisini export LANG=C şeklinde dosyanın sonuna ekledim ve dosyayı kaydederek kapattım.

Geldik diğer yöntem olan yalnızca konsol ekranını kullanarak değişiklik yapmaya.

Bunun için konsola nano -w ~/.bashrc komutumuzu veriyoruz. Komutumuzu girdikten sonra karşımıza konsol ekranı içerisinde .bashrc dosyasının içeriği geliyor. Klavyedeki yön tuşlarını kullanarak en alt satıra iniyoruz ve oraya yapmak istediğimiz değişkliği giriyoruz. Ben dilde değişiklik yapacağım için satırın sonuna export LANG=C şeklinde ekleme yaptım .

enter image description here

Ve Ctrl + X tuş kombinasyonunu uyguladım. Daha sonra konsol bana çıkmadan önce dosyada yaptığım değişikliği kaydetmek isteyip istemediğimi sordu bende “e” diyerek dosyanın adını herhangi bir değişime uğratmadan kaydettim ve işte bu kadar işlem tamamdır.

enter image description here enter image description here

Yalnızca komut satırından işlem yapmak sanki daha uzun ve zor gibi gelmiş olabilir ancak kesinlikle grafiksel olarak yapmaktan bir farkı yok sadece belki izahı biraz uzun sürmüş olabilir.

Artık böylelikle değişiklik yaptığımız bu kullanıcı oturumunu ne zaman açarsak, yaptığımız dil değişikliği geçerli olacak. Ancak değişikliği yaptığımız anda etki etmiyor. Bunun nedeni .bashrc dosyasının oturum açılırken okunmasıdır. Yani yaptığımız değişikliklerin geçerli olabilmesi için oturumun kapatılıp tekrar açılması gerekmektedir. Ya da konsoldan vereceğimiz source ~/.bashrc komutu da dosyanın tıpkı oturum yeniden açılıyormuşçasına .bashrc dosyasının tekrar okunup yapılan değişikliklerin geçerli olmasını sağlar. Ancak benim önerim oturumu kapatıp tekrar açmanız yönündedir.

Sistem Genelinde

Eğer yaptığımız değişiklik bütün kullanıcı oturumlarında aynı şekilde geçerli olsun istiyorsak değişkenin sistemde her oturum açıldığında okunan bir dosyada bulunması gerekmektedir. İşte bizim de yapacağımız değişiklikler tüm kullanıcılar için geçerli olsun istiyorsak, yapacağımız değişikliği bash.bashrc dosyasına eklemeliyiz. Dosyamızın tam konumu /etc/bash.bashrc dizininde yer alıyor. Bu dosyada ilgili değişikliği nano aracı ile yapmak için konsola nano -w /etc/bash.bashrc komutunu veriyoruz.

enter image description here

Örnek olması açısından dosyamızın en son satırına dil değişikliği işlevindeki “export LANG=C” ifadesini ekliyorum. Bu sayede terminal dili bütün sistemdeki kullanıcılar için ingilizce olacaktır.

İlgili ifadeyi bash.bashrc dosyamıza ekleyip dosyamızı kaydediyoruz .

enter image description here enter image description here

Sıra geldi değişikliklerin sistem tarafından tanınmasına. Yapılan değişikliğin sistem bütününde geçerli olabilmesi için daha önce de bahsi geçen source komutunu bash.bashrc dosyası için source /etc/bash.bashrc şeklinde kullanıyoruz. Ve değişikliklerin geçerli olup olmadığını denemek için konsola olmayan geçersiz bir komut verelim, örneğin konsola asdf yazalım bakalım konsolun tepkisi hangi dilde olacak.

enter image description here

Çıktımız ingilizce olduğuna göre başarmışız demektir. Yaptığımız bu değişiklik bütün kullanıcılar için yani sistem geneli için geçerlidir. Bu durumu başka bir hesap oluşturarak kendiniz de gözlemleyebilirsiniz.

Ayrıca değişiklikleri geri almak isterseniz eklediğiniz ifadeyi ilgili dosyadan silin ve sistemi source ilgili_dosya_adı şeklindeki komut bütünü ile yeniden konfigüre edin, bütün değişimler düzelmiş olacaktır.(source komutunu kullanmak zorunda değilsiniz, hatta bu komut yerine sistemi yeniden başlatmanız daha iyi olacaktır.)


Kısayollar

Bu bölümde, sistem üzerinde gerekli hakimiyeti sağlamada bizlere kolaylıklar sunan bazı kısayollar hakkında önemli bilgileri öğrenip uygulayacağız. Kısayolları şimdi öğrenmemizin sebebi, ileride komutları uygularken bizlere kolaylıklar sağlayarak bize hız katacak olmalarıdır. Hem şimdi öğrenirsek eğitim boyunca da sürekli pratik yapma imkanı bulmuş olacağız. Benim tecrübeme göre eğitim asla ezber üzerine kurulamaz. Öğrenme denilen olgu uygulama yani sürekli olarak yapılan pratik ile gerçekleşir. Bu bölümde öğreneceğiniz bilgiler belki başlangıç için fazlaca gözükebilir. Ancak her kısayolu ve her bilgiyi direk ve sürekli olarak kullanmasak bile burada olduğunu bilmeli, ve gerektiğinde dönüp tekrar bakabilmeliyiz. O yüzden buradaki bilgiler gözünüze fazla gözükürse endişe etmenize gerek yok. Zaten kısayol bilgileri temel Linux kullanımı için hayati bilgi olarak sayılmazlar, ancak zamanla göreceksiniz ki işlerimizi kolaylaştırarak Linux sistemini verimli şekilde kullanmamızı sağlıyor olacaklar. Neyse bu kadar açıklama yeter, gelin kısayollar konumuza terminal için kısayol atama işlemleri ile başlayalım.

Terminal Kısayolları

Genelde başka bir işletim sisteminden geçiş yapan arkadaşlar konsoldan bir komutu kopyalamak üzere, alıştıkları gibi Ctrl + C, kopyalanan komutu yapıştırmak için ise Ctrl + V tuş kombinasyonunu denerler. Ancak komut satırında görürler ki kopyalamak için bastıkları Ctrl + C tuş kombinasyonu ^C, yapıştırmak için bastıkları Ctrl + V tuş kombinasyonu ise ^V şeklinde konsola çıktı basmış. Tabi yanlış basmış olma ihtimaline karşı aynı işlemi genellikle tekrar deneyen arkadaşlar olur ancak yine aynı çıktıları alınca, anlaşılır ki o işler öyle olmuyormuş :) İşin şakası bir yana insanın zamanla edindiği alışkanlıklarını değiştirmesi zor olabiliyor. O yüzden Terminalde Ctrl + Shift + C ve Ctrl + Shift + V olan kopyala-yapıştır kısayolunu daha önceden alışmış olduğumuz gibi değiştirmek bizim en doğal hakkımız. Bunun için eğer isterseniz yalnızca kopyala-yapıştır kısayolunu değiştirebilir ya da diğer mevcut tüm kısayolları istediğiniz ve alıştığınız şekilde düzenleyebilirsiniz. Düzenlemek için, yeni Kali Linux versiyonlarında Terminal’in üst kısmında yer alan sekmelerden sırasıyla Düzenle > Tercihler > Kısayollar sekmelerini takip ederek açılan pencerede yer alan kısayolları dilediğiniz şekilde değiştirebilirsiniz.

Eğer eski bir versiyon kullanıyorsanız yukarıda sıraladığım adımlarla Terminal kısayollarına ulaşamamış olabilirsiniz. Ancak Terminal’in üst kısmında yer alan sekmelere kendiniz göz atarak “kısayollar” penceresine ulaşabilirsiniz. Sonuçta sürekli yenilikler olduğu için her versiyona özel bu tarz şeyleri yazmak gereksiz olacaktır. Kendiniz de biraz kurcalama ile çok rahat keşfedebilirsiniz.

Terminalin kısayollar penceresine ulaştığımıza göre artık istediğimiz şekilde değişiklik yapabiliriz. Buradaki kısayol seçeneklerine göz atın hangisi size uymuyorsa dilediğiniz şekilde düzenleyin. Ayrıca bilmediğiniz kısayollar varsa onlara da göz atmayı ihmal etmeyin.

Sistem Kısayolları

Şimdi ise sistem üzerindeki kısayollara göz atalım. Ben sürekli Terminali kullandığımız için Terminali açmak üzere bir kısayol oluşturmak istiyorum. Bunun için adım adım yapmamız gerekenlere bakalım. Başlamadan önce, kullandığınız sürüme göre sistem arayüzü değişiklik gösterebileceğinden, yönerge tam olarak sizi yönlendiremeyebilir. Ancak bunlar biraz kurcalayarak kendi kendinize bulamayacağınız şeyler değil. Ben yine de kullandığım sürüm üzerinden sizlere adımları aktarıyorum:

Öncelikle sistem ayarlarını(Ayarlar) açalım.

Sol tarafta yer alan ayarlar menüsünden “Aygıtlar” sekmesine tıklayalım.

Aygıtlar sekmesinde yer alan “Klavye” ayarını seçelim. Sağ tarafta “Klavye Kısayolları” şeklinde bir pencere açılacaktır.

Buradan en alta inerek altta yer alan " + " işaretine tıklayalım.

Karşımıza küçük bir “Özel Kısayol” penceresi açılacaktır.

Burada yer alan İsim kısmına herhangi bir ad verebilirsiniz ben daha sonra değiştirmek istediğimde hatırlamada kolaylık olsun diye “Terminal” adını verdim.

Komut kısmına terminalin açılması için gerekli olan komutu girmeliyiz ben terminali açmak istediğimden terminali açma komutu olan gnome-terminal komutunu yazdım.

Daha sonra bir alt kutucuğa istediğimiz kısayol tuş kombinasyonunu giriyoruz.

Ben Ctrl + Shift + T şeklinde ayarladım. Elbette siz kısayol tuş kombinasyonunu dilediğiniz gibi ayarlayabilirsiniz.

Son olarak “Ekle” butonuna tıklayarak kısayolumu atamış oluyorum. Artık ne zaman atadığım kısayol tuş kombinasyonunu (Ctrl+Shift+T) uygularsam yeni bir Terminal ekranı açılıyor olacak. Ben burada yeni bir Terminal açma üzerinden örnek verdim, ancak burada atayacağınız kısayol herhangi başka işlev için de olabilir, o sizlere kalmış. Ayrıca; bu kısayollar menüsünde yer alan kısayollara da göz atıp, eğer isterseniz dilediğiniz şekilde değiştirebilirsiniz.

Bash Shell Kısayolları

Bash Shell programının ne işe yaradığını daha önceki kısımlarda açıklamıştık. Şimdi ise komut yazarken işimizi kolaylaştıracak olan bazı Bash Shell kısayollarını göreceğiz. Burada verilenleri direk olarak kullanmanız beklenmediğini daha önceki kısımlarda söylemiştim. Kısayolların oturması için çokça pratik gerek. Pratik yaptıkça zaten zamanla istemeden de olsa öğrenmiş ve farkında olmadan kullanıyor olacağız emin olun.

İmleç Hareketleri:

KısayolKsayol Açıklaması
Ctrl + Aimleç satır başına gider.
Ctrl + Eimleç satır sonuna gider.
Ctrl + Pönce çalıştırılmış komut gösterilir.
Ctrl + Nsonra çalıştırılmış komut gösterilir.
Alt + Bsola doğru(geri) bir kelime kadar imleç kayar.
Alt + Fsağa doğru(ileri) bir kelime kadar imleç kayar.
Ctrl + Fimleç bir karakter ileri gider.
Ctrl + Bimleç bir karakter geri gider.
Ctrl + XXgeçerli imleç konumundan, imleç satır başına geçer.

Düzenleme

Kısayol Kısayol Açıklaması
Ctrl + Lekran temizlenir ve imleç en üst satıra çıkar yani `clear` komutu ile aynı işlemi yapar.
Alt + Dimleçten sonraki kelimeyi siler.
Ctrl + Uimlecin solundaki her şeyi siler.
Ctrl + Kimlecin sağındaki her şeyi siler.
Ctrl + Ykesilmiş olan son metni ekrana yapıştırır.
Esc + Timleçten önceki iki kelime yer değiştir.
Ctrl + Hsola doğru tek tek karakterleri siler.(yani Backspace gibi davranır)
Alt + Uimlecin başladığı yerden sözcüğün sonuna kadar bütün karakterleri büyük harf yapar.
Alt + Limlecin başladığı yerden sözcüğün sonuna kadar bütün karakterleri küçük harf yapar.
Alt + Cimlecin üstünde bulunduğu karakteri büyük harf yapar.
Ctrl + Ckomutu durdurur/keser.
Ctrl + Rdaha önce kullanılmış olan komutlar arasında arama yapma ve o komutu tekrardan kullanma imkanı sağlar.
Ctrl + Z çalışan süreci arka plana atarak duraklatır.
Ctrl + DTerminali sonlandırır.
TabOtomatik tamamlamayı sağlar. Konsol üzerinden bir kısmını yazmış olduğunuz, dosya, dizin ve komut türevi her türlü ifadeyi otomatik tamamlar. Ayrıca iki kez üst üste basıldığında da yazmış olduğunuz ifade ile başlayan tüm içeriği listeler.

Burada belirttiklerim dışında pek çok kısayol mevcut ancak ben hepsine değinmedim. Kaynak olarak kullandığım bu adresten veya internette yer alan ücretsiz bir çok kaynaktan çok rahat şekilde yeni kısayol bilgilerine ulaşabilirsiniz.

Aynı Anda Birden Fazla Komut Kullanımı

Hazır konu kısayollardan ve pratiklikten açılmışken aynı anda birden fazla komut kullanımını da anlatmadan geçmek olmaz. Bunun için üç farklı yol izleyebiliriz. Birincisi yan yana olacak şekilde && operatörünü kullanmaktır, hemen bu yolu deneyelim. Ancak henüz tam olarak komutları öğrenmediğimiz için önceden kullandığımız komutlardan yararlanalım. Bunun için PATH ve TERM ortam değişkenlerini kullanarak aynı anda çıktı almak üzere echo $PATH && echo $TERM komutunu konsola yazalım.

enter image description here

Çıktıda görüldüğü gibi PATH ve TERM ortam değişkenlerinin değerleri, yazdığımız iki komutun arasına koymuş olduğumuz && operatörü sayesinde aynı anda basılmış oldu. Gelin şimdi de diğer bir yol olan noktalı virgül " ; " kullanarak aynı işlemi tekrar edelim.

enter image description here

Ve sonuç bizleri şaşırtmayarak yine birleşik komut içerisinde yazdığımız ortam değişkenlerinin değerlerini aynı anda ekrana bastırdı. Son olarak || operatörünü ele alalım. Bu operatör diğerlerinden farklı olarak, kullandığımızda eğer verilen komutlardan birincisi başarısız olursa diğerini basar. Bu operatörü de kısaca şu örnek ile inceleyelim.

enter image description here

Burada 1. komut başarısız olduğu için 2. komut ekrana basılmış oldu. Yani bir nevi önlem amaçlı bir kullanımdır. Biz konsola bu kullanım ile diyoruz ki; “Eğer verdiğim ilk komut başarısız olursa ikinci komutu çalıştır.” Yani bu durumda eğer ilk komut başarısız olursa, hemen devreye ikinci komut girecektir, ancak ilk komut başarılı olursa ikinci komut çalışmayacaktır.

Kısayol Koruması

Buraya gelene kadar birçok kısayoldan ve bu kısayolların avantajlarından bahsettik ancak kısayollar bazen istemediğimiz sonuçlar doğurabiliyor. Biz de böyle durumlarla karşılaşmamak adına şimdiden ufak önlemler alsak iyi olur. Önceki kısımlarda Ctrl+D kısayolunun mevcut konsolu kapattığını öğrenmiştik. Bu çok kullanışlı bir kısayol olsa da bazen yanlışlıkla kullanıldığında konsolun ansızın kapanmasına neden olabiliyor. Yani konsolun anlık kapanmasına karşı bir kontrol mekanizması oluşturmamız sonradan üzülmemek için şart. Bu kontrol sağlama imkanını bize ignoreeof verir. ignoreeof tanımını kullanmann 2 farklı yolu vardır. Bunlardan birisi sadece mevcut Terminal için geçerli diğeri ise sürekli ve oturumdaki tüm Terminallerde geçerli olan kullanımlardır. Sürekli ve tüm Terminal ekranlarında geçerli olsun istiyorsak: Gerekli ayarlamaları yapmak üzere komut satırımıza nano -w ~/.bashrc komutunu veriyoruz ve .bashrc dosyasının en alt satırına export IGNOREEOF=2 yazıp Ctrl + X tuş kombinasyonunu kullanarak dosyanın ismini değiştirmeden kaydederek çıkıyoruz.(Bütün kullanıcılarda bu korumayı sağlamak için değişikliği bash.bashrc dosyasında yapmamız gerektiğini daha önceki kısımlardan biliyorsunuz.)

Böylece koruma sistemi kuruldu ve artık test etmeye hazır. Komut satırındayken iki kez Ctrl + D tuş kombinasyonunu uygularsak konsol bize iki defa uyarıda bulunacaktır ve çıkmak için ancak 3. defa bastığımızda ya da komut satırına exit yazdığımzda konsol kapanacaktır.

enter image description here

Burada biz IGNOREEOF=2 şeklinde belirttik ve bu tanımlama bizi 2 kez Ctrl + D kapatma kombinasyonundan korudu. Ancak sizler bu bana yetmez ya da 2 kez fazla olur diyorsanız tanımı istediğiniz değerlerde ayarlayabilirsiniz. Örneğin IGNOREEOF=4 olabilir ya da IGNOREEOF=1 olabilir, bu değer tamamen size kalmış. Ayrıca bu kapanmaya karşı koruma özelliğini kapatmak isterseniz eklemiş olduğunuz ifadeyi dosyadan silerek dosyayı kaydetmeniz yeterli olacaktır.

Şimdi de yalnızca mevcut Terminal için geçici koruma nasıl sağlarız ona değinelim: Koruma katmanı ne kadar hayat kurtarıcı olsa da sürekli olması bazen rahatsız edici olabilir. İşte bu noktada sadece önemli ve gerekli gördüğümüz zaman bu özelliği açıp kapatma seçeneğine sahibiz. Bunu da iki farklı yolla yapabiliriz.

İlk yol, komut satırına ignoreeof=2 şeklinde komut vermek. Bu komut sayesinde mevcut Terminal ekranı ancak 3.kez Ctrl + D tuş kombinasyonu uygulandığında kapanacaktır. Buradaki sayıyı dilediğiniz gibi değiştirebileceğinizi biliyorsunuz. Eğer bu özelliği devre dışı bırakmak istersek komut satırına ignoreeof=0 yazmamız yeterli.

İkinci yöntem ise komut satırına set -o ignoreeof yazmak. Bu komut ile de mevcut komut satırımız ancak 11.kez Ctrl + D yapmamız sonucunda kapanacaktır. Bunun haricinde bir de exit komutunu verirsek konsol ekranı anında sonlanır. Bu özelliği devre dışı bırakmak isterseniz de, komut satırına set +o ignoreeof yazmanız yeterli olacaktır.

enter image description here


Yardım Almak

Bu kısımda bir nevi ğrenmeyi öğreneceğiz. Bunu da Linux sistemlerinin sahip olduğu çok geniş çaplı yardım mekanizmasını kullanarak başaracağız. Linux sistemlerinde yer alan bu geniş çaplı yardım mekanizmasının bulunmasının birçok nedeni var. Ancak genel olarak; çok fazla komutun çok fazla argüman alması veya her bir programın kendine has kurulum ve kullanım komutlarının olmasından kaynaklanıyor diyebiliriz. Ayrıca, Linux’un bünyesinde bulundurduğu yardım sayfalarının dışında da birçok yardım alma kaynakları mevcuttur. Zaten zamanla göreceksiniz ki; Linux’a kurmak için edindiğimiz hemen her araç veya program kurulum dosyalarının beraberinde, kurulum ve kullanımla ilgili açıklamayı içeren belgelerle birlikte geliyor olacak.

Bu bağlamda, Linux sistemlerinin temel doküman-bilgi kaynaklarını 3 türe ayırabiliriz.

Bunlar; bilgi sayfaları(info), kılavuz sayfaları(manuel) ve uygulamalar ile gelen /usr/share/doc konumunda bulunan dokümanlardır. Bizler de zaman zaman unuttuğumuz için veya bilmediğimizden dolayı, bu yardım sayfalarına ve dokümanlarına danışıyor olacağız. Bu girizgahtan sonra artık yavaş yavaş yardım alma komutlarımıza geçelim.

help Komutu

Hiç ingilizce bilmiyorum diyen birinin bile, “help” ifadesinin “yardım” anlamında olduğunu bildiğini düşünüyorum. Yani bu sebepten help komutu akılda kalması en kolay komutlardandır. Komutun kullanımına geçecek olursak; örneğin daha önce kullandığımız yetki verme işlevini gören chmod komutu ile ilgili yardım(bilgi) almak isteyelim. Bunun için komut satırına chmod –help şeklinde komutumuzu yazıyoruz. Ve aşağıda görüldüğü gibi gerekli bilgileri içeren yardım sayfası bizi karşılıyor.

enter image description here

Bu kullanımın dışında help komutunun bir de help komut şeklinde kullanımı var, ancak bu kullanımda her zaman komut hakkında yardım bilgisi bulunmayabiliyor. O yüzden ilk öğrendiğiniz yol önceliğiniz olsun. Örneğin help chmod yazdığımızda komut satırı yardım bilgisi bulunmadığını belirtti.

enter image description here

Peki madem her zaman sonuç vermeyebiliyorsa neden ikinci kullanım yöntemi var ?” ..diyecek olursanız: Bazı istisnai komutlarda komut --help şeklinde yazıldığında komutun kullanım şekli nedeniyle çıktı alınamıyor. Buna bir örnek verelim ancak örnekte kullanacağım komutu ileride ayrıntılı ele alacağım şimdilik sadece konumuzla ilgili olan kısımına odaklanın lütfen.

Örneğin; echo komutu kendisinden sonra yazılan ifadeyi ekrana basıyor. Yani ben echo Merhaba yazarsam, konsol ekranı da çıktı olarak “Merhaba” şeklinde bir ifade basıyor.

enter image description here

Eğer ben help komutunu kullanarak, echo komutu hakkında yardım bilgisine ulaşmak istersem; komutumu echo --help şeklinde kullandığımda, ekrana yardım bilgisi değil yalnızca “–help” ifadesi basılıyor.

enter image description here

İşte bu gibi durumlarda help komutunu, ikinci kullanım şekliyle kullanmaktan başka çare kalmıyor. Hemen bu durumu teyit edelim; eğer komutumu help echo şeklinde yazarsam çıktılara echo komutunun yardım bilgilerinin yer aldığını aşağıdaki resimde görebilirsiniz.

enter image description here

Yani sonuç olarak istisnai komutların haricinde help komutu komut --help şeklinde kullanılıyorken, bazı özel durum oluşturan komutlar mecburen help komut yapısıyla kullanılmak durumunda kalıyor. Bu istisnaları kesinlikle bilmek zorunda değilsiniz. Sadece help komutu ile yardım bilgisine ulaşmak istediğinizde ilk olarak komut --help yapısını kullanın eğer yardım bilgisine bir şekilde ulaşamazsanız bu sefer komutunuzu help komut şeklinde kullanın.

man(Manuel Sayfası) Komutu

man(manuel) sayfaları temel yardım alma dosyalarıdır. Ve kılavuz sayfaları olarak da bilinir.

man komutunu kullanmak için komut satırına, hakkında bilgi edinip yardım almak istediğimiz komutu man komut şeklinde giriyoruz. Örneğin ben chmod hakkındaki bilgilere ulaşmak istiyorsam konsola man chmod şeklinde yazarak gerekli bilgilere ulaşabilirim. Komutun çıktısında göreceğiniz gibi uzunca bir açıklama sizleri bekliyor. Açılan bu klavuz sayfasında yön tuşlarını ve space tuşunu kullanarak rahatlıkla gezinebilirsiniz. Ayrıca man sayfasının kısayollarını ve kullanımını görmek isterseniz man sayfası açıkken h tuşuna basarsanız sizi man kılavuzunun yardım sayfası karşılar, orada man komutunun kullanımı ile ilgili detaylı bilgi yardımı mevcuttur. Kılavuz sayfasını kapatmak isterseniz de, sadece q tuşuna basmanız yeterli olacaktır.

Şimdi biraz da man sayfasının iç yapısına değinecek olursak:

  • NAME: Komutun ismi ve açıklama kısmı.
  • SYNOPSIS: Komutun kullanım açıklaması(nasıl kullanılacağı).
  • DESCRIPTION: Komutun yaptığı iş(fonksiyonu) hakkında açıklama.
  • EXAMPLES: Komutun kullanımı ile ilgili örnekler ve açıklamalar.
  • SEE ALSO: Diğer ilgili başlıklar.

man kılavuzunun komutlarla ilgili tuttuğu bilgi sayfaları /usr/share/man konumu altnda tutulur. Yani konsol ekranına basılan yardım(kılavuz) bilgileri bu konum içerisinde yer alan dosyalardan alınarak basılır. man kılavuz sayfalarının kaynağı burasıdır ve bu dosyalar belirli bir düzene göre sıralanmıştır.

enter image description here

İlgili dizin içerisindeyken bakalım; örneğin, man sayfasının yapılanması nasıl oluyor yani /usr/share/man konumunda yer alan dil dosyaları dışındaki diğer dosyalar olan man1, man2, man3, man4, man5, man6, man7, man8 dosyaları ne ifade ediyor kısaca ona değinelim.

  • man1: genel kullanıcı programlarını ifade eder.
  • man2: sistem programlarını ifade eder.
  • man3: kütüphane fonksiyonlarını(C programlama ile ilgili) ifade eder.
  • man4: özel dosyaları ifade eder.
  • man5: dosya biçimlerini ifade eder.
  • man6: ekran koruyucuları ve oyunları ifade eder.
  • man7: diğer kategorilere girmeyen çeşitli komutları ifade eder.
  • man8: sistem yönetimini ve bakımını ifade eder.

whatis Komutu

Hazır yeri gelmişken yukarıda gördüğümüz man sayfası yapılanmasıyla ilgili olarak whatis komutundan da söz edelim. Bu komut sayesinde hangi komutun hangi man sayfasında olduğunu öğrenebiliyoruz. Daha iyi anlamak için örnekler yapalım. Komutun kullanımı whatis komut şeklindedir.

enter image description here

whatis komutuna, chmod komutunun man sayfasındaki açıklamalarının, yukarıdaki açıkladığımız (man1,man2..3..4..5..6..7..8) dosyalarından hangi dosyada olduğunu sorduk. Konsol yanıt olarak hem 1 hemde 2 de bulunduğunu bizlere bildirdi. Siz bunu istediğiniz komut için sorgulayabilirsiniz hatta whatis komutu için bile sorgulayabiliriz.

enter image description here

Bu çıktıların doğruluğu man sayfalarının tutulduğu /usr/share/man dizinine gidilerek kontrol edilebilir. Örneğin ben /usr/share/man/man1 konumuna gittiğimde whatis komutunun yardım sayfalarının burada olduğunu görebiliyorum. Sizler de çıktıları bu şekilde teyit edebilirsiniz.

enter image description here

whatis komutunun kullanımı bu kadar ile sınırlı değil ancak ben geri kalanını burada vermiyorum. Dileyen arkadaşlar man komutu yardımı ile gerekli bilgilere ulaşabilirler.

apropos Komutu

Yardım alma komutlarını noktalamadan önce; Sizlere man sayfasndayken h tuşuna basarsak man sayfasının kullanımı hakkında detaylı bilgiye ulaşabileceğimizi belirtmiştim. O sayfaya bakarsanız man -k şeklinde parametre alan komutun işlevinin, sorguladığımız komutun geçtiği uygulamaları listelemek olduğunu görebilirsiniz. Yani örnek vermek gerekirse komut satırına man -k chmod yazdığımızda çıktısı aşağıdaki şekilde olacaktır.

enter image description here

Gördüğünüz gibi belirtmiş olduğumuz chmod komutunun geçtiği uygulamalar listelenmiş oldu. İşte apropos komutu da tam olarak bu işin aynını yapıyor. Örneğin Terminale apropos chmod komutunu girersek çıktısı aşağıdaki şekilde olacaktır.

enter image description here

Çıktılar karşılaştırıldığında görülüyor ki; man -k komutu ile apropos komutları arasında işlevsel yandan hiç bir fark bulunmuyor.

Komutun kullanım amacını daha iyi anlamak için; örneğin, bir komutun ismini tam olarak hatırlayamıyorsunuz ancak işlevini hatırlıyorsunuz diyelim. İşte bu noktada apropos komutu sayesinde man klavuz sayfaları içinde anahtar kelime araştırması yapılmasıyla yazdığınız kelime ile ilgili tüm komutlara ulaşabiliyorsunuz. Yani aslında biz apropos komutuyla sadece man kılavuz sayfalarında detaylı bir araştırma yapmış oluyoruz.

Örneğin

Bir komut vardı.. silme işlevindeydi.. neydi.. neydi diye düşünüyorken; konsola apropos sil şeklinde yazarsanız, karşınıza man klavuz sayfalarında yer alan, aradığınız “sil“anahtar kelimesiyle uyuşan ifadeler listelenir. Yani siz hatırlamadığınız komutun işlevinin silmek olduğunu bildiğimizden “sil” ifadesini apropos komutu ile sorgulayarak man sayfalarında “sil” ifadesinin geçtiği kısımları listelemiş oluyorsunuz. Yani man sayfalarında yer alan açıklamalar sayesinde, sistemle ilgili hatırlayamadığınız kavramları kolaylıkla sorgulayabilirsiniz.

Bir örnek daha yapalım. Mesela ben komutun yalnızca bir kısmını hatırlıyorum, yani komutun yazılışının tamamını hatırlayamıyorum diyelim. İşte bu gibi bir durumda da yine apropos komutumu ya da man -k komutumu kullanarak, tamamını hatırlayamadığım ilgili komutu bulabilirim.

Yani apropos ve man -k komutları man klavuz sayfaları içerisinde bizim sorguladığımız her türlü ifadeyi arayarak bulup getiriyor. Ayrıca kılavuz(man/manuel) sayfa içeriklerinin büyük çoğunluğunun İngilizce olduğunu da ele alarak, belirtmek isterim ki; sorgulamalarınızı mümkün oldukça İngilizce üzerinden yaparsanız sonuca ulaşmanız sizin için çok daha kolay olacaktır.

Bu konudaki noktayı da man kılavuz sayfaları güncelleme işlemi ile yapalım. “Nedir bu işlem ve neden gerekli ?”..diyecek olursanız; Elbette man sayfalarının sürekli kullanılabilir şekilde verimli olması için, zamanla yeni bilgilerin girişi ve eski bilgilerin düzenlenmesi yani kılavuz sayfalarının güncellenmesi şarttır. Eğer aradığımız yardımı man sayfasında bulamadığınız bir durum olursa man sayfalarını güncelleyerek tekrar sorgulama işlemini yapabilirsiniz. Ara ara güncellemek yeni bilgilere de ulaşmamıza olanak sağlar. Güncelleme için konsola mandb komutunu girmemiz yeterli olacaktır. Komut satırı, güncelleme işleminden sonra yapılan değişiklikleri de son satırda bizlere bildirir.

enter image description here

Yardım alma komutlarını bilmek bir zorunluluk değil ihtiyaç meselesidir. Zaten zamanla bu komutlara ve kullanımlarına alışacaksınız. Yardım sayfalarında yer alan çoğu açıklamanın İngilizce olmasını da dert etmeyin, ne yaparsak yapalım eninde sonunda bu işlerin yolu İngilizce’den geçiyor. Yani artık bu duruma alışmamız gerek. Bu noktada kendimizi biraz zorlamalı ve kesinlikle pes etmemeliyiz. Kendimizi biraz zorlayarak, çaba harcayarak öğrenirsek, öğrenilenlerin kesinlikle daha da kalıcı olacağına emin olabilirsiniz. Sakın pes etmeyin çok iyi gidiyoruz…


Bilgi Almak

Bilgi alma komutları sistemimizde bulunan herhangi bir şey hakkında(programlar, dosyalar, kayıtlar, ayarlar vb..) bilgi almamızı sağlayan komutlara verilen genel isimdir ve bu komutlara gerekli durumlarda çok sık başvururuz. Şimdi bilgi alma komutlarının neler olduğuna ve kullanım şekillerine bakalım.

uname

Tek başına çekirdek adını verse de aldığı parametreler ile farklı bilgiler de sunabilir. Kısaca bilmemiz gereken; bu komut genel olarak sistemde kullanılan çekirdek hakkında bilgiler verir. Hangi parametrenin ne iş yaptığını man uname komutu ile öğrenebileceğinizi biliyorsunuz. Bizde kullanım şekillerini man kılavuz sayfası üzerinden açıklayalım.

enter image description here

Eğer parametresiz kullanıldıysa -s parametresi gibi yalnızca çekirdek ismini gösterir. Yani uname komutu ile uname -s komutu aynıdır. Parametreler ve ifade ettikleri;

 -a, --all
        Bu parametre ile bütün bilgileri aşağıdaki seçenek sırasıyla gösterilir; -p ve -i bilinmiyorsa atlanır.

enter image description here

 -s, --
        çekirdek ismini gösterir.

enter image description here

 -n, --nodename
        ağ düğümü konak ismini diğer bir değişle hostname(host adını) gösterir.

enter image description here

 -r, --kernel-release
        çekirdeğin derleniş sürümünü gösterir.

enter image description here

 -v, --kernel-version
        çekirdeğin sürümünü gösterir.

enter image description here

 -m, --machine
        makine donanım ismini gösterir.

enter image description here

 -p, --processor
        işlemci türünü veya "unknown" gösterir.

enter image description here

 -i, --hardware-platform
        donanım platformunu veya "unknown" gösterir.

enter image description here

 -o, --operating-system
        işletim sistemini gösterir.

enter image description here

 --help 
        Bu yardım iletisini gösterir ve çıkar.

 --version
        Sürüm bilgilerini gösterir ve çkar.

hostname

Bilgisayarımızın adını, diğer bir deyişle bilgisayarımızın ağ üzerindeki adını verir. Eğer isterseniz bu adı değiştirebilirsiniz. Örneğin; komut satırına hostname burak yazarsanız hostname yani bilgisayarınızın adı burak olarak değişmiş olacaktır.

enter image description here

Ancak bu ayar kalıcı değildir. Oturumu kapatıp tekrar açtığınızda değiştirmiş olduğunuz adın tekrar eski haline döndüğünü görebilirsiniz. Kalıcı olmasını ayarlardan kolaylıkla sağlayabiliriz. Sürümden sürüme değişiklik gösterse de sırasıyla; **Ayarlar >Sistem >Ayrıntılar >Genel aygıt adı: ** kutusuna istediğiniz ismi yazabilirsiniz. Eğer dediğim yoldan ulaşamadıysanız ayarları biraz kurcalayarak bulabilirsiniz.

Ayrıca tamamen komut satırından da kalıcı bir hostname değişikliği yapmak mümkün. Bunun için /etc/hostname konumunda yer alan hostname dosyasını açmamız gerek. Dosyamızı açmak için konsola nano -w /etc/hostname komutunu veriyoruz. Komutun ardından açılan dosyada ismimizin yerine istediğimiz ismi yazıyoruz. Ve Ctrl + X tuş kombinasyonu ile dosyamızdaki değişiklikleri kaydederek çıkıyoruz.

enter image description here

Değişikliğin geçerli olması için oturumun kapatılıp tekrar açılması gerek daha sonra hostname yani bilgisayarınızın ismi değişmiş olacaktır.

lsb_release

Bu komut kullandığımız dağıtım hakkında farklı bilgiler sunan parametrelere sahiptir. Detaylı bilgi için man kılavuz sayfasını kontrol edebilirsiniz. Ben örnek olması açısından lsb_release -a komutunun çıktısını veriyorum.

enter image description here

whoami

Sinemayı takip eden arkadaşların aklına ilk ne geldi biliyorum :)

Bu komut kimlik sorgu işlevi görüyor. Komut satırımıza komutumuzu vererek sonucuna bakalım.

enter image description here

Komut çıktısı bize mevcut kullanıcının root kimliği ile çalıştığını göstermiş oldu.

Yine whoami komutuna benzer ancak çok ufak farkların olduğu birkaç komutu daha peş peşe komut satırına girerek çıkan sonuçlar üzerinden anlatıma devam edelim.

enter image description here

Sıra sıra bakalım:

whoami: mevcut kullanıcının hangi kimlikle çalıştığını gösteriyor.

who: sistemde hangi kullanıcının çalıştığını gösteriyor.

w: hangi kullanıcı hangi uygulamayı çalıştırıyor bunun bilgisini gösteriyor.

Bunun dışında bu komutlar da parametre alabiliyorlar. Hangi parametreleri aldıklarını nasıl öğrenebileceğinizi zaten biliyorsunuz.

uptime

uptime komutu sistemimizin ne kadar zamandır açık olduğu bilgisini verir.

enter image description here

date

İsminden de anlaşılacağı gibi bu komut bize sistemin o anki tarih ve saat bilgisini veriyor.

enter image description here

cal

Komutumuz Türkçe olarak takvim anlamına gelen İngilizce “Calendar” ifadesinin kısaltmasıdır. Komutumuz tek başına kullanıldığında bize konsol ekranı üzerinden, bulunduğumuz tarihin takvim bilgisini verir.

enter image description here

Ancak daha önceki veya sonraki tarihlerde yer alan takvim bilgilerine komutumuzu cal ay yıl şeklinde kullanarak ulaşabiliyoruz.

Örnek üzerinden açıklayalım.

Eğer 2002 yılının Ocak ayına gitmek istiyorsam komutumu cal 1 2002 şeklinde kullanırım.

enter image description here

Eğer ileri bir tarihe yani 3003 yılının Haziran ayına gitmek istersem de komutumu cal 6 3003 şeklinde kullanırım.

enter image description here

Gördüğünüz gibi ileri geri herhangi bir tarih hakkında takvim bilgisi almak istesek cal komutunu kullanabiliyoruz.

which

Herhangi bir komutun tam yol bilgisini öğrenmek için kullanılır.

enter image description here

whereis

Bu komutunda özel parametreleri vardır man sayfasından kontrol edin lütfen. Bunun dışında parametresiz hali apropos komutuna benzer şekilde bir çıktı verir. Ancak apropos komutundan farklı olarak ilgili komutun man sayfası konumunun tam dizin adresini belirtir.

enter image description here

Ayrıca diğer parametrelerini de kesinlikle man sayfasından inceleyin.

locate

Bu komut ile aradığımız bir dosyanın nerede olduğunu öğrenebiliriz. Komutun çıktısı bize dosyanın bulunduğu dizin veya dizinleri veriyor. Örneğin daha önce PATH yoluna eklediğim komut.sh dosyasını locate komutu ile aratıyorum. Sonuç aşağıdaki şekilde:

enter image description here

Bu komutun ne kadar kıymetli olduğunu işiniz düştükçe ve kullandıkça anlayacaksınız. Genelde bir dosyayı arama çubuğu yardımı ile aramak sonuç vermez ve bu arama işlemi oldukça hantal çalışır. Örneğin dosya konumunu bilmediniz ancak sistem var olan bir dosyaya ulaşmak istiyorsunuz diyelim.. İşte tam bu noktada locate komutu çıkageliyor ve bize saniyeler içerisinde sonucu veriyor. Komutu denemek amacıyla Kali Linux içerisinde yer alan bir araç olan armitage aracını aratıyorum. Bunun için komut satırına locate armitage yazmalıyım.

enter image description here

Çıktıda da görüldüğü gibi aradığımız ifadeyi içeren tüm dosyaların nerede olduğunu bir çırpıda buluverdik. Sanırım bu komut sayesinde yavaş yavaş da olsa komut satırının gücünü fark etmeye başlıyoruz :)

dmidecode

Eğer daha önce de Linux işletim sistemini deneyimleyip sorunlar ile karşılaştıysanız, forumlardan destek istediğinizde; muhtemelen insanlar sizden bu komutun çıktıları istemiş olabilirler. Bu komutun işlevi sistemin donanım ve BIOS bilgilerini göstermektir. Bu komut sayesinde sistem donanımı ve işleyişi hakkında çok fazla bilgiye ulaşabiliriz. Ayrıca bu komutumuz da parametre alarak çalışmaktadır.

Bu komutun sunduğu bilgiler çok fazla olduğu için, bilgilerin daha net anlaşılması adına; bu bilgilere belirli bir düzene sahip olan DMI(Desktop Management Interface) ile, yani Masaüstü Yönetim Arayüzü tabloları ile ulaşıyoruz. Tabloda yer alan sıralamayı ve hangi bilgileri alabileceğinizi direk olarak görmek isterseniz, komut satırına dmidecode yazın ve sonuçların kategorize şekilde karşınıza geldiğine kendiniz tanık olun.

Bahsi geçen tablo sıralı şekilde ve Numara-Türkçe karşılığı olacak şekilde aşağıdaki gibidir.

Numara Açıklama
0Bios
1Sistem
2Baz kurulu
3Şasi
4İşlemci
5Bellek denetleyicisi
6Bellek modülü
7Önbellek
8Port bağlantısı
9Sistem yuvaları
10On Board Cihazları
11OEM Dizeleri
12Sistem Yapılandırma Seenekleri
13BIOS Dili
14Grup Dernekler
15Sistem Event Log
16Fiziksel Bellek Array
17Bellek Cihazı
1832-bit bellek hatası
19Bellek Dizisi Haritalı Adres
20Bellek Cihazo Haritalı Adres
21Dahili İşaret Aygıtı
22Taşınabilir Pil
23Sistem Sıfırlama
24Dananım Güvenlik
25Sistem Güç Denetimleri
26Gerilim Probu
27Soğutma Cihazı
28Sıcaklık Probu
29Elektrik Akımı Probu
30Uzaktan Erişim
31Boot Bütünlüğü Hizmetleri
32Sistem Önyükleme
3364-bit Bellek Hatası
34Yönetim Cihazı
35Yönetimi Cihaz Bileşeni
36Yönetimi Cihaz Eşik Verileri
37Bellek Kanal
38IPMI Cihazı
39Güç Kaynağı

Başta belirttiğim gibi dmidecode kendi içinde parametre alan bir komut olduğu için istediğimiz spesifik bilgiye doğrudan da ulaşmamız mümkün. Detaylı bilgi için man kılavuz sayfasına bakın lütfen. Ancak küçük bir örnek vermem gerekirse bios hakkında bilgi edinmek istediğimizde konsola dmidecode -t bios komutunu girmemiz yeterli.

enter image description here

Burada ayrıca dmidecode -t bios komutu yerine, bios’un sıralamada bulunan numarasını yani dmidecode -t 0 yazarak da aynı işlemi gerçekleştirebilirdik.

enter image description here

fdisk-l

Başlıkta da yer aldığı gibi bu bölümde fdisk komutunun yalnızca l parametresinin işlevini göreceğiz. Bu komutu burada vermemin sebebi sistem hakkında bilgi alırken diskin de sistem dahilinde olmasıdır. Zaten ileride tekrar ele alacağımızdan şimdilik bu kadarı da yeterli olacaktır. Bu komutu diskler üzerinde işlem gerçekleştirirken kullanıyoruz. Eğer komut satırımıza fdisk -l şeklinde komut verirsek karşımıza sistemimizdeki disk bölümleri sıralı ve düzenli şekilde listelenecektir.

enter image description here

df

Bu komut ile disk kullanımı hakkında ayrıntılı bilgiye ulaşabiliyoruz.

enter image description here

Bu komutumuz da parametre alabiliyor, yani dileyen arkadaşlar konsolda man df şeklinde komut girerek gerekli bilgilere ulaşabilirler.

du

Bir dizinin, içerdiği tüm dosyalar ile birlikte diskte kapladığı toplam alanı verir. Ayrıca boyutla ilgili düzgün bir çıktı almak istersek h parametresini de kullanabiliriz.

enter image description here

free

Bu komut ile kullanılan bellek miktarını KB cinsinden öğrenebiliriz. Ancak çıktımızın MB cinsinden olmasını istersek -m parametresini free komutumuza ekleyerek kullanmamız yeterli olacaktır.

enter image description here

modinfo

Bu komut sayesinde Linux Kernel(çekirdek) modüllerinin bilgisi alınabilir. Bu modülleri ekran bastırmak isterseniz komut satırına lsmod yazarak modülleri listeleyebilirsiniz.

enter image description here

Örneğin modüller içinden battery modülü hakkında bilgi almak istersek komut satırına modinfo battery şeklinde yazmamız yeterli olacaktır.

enter image description here

stat

Bu komut dosyalar veya dizinler hakkındaki bilgileri almamıza olanak sağlar. Kullanımı stat dizin şeklindedir. Örneğin root dizinine bakalım. Bunun için komut satırımıza stat /root komutunu veriyoruz.

Gördüğünüz gibi root dizini hakkında bilgiler basılmış oldu.

vmstat

Bu komut sayesinde sistemimizin o anlık genel durumunu görebiliriz. Ancak komutu verdikten sonra sistem durumu listelenip sonlanacaktır. Eğer sistemin durumunu bir süre izlemek istersek vmstat gecikme_hızı yenilenme_sayısı şeklinde komut vermeliyiz. Ben her 2 saniyede bir yenilenmesini ve bunu 3 defa yapmasını istiyorum. Bunun için komut satırına vmstat 2 3 komutunu veriyorum.

enter image description here

history

Bu kısıma gelene kadar konsola bir çok komut yazdık. Peki o yazılan komutların daha sonra kullanılmak üzere saklandığını biliyor muydunuz ?

Evet girilen her komut .bash_history dosyasında tutuluyor. Biz bu dosyanın içeriğini yani daha önceki yazdığımız kodları görmek istersek komut satırına history yazmalıyız. Çıktı çok uzun olacağından çıktının tamamını aşağıda vermedim.

enter image description here

Hazır liste uzun demişken eğer bu listenin limitini öğrenmek istersek komut satırına echo $HISTSIZE yazarak bu değeri tutan ortam değişkeninin, ne kadar komutu history dosyasında tutulabileceğini görebiliriz.

enter image description here

Bu çıktı bize komutların tutulduğu dosyada en son 1000 komuta kadar kayıt yapıldığını belirtiyor. Eğer tutulan komutların 1000 ‘den daha fazla olmasını isterseniz .bashrc dosyasında HISTSIZE=1000 yazan değeri istediğiniz doğrultuda düzenleyebilirsiniz.

Komutun kullanımına geçmeden önce bu komutu sadece basit ve kısa komutların tekrar kullanılması olarak değerlendirmeyin. Örneğin sürekli kullandığınız çok uzun ve karmaşık bir komut düşünün. Bu komutun her defasında yazılması eziyet, bir yere kopyalanıp oradan tekrar tekrar kopyala-yapıştır şeklinde kullanılması ise hantallık olacaktır.

Komutun kullanımına gelecek olursak örnek üzerinden açıklayalım. Benim kayıt dosyamın bir kısmı aşağıdaki şekilde, ben burada yer alan 600. komutu yani vmstat komutunu kullanmak istiyorum. Bunun için komut satırına !600 yazmam yeterli olacaktır. Komutun kullanımı !komut_numarası şeklinde. Örnek için çıktıyı inceleyebilirsiniz.

enter image description here

Daha önceden kullandığımız bir komutu aynı şekilde tekrar kullanmak için ise komut satırına !komut şeklinde komut girmeliyiz. Örnek vermek gerekirse daha önceki kısımlarda stat komutu ile root dizini hakkında bilgi edinmiştik. Ve bu bilgiye ulaşmak için stat /root komutunu kullanmıştık. Ben şimdi tekrar aynı komuta ulaşmak için komut satırına !stat yazıyorum ve çıktısı tıpkı stat /root yazdığımda olduğu gibi oluyor. Yani bu sayede komutun geri kalanını uzun uzun yazmak gibi bir dert kalmıyor.

Eğer son kullandığımız komutu tekrar kullanmak istersek komut satırına !! yazmamız yeterli olacaktır.

enter image description here

Bunlar dışında da çok farklı kullanım şekilleri de mevcut. Bu bilgilere man komutu yardımı ile nasıl ulaşacağınızı zaten biliyorsunuz.

Ayrıca son yazılan komutlara ulaşmak için klavyede yer alan yön tuşlarından (yukarı) ve (aşağı) tuşlarını kullanarak önceki ve sonraki komutlarınıza ulaşabilirsiniz. Genellikle yön tuşlarını kullanmak bize anlık işlemlerimizde hız katmaktadır. Sizler de bu pratiklikleri mutlaka yeri geldikçe sıklıkla kullanacaksınız.

enter image description here


Linux Dosya Sistemi Hiyerarşisi

Linux’un Windows’dan farklı olan dosya hiyerarşi sistemini kavramak ve ileride ele alacağımız dosya-dizin işlemleri konularında zorluk çekmemek adına bu kısımda “Linux dosya sistemi hiyerarşisi” konusunu ele alacağız.

Nedir bu hiyerarşi ve neden gerekli?

Hiyerarşi kelimesinin sözlükteki genel anlamı; “Yunanca yetki, rütbe veya aşama sırası anlamında kullanılan kelime.” eklindedir.

Linux sistemlerinde de aynı şekilde sınıflandırma yapılarak dosyaların sıraya koyulmasına, bunun sonucunda tıpkı bir ağaç misali oluşan dosya sistemlerine genel olarak “Linux dosya sistemi hiyerarşisi” deniyor.

Genellikle bütün dağıtımlarda aynı hiyerarşik düzen vardır.(Genellikle diyorum çünkü küçük farkların dışında tüm dağıtımlar aynı hiyerarşik yapıya sahiptir. Zaten eğer her dağıtımın hiyerarşik dosya sistemi tamamen farklı olsaydı o zaman geliştiriciler için ayrı bir uğraş ve içinden çıkılmaz bir karmaşa olurdu. O yüzden buraya çok takılmayın lütfen, istisnalar kaideyi bozmaz diyerek devam ediyoruz. :) )

Linux “Tekil Hiyerarşik Klasör Yapısı”’nı benimsemiştir. Yani bu da şu demek oluyor; her şey / (slash) simgesiyle ifade edilen root klasöründen başlar, aşağıya doğru iner. Merak edenler için de söyleyelim “Root” kelimesinin karşılığı da Türkçe olarak “kök” anlamına geliyor. Bu sayede “root” kelimesinin de nereden geldiği ve neden kullanıldığı da az çok açıklığa kavuşuyor sanırım.

enter image description here

Linux, / (root) klasöründen başlayarak, boot işlemindeki önem sırasına göre klasörleri ilgili konumlara yerleştirir. Bu yerleştirme işleminde, yani klasörler arası geçişlerde klasörler arasını ayırmak için /(slash) işareti kullanılır. Herhangi bir dizin ya da dosyanın sistemdeki adresi önce kök dizinden başlar sonra o dosya ya da dizine ulaşmak için geçilmesi gereken dizinler arasına yine / yazılarak elde edilir. Örneğin /home/burak yolu, kök dizininde(/), home isimli dizin içindeki burak dizininin konumunu belirtir. Bu ifadede en baştaki / işareti kök dizini belirtmektedir.

Ayrıca belirtmekte fayda var, Linux küçük büyük harf duyarlılığına sahiptir. Yani Linux’ta DOSYA_ADI, Dosya_Adı, dosya_adı, DoSyA_aDı.. vb. gibi isimlendirilmiş dosyaların hepsi ayrı/farklı bir dosya olarak tanınır. Windows’ta ise aynı isimli dosyalar, küçük büyük harf ayrımı gözetilmeksizin aynı olarak tanınır. Hemen bu durumu teyit etmek için Windows ve Linux sistemlerinde dosya oluşturma işlemi gerçekleştirelim.

#Windows Gördüğünüz gibi Windows işletim sisteminde büyük küçük harf duyarlılığı bulunmuyor.

Gelin bu durumu birde Linux sisteminde test edelim.

#Linux Test sonucundan da anlaşılacağı gibi Linux işletim sisteminde küçük büyük harf duyarlılığı bulunuyor. O yüzden işlemlerimizi yaparken özellikle de ileride konsol(terminal/komut penceresi) ekranından işlem yaparken bu küçük büyük harf duyarlılığı son derece önem kazanacak. Bu önemli detayı da öğrendikten sonra gelin anlatıma devam edelim.

Daha iyi anlaşılması adına anlatımları Windows ile karşılaştırma yaparak gerçekleştiriyorum. Ve yine bir karşılaştırma daha; Windows işletim sistemine bir program eklediğimizde programın dosyaları Program Files(Program Dosyaları) dizini içerisine programın kendi adındaki bir klasöre eklenir.(Örneğin C:\Program Files\program_adı şeklinde.) Programın dosyaları tek bir dosya içerisindedir yani.(Anlatımda kast edilen program dosyalarının tek dosya içerisinde bulunma durumuna harici sistem kayıt dosyaları ve benzeri dosyalar dahil değildir.) Ancak Linux’ta bir program eklenme durumunda programın tüm dosyaları programın isminin yer aldığı bir klasöre gitmez.

Örneğin; sistem otomatik olarak program dokümanlarını /usr/share/doc/program_ad/ altına koyarken, eğer varsa info dosyaları da,/usr/share/info dizini içerisine atar. Yani kısacası, programı kurduğunuzda programın dosyaları ilgili konumlara otomatik olarak dağılır. Tek bir klasör içerisinde yer almaz.

Özetle Linux sisteminde her şey bir dosya(root-kök dosyası(/)) içerisinde yer alır. Ve bu dosya sistemi hiyerarşik bir yapıda bulunur. Tüm bu tek kök dosya sistemi ve hiyerarşik yapılanmanın amacı çok kullanıcılı ve dağıtık bir sistemi güvenli ve kolay bir şekilde kurup yönetebilmektir. Buradaki “dağıtık” kavramı ne diyecek olursanız; Örneğin birden çok bilgisayarın olduğu bir ağda bilgisayarlardan birisindeki bir ağ dizinine(neden ağ üzerinden bağlanıyor? neden ağ dizini aracıl ile yapılıyor ? gibi sorularınız varsa buradaki ağ kavramı bilgisayarları birbirine bağlayan bağlantı ağı anlamında. Yani buradaki esas önemli nokta bilgisayarların birbirine bağlanmasıdır.) kök dosyası altındaki dosyalar istenildiği gibi dağıtılarak bölünebilir. Örneğin x_bilgisayarı’na /bin dizini bağlanır, bir diğer bilgisayara /var dizini içerisindeki e-posta sunucusunun dosyalarının olduğu dizin, bir diğerine de /home dizini bağlanabilir.

Bu sayede fiziksel olarak pek çok bilgisayara dağılmış olan bir sunucu tek bir kök dosya sisteminden, sanki tek bir bilgisayarmış gibi yönetilerek kullanılabilir. Bu sayede hem iş yükü dağılımı yapılarak sistem performansı arttırılmış olur hem de yetkilendirme ve yönetim kısıtlamaları dahilinde sistemin ayrı ayrı parçalara dağılımı ile sisteme ekstra güvenlik önlemi katılmış olunur. Biraz daha net anlamak adına aşağıdaki görseli inceleyebilirsiniz.

Siz şimdi “ben sadece kişisel bilgisayarımdan kullanacağım bu dosya sistemi benim için gereksiz.” diyebilirsiniz. Ancak bu dosya sistemi tekil kullanıcılar için de sağladığı güvenlik özellikleri nedeniyle gerekli bir sistemdir.

Daha iyi anlamak için benzer bir duruma masaüstü kullanıcıları için örnek verelim.

Örneğin sistemde “burak” isimli kullanıcı hesabı var diyelim. Burak kullanıcısının sistemi kullanması için gereken sistem dosyalarını çalıştırma yetkisi var yani sistemi normal bir şekilde kullanabiliyor. Ancak burak kullanıcısının dosyaları değiştirme yetkisi yoksa /home/burak dizininden önceki dizinlerde değişiklik(dosyaları silme, üzerine veri yazma vs..) yapamaz. Bu sistem sayesinde bütün kullanıcılar, yetkileri dahilinde işlemlerini güvenli şekilde yerine getirirler. Bu sayede yönetim ve güvenlik sağlama işi kolaylaşır. Bu duruma örnek olması için çok basit bir test yapalım. Root(yetkili ve tüm izinlere sahip kullanıcı) ile burak isimli kullanıcı hesaplarından “Deneme” isimli dosyada değişiklik yapıp, yaptığımız değişikliği kaydetmeye çalışalım.

Gördüğünüz gibi “root” kullanıcı hesabındayken kayıt işlemini tamamlayabildim ancak “burak” kullanıcı hesabında yetki iznim olmadığı için dosyada yaptığım değişikliği kayıt edemedim. Bu da demek oluyor ki kullanıcılar sadece sahip oldukları yetkileri dahilinde işlemler gerçekleştirebiliyor. Bu sayede sistem yönetimi ve güvenliği kolaylıkla sağlanabiliyor.

Artık kısaca Linux dosya sisteminin neden bu şekilde olduğunu ve sağladığı avantajları anladıysak, gelin bu hiyerarşik yapıdaki dosyalara ve işlevlerine daha da yakından bakalım.

Aşağıda verilenler bilgiler kesinlikle ezberlenecek bilgiler değil. Bu bilgileri anlayarak okuyup özümseyin zaten ihtiyaç duyduğunuzda bu bilgilere buradan tekrar bakabileceksiniz. Bu bilgiler de zamanla yeri geldikçe/ihtiyaç duydukça kullanmanız ile kalıcı hale gelecektir.

/bin

İşletim sisteminizi kullanmak için gereken birçok komut /bin klasörü altındadır. cat, mkdir, cp, ls, mv, rm vb. temel komutların hepsi buradadır. Sistem boot ettiğinde, ilk olarak /bin klasörü çalışır hâle getirilir. Sistemde ne kadar ciddi bir sorun olursa olsun /bin klasöründeki komutlar çalışmaya devam eder. Bu sayede sisteminizde bir sorun meydana geldiğinde /bin klasörü altındaki temel komutları kullanarak sistemi onarabiliriz.

/boot

Boot, işletim sisteminin yüklenme evresidir. /boot klasörü, boot işlemi için gerekli olan tüm dosyaları içerir (çekirdek görüntüsü, sistem haritası, önyükleyici yapılandırması gibi). Bilgisayarın başlangıç (boot) aşamasında gerekmeyen ayar ve yapılandırma dosyaları burada bulunmaz; başka klasörlerden gerektiği zamanlarda yüklenir.

/dev

Linux’ta her şey bir dosyadır; donanım aygıtları da öyle. USB girişleri, seri ve paralel portlar, depolama ortamları, CD-ROM’lar vb… Bütün aygıtlar /dev klasörü altında tutulan dosyalardan ibarettir. Örneğin /dev altında bulunan sda1 dosyası, sabit diskinizi temsil eder. Ya da /dev/dsp, ses aygıtınızdır. Bunları programlar vasıtasıyla kullanırız; ancak bu dosyalar üzerinden doğrudan müdahale etmek de mümkündür.

Birkaç aygıt dosyası ve işlevi.

KonumuCihaz Açıklaması
/dev/ttyS0Fare, modem gibi aygıtların bağlandığı seri port (COM 1).
/dev/psauxPS/2 girişi; fare ve klavyeler içindir.
/dev/lp0Paralel port (LPT 1); yazıcı, tarayıcı vs...
/dev/dspBirincil ses aygıtı
/dev/usb USB aygıtları
/dev/sdaSCSI aygıtlar, USB bellekler, harici CD-ROM'lar vs...
/dev/scdSCSI CD-ROM'lar
/dev/js0 Oyun çubuğu (Joystick)

/etc

İşletim sistemini bir vücuda benzetirsek, /etc klasörünü, sinir sisteminin merkezi olarak görebiliriz. Sisteme dair bütün ayarları ve bilgisayara özel birçok yapılandırma bilgisini içerir.

/home

home klasörü kullanıcıların kalesi olarak tabir edilir. home klasörü içerisinde her kullanıcının kendi adında bir alt klasörü bulunur. (örneğin /home/ahmet , /home/ayşe gibi). Kullanıcıların kişisel verileri, kullandığı programlarda yaptığı ayar değişiklikleri, yapılandırmaları burada tutulmaktadır. Ayrıca kullanıcılar /home dizinini elbette belge, müzik, resim vb. dosyaları düzenli, tertipli bir şekilde depolamak amacıyla da kullanabilirler.

/initrd

initrd, “initial ramdisk” kısaltmasıdır. Anlamı, yaklaşık olarak “Başlangıç Bellek Diski” şeklinde ifade edilebilir. Boot aşamasında ilk önce çekirdek (kernel) yüklenir. Bundan sonra bilgisayarınızın belleğinde bir Bellek Diski oluşturulur. Oluşturulan Bellek Disk üzerinde / (root) yansısı açılır ve kök dizin olarak monte edilir. /initrd bu işlemlerin yapılması ve Linux’un yüklenmesi için gereklidir.

/lib

Çekirdek modülleri ve paylaşılan kütüphane dosyaları bu klasörde bulunur. Kütüphane dosyaları, sistemi başlatmak ve /bin ile /sbin içerisindeki komutları çalıştırmak için gereklidir. Paylaşılan kütüphane dosyalarını, Windows’ta DLL ile eş tutabiliriz. Linux’ta kütüphane dosyalarının sonu “.so” ile biter.

/lib64 /lib32

Halen 32 bit ve 64 bit sistemler arasında geçiş yapıyoruz. Bu nedenle, kütüphane dosyalarının derleme süresi boyunca kullanılan kayıt boyutunu netleştiren /lib32 ve /lib64 adlı dizinlerle karşılaşabilirsiniz. Yani bu sayede 64 bitlik bir bilgisayar, eski uygulamalara uyumluluk için bazı 32 bitlik ikili dosyalara ve kütüphanelere sahip olabilir.

/lost+found

İngilizce bir terim olan “Lost and Foundkayıp eşya bürosu demektir. /lost+found klasörü de tam olarak bu işlevi görmektedir. Bazen sisteminizde herhangi bir problem olur; örneğin bilgisayarı resetlerseniz, elektrik gider sonrasında bilgisayarı yeniden başlatırsınız. Bu gibi durumlarda Linux’ta fsck (File System Check) komutu devreye sokulur. Düzeltilemeyen bir sorun varsa, bağlantıları kopmuş kayıp dosyalar ortaya çıkmışsa, bunlar /lost+found altına atılır. Kısaca özetlersek; kötü bir sistem kapanmasından sonra, olması gereken bazı dosyaları bulamıyorsanız, kayıp eşya bürosuna bakmanızda yarar var.

/media

Kaldırılabilir aygıtların (USB bellek, SD kart, CD vb.) ve sistem başlangıcında bağlanmayan sabit disk bölümlerinin bağlanma noktasıdır. Söz konusu depolama ortamları sisteme bağlanmamış iken dizin içeriği boş görünür.

/mnt

İşletim sisteminin kurulu olduğu disk bölümü hariç olmak üzere sistem başlangıcında bağlanan sabit disk bölümleri ve donanım aygıtlarının bağlanma noktasıdır. (İşletim sisteminin kurulu olduğu disk bölümünün içeriği ise doğrudan / (kök dizin) altında bulunur.)

Bağlama(mount) işlemi, bir disk bölümünün sisteme bağlanarak kullanıma hazır hâle gelmesi demektir. Nereye bağladığınız sizin tercihinizdir, değiştirmeniz mümkündür. Yani bir diski, /media veya /mnt klasörüne ya da bir başka yere bağlamanız fark etmeyecektir. /media ve /mnt sadece genel kabul görmüş bağlantı noktalarıdır.

/opt

İşletim sisteminden bağımsız, sistem için zorunlu olmayan 3. parti kullanıcı programları bu dizinde bulunur. Örneğin; Google Earth programını indirip kurmak istediğinizde, varsayılan olarak kurulacağı nokta, /opt/google-earth adresidir.

Elbette üçüncü parti bir programı kurarken bu kurulum konumunu değiştirebilir, size uygun gelen bir başka konuma yükleyebilirsiniz. Ancak daha önce de bahsettiğimiz gibi bazı şeyler genel kabule dayanır.

/proc

Süreçler, sistem belleği, bağlı aygıtlar, donanım yapılandırmalarıyla ilgili bilgileri içeren özel bir “sanal” dosya sistemidir. Bildiğimiz anlamda fiziksel dosyalar bulundurmaz; sistem durumuna dair bilgi içeren sanal dosyaları vardır. Bir bilgi alma merkezi olarak görülebilir, birçok uygulama buradaki bilgilerden yararlanmaktadır. Örneğin cat /proc/swaps yazarak sisteminizdeki takas dosyalarına dair bilgi alabilir ya da cat /proc/cpuinfo komutuyla işlemcinizin özelliklerini görebilirsiniz.

/proc klasörü içerisindeki dosyalar, sadece sistem durumunu görüntülemek için kullanılmaz, gerektiğinde sistemde ayarlama yapmak için de kullanılabilir.

/root

Linux/Unix sistemlerde, işletim sistemine her türlü müdahalede bulunabilme yetkisine sahip, “root” adıyla tanımlanmış, süper yetkili özel bir kullanıcı hesabı vardır. /root dizini, bu özel kullanıcı hesabının ev dizinidir. Daha iyi anlamak adına örneğin; “burak” isimli kullanıcı hesabının ev dizini /home/burak şeklindeyken “root” kullanıcısının ev dizini /root dizini şeklindedir. Root kullanıcısına daha önce de belirttiğimiz şekilde “kök kullanıcı” da denilir.

Kullanıcıların, sistemi root hesabıyla açma ihtiyacı bulunmaması nedeniyle ve ayrıca sistemi root olarak açmanın güvenlik zaafiyetine yol açabilecek olması nedeniyle pek çok Linux dağıtımında root hesabıyla sisteme giriş yapılması, öntanımlı olarak engellemiştir. Ancak istisnaya dahil olan “Kali Linux” dağıtımı penetrasyon testleri ve bunun gibi siber güvenlik işlemleri için oluşturulduğundan kullanıcılar için kolaylık olması için tam yetkili olarak çalışır.

/run

Son önyüklemeden bu yana çalışan sistemle ilgili bilgileri tutar. Tutulan bilgilere örnek vermek gerekirse şu anda oturum açmış kullanıcılar, sisteme bağlanan aygıtlar, ağ ile bağlantı(network) değişimleri ve bunun gibi bilgileri tutar.

/sbin

Linux’ta normal kullanıcının kullanabileceği komutlarla, kök kullanıcının (root) kullanabileceği komutlar ayrılmıştır. root tarafından kullanılacak bakım ve yönetim için kullanılan önemli programlar, /sbin altında tutulur. Daha az öneme sahip yönetim komutlarıysa, /usr/sbin klasöründedir. Eğer yerelde, yani kullandığınız makineye özgü kök kullanıcı (root) komutları bulunuyorsa, bunları da /usr/local/sbin altında bulabilirsiniz.

/usr

Unix ilk çıktığında, kullanıcılara ait ev klasörleri, /usr altında tutulurdu. Örneğin; “burak” isimli bir kullanıcının ev klasörü /usr/burak şeklindeydi. Bu yöntem zamanla değişti ve /homeklasörü doğmuş oldu. /usr klasörü hâlâ çok önemli bir yapıdır ve işletim sisteminizde kullandığınız her şeyle ilişkisi bulunur.

Kurduğunuz pek çok program /usr içine kurulur. Her ne kadar Linux’ta kurulan bir programa ait tüm dosyalar usr dizini içine atılmıyor olsa da usr dizini Windows’taki Program Files klasörü ile benzer görev görmektedir. /opt adresi işletim sistemi dışında gelen 3.parti programlar içindir. Fakat işletim sistemi aracılığıyla ya da paket yönetim sistemlerini kullanarak yüklediğiniz her şey /usr altına aktarılır. Aynı zamanda yüklediğiniz programların çalışmak için ihtiyaç duyacağı kütüphane dosyaları, /usr/lib altındadır.

/usr, daha geniş bir tanımla; tüm kullanıcılarca paylaşılan verileri (programlar, komutlar, kütüphaneler, dokümanlar gibi) içeren dizindir. /usr ile ilgili söylenebilecek bir başka nokta da “local” klasördür. Linux, sunucu olarak birçok istemciye hizmet verebilecek bir işletim sistemidir. Bir Linux sunucu (server) kurarsanız, ona bağlanan yüzlerce istemci (client) olabilir. Her istemci bilgisayara, /usr altındaki programların ayrı ayrı yüklenmesi gerekmez; bir başka konumdan bu komutları çalıştırabilirsiniz. Ancak /usr altında bulunan “local” klasörü sadece kullandığınız makineye özeldir. Örneğin /usr/local/bin klasörü içinde bulunan bütün komutlar, direkt olarak kullandığınız makineye yüklenmiştir. /usr/bin komutları ise geneldir ve bir ağ üstündeki bütün makinelerden erişilebilir. Yani neticede “local” ifadesini gördüğünüzde, bunun sadece sizin makinenize özel olduğunu bilin.

/var

Log dosyaları, e-posta ve yazıcı kuyrukları gibi değişken sistem bilgilerini barındırır. Sisteminize dair tutulan log’ları buradan görebilir; güvenlik durumunu buradan kontrol edebilirsiniz.

/tmp

Geçici dosyalar içindir. Birçok program, burayı geçici depolama alanı olarak kullanır. /tmp klasörünün içeriği genellikle KB’lar mertebesinde kalır ve genellikle işletim sistemi yeniden başlarken içindeki dosyalar silinir. Her ne kadar tmp klasörü geçici dosyalar için de olsa bu klasör altında bulunan dosyaları, ne yaptığınızdan emin değilseniz, kesinlikle silmemelisiniz! Aksi taktirde sisteminizde ya da bazı programlarda birçok sorunla karşılaşabilirsiniz.


Hatırlamanıza yardımcı olması için anlatılanları birde kısaca şematik şekilde aşağıdaki görsel ile verdim. Eğer konuyu anlayarak ve özümseyerek okuduysanız bu grafiğe bakarak bir çırpıda hangi dosyanın, genel olarak hangi işlevde olduğunu hatırlayabilirsiniz.

Kaynakça : Çağatay Çebi || ubuntu-tr


Dizinler Hakkında

Linux işletim sisteminde bütün programlar, aygıtlar, dosyalar ve genel olarak sistem, hiyerarşik bir düzen içerisindedir. Yani komut satırını kullanacaksak her şeyi oluşturan bu hiyerarşik düzen içerisinde rahatlıkla gezebiliyor olmamız gerekiyor. İşte bu bölümde, hiyerarşide rahatlıkla gezinme ve görüntüleme için gerekli komutlara tek tek değineceğiz.

pwd

Bu komut sayesinde o an bulunduğumuz dizinin adını öğrenebiliriz. Genellikle sistem yöneticilerinin sık kullandığı bir komuttur.

Örnek vermek gerekirse Linux’ta hiyerarşik bir düzen var dedik. Bu hiyerarşik düzen kök dizinine(root) bağlıdır her kullanıcı buna root da dahil kendi ev dizinine(home) sahiptir. Böylece neden root(kök) isminin kullanıldığını da tekrar anlamış oluyoruz. Konsol çalışmaya varsayılan olarak kendi ev dizininde başlar. Root kullanıcısının ev dizini /root dizinidir. Bunu teyit etmek istersek pwd komutunu kullanabiliriz.

enter image description here

Root kullanıcısının dışında da sistemde başka kullanıcılar olabilir. Bu kullanıcıların ev dizini(home) ise /home/kullanıcı_adı şeklindedir.

Bu durumu test etmek için “kullanici” adında yeni bir kullanıcı oturumu oluşturdum ve oluşturduğum bu oturum içerisinde komut satırına pwd komutunu verdim. Çıktısı aşağıdaki şekilde oldu.

enter image description here

cd (Change Directory)

Bu komut sayesinde dizinler arası geçiş yapabiliyoruz. Zaten daha önceki kısımlarda da bu komutu kullanmak durumunda kalmıştık hatırlarsanız.

Komutumuzu kullanırken gitmek istediğimiz dizinin adresini vermeliyiz. Ben önceki bölümlerde oluşturduğum dizinin en alt klasörüne gitmek istiyorum. Bunun için komut satırına cd Desktop/yeni_dizin/yeni/en_yeni şeklinde bir komut veriyorum.

enter image description here

Artık gördüğünüz gibi gitmek istediğim dizinin içerisindeyim. Eğer bir önceki dizine (bir dizin geriye) dönmek istersek komut satırına cd .. yazmamız yeterli.

enter image description here

Eğer direk olarak ana dizine dönmek istersek de cd komutunu kullanmamız gerekiyor.

enter image description here

Örneğin bir alt dizine geçip orada yer alan başka bir klasöre girmek istiyoruz diyelim. Bunun iin komutumuzu cd ../klasör_adı şeklinde bir kullanabiliriz. Ben örnek olması açısından /etc dizini içerisindeyken bir geri dizine dönüp daha sonra home konumuna gelmek için cd ../home komutunu kullanıyorum.

enter image description here

Ancak dikkat etmeniz gereken nokta komutu yazarken iki noktadan(..) hemen sonra boşluk bırakmadan gitmek istediğimiz dizini belirtiyoruz. Eğer boşluk bırakarak yazarsak aşağıdaki şekilde bir uyarı alırız.

enter image description here

Eğer sürekli iki dizin arasında gidip geliyorsak bir önceki dizine cd - komutu ile dönebiliriz.

enter image description here

Çıktıda da görüldüğü gibi cd - komutu ile iki konum arasında pratik şekilde gidip gelebiliyoruz.

ls

Listeleme ve görüntüleme işini yapan bu komutumuzu anlatmadan önce defalarca kullandık. Bu da gösteriyor ki ls komutu çok yaygın şekilde kullanılan komutlardan. Bu komuta sürekli işimiz düşecek. Bu komutun da pek çok parametresi mevcut ben hepsini olmasa da birkaçını ele alarak anlatıma devam ediyorum.

En temel kullanımı ile başlayacak olursak, ls komutu içinde bulunduğumuz dizinde yer alanları bizlere gösterir. Örneğimize ana dizindeyken ls komutunu vererek başlayalım.

enter image description here

Görüldüğü üzere ls komutumuzu kullanmamız ardından bulunduğumuz ana konumda yer alan tüm dosyalar konsola basılmış oldu.

ls-l

Eğer çıktımız ayrıntıl olsun istiyorsak komut satırına komutu parametresi ile beraber ls -l şeklinde yazmamız gerekiyor.

enter image description here

Çıktımızda dosya izinleri, dosya boyutu, oluşturulma tarihi gibi bilgiler sıralanmış oldu. Tabii ki ls komutu kullanımı bununla sınırlı değil, parametreler ile devam edelim.

ls-a

Bizim yukarıdaki çıktımızda gizli dosyalar bulunmuyor. Eğer istersek gizli dosyaları da aynı şekilde listeleyebiliriz. Bunun için ls komutunun a parametresini kullanıyoruz. Çıktımızın düzenli ve listeli olması adına a parametresinin yanına bir de l parametresi kullanmak istiyorum. Bunun için komut satırına ls -la şeklinde veya ls -al şeklinde komutu girmemiz gerekiyor. Ayrıca bu komutu ls -a -l şeklinde ayrı ayr olarak da girebiliriz. Sonuçta bu komutun parametresi hem birleşik hem de ayrı ayrı şekilde yazılabilir. Kullanım tercihi size kalmış.

enter image description here enter image description here enter image description here

ls -A

. ve .. dizinleri hariç gizli dosyalar da dahil bütün dosyaları görmek istersek ls komutumuzu ls -A şeklinde kullanabiliriz. Ayrıca çıktıları düzgün şekilde listelemek adına l parametresi de dahil edebileceğimizi biliyorsunuz.

enter image description here

ls -h

Listelenen dizinlerin boyutunu okunaklı(human readable) şekilde verir. Okunaklıdan kasıt dosya boyutunu KB, MB, GB türünden büyüklük olarak vermesidir. Karşılaştırmanız açısından bir normal şekilde birde daha okunaklı şekilde olanın çıktılarını aşağıda veriyorum. (Ayrıca komutumuza -l parametresini eklemiş olmamızın sebebi dizin ayrıntılarını dolayısıyla da dosya boyutunu görebilmektir.)

enter image description here

ls -i

Düğüm numarasını verir. Düğüm(inode) numarası nedir diyecek olursanız bu konuya ileride değineceğiz şimdilik bu parametrenin bu görevi yerine getirdiğini bilsek yeter.

enter image description here

ls -S

Dosya büyüklüğüne göre sıralar. Dosyalar büyüklüklerine göre sıralanacağından komutun daha net anlaşılması için içerisinde farklı boyutlara sahip dosyaları barındıran /root/run dizini altında işlem yaptım.

enter image description here

ls -t

Dosyanın değiştirilme tarihine göre sıralar.

enter image description here

ls -r

Konsola basılan çıktıyı ters çevirerek basar. Karşılaştırmanız açısından normal liste sırası ve -r parametreli ters liste sırasını aşağıda veriyorum.

enter image description here

Örneğin ls -tl komutu ile dosyaları oluşturulma tarihlerine göre en yeniden eskiye doğru sıraladık. Bu sıralamayı en eskiden yeniye doğru yapmak istersek komutumuza r parametresi ekleyerek kullanmamız gerekir.

Bir başka örnek ls -Sl komutu ile dosya ve dizinleri büyükten küçüğe sıralarken eğer komutumuza birde r parametresi eklersek bu sefer komutumuzun çıktısı ters şekilde yani küçükten büyüğe doğru sıralanmış olacak.

Yukarıda bahsi geçen ls komutu, açıkladığım parametreleri dışında da oldukça fazla parametreye sahip. Bunları öğrenmek için man kılavuz sayfasını inceleyin lütfen.

Dizin Oluşturma Ve Silme

Dizin oluşturmak için mkdir , silmek için ise ileride tekrar dosya sistemlerinde değineceğimiz rm komutu kullanılıyor.

mkdir

Klasör oluşturmamıza olanak sağlayan komuttur. En temel kullanımı mkdir klasör_adı şeklindedir. Örneğin bulunduğumuz konuma dosyalar adında bir dizin oluşturalım. Bunun için komut satırına mkdir dosyalar yazmamız yeterli. Ayrıca klasörümüzün oluşup oluşmadığını da ls komutu ile teyit ediyoruz.

enter image description here

Eğer çoklu şekilde klasör oluşturmak istersek klasör isimlerini peş peşe yazarak bu işlemi gerçekleştirebiliriz. Komutun kullanımı mkdir dizin1 dizin2 dizin3 şeklindedir.

enter image description here

Ayrıca klasör oluştururken izin ayarlarını da dilediğimiz şekilde ayarlayabiliriz. Bu imkanı bize -m parametresi sağlıyor. Kullanımı mkdir -m izin_kodu klasör_adı şeklindedir.

enter image description here

Burada yer alan izin kavramı hakkında endişelenmeyin ileride “Erişim Yetkileri” kısmında ele alacağız. Kafası karışan arkadaşlar isterse şimdilik bu kısmı geçebilir yada “Erişim Yetkileri ” konusuna göz atarak devam edebilir.

rm

Komutumuzu ileride dosya işlemleri bölümünde tekrardan ele alacağız. Ancak şimdi rm yani silme komutunun dizinler üzerinde kullanımı öğrenmeliyiz.

Dizin dediğimiz şey iç içe sıralanmış klasör ve dosyalardan oluşan bir yol. Yani bu yolu silmek istediğimizde içerisindeki her şeyi de silmeliyiz. Bu yüzden komutumuzu -r parametresi ile birlikte kullanarak dizinin içerisindeki dosyalar da dahil her şeyi silmesini söylemiş oluruz. Yani komutun dizin silme işlemi için kullanım rm -r silinecek_dizin şeklindedir.

enter image description here

Ve dizin, içerisinde bulunanlar ile birlikte silinmiş oldu. Eğer komutumuzu parametresiz olarak yani -r olmadan rm secure şeklinde verseydik, komut satırı bu işlemi dizinin içerisinde klasör ve dosya bulunması nedeniyle gerçekleştiremezdi.(Klasör içerisinde hiçbir şey bulunmasa dahi aynı uyarıyı verecektir.) Bu durumu denemek için daha önceden oluşturmuş olduğumuz dosyalar isimli klasörümüzü -r parametresi olmadan silmeye çalışalım.

enter image description here

Konsol bize " ‘dosyalar’ silinemedi: Bu bir dizin " şeklinde uyarı verdi.

Eğer silmeden(işlem yapılmadan) önce bize sorulsun yani bizi uyarsın istiyorsak komuta -i parametresi de ekleyebiliriz.

enter image description here

Gördüğünüz gibi konsol işlem yapmadan önce her işi bize sordu ve “y” yanıtını aldığı için silme işlemine devam etti. Bu sayede dizinleri kontrollü şekilde silmiş olduk.(Kullandığınız sistemin diline göre onaylama yanıtı değişmektedir. Örneğin kullandığınız dil Türkçe ise onay vermek için kullanılan yanıt “e"{burdaki “e” den kasıt “evet” onayının kısaltması olan “e” karakteridir.} olacaktır.)

Ayrıca dizin silme komutunurm -ri dizin1 dizin2 dizin3 şeklinde kullanarak toplu şekilde silme işlemi de gerçekleştirebilirsiniz.

enter image description here


Dosya İşlemleri

Konumuz itibari ile dosyalarla epeyce haşır neşir olacağız. Yapacağımız işlemleri kısaca tanımlamak gerekirse; dosya kopyalama, taşıma, değiştirme, görüntüleme, düzenleme gibi işlemelerle dosyalar üzerinde hakimiyet kuracağız.

touch

touch komutu bize kolaylıkla metin dosyası oluşturma imkanı tanıyor. İşte bu yüzden dosya işlemleri konumuza touch komutu ile başlamak gayet doğru bir karar olacaktır.

Kendimize touch komutunu kullanarak boş bir dosya oluşturmak için komut satırına touch dosya_ismi şeklinde yazmamız gerekiyor. Burada fark ettiyseniz herhangi bir uzantı girmeme gerek kalmadı. Çünkü Linux sisteminde uzantı belirtme zorunluluğu bulunmuyor. Bu durumu gözlemlemek için konsola touch yeni komutunu vererek “yeni” adından bir dosya oluşturalım.

enter image description here

Görüldüğü üzere dosyamız bulunduğumuz ana dizinde oluşmuş oldu. Bunu teyit etmek için de çıktıda görüldüğü gibi daha önce öğrenmiş olduğumuz listeleme görevinde olan ls komutunu kullandık.

Peki bir tane değil de birden fazla dosya oluşturmak istersek ? İşte bunun için de komutumuzu touch yeni1 yeni2 yeni3 şeklinde yazmamız yeterli.

enter image description here

Çıktıda görüldüğü gibi aynı andan 3 dosya oluşturmayı başardık.

Aslında touch komutunun çok farklı kullanım yöntemleri de mevcut ancak ben son olarak dosyaların tarih etiketlerini nasıl değiştirebiliriz bunu göstermek istiyorum.

Dosyamızın tarih etiketini düzenlemek için touch komutunun t parametresini kullanacağız. Kullanımı ise touch -t YYYYAAGGSSDD.SS dosya_adı şeklindedir. Öncelikle dosyamızın mevcut tarih etiketine bakalım. enter image description here

Şimdi dosyamızın tarih etiketini daha önceki bir tarihe çevirelim. Ben burada örnek olması açısından tarih olarak 2015.01.01 ve saat 22:15:32 zamanlamasını kullanıyorum. Nasıl kullanıldığını daha net anlamak için örneği inceleyebilirsiniz.

enter image description here

Gördüğünüz gibi dosyamın tarih etiketi değişmiş oldu. Bu değişme işlemini ileri veya geri tüm tarihler için kullanabilirsiniz.

cat

cat komutu temelde dosya içeriğini terminal ekranından okumamıza olanak sağlayan komuttur. Ancak bu komut bizlere temel işlevinin dışında da dosyalar ile ilgili pek çok işlem yapma imkanı sağlıyor. Sırasıyla bunların bazılarına göz atacağız. Ama ilk olarak temel işlevi olan terminal üzerinden dosya okuma işlevini görelim.

Bunun için konsola açmak istediğimiz dosyanın konumundayken cat açılacak_dosya şeklinde komut vermemiz gerek. Ben masaüstü konumunda yer alan “test.txt” isimli dosyanın içeriğini okumak üzere konsola cat test.txt komutunu veriyorum.(Dosyayı grafik arayüzü aracılığı ile de açarak durumu kıyaslamanızı istedim.)

enter image description here enter image description here

Şimdi ise tıpkı touch komutunda çoklu dosyalar ile ilgili işlem yaptığımız gibi cat komutu ile de çoklu dosya okuma işlemini gerçekleştirelim. Çoklu dosya okuma işlemi için komut satırına cat dosya1 dosya2 dosya3 şeklinde okumak istediğimiz dosyaların adlarını yazıyoruz.

enter image description here

Dosya içeriğine yazı eklemek istersek cat > dosya_adı şeklinde komut verdiğimizde, komut satırı imleci bir alt satıra geçerek bizden yazmak istediğimiz bilgiyi bekler. Yazma işlemimiz bittikten sonra kaydederek kapatmak için Ctrl + D tuş kombinasyonunu kullanırız. Ayrıca komutta girdiğimiz isimde bir dosya yoksa o isimde bir dosya oluşur ve girilen veriler içerisine işlenir.

enter image description here

Ancak var olan bir dosyanın adıyla bu komutu kullandıysanız ve dosya içerisinde yazı bulunuyorsa bu işlemin ardından dosyada bulunan eski veriler silinerek yalnızca girilen yeni veriler dosyaya işlenip kayıt oluyor.

enter image description here

Bizler eğer önceki veriler silinmesin ve üzerine yeni veri ekleyebilelim istersek, komutumuzu cat » yeni3.txt şeklinde kullanarak; yeni gireceğimiz verileri girdikten sonra Ctrl + D tuş kombinasyonu ile dosyamızı yeni eklenmiş verileriyle birlikte kaydedip kapatabiliriz.

enter image description here

Gördüğünüz gibi yeni eklediğimiz veri dosyamızın içine işlenmiş oldu üstelik eski veriler de yok olmadan.

Ayrıca yeri gelmişken kullanmış olduğumuz > yönlendirme operatörü ile ilgili bir örnek daha yapalım ki kullanım alanının biraz daha farkına varmış olalım. Örneğin ls -ls çıktısının içeriğini “liste” adında bir dosya oluşturarak içerisine aktaralım. Bunun için ls -ls > liste komutunu kullanabiliriz. Şayet yeni dosya oluşturmak istemiyorsak ve gireceğimiz veriler var olan dosyaya yazılsın istiyorsak o zaman > operatörü yerine » operatörünü kullanırsak yeni veriler dosyaya eklenmiş olur.

enter image description here Komutta açıklanacak bir durum yok zaten hepsi bildiğimiz komutlar. Burada asıl önemli olan > operatörünün kullanımıydı. Eğer anladıysak ne âlâ.. devam edelim.

cat komutunun işlevlerine devam ediyoruz; şimdi ise sırada, bir dosyada yer alan verileri başka bir dosyaya kopyalamak var. Bunun için komutumuzu cat veri_alınan_dosya > veri_alan_dosya şeklinde kullanıyoruz.

enter image description here

Komutumuzun kullanım şekilleri elbette bunlar ile sınırlı değil. Belki defalarca söyledim ancak bu komut için de söylemem gerek; daha fazla detay için lütfen man kılavuz sayfasına göz atın.

tac

İsminden de anlamış olacaksınız ki tac komutu önce gördüğümüz cat komutunun tersi şekilde çıktı veriyor. Bu durumu daha iyi anlamak için karşılaştırmalı olarak verilen çıktıyı inceleyiniz.

enter image description here

rev

Hazır terslikten bahsetmişken rev komutundan da söz etmemek olmaz. Bu komut dizeleri sondan başa doğru çevirerek ters şekilde ekrana basıyor. Bu durum en iyi örnek ile açıklanır. Hatta cat komutu ile de karşılaştırırsak sonuç daha net oraya çıkacaktır.

enter image description here

Çıktılarda görüldüğü gibi dosya içeriğinde yer alan ifadeler rev komutu sayesinde ters şekilde ekrana basılmış oldu.

Şimdi ben bu komutu nerede kullanacağım? neden öğrendim?” demeyin. Bu konuya daha önce de değinmiştim, şimdi tekrar söylüyorum; burada öğrendiğimiz her komutu her zaman doğrudan kullanmayabilirsiniz, ancak yeri geldiğinde böyle bir komutun varlığından haberdar olarak gerektiğinde dokümantasyona bakmak suretiyle komutun kullanımına en kısa sürede ulaşabilirsiniz. Yani artık bu komutun varlığından haberdarsınız, eğer hatırlamak için bakmanız gerekirse burada olacak..

echo

Bu komutumuzu daha önce defaatle kullanmak durumunda kalmıştık hatırlarsanız. Kullandıkça da işlevinden bahsetmiştik ancak şimdi komutumuzu ele alarak biraz daha yakından bakmaya başlıyoruz.

Temel işlevi terminal ekranına istenilen bilgileri çıktı olarak göndermektir. Komutumuzu kullanırsak daha net anlaşılacaktır. Örneğin komut satırına “Merhabalar” yazdırmak isteyelim, bunun için komut satırına echo Merhabalar şeklinde komutumuzu girmemiz yeterli.

enter image description here

Merhabalar” çıktımızı almış olduk. echo komutu sadece ekrana basma işlevine sahip değil. Örneğin bir dosya oluşturup içerisine istediğimiz ifadeyi yazabiliriz. Bunun için komut satırına echo “yazılacak_ifade”> dosya_adı şeklinde komutu giriyoruz.

enter image description here

Sırasıyla yaptığım işlemleri açıklayayım.

İlk önce cd Desktop komutu ile masaüstü konumuna geldim.

Daha sonra echo “Deneme Metni” > deneme komutunu vererek masaüstü konumuna deneme isimli bir dosya oluşturarak içerisine “Deneme Metni” ifadesini yazmış oldum.

ls komutu ile de bulunduğum konumdaki dosyaları listeleyerek içerisinde oluşturduğum “deneme” adlı dosyanın bulunup bulunmadığını teyit ettim.

cat deneme ile de catkomutunun en temel kullanım işlevi olan içeriği ekran basma işlevini kullanarak oluşturduğum dosyanın içeriğine baktım.

Sonuç itibari ile her şey sorunsuz ilerledi ve finalde yeni oluşturmuş olduğum deneme isimli dosyanın içerisine “Deneme Metni” ifadesini yazdırmış oldum.

Ancak şöyle bir hatırlatmada bulunayım; eğer var olan bir dosyanın içeriğine yeni içerikler eklemek isterseniz daha önce de kullandığımız şekilde » parametresini kullanın. Aksi halde dosya içeriğindeki her şey silinir ve yalnızca sizin son yazdığınız ifade kalır.

Var olan dosya içeriğine yeni bir ifade eklemek iin komutu echo “Yeni ifade” » dosya_adı şeklinde girmemiz gerek.

enter image description here

Şimdi echo komutunun ls komutu görevi gördüğü bir kullanıma değineceğiz.

Örneğin bulunduğumuz dizinde yer alan dosyaları görmek istersek komut satırına echo * şeklinde yazmamız halinde çıktı bizlere bulunduğumuz konumda yer alan dosyaları verir. Bu komut kullanımını ls komutu ile karşılaştırdığımızda daha net anlaşılacaktır.

enter image description here

* (yıldız işareti) joker karakteridir ve herhangi dosya dizin isimlerinin yerini tutar. Yani echo komutuna * karakteri eklediğimizde mevcut dizinde yer alan tüm dosya dizinler * parametresi ile kapsanacağı için ne var ne yok listeleniyor. Bu duruma örnek olması açısından bulunduğumuz dizinde yer alan dosyalarda örneğin “list” adı ile başlayanları çıktı olarak almak istersek komut satırına echo liste* şeklinde komut vermemiz yeterlidir. (İleride ele alacağımız Joker karakter/wildcard konusundan bu karakterler açıklanmıştır.)

enter image description here

Son olarak echo komutunun kullanım şekillerinden olan, bir komutun çıktılarının echo komutu ile ekrana basılması var. Ancak doğrudan echo komut şeklinde yazılan komutlar istenmeyen bir sonuç çıkaracaktır. Verdiğimiz komutun çıktılarını alma işlemini gerçekleştirebilmek için echo komutunun bu iş için kullanım özelliklerinden olan iki farklı seçenek bulunuyor. Bunlardan biri ters tırnak işaretini diğeri ise $(komut) parametre bütünüdür. Bunları sırayla görelim.

İlk olarak ters tırnak işaretli olan kullanımı ele alalım.

Ters tırnak işaretini oluşturmak için Türkçe klavyede AltGr + , (AltGr ile birlikte virgül tuşuna basmak gerek)tuş kombinasyonunu kullanabiliriz. Komutun kullanımını için ise istediğimiz komutu tırnak içerisinde echo komutunun yanında kullanmak üzere echo 'komut' şeklinde yazıyoruz.

Hemen bu kullanım ile ilgili bir örnek yapalım ve ls komutunun çıktılarını echo komutu yardımı ile basalım.

enter image description here

Ve ikinci yol olan $(komut) parametre bütünü; yine ls komutu için örneklendirilecek olursa, kullanımı echo $(ls) şeklinde komut parantez içine gelecek şekilde olmalıdır.

enter image description here

Sonuç itibari ile ilk echo ls komutunun çıktısı olan “ls” ifadesi bizim almak istediğimiz çıktıyı bizlere vermedi. Yani bu kullanım bizim yapmak istediğimiz iş olan, komutun çıktılarının ekrana bastırılması için doğru bir kullanım değildi. Doğru kullanım şekli ise ikinci ve üçüncü komut olan echo ’ls’, echo $(ls) şeklindedir. Bu komutların çıktısı istediğimiz şekilde, yani ls komutunun çıktısını(bulunduğumuz dizinde yer alan dosyaların bilgisi) ekrana basacak şekilde bizlere verdi. Sözü edilen durumu aşağıdaki çıktıyı inceleyerek bir bütün halinde kavrayabilirsiniz.

enter image description here

more

Şimdiye kadar öyle ya da böyle terminal üzerinden dosya okuma ilemi yapmamıza yardımcı olan komutlar gördük. Bu komutumuz da aynı şekilde metin dosyalarını terminal üzerinden okumamıza olanak sağlayan bir komuttur.

Örneğin daha önce de içeriğini okuyup değişiklik yapmış olduğumuz dosya olan profile dosyasının içeriğini more komutu yardımı ile okuyalım.

Bunun için /etc/profile konumunda bulunan dosyamı more komutu ile açmak üzere konsola more /etc/profile şeklinde konsola yazarak profile dosya içeriğini okumaya teşebbüs ediyorum. Komutumuzun ardından terminal ekranında karşımıza profile dosyasının içeriği aşağıdaki gibi geldi.

enter image description here

Çıktıda görüldüğü gibi dosyanın içeriği ancak terminal ekranına sığacak şekilde görüntüleniyor. Hatta alt kısımda –More–(77%) eklinde yazan yazı bizlere içeriğin devamı olduğunu belirtiyor. Eğer devamını okumak istersek enter tuşuna basarak adım adım alt satırlara bakabiliriz. Ayrıca space tuşu ile de sayfa sayfa atlayarak içeriğe göz atabiliriz. Eğer atladığınız sayfadan bir önceki sayfaya geri dönmek istersek b(back/geri) tuşunu, şayet dosya içeriğini görüntüleyen bu ekranı kapatmak istersek ise q(quit/çıkış) tuşunu kullanmamız yeterli.

less

Bu komutumuz da üst kısımda açıkladığımız more komutu ile aynı işlevdedir. Ayrıntısını merak ederseniz man sayfasına göz atmanız yeterli olacaktır.

Ben yine de less komutu ile profile dosyasının içeriğinin okunduğu şeklini aşağıya bırakıyorum. Eğer more komutunda bir problem yaşamadıysanız bu komut kullanımında da kesinlikle yaşamazsınız.

enter image description here

head-tail

Aslında komutların isimleri yani head(kafa/baş) ve tail(kuyruk) bizlere komut hakkında az çok bilgi veriyor. Şöyle ki bir dosyanın sadece baş kısmında ilk 10 satırı görüntülemek istersek head şayet son 10 satırı görüntülemek istersek ise tail komutunu kullanırız. Ayrıca bu komutlar özel parametre alarak istenildiği sayıda baştan veya sondan olmak üzere istenilen satırların görüntülenmesine olanak sağlar. Daha iyi anlamak adına hemen kullanımlarına geçelim.

Dosya içeriğinin ilk 10 satırını görüntülemek için head dosya_adı şeklinde komutumuzu kullanıyoruz.

enter image description here

Şimdi burada 10 satır içerik yok gibi gelebilir ancak dosya içerisindeki boş satırlar da bu 10 satıra dahil olduğundan çıktıyı boş satırlar ile saydığınızda tam olarak 10 satırın görüntülendiğini göreceksiniz.

Dosya içeriğinin son 10 satırını görüntülemek için tail dosya_adı şeklinde komutumuzu kullanıyoruz.

enter image description here Şimdi istediğimiz sayıda baştan veya sondan dizinleri görüntüleyelim. Ben örnek olması açısından baştan 6 sondan 2 satırı görüntülemek üzere komutumu veriyorum. Komutun kullanımı head -n 6 ve tail -n 2 şeklinde.

Baştan 6 satırın çıktıları.

enter image description here

Sondan 2 satırın çıktıları.

enter image description here

nl

Bu komutun işlevi satırları numaralandırarak çıktı vermektir. Hemen görelim.

enter image description here

Çıktıda da görüldüğü üzere dosya içeriğinde yer alan ifadeler satır satır numaralandırılarak ekrana basılmış oldu.

Ayrıca eğer listelenen içerik uzunsa bir önceki öğrendiğimiz head-tail komutları yardımı ile bu alanı düzenli şekilde sınırlandırabiliriz.

sort

Dosya çıktılarının alfabetik olarak düzenlenmesini sağlar. Örnek üzerinden devam edelim. Ben isimler.txt adında bir dosya oluşturdum ve içerisine karışık olarak isimler ekledim. Ve bu isimleri alfabetik sıraya dizmek için sort isimler.txt komutunu kullandım.

enter image description here

Eğer ters alfabetik şekilde yani z den a ya doğru sıralamak istersek -r parametresi kullanılır.

enter image description here

paste

Örneğin iki dosyanın içeriğini aynı anda yan yana olacak şekilde komut satırında listelemek istersek, bu işi yapmamızı paste komutu sağlıyor. Kullanımı paste dosya1 dosya2 şeklindedir.

Ben yaşlar.txt ve isimler.txt adlı dosyaları aynı anda yana yana görüntülemek adına komut satırına paste isimler.txt yaşlar.txt komutunu verdim.

enter image description here

tee

Yazmak istediğimiz ifadeleri hem komut satırına yansıtıp hem de bu ifadelerin bir dosya içerisine kayıt olmasını isterseniz kullanacağınız komut tee komutu olacaktır.

Örnek üzerinden devam edelim.

tee metin komutu ile “metin” isminde bir dosya açıyorum ve içerisine birtakım ifadeler ekliyorum daha sonra ekleme işlemim bittiğinde dosyayı kaydederek kapatmak üzere Ctrl + D tuş kombinasyonunu uyguluyorum. En son oluşturmuş olduğum dosya içeriğine bakmak üzere cat komutunu kullanıyorum.

enter image description here

Çıktıda da görüldüğü üzere terminal ekranında yazdığımız her bir satır tekrar ederek konsola basıldı ve sonuçta oluşturmuş olduğumuz “metin” isimli dosyanın içeriği de yazmış olduğumuz ifadeler ile dolmuş oldu.

cmp

Bu komut sayesinde dosyalar arasından karşılaştırma yapmamız mümkün.

Örneğin ben isimler.txt dosyasını kopyaladım ve 5. satırındaki ismi değiştirdim. Ve bu iki dosyayı cmp komutu ile kıyasladım.

enter image description here

İki dosyanın da içeriğini cat komutu ile yazdırdık görüldüğü üzere iki dosya arasındaki fark, bir dosyada mehmet ismi yerine enes isminin yer almasıdır. cmp komutunun çıktısında da bu durum farklı olan satır ve bayt bilgisi verilerek ifade edeliyor.

grep

Bu komut en çok kullanılan terminal komutları içerisinde bulunuyor. Bu komutumuzu bizler de oldukça sık kullanıyor olacağız. Dosya ya da komut çıktısında bir ifade aramak için yani bir nevi filtreleme işlemi için grep komutunu kullanabiliriz. Komutun kullanım şekillerini örnekler ile açıklamaya devam edelim.

Eğer bir dosya içerisindeki herhangi bir kelimeyi sorgulamak istersek komutumuzu grep "aranacak_ifade" dosya_adı şeklinde komut satırına giriyoruz. Ben basit bir örnek olması açısından isimler.txt dosyası içerisinde “hasan” ismi var m diye kontrol etmek üzere konsola grep "hasan" isimler.txt komutunu veriyorum.

enter image description here

Arama işleminde, Linux sistemi gereği büyük küçük harf duyarlılığına sahip olduğundan(Hatırlarsanız daha önce bu durumu test etmiştik.) “hasan” şeklinde arama yaptığımızda diğer büyük küçük haldeki anahtar kelimeler çıktıda basılmayacaktır. Eğer bu küçük büyük harf duyarlılığı dışında arama yapmak istersek -i parametresini kullanabiliriz. Bu durumu gözlemlemek için büyük küçük harflerden oluşan kelimelerin olduğu bir dosya üzerinde grep komutunu kullanalım.

enter image description here

Eğer arama işlemini tek dosya yerine bulunduğumuz dizin içerisindeki tüm dosyaları kapsayacak şekilde gerçekleştirmek istersek wildcard yani genel kapsama işlevinde olan joker * karakteri yardımıyla bu işlemi gerçekleştirebiliriz.

Hemen örneklere geçelim. hasan ismini masaüstü konumundayken aratıyorum. Bunun için grep "hasan" * komutunu konsola verdim.

enter image description here

Gördüğünüz gibi çıktı bize içerisinde “hasan” ifadesi geçen tüm dosyaları verdi.

Çıktıda aradığımız ifadenin hangi dosyada yer aldığını bulmuş olduk. Ayrıca yukarıdaki komutu grep -r "hasan" * şeklinde de yazabilirdik. Genellikle de bu 2. komut kullanılıyor ancak hangi şekilde kullanacağınızı seçmek size kalmış dilediğiniz kullanabilirsiniz.

enter image description here

İkinci kullanım şeklinde ilkinden farklı olarak “grep: yeni_dizin: Bir dizin” gibi bir çıktı almadık.

Wildcardlardan söz etmişken dosya içerisinde arama işleminin başka bir kullanım şekline de değinelim isterim. Eğer aranacak kelime belirli bir isim ile başlayan dosyalar içerisinde aranacaksa bunu wildcard(joker) yardımıyla özellikle belirtebiliriz.

Kullanımı grep "aranacak_ifade" dosya_adı_başlangıcı* şeklindedir. Ben ilk önce masaüstünde yer alan dosyaları listeledim daha sonra “hasan” ifadesini aramaya koyuldum. İlk önce “metin” ismi ile başlayan belgelerde grep "hasan" metin* komutunu kullanarak aradım.

enter image description here

Ancak çıktıda da görüleceği gibi “hasan” ifadesi “metin” ismi ile başlayan belgeler içerisinde yer almıyormuş ki komut çıktısı bize hiç bir sonuç vermedi.

Bende “hasan” ismini bu sefer “isimler” adıyla başlayan belgeler içerisinde aramak için grep "hasan" isimler* komutunu kullandım. Bunun neticesinde komut satırı bize “hasan” isminin geçtiği belgelerin yerini vermiş oldu.

enter image description here

Buradaki asıl kullanım amacı; komutu, belirli isimlere sahip olan dosyalar içerisinden anahtar kelimeyi aramak üzerine sınırlandırmak.

Bunların dışında arama sonucunun görüntülenmesini de sınırlandırabiliriz; Örnek olması açısından “filozof” isimli dosyadan “jo” ile başlayan isimleri listeliyorum.

enter image description here

Arama sonucu sonrasında kaç satır gözükeceğini -A parametresi sayesinde grep -A görüntülenecek_satır_sayısı "aranacak_ifade" dosya_adı şeklinde komut girerek sağlarız.

enter image description here

Sonucun üzerindeki kaç satırın gözükeceğini -B parametresi sayesinde grep -B görüntülenecek_satır_sayısı "aranacak_ifade" dosya_adı şeklinde komut girerek sağlarız.

enter image description here

Baştan ve sondan kaç satır görüntüleneceğini ise -C parametresi sayesinde grep -C görüntülenecek_satır_sayısı "aranacak_ifade" dosya_adı şeklinde komut girerek sağlarız.

enter image description here

Şimdi ise sıklıkla kullanılan pipe ile grep kullanımına bakalım. Pipe nedir diyecek olursanız kabaca iki işlemi(process) birbirine bağlayan | görünümündeki yardımcı argüman diyebiliriz. Zaten daha önce de iki işlemin birbirine bağlanması gereken durumlarla karşılaşmış ve pipe kullanmıştık.

grep ile kullanımına geçecek olursak örneğin masaüstünde yer alan dosyalardan yalnızca “metin” isimli olanları listelemek isteyelim. Bunun için ilk olarak masüstünde yer alan dosyalarımızı listelemek üzere komut satırına ls daha sonra ise ls komutundan gelecek olan çıktıları pipe yardımı ile grep komutuna bağlayarak listelenen bütün bu dosyalar içerisinden sadece “metin” adı geçenleri filtreleyebilelim..

Bu işlemi gerçekleştirmek için ls | grep "metin" komut bütününü kullanıyorum.

enter image description here

grep komutunun kullanım şekli ve alanı elbette bu kadar ile sınırlı değil ancak sizler daha fazla bilgiye nasıl ulaşacağınızı biliyorsunuz.

find

find komutu da hemen hemen daha önce görmüş olduğumuz locate komutu ile aynı görevi görüyor. Örneğin, isminin birazını bildiğimiz ama dosya dizinini tam olarak hatırlamadığımız dosyaları bulmamıza yardımcı oluyor.

Komut kullanım kalıbı find dosya_yolu -name aranacak_ifade şeklindedir. Tam kullanım şekli için aşağıdaki örneği inceleyebilirsiniz.

enter image description here

Çıktıda etc konumda yer alan içerisinde “local” ifadesi geçen dosyalar komutumuz sayesinde listelenmiş oldu. Ancak aradığımız şeyi bulmak adına değiştirilme tarihi, boyut, dosya-dizin gibi ayrıntıları belirterek çıktıları daha spesifik şekilde sınırlandırabiliriz. Bazı özel arama parametreleri açıklayalım hemen.

  • type f : Yalnızca dosyalar.
  • type d : Yalnızca dizinler.
  • size +500k : 500 KB’tan büyük olan dosyalar.
  • size -500k : 500 KB’tan küçük olan dosyalar.
  • ctime 10 : Tam olarak 10 gün önce değişikliğe uğramış dosya/dizinler.
  • ctime -10 : 10 günden daha kısa bir süre önce değişikliğe uğramış dosya/dizinler.
  • ctime +10 : 10 günden daha uzun bir süre önce değişikliğe uğramış dosya/dizinler.
  • perm 755 : Yalnızca erişim izni 755 olan dosya/dizinler. Örnek olması açısından yukarıdaki arama parametrelerinin ilk ikisinin çıktılarını aşağıya ekliyorum.

enter image description here

xargs

xargs komutunun görevi kabaca kendisinden önce verilen girdi verilerini kendisinden sonrakine tek tek aktarmaktır. Biliyorum böyle denilince hiçbir şey anlaşılmıyor. O yüzden xargs komutunu find komutuyla birlikte kullanarak örnek üzerinden komutumuzu ve kullanım mantığını açıklamış olalım.

Örneğin .jpg uzantılı bir resim dosyasını araştırıp daha sonra bulduğumuz bu dosyayı silelim. Ben duvar kağıdı için daha önce internetten bir .jpg uzantılı bir resim indirmiştim. Bu resim hem indirilenler(downloads) hem de resimler konumunda yer alıyor, söylediğim gibi aslında dosyanın konumunu biliyorum ancak komutun kullanımını denemek üzere dosyanın konumunu bilmiyormuşçasına bir test edelim. Testimizde root dizinindeki .jpg uzantılı dosyaları araştıralım ve silelim.

enter image description here

Çıktıda da görüldüğü gibi .jpg uzantılı resim dosyalarını tek tek bulup silmeden önce, çıktıda belirtilen konumlarda bulunuyorlardı. Ancak arama ve tek tek otomatik olarak silme işlemini gerçekleştirmemiz ile birlikte dosyalar silindi. Silinme durumunu da tekrar arama işlevindeki find komutunu vererek teyit etmiş olduk.

Komutumuzun işleyişi tam olarak şöyle oldu;

find /root -name *.jpg komutu ile root dizini altındaki tüm .jpg uzantılı dosyaları listeledik.

Bu listelenen dosya konum ve varlık bilgilerini xargs komutuna pipe( | ) argümanı sayesinde aktardık.

xargs komutu ise eline geçen bu bilgiler sayesinde dosyanın konumunu saptayarak tek tek silme işlemini gerçekleştirebildi.

xargs komutu exec isimli başka bir komuta benzer şekilde çalışmaktadır. Merak edip öğrenmek isteyen arkadaşlar ayrıca exec komutuna bakabilirler.

Dosya Kopyalama-Taşıma-Silme İşlemleri

Bu kısımda dosyaları kopyalama taşıma ve silme gibi işlemleri ele alacağız. Zaten kullanacağımız komutlar kısa oldukları için kullanımı ve akılda kalması çok kolay. İlk olarak dosya kopyalama işlemi ile anlatıma başlayalım.

cp

cp komutu kopyalama işlevindedir. Kullanımı cp kaynak hedef şeklindedir. Örnek üzerinden açıklayalım.

enter image description here

Komutumuzu açıklayacak olursak;

Desktop dizinindeyken ls komutu ile bulunduğumuz dizindeki dosyaları listeliyoruz. Ve çıktıda da görüldüğü üzere masaüstünde “filazof” isimli bir belge bulunuyor.

cd yeni_dizin komutuyla yeni_dizin konumuna gidiyoruz.

ls komutu ile buradaki dosyaları listeliyoruz. Bu dizinde ise yalnızca “yeni” isimli bir klasör mevcut.(”filazof” isimli dosyanın bu konumda bulunmadığını teyit etmiş olduk.)

cd .. komutu ile bir önceki dizine dönüyoruz. “filazof” dosyasını yeni_dizin konumuna taşımak üzere cp filazof yeni_dizin şeklinde komutumuzu kullanıyoruz.

Daha sonrasında ise cd yeni_dizin komutu ile yeni_dizin konumuna gidip ls komutu yazarak “filazof” isimli dosyamızın kopyalandığını teyit etmiş oluyoruz.

Eğer bir dosyayı A dizininden B dizinine taşırsak ve B dizini içerisinde A dizininden taşıdığımız belge ile aynı isimde dosya varsa, taşıdığımız dosya mevcut konumda bulunan aynı isimdeki eski dosyanın üzerine yazılacaktır. Bu da B konumunda var olan eski dosyanın önceki içeriğinin yok olması demek. Böyle talihsiz bir durum yaşamamak için cp komutunu kullanmadan önce -i parametresini de eklememizde fayda var. Bu parametre cp komutunun aynı isimli bir dosya ile karşılaşma durumunda bize onay sormasını sağlayacaktır.

Anlatılanları daha iyi anlamak adına hemen bir örnek yapalım. Daha önceden yeni_dizin konumuna taşımış olduğumuz “filazof” dosyasını -i parametresini kullanarak tekrar cp komutu ile taşımaya çalışalım.

enter image description here

Çıktıda da görüldüğü gibi -i parametresini kullanarak yazdığımız kopyalama komutu bize “***cp: ‘Desktop/merhaba’‘ın üzerine yazılsın mı? ***” şeklinde bir uyarıda bulundu ve bizden onay bekledi.

Elbette bu işlemleri çoklu dosya taşıma için de kullanabiliriz.

enter image description here

Hangi komutu neden kullandık zaten bir önceki örneğe benzer olduğu için tekrar açıklamıyorum. Çıktıları inceleyerek çok rahat şekilde anlayabilirsiniz.

Eğer o anda çalıştığımız dizine başka bir konumdan dosya kopyalamak istersek komutumuzu cp kopyalanacak_dosya_konumu . şeklinde kullanabiliriz. Nokta( . ) bizim o anda bulunduğumuz çalışma konumunu ifade ediyor. Örneği incelediğinizde her şey daha net anlaşılacaktır.

Görüldüğü üzere kopyalanacak olan dosyanın konumunu belirttik ancak bulunduğumuz konuma yani kopyalamak istediğimiz konumun direk adresini belirtmemize gerek kalmadı. Bunun yerine bulunduumuz konumu temsil eden .(nokta) kullanmamız dosyanın kopyalanmasını sağladı.

Eğer bulunduğumuz konumdan bir üst konuma kopyalamak istersek komutu cp dosya_adresi .. şeklinde kullanmamız yeterli olacaktır.

enter image description here

Çıktıları karşılaştırarak dosyayı bir önceki dizine kopyalamayı (iki nokta) .. ile kolaylıkla yapabildiğimizi görebilirsiniz. (Eğer “deneme” isimli dosyayı kopyalarken kullandığımız komutta yer alan, dosyanın konumunu belirtme kısmı kafanızı karıştırdıysa belirteyim; çıktıda kopyalanan konumda yer alan ~ işareti ana dizin adresini yani root kullanıcısı için /root konumunu belirtiyor. “deneme” isimli dosya bu konumda olduğu için direk bu şekilde bir kullanımı tercih ettim. Bunun yerine cp /root/deneme .. komutunu da kullanabilirdim.)

mv

Bu komut dosya taşıma ve uzantı değiştirme gibi işlevlere sahiptir. Dosya taşıma işlevi tıpkı cp komutunda olduğu gibidir. Yani komutun kullanımı mv dosya_konumu taşınacak_konum şeklindedir.

enter image description here

rm

Dosya dizin silme işlevinde kullandığımız komuttur. Kullanımı rm silinecek_dosya_dizin şeklindedir.

enter image description here

Dosyalar tekil olarak silinebileceği gibi çoklu silme işlemi de gerçekleştirilebilir. Hatta daha önce gördüğümüz joker karakterleri de kullanırsak isim, uzantı gibi filtrelere göre sınırlandırarak toplu dosya silme işlemi gerçekleştirebiliriz. Örnek olması açısından masaüstünde yer alan 2 adet .py uzantılı dosyayı tek seferde rm *.py komutu ile siliyorum.

enter image description here

Joker karakterlerin kullanım alanları oldukça geniştir. Sizler de ihtiyacınıza göre filtreleme yaparak bu işlemleri istediğiniz doğrultuda gerçekleştirebilirsiniz.(Bu konuyu detaylıca ileride Joker Karakterler kısmında ele alacağız.)

shred

Bu komut sayesinde dosyalarımızı daha güvenli şekilde silebiliriz. shred komutu dosyanın içerisine rastgele bitler yazarak dosyanın okunmaz hale gelmesini sağlıyor. Parametresiz kullanımda dosyaya 3 kez rastgele bit eklerken n parametresini kullanarak bu eklenecek olan rastgele bit sayısını istediğimiz doğrultuda düzenleyebiliyoruz. Eğer yapılan işlemi komut satırından takip etmek istersek v parametresini de kullanabiliriz. Ayrıca u parametresini kullanmamız halinde dosya işlem sonrasında silinir.


Dosya Arşiv İşlemleri

Bu bölümde dosya arşivleme, sıkıştırma ve sıkıştırılmış olan dosya arşivlerini açma gibi işlemleri ele alacağız. Zaten bu kavramlar sizlere yabancı gelmemeli zira daha önce hangi işletim sistemini kullanmış olursanız olun öyle ya da böyle karşınıza çıkmıştır. Genellikle yüksek boyutlu dosyaların sıkıştırılmasında veya veri kaybı olmadan güvenli transfer yapabilmek için ve bunlar gibi pek çok sebep dolayasıyla arşiv dosyaları ile sıklıkla karşılaşıyoruz, karşılaşmaya da devam edeceğiz. Konumuza arşiv dosyalarını nasıl oluşturabileceğimizi öğrenerek başlayalım.

tar

tar komutunun açılımı (Tape ARchive) şeklindedir. Bu komut bir veya birden fazla dosyayı tek bir forma sokarak arşivlenmiş duruma getirir. Örnekler üzerinden anlatıma devam edelim.

Masaüstünde yer alan ismi “metin” ile başlayan her şeyi metinler.tar şeklinde arşivlemek isteyelim. Bunun için komut satırına tar -cf metinler.tar metin* yazmalıyız.

enter image description here

Kullandığımız komut bütününü tek tek izah edelim;

tar(Tape ARchive) arşivleme işlevini yapan program.

-c(create archive) parametresi joker * yardımıyla dosya ismi ile başlayan her şeyi paketleyip dosyalar.tar isimli dosyaya yollar.

Kullandığımız -f parametresi de hangi dosyaya yazılacağını belirtir.

Dosyaları tekrar açmak için tar -xf metinler.tar komutunu kullanabiliriz. Veya açılan dosyaları konsol üzerinden takip etmek için v parametresi kullanarak aynı işlemi gerçekleştirebiliriz.

enter image description here

Eğer arşivi başka bir klasöre çıkarmak istersek komutumuzu tar -xf metinler.tar -C hedef_klasör şeklinde kullanabiliriz.

enter image description here

Görüldüğü gibi arşivin içerisindekiler, öncekilerden farklı olarak direk çalıştığımız dizine değil, belirtmiş olduğumuz hedef klasöre çıkarılmış oldu.

Arşivi çıkarmadan içerisindekileri görmek istersek tar -tf metinler.tar komutunu kullanabiliriz.

enter image description here

Oluşturmuş olduğumuz arşive sonradan ekleme yapmak için -r parametresini kullanabiliriz.

Hemen metinler.tar arşivine aynı dosya konumunda yer alan yeni isimli klasörü eklemeye çalışalım.

enter image description here

Başta ve sondaki arşivin durumunu karşılaştırdığımızda yeni isimli klasörün arşive eklenmiş olduğunu gördük.

tar komutunun kullanım şekilleri elbetteki yukarıdaki anlatılanlar ile sınırlı değil. Ancak biz genel olarak sıklıkla karşılaşılan kullanım şekillerini ele almış olduk. Daha fazla bilgiye nasıl ulaşacağınızı biliyorsunuz.

gzip-bzip2

Biz daha önceki kısımlarda tar komutu ile dosyaları sadece arşivlemiş, ancak sıkıştırma işlemi yapmamıştık. Şimdi ise gerektiğinde dosyaları sıkıştırmayı ve bu dosyaları açmayı göreceğiz.

Sıkıştırma işleminde iki temel araç kullanılıyor. Bunlar gzip ve bzip2 araçları.

Masaüstünde yer alan dosyalardan örnek yapalım hemen. Ben “metin” adıyla başlayan dosyaları gzip aracı ile sıkıştırmak için daha önceden de defalarca kullanmış olduğumuz * joker karakterinin yardımıyla gzip metin* komutunu veriyorum. Daha sonra aynı işlemi “isim” adı ile başlayan belgeler için bu defa bzip2 aracı yardımıyla bzip2 isim* şeklinde sıkıştırarak gerçekleştiriyorum.

enter image description here

Sıkıştırdığımız dosyayı tekrar dışarı çıkarmak istersek komutu -d parametresi ile birlikte kullanmamız gerekiyor.

enter image description here

Artık hem arşivleme hem de sıkıştırma işlemlerini ayrı ayrı gördükten sonra her ikisini de birlikte kullanma vakti geldi.

gzip ile bzip2 arasında tar komutu yardımı ile arşivleme işlemi yaparken ufak bir fark var. Bu fark gzip ile arşivleme yaparken komutun czvf şeklinde parametre almasıyla, bzip2 ile arşivleme işlemi yaparken aldığ parametrenin cjvf olmasıdır. Bunun dışında kullanım şekilleri aynıdır.

Örnekler ile açıklayalım.

Her iki şekilde de “metin” isimli belgeleri bir arşiv içine almaya çalışalım. Sırasıyla bunu ilk olarak gzip ile daha sonra ise bzip2 ile yapalım. Dosya adı verirken kullanılan tar.gz ve tar.bz2 uzantılarına dikkat edin aksi halde işlem hata verecektir.

Gördüğünüz gibi gzip kullanırken parametre olarak czvf verdik ve oluşturduğumuz dosyanın uzantısını da tar.gz şeklinde yaptık. Aynı şekilde bzip2 için ise cjvf parametrelerini kullandık ve dosya adımızın uzantısı tar.bz2 şeklinde oldu. Daha önce de söylediğim gibi bu ayrıntılara dikkat etmezseniz işlem kaçınılmaz olarak başarısız olacaktır.

Sıkıştırmış olduğumuz arşivleri tekrar açmak için ise gzip için xzvf parametresi bzip2 için ise xjvf parametresini kullanacağız.

Arşivler açılmış oldu. Eğer arşivi belirli bir konuma çıkarmak istersek daha önce de öğrenmiş olduğumuz şekilde -C parametresi ile bu işlemi gerçekleştirebiliriz. Eğer -C parametresi kullanmazsak arşiv içindekiler doğrudan belirttiğimiz konuma açılır. -C parametresi hedef konuma arşivin ismi ile bir dosya oluşturur ve o dosya içerisine çıkarma işlemini yapar.

Daha önceden öğrendiğimiz işlemleri de aynı şekilde sıkıştırılmış arşiv dosyalarında da yapabiliyoruz. O yüzden aynı şeyleri burada tekrardan vermemiz anlamsız olur.

İlk başlarda akılda kalması, hatırlanması zor gelebilir ancak sizler de zamanla, kullana kullana bu komutlara alışacaksınız. Unuttuğunuz yerde zaten tekrar açıp bakabilirsiniz.

zcat-zgrep-bzcat-bzgrep

Daha önce dosya içeriklerini terminal üzerinden cat komutu yardımı ile okumayı ve grep komutu ile de arama yapmayı öğrenmiştik. Şimdi ki göreceğimiz komutlar ise, aynı işlemleri sıkıştırılmış dosyalar için yerine getiriyorlar. Zaten isimlerinden de bu işlevde oldukları anlaşılabiliyor.

gzip ile sıkıştırılmış arşiv dosya içeriklerini zcat ile okuruz. Aynı işlemi eğer bzip2 ile sıkıştırılmış dosyalar varsa bzcat şeklinde gerçekleştirebiliriz.

enter image description here

Sıra geldi sıkıştırılmış dosyalar içerisinde arama yapmaya. gzip ile sıkıştırılmış dosyalar için zgrep kullanılırken bzip2 ile sıkıştırılmış dosyalar için bzgrep komutunu kullanıyoruz.

enter image description here

zip-unzip

Son olarak da .zip uzantılı dosyaları nasıl oluşturabileceğimizi ve daha sonra oluşturduğumuz ..zip uzantılı dosyaları nasıl açabileceğimizi görelim.

Anlatıma .zip dosyası oluşturarak başlayalım.

Bunun için komutumuzu konsola zip dosya_adı.zip eklenecek_dosya şeklinde giriyoruz.

enter image description here

Çıktıda yer alan “deflated” ifadesi dosyanın ne kadarının sıkıştırıldığını yüzdelik olarak bize veriyor. Ayrıca sarı alan ile işaretlenmiş kısıma bakarak; sıkıştırmış olduğumuz dosyanın boyutu ile dosyanın sıkıştırılmamış hali olan, orjinal dosyanın boyutu arasında olduka fazla boyut fark bulunduğunu gözlemleyebiliyoruz.

Eğer zip komutu ile sıkıştırdığımız dosyayı açmak istersek .zip dosyalarını açma işlevindeki unzip komutunu unzip dosya_adı.zip şeklinde kullanabiliriz.

enter image description here

Konsolun bize sorduğu soru " bulunduğumuz dizinde aynı dosyadan bir tane daha var ne yapmak istersiniz? " gibi bir sorudur.


Erişim Yetkileri

Linux sistemlerinin yapısı gereği güvenlik açısından, dosya ve dizinlere ait birçok kısıtlama ve yetkilendirme ayarları vardır. Bu yetkilerin hepsine sahip olan tek kullanıcı ise root kullanıcısıdır. Bu yüzden sistemi kullanırken eğer root kullanıcısı isek önümüzde uyarıcı bizi kısıtlayıcı bir mekanizma olmayacağından, kimi durumlarda yapacağımız değişiklikler sistemle ilgili büyük sorunlara yol açabilir. Bu yüzden root kullanıcsıyken yapılan işlemlere dikkat etmek gerekir.(Hatta kimi dağıtımlarda root kullanıcı hesabı varsayılan olarak engellenmiştir, ancak istenildiği takdirde ve gereken ayarlar yapıldığında kullanılabilir duruma getirilir.)

Bu girizgahtan sonra, her kullanıcının kendine verilen yetkiler çerçevesince hareket edebildiğini öğrenmiş olduk. Kullanıcıların dosya veya dizinler ile ilgili yapabileceği üç eylem bulunmaktadır. Bunlar;

okuma(r): Klasör listesini ve dosya içeriğini görüntüleme.

yazma(w): Dosya veya klasör üzerinde değişiklik yapma.

çalıştırma(x): Hedef dosyayı çalıştırma veya klasör içerisine erişme.

Aslında bu eylemler sizlere yabancı gelmemeli. Zira daha önce chmod komutu yardımı ile gerekli dosyanın iznini değiştirmiş ve dosyamızı çalıştırmayı başarmıştık.

Şimdi mevcut dosyalarımızın ne tür izinleri barındırdığına göz atalım. Bunun için komut satırına ayrıntılı liste yazdırmak üzere ls -l komutumuzu veriyoruz.

enter image description here

Şimdi listemizi inceleyerek bulunan izinleri ele alalım.

drwxr-xr-x ve -rw-r–r– şeklinde gördüğümüz kısımlar dosya izinlerini ifade ediyor.

Bazı ifadelerin başında olan d harfi o ifadenin dizin olduğunu belirtiyor.

Geriye kalan kısımları ayrı ayrı açıklayacak olursak - işareti ile ayrılan kısımlar o izine sahip kullanıcı grubunu temsil ediyor. Daha iyi anlamak için d harfi hariç - işaretini ayırdığımız zaman geri kalan harfleri üç adet üçlü grup haline getirelim;

rwxr-xr-x=rwx r-x r-x

rw-r–r–=rw- r– r–

Sırayla; birinci harf kümesi dosya sahibinin izinlerini, ikinci harf kümesi grup izinleri ve son küme de diğer kullanıcıların izinlerini belirtir.

enter image description here

Buna göre yukarıdaki dosyalarda bulunan izinleri açıklayacak olursak;

r : okuma yetkisi

w : yazma yetkisi

x : çalıştırma yetkisi

rwx : dosyanın sahibi olan kullanıcı okuyabilir, yazabilir, çalıştırabilir.

r-x : dosya sahibi kullanıcı grubu ile aynı gruba dahil kullanıcılar okuyabilir, çalıştırabilir fakat yazamaz(değişiklik yapamaz).

r-x : diğer kullanıcılar okuyabilir, çalıştırabilir fakat yazamaz(değişiklik yapamaz).

Yetkilerin Değişimi(chmod)

Erişim yetkisini değiştirme işlemini, ancak en yetkili kişi olan root yapabilir. Bu değişim işlemi; daha öncede de kullandığımız chmod komutu sayesinde gerçekleştirilir.

chmod komutunun parametrelerini tanıyarak örnek verme işlemine geçelim.

u : Dosya-dizinin sahibi

g : Dosya-dizinin sahibi ile aynı grupta bulunan kullanıcılar

o : Diğer kullanıcılar

a : Herkese açık.

= : Yetki eşitleme

+ : Yetki ekleme

- : Yetki çıkarma

Genel parametreleri gördüğümüze göre gelin birkaç örnek yapalım.

Örnek göstermek adına anlatımı, içerisindeki dosyaların hiç birinde yetkinin bulunmadığı bir klasör üzerinden gerçekleştireceğim.

İlk olarak klasörde yer alan dosyaların herhangi bir yetkiye sahip olmadıklarını teyit etmek için ayrıntılı çıktı almak üzere ls -l komutunu kullandık.

enter image description here

Daha sonra klasörde yer alan tüm dosyalara * joker karakteri ile ulaştık ve chmod +w * komutumuzu kullanarak herkese açık olacak şekilde yazma(w) yetkisi verdik.

enter image description here

Aynı grupta bulunan kullanıcılar için, yine konumumuzda bulunan tüm dosyaları * sayesinde kapsayacak şekilde g+rx * komutumuzu verdik.

enter image description here

Gruptaki kullanıcılara(g), okuma-yazma-çalıştırma yetkisi (rwx), kullanıcıya(u) yazma yetkisi(r), diğer kullanıcılara ise yalnızca çalıştırma yetkisi(x) verdik.

enter image description here

Ve en son yine bulunduğumuz konumdaki tüm dosyaların yetkilerini kaldırdık.

enter image description here

Bu kullanımların dışında yetkilendirme işlemleri daha önceden de rastladığımız ve fark etmeden de olsa kullanmış olduğumuz sayısal şekilde de ifade edilebiliyor.

Bu durumu yetkilerin sayısal karşılığın vererek anlatmaya devam edelim.

Yetki kalıplarının sayısal karşılıkları.
# dosyanın sahibi sahibiyle aynı gruptakiler diğer kullanıcılar
r 444
w 222
x 111

Yetkilerin sayısal değerlerini kullanarak bir örnek yapalım.

Örneğin biz sadece dosyanın sahibine bütün yetkileri vermek istiyoruz diyelim. Bunun için ilk başta yetki kalıplarının numara karşılıklarını toplamalıyız. Yani bütün yetkileri vereceğimiz için r=4 + w=2 + x=1=toplam sayı 7 etti. Bizler de sadece dosya sahibine bu yetkiyi vermek istediğimizden normalde vereceğimiz chmod rwx- ----- komutumuzu diğer kullanıcılara yetki vermek istemediğimiz için o alanları 0 bırakarak komutu chmod 700 dosya şeklinde veriyoruz. Böylelikle sadece dosyanın sahibi tüm yetkilere sahip olmuş oluyor.

enter image description here

Daha net anlaşılması adına bir örnek daha yapalım. Şimdi de; dosyanın sahibine tüm yetkileri, ortak gruptakilere yalnızca yazma yetkisini, diğer kullanıcılara da sadece okuma yetkisini verelim.

Dosya sahibi kullanıcıya verilecek tüm yetkiler için r(4)+w(2)+x(1)=7 sayısını kullanacağız.

Dosya sahibi ile ortak gruptaki kullanıcılar için vereceğimiz yazma yetkisi için yazma(w) karakterinin sayısal karşılığı olan 2 sayısını kullanacağız.

Diğer kullanıcılar için vereceğimiz yalnız okuma yetkisi için ise okuma(r) karakterinin sayısal karşılığı olan 4 sayısını kullanacağız.

enter image description here

Çıktıdan da anlaşılacağı üzere sayısal karşılıklar istediğimiz yetkilendirme işlemini gerçekleştirdi.

Son bir ayrıntı daha verelim. Eğer verdiğimiz izinlerin o dizinle beraber alt klasörlerinde de etkili olmasını istersek komutumuzu -R parametresi ile birlikte kullanmalıyız.

Örneğin bulunduğum konumdaki “metin” isimli klasörün erişim yetkilerini listeledim. Sonuç olarak hiçbir yetkinin bulunmadığını belirten ——— şeklinde bir çıktı geldi.

enter image description here

Daha sonra “metin” isimli klasörün içerisine girerek oradaki dosya ve dizinlerin erişim izinlerini sorguladım. Sonuç olarak rwxrwxrwx şeklinde bütün yetkilere sahip dosya ve dizinlerin olduğunu gördüm.

enter image description here

Daha sonra bir üst dizine dönerek ekleyeceğim erişim izinlerinin tüm alt dosyalarda dahil olmak üzere, geçerli olması için komutuma ek olarak -R parametresini kulladım ve komutumu chmod -R 422 metin şeklinde yazdım.

enter image description here

Sonuç olarak bütün dosya ve dizinlerde ve alt klasörlerde dahil olmak üzere tüm dosyaların vermiş olduğum yetki erişim izinleri 422 ifadesine karşılık gelen; dosya sahibi için okuma(r) , dosya sahibi ile aynı gruptaki kullanıcılar için yazma(w) ve diğer kullanıcılar için de yazma(w) yetkisi şeklinde yetkilendirildiğini görmüş oldum.

Eğer örneklere ve açıklamalara rağmen yine de anlamadıysanız ister konuyu tekrar okuyup kendiniz de alıştırmalar yapın isterseniz de bu konuyu şimdilik geçin ihtiyacınız olduğunda burada olduunu bilerek tekrar göz atın. Seçim sizlere kalmış.

chattr

Hepimizin başına mutlaka gelen ve çok can sıkıcı bir durum var. Bu durum yanlışlıkla silinen dosyalar. Her nasıl ve neden olursa olsun eğer önemli gördüğümüz dosyalar varsa bir şekilde silinmeden onları koruma altına almamız mümkün. Bizlere bu koruma imkanını veren komut chattr komutudur. Aslında chattr komutu bir tek silinmeye karşı korumuyor, genel olarak dosyanın değiştirilmesine(silme, değiştirme vs.) engel olmak amacıyla kullanılıyor. Yani bu komutumuz bir nevi ilgili dosyayı dokunulamaz kılıyor. Öyle ki herhangi bir yanlış durumda dosyanın kaybolmasına engel olmak adına root kullanıcısının bile değişiklik yapmasına imkan tanımıyor. Komutun kullanım alanına bir örnek daha vererek daha iyi anlamış olalım. Örneğin sistemde bir konfigürasyon dosyasını düzenlediniz ve sistemi yeniden başlattınız, fakat bir bakıyorsunuz ki düzenlediğiniz(değiştirdiğiniz) ayarlar kaybolmuş ve dosya eski haline dönmüş. İşte bu gibi durumlarda sistemin bile ilgili dosyaya müdahale etmesini engellemek için oldukça kullanışlı olan chattr komutunu kullanabiliyoruz.

Komutun kullanımı chattr +i dosya_adı şeklindedir. Hemen bir örnek yapalım.

enter image description here Bu tür dosyaları listelemek için lsattr komutu kullanılıyor. Bizde dosyaların durumunu daha sonradan karşılaştırabilmek adına ilk olarak konsola lsattr komutunu verdik.

test.txt isimli dosyamızı chattr +i test.txt komutu ile koruma altına aldık.

Daha sonra bunu teyit etmek için lsattr komutunu kullandık.

Komutumuzun çıktısında görüldüğü gibi dosyamızın sol tarafında izinler kısmında -i şeklinde bir ifade var. İşte bu ifade dosyamızın artık düzenlenemeyecek olduğunun işaretidir. Dosyayı silmeye çalışarak bu durumu teyit ettik.

Eğer bu işlemi geri almak ve dosyamızı üzerinde değişiklikler yapılabilir hale getirmek istersek chattr -i test.txt komutumuzu kullanmamız yeterli olacaktır. Örneği aşağıda inceleyebilirsiniz.

enter image description here

Çıktıda da görüldüğü gibi hedef dosyamızın solundaki -i işareti yok olmuş. Dolayısıyla test.txt isimli dosyamızın artık eski halinde dönerek, düzenlenebilir forma girmiş olduğunu gördük. Ve dosyamızı silerek bu durumu teyit ettik.


Kullanıcı İşlemleri

Linux’ta birçok kullanıcı hesabının olabildiğini ve bunlar içinde en yetkilinin root kullanıcısı olduğunu önceki derslerimizde tecrübe etmiştik. Ancak sistemde root kullanıcısı olmadan da root kullanıcısının yetkilerine sahip olmamız mümkün. Bu imkanı bize Linux Grup Yönetimi veriyor.

Grup Yönetimi

Aynı grupta yer alan kullanıcılar bizim tanımlamamızla aynı haklara sahip olabiliyorlar.

Biraz daha ayrıntılı vermek gerekirse Linux ve UNIX sistemlerindeki kullanıcılar bir veya daha fazla gruba aşağıdaki nedenlerle atanır:

  • Dosyaları veya diğer kaynakları Grup yönetimi sayesinde ilgili kullanıcılarla paylaşarak, sistemde erişim sınırlamalarıyla güvenlik sağlaması.
  • Kullanıcı yönetim ve denetiminde kolaylık sağlıyor olması.
  • Grup üyeliği, bu gruba izin verilen dosyalara, dizinlere veya cihazlara özel erişim sağlar. Bu madde baştaki madde ile benzer amaca hizmet ederek tamamen kontrolü elde tutmayı sağlamak için kullanılır.

Yani genel olarak Grup sistemini bir çeşit kontrol mekanizması gibi düşünebilirsiniz.

Bu kısa bilgilendirmeden sonra gelin grup yönetimi ile ilgili işlemlere geçelim.

Bir grup oluşturulduğunda bu grubun bilgisi /etc dizini içerisinde yer alan group isimli dosyada tutuluyor. Yani mevcut grupları görüntülemek istersek /etc dizini içerisinde yer alan group dosyasına bakmamız gerekir. Bunun için less /etc/group , more /etc/group , cat /etc/group komutlarından herhangi birini kullanabiliriz. Çıktıları aşağıdaki şekilde olacaktır.(Çıktıyı uzun olması nedeni ile aşağıdaki çıktının görselini keserek verdim.)

enter image description here

Hemen bu çıktıda yer alan kısımlara bir açıklık getirelim. Bunun için bir grubu bölüm bölüm numaralandırarak açıklayalım. Ben bu durum için örnek bir grup belirtiyorum.

enter image description here

Belirtilen numaralı kısımların açıklamaları:

1. Grup_ismi : Gruba verilen isimdir.

2. Parola : Parola alanını belirtiyor. Genelde parola kullanılmaz ancak kimi durumlarda kullanıldığı oluyor, bizim çıktımızda da x ile belirtilen alan parola kısmının boş olduğunu belirtiyor. Bu parola belirleme işlemi çok sık kullanılmasa da, ayrıcalıklı gruplarda uygulamak için yararlıdır.

3. Grup Kimliği (GID) : Atanan grup kimliğini(grup numarasını) belirtiyor.

4. Grup Listesi : Grubun üyesi olan kullanıcıların kullanıcı adlarının bir listesidir. Kullanıcı adları, virgülle ayrılmış şekilde belirtiliyor.

Bu alanların neleri ifade ettiğini öğrendiğimize göre, gelin hangi kullanıcının hangi gruba dahil olduğunu nasıl öğrenebiliriz onu görelim.

Kullanıcı Gruplarını Sorgulamak

Kullanıcıların ait olduğu grupları görmek istersek komut satırına id kullanıcı_adı şeklinde komut vermemiz yeterli olacaktır. Ben “burak” kullanıcı hesabı için sorgulama yapmak üzere konsola id burak şeklinde komutumu veriyorum.

enter image description here

Gördüğünüz gibi “burak” kullanıcı hesabı için burada; uid(user id /kullanıcı numarası), gid(group id/grup numarası) ve dahil olduğu gruplar listelenmiş oldu.

Burada yeri gelmişken çıktıda da görülen uid(user id/kullanıcı numarası) ve gid(group id/grup numarası) kavramlarına değinelim. Bu numara aralıkları kullanıcı hesabına göre değişiklik gösteriyor. Yani kullanıcı çeşidine göre numaraları üç temel gruba ayırabiliriz. O da şu şekilde ;

  • root kullanıcısı : UID=0, GID=0
  • sistem kullanıcısı : UID=1 - 499, GID=1 - 499
  • normal kullanıcı : UID=500 < X, GID=500 < X (Buradaki X ifadeleri 500’den büyük tüm sayıları temsil etmektedir.)

Ayrıca id komutunun birçok parametresi vardır bazıları birazdan göreceğimiz grup oluşturma kısmındaki parametrelerden oluşuyor. Detaylı bilgi için man sayfasna bakabilirsiniz. Ben yine de örnek olması açısından birkaç parametresini gösteriyorum ve daha sonra grup oluşturma ile konumuza devam ediyoruz.

g : id -g kullanıcı_adı belirtilen kullanıcının grup numarasını(gid) verecektir.

u : id -u kullanıcı_adı belirtilen kullanıcının kullanıcı numarasını(uid) verecektir.

G : ìd -G kullanıcı_adı belirtilen kullanıcının dahil olduğu tüm grupları(groups) verecektir.

enter image description here

Yukarıdaki parametreler haricindekiler için man kılavuz sayfasına bakın lütfen.

Sıra geldi yeni grup oluşturmaya..

Yeni bir grup oluşturmak istersek groupadd yeni_grup_adı şeklinde komutumuzu kullanırız.

Ben örnek olması açısından “yeni” isimli bir grup oluşturmak için komut satırına groupadd yeni şeklinde komutumu veriyorum.

enter image description here

Ve oluşturduğumuz grubu sorgulamak için grup bilgilerinin tutulduğu dosyaya bakmak üzere cat /etc/group | grep grup_adı komutunu ya da tail -n 1 /etc/group kullanabiliriz.

Ayrıca grup oluşturulurken kullanılabilecek bazı parametreler var. Bunlar;

g : Grup id belirleme. İstediğiniz numarayı başka bir gruba ait numara ile aynı olmayacak şekilde verebilirsiniz.

enter image description here

Eğer aynı grup id ile başka bir grup eklemek istersek konsol bize “bu id ye sahip başka bir grubun halihazırda bulunduğu” uyarısını verecektir. Dolayıs ile grup ekleme işlemi başarısız olacaktır.

enter image description here

f : işlemi hatalar olsa bile zorlayarak tamamlar. Genelde bu kullanım sorunlar çıkardığı için pek tavsiye edilmez.

Parametreler bunlar ile sınırlı değil ancak sizler man groupadd ve groupadd --help komutları yardımı ile diğer parametreleri de keşfedebilirsiniz.

Ayrıca oluşturduğunuz grupları silmek isterseniz konsola groupdel grup_adı şeklinde komut yazmanız yeterli olacaktır.

enter image description here

Kullanıcı Yönetimi

Sistemimize yeni bir kullanıcı eklemek için kullanabileceğimiz iki farklı komut var. Bunlar adduser ve useradd komutlarıdır.

adduser

Yeni kullanıcı eklemek için komutumuzu adduser kullancı_adı şeklinde veriyoruz. Böylelikle oluşturduğumuz kullanıcıya ait ev dizini home/kullanıcı_adı şeklinde otomatik olarak oluşmuş oluyor. Ben örnek olaması açısından “hasan” isimli bir kullanıcı hesabı eklemek üzere konsola adduser hasan komutunu veriyorum.

enter image description here

Çıktıları inceleyecek olursak ev dizini otomatik olarak oluşturulmuş ve “hasan” isimli kullanıcı “hasan” grubuna dahil edilmiş. Yeni eklemiş olduğumuz “hasan” isimli kullanıcı hesabını teyit etmek için; Sistemde kullanıcı hesapları ile ilgili bilgilerin tutulduğu etc dizini içerisindeki passwd dosyaya bakalım.

enter image description here

Dosyanın en alt satırına baktığımzda yeni eklemiş olduğumuz “hasan” isimli kullanıcı hesabının eklenmiş olduğunu görüyoruz. Son olarak da home dizinine “hasan” kullanıcı hesabı için dosya oluşturulmuş mu buna bakalım.

enter image description here

Çıktıda görüldüğü gibi home dizininde oluşturmuş olduğum “hasan” isminde kullanıcı dosyası bulunuyor.

useradd

Kullanıcı oluşturmak için bahsettiğimiz 2. komut olan useradd komutu kullanımı; useradd -m kullanıcı_adı şeklindedir. Burada komutumuz ile birlikte kullanmış olduğumuz m parametresi ile, oluşturduğumuz kullanıcıya ait ev dizininin otomatik oluşmasını sağladık. Birde son olarak kullanıcıya ait bir parola belirlemek üzere passwd kullanıcı_adı şeklinde komutumuzu vererek parolamızı oluşturuyoruz.

Parola oluşturma işleminde kullandığımız passwd kullanıcı_adı şeklindeki komut bütün hesaplar için şifre güncelleme işleminde de kullanılıyor. Ve bir bilgi daha; bu parola bilgileri /etc dizini altındaki shadow isimli dosyada şifreli şekilde tutuluyor.

enter image description here

Ben örnek olması açısından “ali” isimli bir kullanıcı hesabı oluşturmak üzere komutumu useradd -m ali şeklinde verdikten sonra “ali” isimli kullanıcı hesabı için şifre belirlemek üzere passwd ali komutunu kullandım.

enter image description here

Görüldüğü gibi “ali” isimli kullanıcı hesabımız başarılı şekilde oluşturulmuş oldu. Şimdi home dizinini ve passwd dosyasına bakarak bu durumu teyit edelim.

enter image description here

Çıktı sonuçlarında bir problem olmadığına göre konumuza, kullanıcı silme işlemi ile devam edebiliriz.

Kullanıcı Silmek

Oluşturulan kullanıcı hesabını ev dizini ile birlikte silmek için deluser --remove-home kullanıcı_adı komutunu kullanmamız yeterli olacaktır.

enter image description here

Kullanıcı silme işlemlerini kontrol etmek adına home dizinini kontrol edelim.

enter image description here

Çıktıda “hasan” ya da “ali” bulunmadığına göre kullanıcı silme işlemimiz başarılı şekilde tamamlanmış oldu.

Gruplara Kullanıcı Ekleme-Çıkarma İşlemi

Yeni grup ve yeni kullanıcı hesabı nasıl oluşturulur bunları gördük. Şimdi sıra geldi gruba yeni kullanıcı ekleme ve gruptan kullanıcı çıkarma işlemlerine.

Gruba Kullanıcı Eklemek Var olan bir gruba yeni bir kullanıcı eklemek için gpasswd komutunun a parametresini kullanarak, komutumuzu gpasswd -a kullanıcı_adı ekleneceği_grup_adı şeklinde kullanmamız yeterlidir.

enter image description here

Gruptan Kullanıcı Çıkarmak

Eğer gruba dahil olan bir kullanıcıyı gruptan çıkarmak istersek de gpasswd komutunun d parametresini kullanarak, komutu gpasswd -d kullanıcı_adı çıkarılacağı_grup_adı şeklinde kullanmamız gerekmektedir.

enter image description here

Aktif-Pasif Hesap Ayarlama

Varolan bir kullanıcı hesabını kilitlemek için usermod -L kullanıcı_adı komutunu kullanırız. Buradaki kilitlemekten kasıt kullanıcının sisteme giriş yapmasını engellemek için parolasının kilitlenmesidir. Parolayı devre dışı bırakmak için, sistem otomatik olarak şifreli parolanın önüne ‘!’ işareti koyar ve kullanıcı hesabına giriş yapamaz.

Bu durumu denemek için öncelikle kullanıcı hesaplarının parolalarının şifreli bir şekilde tutulduğu dosya olan shadow dosyasına bakalım.

enter image description here

burak” isimli kullanıcının parolasını yukarıdaki şekildedir. Daha sonra karşılaştırma yaparken tekrar ele alacağız.

Konsol ekranına usermod -L burak yazarsam “burak” kullanıcısının hesabını kilitlemiş olurum. Bu kilitleme işlemini; kullanıcının hesaba girişte kullandığı parolanın önüne sistem tarafından otomatik olarak getirilen !(ünlem işareti) sayesinde gerçekleşmektedir. Bu durumu teyit etmek için tekrar shadow dosyasına bakalım ve önceki hali ile sonraki halini kıyaslayarak görelim. enter image description here enter image description here enter image description here

Gördüğünüz gibi hesabı kilitleme işleminde; hesaba girişte kullanılan parolanın önüne otomatik olarak gelen ! (ünlem işareti) hesaba girmeyi engelleyerek hesabı kilitlemiş oluyor.

Pasif durumdaki hesabı aktif hale getirmek için ise usermod -U kullanıcı_adı komutu kullanılır. Aynı şekilde hesabın tekrar aktif hale getirilmesi de devre dışı bırakılmış olan kullanıcı parolasının önündeki ‘!’ işaretinin kaldırılmasıyla gerçekleşir.

enter image description here

Eğer anlamadığınız bir nokta varsa bu durumu .gif ile anlattım, dikkatlice takip ederseniz gayet net anlaşılacaktır.

enter image description here

Kimlik Değişimi

Örneğin ben “burak” kullanıcısıyken, yapmak istediğim işlem ancak “root” kullanıcısının yetki alanındaysa ve ben “root” hesabının parolasını biliyorsam, “root” hesabının kimliğine bürünerek o işlemi gerçekleştirebilirim.

Geçiş işlemleri için su komutunu kullanıyoruz. Komutun kullanımı ile ilgili iki farklı durum var, bunlar:

  • su kullanıcı_adı : diğer kullanıcı kimliğine geçiş yapar.
  • su - kullanıcı_adı : diğer kullanıcı kimliğine geçiş yapar ve direk olarak geçiş yapılan kullanıcının kabuğunda çalışmaya başlar.

Bu durum en iyi örnekler ile açıklanabilir. İlk önce “root” kullanıcısıyken “burak” isimli kullanıcı hesabına giriş yapacağım daha sonra “burak” isimli kullanıcıdan “root” hesabına giriş işlemini gerçekleştireceğim. Adımları sırasıyla takip edin lütfen.

Hemen mevcut kullanıcı oturumunu daha önce öğrenmiş olduğumuz whoami komutu ile sorgulayalım.

enter image description here

root” kullanıcısıyken “burak” hesabına geçiş yapmak için su burak komutunu kullanıyoruz. Ve whoami komutu ile geçiş durumunu kontrol ediyoruz.

enter image description here

Geçiş yaptığımız “burak” hesabından “root” hesabına dönmek için exit komutunu kullanmamız yeterli.

enter image description here

Şimdi su - burak komutu kullanarak geçiş yapacağımız kullanıcı kabuğunda çalışalım.

enter image description here

Görsellere dikkatlice bakacak olursanız; su burak komutunu kullanarak geçiş yaptığımızda burak@taylan:/root$ olan konsol ismi su - burak komutunu kullandığımızda direk olarak geçiş yaptığımız hesabın kabuğunda çalışmaya başlayarak burak@taylan:~$ şeklinde oldu. Yani su - burak komutu bize tıpkı o hesap oturumunu açmışız gibi tepki verdi. Aşağıda çıktılara tekrar bakarsanız aradaki farkı daha net anlayabilirsiniz.

enter image description here

Fark etmiş olacaksınız ki başta geçiş yapabilmemiz için geçeceğimiz hesabın parolasını bilmemiz gerektiğini söylemiştim. Ancak “burak” hesabına yaptığımız geçişlerde parola sorulmadı. Bunun sebebi “burak” hesabının normal kullanıcı olmasıdır. Şimdi bu durumu birde “burak” hesabındayken “root” kullanıcısı için iki farklı kullanımda da deneyelim.

enter image description here

enter image description here

Gördüğünüz gibi yönetici hesabına erişmek için bizlerden parola bilgisi istendi. Bu durum da başta açıkladığımız yetkili hesaplara geçişlerde şifre sorma olayını açıklıyor.


Süreçler(process)

Süreç(process) denilen kavram genel olarak; bir program çalıştığında programın belleğe yüklenme işlemine deniyor. Bizler de bu bölümde süreçler hakkında bilgi almak, işlem yapmak ve gerektiğinde müdahalede bulunmak gibi işlemleri yapabilmek adına ilgili komutları öğreneceğiz.

ps

Bu komutumuz çalışan süreçleri görüntülememizi sağlıyor.

Komut tek başına ps şeklinde kullanıldığında mevcut konsol üzerinden çalıştırılmış süreçleri verir.

enter image description here

Genellikle sistemdeki tüm işlemleri görmek için ps -aux komut bütünü kullanıyor. Komut aux parametreleri ile ps -aux şeklinde kullanıldığında sistemde ve terminallerde çalışan tüm süreçleri ve süreç sahiplerini gösteriyor.(Çıktı çok uzun olacağından aradaki çıktıları atlayarak kısa çıktıları aşağıdaki şekilde verdim.)

enter image description here

Ancak gerektiği zaman doğru çıktıları almak adına ps komutunun parametrelerine bakalım.

e : Sistemde çalışan her süreç.(Çıktı çok uzun olacağından aradaki çıktıları atlayarak kısa çıktıları aşağıdaki şekilde verdim.)

enter image description here

u : Kullanıcı adına göre süreç bilgileri verir.

Parametrenin komut ile kullanımı ps -u kullanıcı şeklindedir.

enter image description here

p : Süreç numarasına(PID) göre süreç bilgisi verir.

enter image description here

Eğer aradığımız özel bir süreç varsa daha önce görmüş olduğumuz grep komutu yardımı ile o süreç hakkında doğrudan bilgi alabiliriz. Şöyle ki eğer ben “bash” süreci hakkında bilgi almak istiyorsam konsola ps -aux | grep "bash" yazmam yeterli olacaktır.

enter image description here

Çıktıda görüldüğü gibi yalnızca ulaşmak istediğim “bash” süreci hakkında çıktı almış oldum.

pstree

Süreçleri hiyerarşik bir biçimde görüntülemek istersek pstree komutumuzu da kullanabiliriz. Bu komut Windows işletim sisteminde de tree olarak kullanılabiliyor. Neyden bahsettiğimizi anlamak için hemen konsola pstree komutumuzu verelim.

enter image description here

Komutumuz isminde(pstree) de yer aldığı gibi, süreçleri tıpkı bir ağaç gibi dallanıp budaklanarak hiyerarşik şekilde karşımıza getiriyor.

top

Bu komut da tıpkı ps komutunda olduğu gibi süreçler hakkında bilgi verir ancak bu işlemi ps komutundan farklı olarak 3 saniyede bir yenilenecek şekilde anlık değişimleri verecek şekilde yapar. Temel kullanımı top şeklindedir.

enter image description here

Eğer varsayılan olarak kullanılan 3 saniyede bir güncelleme tekrarında bir değişiklik yapmak istersek, komutumuzu d parametresiyle birlikte yani top -d saniye şeklinde yazarak istediğimiz saniye aralığında süreç bilgilerinin çıktılarının güncellenmesini sağlayabiliriz. Ben örnek olması açısından bu yenileme hızını 1 saniye olarak ayarlamak için komutumu top -d 1 şeklinde yazıyorum. Ve ayrıca bu ekranı kapatmak istesek ise sadece q tuşuna basmamız yeterli. Gif resminde de görüldüğü gibi top -d 1 komutu ile her saniye yenilenen süreçler bilgi tablosu q tuşuna basmamızla sonlanmış oldu.

enter image description here

pgrep

Çalışan süreçlerin belirli kriterlere göre sıralanmasını sağlayan komuttur.

Süreç işlemlerinde çalışan süreç üzerinde değişiklik yapabilmemiz için ilk önce değişiklik yapacağımız süreci bulmamız gerekiyor. İşte pgrep komutu da bizlere lazım olan çalışan süreç numaralarını(pid) veriyor. Süreç numarası sistemde süreçlerin haberleşmesini sağlayan numaradır ve tüm süreçler için benzersiz olacak şekilde atanır. Buraya takılmadan devam edelim.

enter image description here

Örnek vererek komutumuzun kullanımını görmüş olalım.

Örnek göstermek adına armitage aracını çalıştırıyorum. Çalışmakta olan armitage aracının süreci üzerinden örneğimizi yapalım. Çalıştırmış olduğumuz amitage aracının süreç numaralarını(procces id(pid)) sorgulamak üzere pgrep armitage komutumuzu giriyoruz.

enter image description here

Ve çıktı da görüldüğü gibi pgrep armitage komutu sayesinde armitage aracının süreç numaralarını(pid) görmüş olduk.

Şimdi de pgrep komutunun birkaç işlevsel parametresini görelim.

l : Süreçlerin numaraları ile beraber süreç isimlerini de görmek için kullanılır.

enter image description here

lu : Belirtilen kullanıcıdaki, süreçlerin numaraları ile beraber süreç isimlerini de görmek için kullanılır. Burada u parametresi hedef kullanıcı belirtmemizi sağlar l parametresini zaten bir önceki kısımda açıklamıştık.

enter image description here

İleride bu bilgiler bize lazım olacak şimdi süreçleri sonlandırma komutları ile devam edelim.

kill-killall

Komutlarımız isimlerinden de anlaşılabileceği gibi süreçleri sonlandırma(öldürme) işleminde kullanılıyorlar. Kullanım şekilleri;

kill süreç_numarası(pid) : Süreçleri pid(süreç numarası) ile sonlandırmak.

enter image description here

kill -9 süreç_numarası(pid) : Kapanmaya karşı direnen süreçleri pid(süreç numarası) ile sonlandırmak.

enter image description here

killall süreç_ismi : Süreçleri isimleri ile sonlandırmak.

enter image description here

killall -9 süreç_ismi : Kapanmaya karşı direnen süreçleri isimleri ile sonlandırmak.

enter image description here

killall -i süreç_ismi : Süreçleri isimlerini kullanarak ve onay alarak sonlandırmak.

enter image description here

xkill

Bu komutumuz yanıt vermeyen bir programı grafiksel arayüzden kapatmamızı sağlayan ilginç bir komuttur.

Diyelim ki leafpad aracımızı açtık ve her ne sebeple olursa olsun yanıt vermeyi kesti, bu noktada eğer l_eafpad_ aracını anında kapatmak istersek konsola xkill yazıyoruz ve fare imleci çarpı işaretine dönüşüyor. Bu çarpı işareti ile tıkladığımız araç otomatik olarak kapanıyor.

enter image description here

Anlatım havada kalmış olabilir o yüzden xkill komutunun kullanımını kesinlikle sizler de hemen deneyin akılda kalması kolay bir komut zaten.

fg-bg-jobs

Son olarak gayet kullanışlı komutlar olan fg ve bg komutlarına değinerek süreçler konumuzu bitirelim. Konsoldan komut verildiğinde, verdiğimiz komut doğrultusunda gerçekleşen işlem süreci bitmeden, konsoldan tekrar başka bir komut vermemiz mümkün olmuyor. Bu gibi durumlarda eğer yeni bir komut girişi yapmak istersek, süreci arka plana alıp yeni komutumuzu ancak öyle çalıştırabiliriz. İşte bu komutlarımız da konsoldan çalıştırdığımız süreçleri arka plana ve arkaplandaki süreçleri önplana taşıma gibi işleve sahiptirler. Ayrıca jobs komutu da bu süreçlerin durumunu takip etmemizi sağlar. Bu durum örnekler ile daha iyi anlaşılacaktır.

Kullanımın rahat şekilde anlaşılması için adım adım gidelim.

Konsoldan leafpad uygulamasını açalım. Bunun için konsola leafpad yazmamız yeterli.

Yazdıktan sonra ekrana leafpad uygulaması geldi.

enter image description here

Programı çalıştırdığımız konsol şu anda leafpad uygulamasını çalıştırmakla meşgul. Yani bu demek oluyor ki eğer biz bu konsol üzerinden yeni bir komut girmek istersek bu mümkün olmayacak. İşte bu yüzden halihazırda çalışan leafpad uygulamasının çalışmasını durdurup arka plana atmalıyız ki yeni komutlar girdiğimizde konsol leafpad uygulaması ile meşgul olmasın.

Konsolda çalışan leafpad uygulamamızı arka plana atmak yani duraklatmak için Ctrl + Z tuş kombinasyonunu kullanıyoruz. Bu işlemin ardından konsol bize aşağıdaki gibi bir çıktı basarak leafpad uygulamasının durduğunu haber veriyor.

enter image description here

Konsolun bize leafpad programının durduğunu haber verdiğini söylemiştik. Ayırca bu gibi durumlarda sürecin durumunu sorgulama yapmak için jobs komutunu da kullanabiliyoruz.

enter image description here

Artık leafpad programımızın durdurulduğundan kesin eminiz. Hatta leafpad uygulamasına grafiksel arayüzden bir şeyler yazmaya çalıştığımızda uygulama durdurulduğu için hiç bir tepki vermiyor. Yani konsolumuz artık leafpad uygulamasının sürecini işlemiyor. Bunu teyit etmek için önceden konsola komut veremediğimizi ele alırsak denemek için konsola ls komutumuzu giriyoruz. Adımların her birini genel olarak .gif olarak verdiğim resimde görebilirsiniz.

enter image description here

ls komutunun çıktısını alabildik bu da demek oluyor ki konsol ekranımız önceden olduğu gibi leafpad uygulaması ile meşgul değil, böylelikle yeni komutlar alabiliyor.

Leafpad programı durduruldu ancak biz hem leafpad programını kullanmak hem de aynı konsol ekranından yeni komutlar girebilmek istiyoruz. İte bu noktada durdurulan leafpad süreçlerinin arka plana alınarak çalıştırılmasına devam edilmesi gerekiyor. Bu işlevi de bg komutu sağlıyor. Komut satırımıza bg komutumuzu girdiğimizde artık leafpad programı süreçleri arka planda çalışır duruma geçiyor ve biz hem konsol ekranından yeni komutlar girebiliyoruz hem de leafpad uygulamamızı kullanabiliyoruz. Leafpad uygulamasının çalışır olduğunu jobs komutu ile de aşağıdaki şekilde teyit edebiliriz.

enter image description here

Eğer arka plana attığımız program sürecini tekrar eskisi gibi konsol üzerinden(ön planda) çalışır hale getirmek istersek fg komutumuzu kullanabiliriz. Bu komutumuzu kullandığımızda konsol artık yeni komut almayacak ve tekrar sadece leafpad uygulaması ile meşgul olacak.

Yukarıda verilen .gif ile bu durumlar ele alınmıştır.


Disk İşlemleri

Disk ile ilgili yapabileceğimiz bölümleme, formatlama, bölüm oluşturma, tarama, düzeltme ve benzeri diğer işlemleri gerçekleştirebileceğimiz çeşitli komutlar var. Bu bölümde bu komutları ve işlevsel yanlarını ele alacağız. Konumuza ilk olarak daha önce de kullanmış olduğumuz fdisk komutu ile başlayalım.

Komutlara geçmeden önce disk üzerinde yapacağımız işlemlerde son derece dikkatli olmamız gerektiğini aklınızdan çıkarmayın lütfen. Yapacağımız yanlışlar dosyalarımızın kalıcı olarak silinmesine ve daha farklı sorunlara yol açabilir.

Eğer mümkünse özellikle bu konuda sanal makine üzerinden çalışmanız ve buradaki komutları denemeden önce sanal makine üzerinden sistem yedeğini(snapshot-clone) almanızı tavsiye ederim.

Ayrıca bir hatırlatma daha; Disk üzerinde işlem yapabilmeniz için o diskin biz işlem yapıyorken sistem tarafından kullanılmıyor olması gerekiyor. Çünkü biz işlem yapmaya çalışıyorken disk sistem tarafından kullanıldığı için doğal olarak bizim disk üzerinde işlem yapmamız mümkün olmuyor. Bunun için eğer yapacağımız disk işlemleri Linux işletim sistemimizin kurulu olduğu disk alanı içinse, diskte kurulu olan sistemi kullanmadan işlemleri diskten bağımsız şekilde yapmamız gerekiyor. Bunu da kurulum aşamasında göstermiş olduğum Linux işletim sisteminin USB üzerinden live olarak çalıştırılması ile gerçekleştirebiliriz.

Yani bu kısımda öğreneceğimiz bilgileri Linux işletim sisteminin kurulu olduğu disk alanında uygulamak için, sistemi başlatmadan Linux Live seçeneği ile çalışın.

fdisk

İsminden de anlaşılacağı üzere komutumuz çeşitli disk işlemleri yapılmak üzere kullanılıyor.

Komutun aldığı temel parametreleri ele alarak konumuza devam edelim.

İlk olarak sistemimizde bulunan disk bölümlerini listeleyelim. Bunun için l parametresini kullanıyoruz.

fdisk -l : disk bölümlerini listeler.

enter image description here Gördüğünüz gibi disk bölümleri listelenmiş oldu.

Komutumuzu fdisk /dev/sda şeklinde parametresiz olarak vermemiz durumunda konsol bizden komut bekler. Burada ki /dev/sda genel disk alanını temsil ediyor. Biz de disk üzerinden işlem yapacağımız için komutumuzu bu şekilde girdik.

enter image description here

Hazır komutumuzu parametresiz kullanmışken bizden komut bekleyen konsola girebileceğimiz parametreleri ele alalım.

m : yardım menüsünü açar. Burada fdisk komutu ile kullanabileceğimiz parametreler listelenir.

enter image description here

Çıktıda görüldüğü üzere fdisk komutu disk konusunda çok fazla işleve sahip. Ancak biz sadece birkaç temel işlevini göreceğiz.

p : disk bölümleme tablosunu gösterir.

enter image description here

Çıktımız tıpkı komutu fdisk -l şeklinde kullandığımızdaki gibi oldu.

l : disk bölümlerini listeler.

enter image description here

d : bölüm silmek için kullanılır.

Ben p parametresi ile listelediğim disk bölüm tablosundan 3. bölümü yani /dev/sda3 bölümünü silmek üzere d parametresini vererek Partition number kısmını 3 olarak belirttim.

enter image description here

Çıktıda da görüldüğü gibi seçili alan silinmiş oldu. Artık diskte alan açıldığına göre yeni bir disk bölümü oluşturabiliriz.

n : yeni disk bölümü oluşturur.

n parametremiz ile diskte yeni bir alan oluşturabiliriz. n parametresini girince bize bölümleme tipinin öncelikli(primary) mi yoksa genişletilmiş(extended) mi olması gerektiğini soruyor. Aralarındaki farklar nedir diyecek olursanız:

Primary Partition denilen kısım; işletim sistemlerini kurduğumuz sabit disk bölümüdür. Bir sabit diskte maksimum 4 tane primary partition olabiliyor ve bunlardan bir tanesinin mutlaka aktif partition olması gerekiyor ki işletim sisteminiz boot işlemi sırasında çalıştırılabilsin.

Extended Partition ise aktif primary partition çıkarıldığında geriye kalan tüm sabit disk alanımızdır, bu alanın içine pasif primary partitionlar da dahildir.

Bu açıklama yeterli gelmemiş dolayısı ile anlamamış olabilirsiniz ancak kafa karışıklığına sebep olmamak için ayrıntıya girmiyorum. Merak eden arkadaşlar kısa bir araştırma sonucu istediklerinden de fazla bilgiye ulaşabilirler. Şimdi konumuza devam edelim.

enter image description here

First sector alanını enter ile geçip, Last sector alanına +1G olarak girdim ve 1GB boyutunda bir bölüm oluşturmuş olduk. Bunu teyit etmek için p parametresini kullandık.

Çıktıda /dev/sda4 ayarladığımız gibi yani 1GB olarak gözüküyor.

w : değişiklikleri kaydedip çıkar.

Gerekli ayarlamaları ve işlemleri gerçekleştirdikten sonra fdisk aracını kaydederek kapatmak istersek w parametresini kullanmamız yeterli.

enter image description here

q : çıkış yapar

q parametresi direk olarak yapılan değişiklikleri kaydetmeden fdisk aracı konsolundan çıkış yapar.

enter image description here

cfdisk

fdisk aracının görsel arayüze sahip versiyonudur. Açmak için cfdisk komutu yeterli olacaktır.

enter image description here

Ayrıca benden bir tavsiye, fdisk‘in kullanımı cfdisk‘e oranla biraz zordur, dolayısıyla kolayca hata yapabilir ve istenmeyen durumlarla karşı karşıya kalabilirsiniz. Etkileşimli bir arayüzü olan cfdisk‘in kullanımı daha kolay olduğundan hata yapma ihtimaliniz daha düşüktür. Kullanımı oldukça kolay olduğundan detaylı anlatımda bulunmuyorum. Sadece disk işlemleri ile ilgili olduğu için bu kısımda değinmek istedim. Yani artık disk işlemlerinde böyle bir aracın varlığından haberdarsınız ve merak ettiğiniz takdirde çok kolay şekilde kendiniz keşfedebilirsiniz.(Disk ile ilgili büyük sorunlara yol açmamak adına keşiflerinizi ana makine haricindeki sanal ortamlarda gerçekleştirmenizi şiddetle tavsiye ederim.)

badblocks

badblocks kısaca, bir aygıtın bozuk bloklarını bulmak için tarama işlemi gerçekleştirme görevindedir.

Sırasıyla kullanım parametrelerine göz atalım:

s : taranan blokların numaralarını çıktı olarak vererek sürecin gelişimini gösterir.

enter image description here

v : süreçle ilgili ayrıntılı bilgi verir.

enter image description here

b : bir blok boyutunu bayt cinsinden belirtebiliyoruz.

enter image description here

c : bir seferde sınanacak blok sayısı belirtilir ve bu sayı öntanımlı olarak tek seferde 16 blok okuyacak şekildedir. Bu sayının arttırılması bu işlemin verimini yani hatalı blokların bulunma ihtimalini artırır, ancak arttırıldığı sayıya bağlı olarak bellek kullanımı da artacağı için bu sayının yüksek tutulması durumunda sistem “tamponları ayırmada bellek yetersizliği” hatasını verecek ve işlemi sonlandıracaktır. Tersi durumda yani bu sayının çok düşük tutulması da hatalı blokların gizli kalmasına neden olarak yapılan işin verimini düşürecektir. Yani dengeli kullanım çok önemlidir.

enter image description here

f : dosya sisteminin zarar görüp sistemin çökebileceği durumlarda badblocks tarama yapmayı reddeder. Ancak siz çoğu durumda önerilmese de yinede tarama yapmaya zorlamak isterseniz f parametresini kullanabilirsiniz.

enter image description here

p : diskin kaç defa taranacağını belirtir öntanımlı olarak bu değer sıfırdır yani ekstra değer belirtilmezse disk yalnızca 1 kez taranır.

enter image description here

Bu parametreler dışında da başka parametreler mevcut. Konsola man badblocks yazarsanız diğer parametreler hakkında da kısaca bilgi sahibi olabilirsiniz.

Neticede badblocks komutu ve parametreleri yardımı ile hatalı blok tespiti yapabiliyoruz. Şimdi de bu hatalı blokları düzeltme kısmına gelelim.

fsck

Komutun işlevi diskteki hatalı blokları düzeltmeye çalışmaktır. Aslında bu işlem sistemimizi her açışımızda otomatik olarak gerçekleşir. Biz de şimdi örnek olması açısında USB belleği onarmayı deneyelim.

USB belleğimizin disk adını öğrenmek için sistemimizdeki diskleri fdisk -l komutu ile listeleyelim.

enter image description here

Çıktının alt kısımında yer alan /dev/sdb1 USB belleğimizin diskteki adı. Şimdi belleğimizin adını öğrendiğimize göre onarma işlemini deneyebiliriz. Bunun için komut satırına fsck -p /dev/sdb1 komutunu giriyoruz.

enter image description here

Ve USB diskteki hatalı bloklar düzeltilerek işlemimiz başarılı bir şekilde gerçekleşmiş oldu.

df Komutu

df komutu bizlere disklerin; dosya sistemini, boyutunu, doluluk oranını, bağlandığı yeri(mount) gibi bilgileri kısa bir liste halinde verir.

Eğer çıktılar daha okunaklı olsun yani bilgileri MB,GB cinsinden görelim istersek komutumuza ek olarak h parametresini de kullanırız. Komutumu df -h şeklinde yazıyorum. Ve gördüğünüz gibi çıktılar daha okunaklı yani MB,GB cinsinden bana sunulmuş oldu.

enter image description here

df komutu diskler hakkında genel bilgi edinmek için sık kullanılan bir komuttur. Ayrıca komutla birlikte kullanacağımız m parametresi çıktıları MB cinsinden verirken, k parametresi ile kullanımlarda çıktılar KB cinsinden olacaktır. Bunlar haricinde daha fazla detay almak için man sayfasına bakabilirsiniz.

enter image description here

gparted

Grafiksel basit bir arayüze sahip olmasından dolayı kullanımı en kolay disk aracı denilebilir. Grafiksel arayüze sahip olduğu için açıklamasını burada vermem resimler ile verimsiz ve yetersiz olur. Ancak hazırladığım eğitim kursunda anlatımı videolu şekilde gerçekleştirdim eğer isterseniz kursumu satın alarak hem bana destek olabilir, hem de bu kaynağın açıklamalı anlatımını edinmiş olursunuz. Kursumu satın almak istemezseniz de internetteki Türkçe-İngilizce kaynaklardan kullanımı hakkında bolca bilgiye ulaşabilirsiniz. Açmak için konsola gparted yazmanız yeterli olacaktır.

enter image description here

umount (Diski Ayırmak)

Diski ayırmak gibi bir başlık aklınızda diski bölümlemek gibi bir anlam ifade etmiş olabilir. Ancak buradaki ayırmadan kasıt diskin bağlantısının sistemden koparılması. Yani şöyle ki komutumuz daha önce muhtemelen kullanmış olduğunuz, diskin üzerine sağ tıklayarak “Diski Çıkar” işlemi ile aynı görevdedir.

Aşağıdaki Linux ve Windows sistemlerinde grafiksel arayüz ile disk çıkarma işlemi kolay anımsamanız için görsel olarak verilmiştir.

Hatta bu durumu hemen teyit etmek için USB diskimizi umount komutu ile sistemden ayıralım.

Bu işlem için öncelikle diskimiz hakkında genel bilgi sahibi olmak adına konsola df -h komutunu verelim.

enter image description here

USB diskimin adının /dev/sdb1 ve diskin sisteme bağlandığı konumun da /media/root/GPARTED-LIV dizini olduğunu öğrenmiş oldum. Artık gerekli bilgileri öğrendiğimize göre diski sistemden çıkarmak için konsola umount /dev/sdb1 şeklinde komut verebiliriz.

enter image description here

Diski çıkarma işlemi sonrasında bu işlemi teyit etmek için birde df -h komutunu kullandık. Sonuçta diskimiz sistemden bağını koparmış oldu.

mount (Diski Bağlamak)

Sistemden ayırdığımız diski tekrar bağlamak için mount komutunu kullanırız. Kullanım şekli mount aygıt_adı bağlanacak_konum şeklindedir.

Diski sisteme bağlamadan önce yapmamız gereken şey, diskin bağlanacağı konumu oluşturmaktır. Bunun için ben masaüstüne mkdir USB komutu ile USB adında bir klasör oluşturdum.

USB’nin bağlanabileceği hedef klasör oluştuğuna göre artık USB diskimizi buraya bağlayabiliriz. Bunun için konsola mount /dev/sdb1 /Desktop/USB komutunu veriyorum ve daha sonra diskin durumunu df- h komutu ile sorguluyorum.

enter image description here

Görüldüğü gibi USB disk Desktop/USB konumuna bağlanmı bulunuyor.


Çalışma Seviyeleri(Runlevels)

Sistem açıldığında hangi çalışma seviyesindeyse o seviyeye göre belirlenmiş olan hizmetler başlatılır. İşte bu olaya da Runlevels(çalışma seviyeleri) deniyor. Linux sisteminde 7 farklı seviye bulunuyor.

Seviyeler ve ifade ettikleri aşağıdaki tabloda verilmiştir.

Runlevel Çalışma Modu İşlevler
0 HaltKapatma işleminin başladığı seviye.
1 Tek KullanıcılıAğ servisleri olmadan sistem bakımı için kullanılan seviye.
2 Ağ Desteği Olmadan Çok KullanıcılıAğ desteği olmadan normal kullanım seviyesi.
3 Ağ Destekli Çok KullanıcılıAğ destekli normal kullanım seviyesi.
4 TanımsızKullanılmıyor ancak kullanıcı tarafından tanımlanabilir durumdaki seviye.
5 Grafiksel Kullanıcı ArayüzüGrafiksel arayüzün çalıştığı seviye. Hemen her Linux dağıtımında bu seviye varsayılan olarak başlatılır.
6 Yeniden Başlatma(Reboot)Sistemin yeniden başlatıldığı seviye.

O anda hangi seviyede çalıştığımızı öğrenmek istersek komut satırına runlevel komutunu vermemiz yeterli.

enter image description here

Çıktıda çalışma seviyem 5 olarak çıktı. Bunun sebebi de, daha önce de söylediğimiz gibi Linux, sistemi varsayılan olarak 5. seviyede başlatıyor. Eğer çalışma seviyesi değiştirmek istersek bunu init çalışma_seviyesi şeklinde yapabiliriz.

Bu şekilde sistemi yeniden başlatana kadar seçtiğimiz çalıma seviyesinde devam edebiliriz. Ancak dediğim gibi sistemi yeniden başlattığınızda sistem varsayılan olarak 5. seviyede başlayacaktır.

Ayrıca yeri gelmişken sistemi kapatmak istersek bunu hiç bir hizmetin çalışmadığını 0. runlevel ile yani init 0 komutunu vererek yapabiliriz.

Ayrıca kapatma işlemi için;

shutdown -h now beklemeden direk sistemi kapatacaktır.

shutdown -h now+5 5 dakika sonra sistemi kapatacaktır.

halt sisteminizi doğrudan kapatacaktır(halt kavramının 0.seviyede hiç bir servisin çalışmadığı durumu temsil ettiğini söylemiştik).

Eğer sistemi yeniden başlatmak istersek init 6 veya reboot komutunu kullanabiliriz.

service

Şimdi ise sistemdeki servisleri açıp-kapatmayı ve bu servislerin durumunu sorgulamayı görelim. Komutumuzun işlevlerinin kullanım kalıpları aşağıdakiler gibidir.

Örnek kullanımları ssh servisi üzerinden gösterelim.

Servisimizin durumunu sorgulamak için komut satırımıza service ssh status yazıyoruz.

enter image description here

Komut satırı çıktı olarak bize ssh servisinin kapalı olduğunu bildirdi.

Şimdi servisimizi başlatmak üzere komut satırına service ssh start komutumuzu veriyoruz.

enter image description here

Servisimizi başlattıktan sonra durumu kontrol etmek için tekrar service ssh status komutumuzu verdik ve görüldüğü gibi ssh servisimiz artık çalışır durumda.

Şimdi ise çalışan servisimizi kapatmak için komut satırına service ssh stop komutumuzu veriyoruz.

enter image description here

Çıktıda da görüldüğü gibi ssh servisimiz kapatılmış oldu. Bunu da service ssh status komutu ile teyit etmiş olduk.

Komutumuzun diğer bir kullanım şeklide de servisi yeniden başlatmak. Bunun için service ssh restart komutumuzu kullanıyoruz.

enter image description here

Servisimizin durumunu service ssh status komutu ile kontrol ettik ve servisimizin yeniden başladığını görmüş olduk.

Son olarak ise sistemde bulunan tüm servislerin sıralanmasını sağlayan service --status-all komutunu görelim.

enter image description here

Çıktıdaki servislerin sol tarafında yer alan [ - ] işareti servisin çalışmadığını, [ + ] işareti servisin çalıştığnı ve [ ? ] işareti ise servisin durumunun belirsiz olduğunu ifade ediyor.


Sembolik Link Ve Katı Link

Linux sistemlerinde; sembolik ve katı olmak üzere iki çeşit bağlantı(link) türü vardır. Bunları sırası ile açıklayacak olursak;

Sembolik link ile oluşturulmuş bağlantılar; dosyaların kısayolu görevini görür ve görevi yalnızca ilgili dosyaya yönlendirme yapmaktır.

Katı link ile oluşturulmuş bağlantılar ise dosyanın kopyasıdır. Orijinal dosya silinse bile katı link içeriği korumaya devam eder.

Bağlantı türlerinin kullanımlarına geçmeden önce ufak bir bilgi daha öğrenmeliyiz o da inode kavramı.

inode(düğüm)

Inode(düğüm), dosyanın sahibi, oluşturulma tarihi, boyutu, tipi, erişim hakları, en son erişim tarihi ve en son değişikliklerin yapıldığı tarih gibi birçok meta verileri içeren yapıdır. Yani biz herhangi bir dosya oluşturduğumuzda disk üzerinde 1 inode yer kaplamaktadır. Bununla ilgili olarak inode tablosunu görmek için konsola df -i komutumuzu verelim.

enter image description here

Hemen çıktıları ele alarak açıklamamıza devam edelim.

Örneğin /dev/sda1 disk alanını ele alırsak toplam 6348800 adet inode numarası alabilir yani sınırı bu kadar.

Kullanılan 391980 inode numarasından toplam kullanılabilir olanı çıkarırsak (6348800-391980=5956820) geriye kullanılabilir 5956820 inode numarası kalmış oluyor.

Bunun anlamı her bir dosya 1 inode yer kapladığı için/dev/sda1 dosya sisteminde 5956820 adet daha dosya oluşturulabilecek alan mevcut.

Her bir inode(düğüm) numarasının benzersiz olduğunu söylemiştik. Bu durumu teyit etmek için bulunduğumuz konumdaki dosyaların inode numaralarını görebilmek adına komut satırımıza ls -li komutumuzu veriyoruz.

enter image description here

Çıktıda yer alan soldaki numaralar, ilgili dosyanın inode numarasını temsil ediyor.

Konumuza sembolik link oluşturma ile devam edelim.

Sembolik link oluşturmak için ln -s komutu kullanılır. Komutun kullanım örneği ile devam edelim.

Örnek bir dosya oluşturarak, sembolik link komutu yardımı ile dosyamıza kısayol oluşturalım.

Music dosya konumundayken touch komutu yardımı ile “klasik” isimli bir dosya oluşturduk.

enter image description here

Oluşturduğumuz “klasik” isimli dosyanın kısayolunu, komutumuzu ln -s dosya_adı kısayol_adı şeklinde kullanarak oluşturduk.

enter image description here

Son olarak ls -i komutunu vererek orijinal dosyanın ve sembolik link yardımı ile oluşturulan kısayol dosyasının inode değerlerini karşılaştırdık. Çıktıda da görüldüğü üzere değerler farklı olarak karşımıza çıkmış oldu.

Ayrıca dosyaları file isimli bir komut yardımı ile inceleyerek de bilgi alabiliriz.

enter image description here

Sembolik link komutu ile oluşturduğumuz dosyanın kısayol olduğunu çıktıda görebiliyoruz. Ancak son olarak kısayol dosyamızın çalışma durumunu da test edelim.

Bunun için ilk başta dosyamızın içeriğini okuyalım daha sonra orijinal dosyamıza yazı ekleyelim ve kısayoldaki değişimleri gözlemleyelim.

Orijinal dosyamın içerisine “Dosya İçeriğinin İlk Sayfası” şeklinde bir yazı ekledim. Biz orijinal dosyada yer alan bu yazıyı silip yeni bir ifade yazdıktan sonra kısayoldaki değişimi gözlemleyeceğiz.

enter image description here

Eğer orijinal dosyayı silersek kısayol dosyası da açılmayacak ve bizlere hata mesajı bildirilecektir.

enter image description here

Görüldüğü gibi kısayol dosyası orijinal kaynağı silindiği için okunamadı.

Ayrıca ilk ls -li çıktısında kısayol dosyasının sol tarafında yer alan lrwxrwxrwx ifadesindeki l harfi, dosyanın kısayol olduğunu ve -> işareti ise hangi dosyanın kısayolu olduğunu işaret ediyor.

Sıra geldi katı link bağlantısının kullanımına. Katı link bağlantısı için ln komutu kullanılıyor. Örnek üzerinden ilerleyelim.

Örnek olması açısından Music klasörü altında “caz” adında bir dosya oluşturuyorum. Daha sonra oluşturduğum “caz” isimli klasörün katı linkini ln caz caz_kati komutu ile oluşturuyorum.

enter image description here

Çıktıda dikkat edilmesi gereken nokta orijinal “caz” dosyası ile katı bağlantı “caz” dosyasının inode değerlerinin aynı olmasıdır. Bu da demek oluyor ki; her iki dosya da her yönüyle birbirlerinin aynı durumda.

Ayrıca orijinal ya da katı link ile oluşturulmuş dosyaların birinde yapacağımız değişiklik tıpkı sembolik linkte olduğu gibi diğer dosyada da geçerli olacaktır. Yani bu orijinal dosya ile katı link dosyası halihazırda bağlantılı dosyalar.

enter image description here

Hemen daha önce yaptığımız gibi file komutu ile orijinal dosya ve link ile oluşturulmuş dosyalarımızı karşılaştıralım.

enter image description here

Komutun sonucunda her ikisininde ayrı ayrı dosyalar olduğunu görmüş olduk. Bu da demek oluyor ki biz eğer orijinal dosyayı silersek sembolik linkte olduğu gibi katı link ile oluşturulmuş dosya kullanılmaz hale gelmeyecektir. Bunu da hemen test edelim.

enter image description here

Gördüğünüz gibi orijinal dosyayı silmeme rağmen katı link ile oluşturmuş olduğum dosya hala okunabilir durumda.


Kurma-Kaldırma-Güncelleme İşlemleri

Linux işletim sistemini kullanacaksak mutlaka bilmemiz gerekenler arasında; sistemi güncelleme, program kurma ve kurulu programları kaldırma gibi işlemleri yerine getirmek var. Bu işlemleri nasıl yerine getirebileceğimizi bu konunun devamında öğreneceğiz. Anlatıma ilk olarak sistemi güncelleme işlemi ile başlayalım.

Sistemi Güncelleme

Linux sistemleri, kullanıcının ihtiyacı olduğunda, programa kolayca ulaşabilmesini sağlayacak program paketlerini içinde bulunduran kendi paket depolarına(repository)* sahiptirler. Farklı Linux dağıtımları için bu paketler de farklılık gösterebiliyor. Bu yüzden farklı Linux dağıtımlarının da kendi paketleri üzerinde işlem yapabilmek için farklı komutları vardır.

Dağıtımlar ve kullanılan paketlere göre komutları aşağıdaki tabloda verilmiştir.

Dağıtım Paketler Komutlar
Debian .debapt , apt-cache , apt-get , dpkg
Ubuntu .debapt , apt-cache , apt-get , dpkg
CentOs .rpmyum
Fedora .rpmdnf
FreeBSD .txzmake , pkg

Debian paketlerinin .deb uzantılı olduğunu yukarıdaki tabloda gördük. Kullandığımız dağıtım olan Kali’de Debian tabanlı olduğu için anlatıma bu doğrultuda devam edeceğiz.

Anlatıma güncelleme işleminde kullanılan komutlarımızı tanıyarak devam edelim.

apt-get update

Komutu sources.list dosyasına eklemiş olduğumuz repolara bakarak paket listelerini kontrol edip paketlerin son sürümleri ve bağımlılıkları hakkında bilgi almak için bunları “günceller”. Yani bu komutumuz; güncelleme işleminden önce, nelerin güncellenmesi gerektiğine bakarak sistemimizdeki sürümünden yüksek sürümleri bulunan yani güncellenmesi gereken doğru paketlerin güncellenmesini sağlıyor. Kısaca bu komutumuzun amacı sadece depolarda yer alan yenilikleri kontrol etmektir.


apt-get upgrade

Komutu da apt-get update komutunun depolardan kontrol edip bildirmiş olduğu güncellenmesi gereken paketleri en son versiyonlarına günceller.


apt-get dist-upgrade

Komutu ise apt-get upgrade komutundan farklı olarak sadece güncelleme yapmakla kalmaz, sistemimizdeki gereksiz paketleri de siler.


apt-get clean

Komutuyla, kurmak üzere indirmiş olduğumuz paketlerin hepsini silebiliyoruz. Depodan indirmiş olduğumuz tüm paketler ve uygulamanın çalışması için gereken bağımlılıklar .deb uzantısı ile arşivlenerek /var/cache/apt/archives dizini içerisinde daha sonra tekrar kullanılma ihtimaline karşı tutuluyorlar. İşte bizler de apt-get clean komutu yardımıyla eğer internet bağlantımızda sorun yoksa yani bu paketleri tekrar indirirken sorun yaşamayacaksak bu paketleri silerek sistemimizde yer işgal etmelerini önlemiş oluyoruz.


apt-get autoclean

Komutu da apt-get clean komutuyla benzer şekilde arşivlenmiş paketleri silme işlemini yapar. Fakat burada silinen arşivler bütün arşiv paketleri değil sadece eski sürüm olup artık kullanımda olmayan ve depolardan kaldırılmış paketlerdir.


apt-get autoremove

Komutu ise silmiş olduğumuz uygulamadan geriye kalan ve artık ihtiyaç duyulmayan bağımlılıkları kaldırmamızı sağlıyor.


-y

-y parametresinin göreviyse; çıkacak olan onay sorularına evet(yes) cevabını otomatik olarak vermektir. Bu sayede gerekli işlemler bizden onay beklemeden otomatik olarak zaman kaybedilmeden yapılmış olur.

Yani bir bütün olarak eğer sistemimizi güncellemek istersek ilk başta /etc/apt/sources.list konumunda yer alan sources.list dosyasına kullandığımız versiyona uygun depoları ekliyoruz.

Bunun için buradaki kaynaktan kullandığınız versiyona uygun olan repository kaynağını kopyalayarak sources.list dosyasına eklemeniz gerekiyor. Ben Kali 2016.1 sonrası (bu anlatımda kullandığım versiyon 2017.3) versiyonunu kullandığım için aşağıdaki repoları(repository) sources.list dosyasına ekliyorum.

deb http://http.kali.org/kali kali-rolling main contrib non-free

Ancak dediğim gibi sizler kullandığınız versiyona uygun olan repoları seçmelisiniz.

Kali 1.0 ve sonrası için: deb http://old.kali.org/kali moto main non-free contrib

Kali 2.0 ve sonrası için: deb http://old.kali.org/kali sana main non-free contrib

Kali 2016.1 ve sonrası için: deb http://http.kali.org/kali kali-rolling main contrib non-free

Repoları, leafpad /etc/apt/sources.list komutu ile açarak sources.list dosyasına ekledim.

Gerekli depo kaynağını ekledikten sonra sıra geldi güncelleme işlemine, bunun için ilk olarak paket bilgilerini güncellemek üzere apt-get update , daha sonra güncel paket bilgileri alınan uygulamaları güncellemek için de apt-get upgrade -y komutunu verelim. Ayrıca bu komutları apt-get update && apt-get upgrade -y şeklinde birleşik olarak da kullanabiliriz. Özellikle sistemimizi kurulum sonrası ilk defa güncellediğimizde bu güncelleme işlemi internetimizin de hızına bağlı olarak oldukça uzun sürebiliyor. Bunun dışında zaten üst kısımlarda hangi komutun hangi işlevde olduğunu öğrendiğimiz için tek tek kullanımlarına örnek vermiyorum sizler yerine göre ilgili komutları kullanabilirsiniz.

Güncelleme işlemi boyunca, kullandığımız -y parametresi sayesinde herhangi bir soru sorulmadan bütün işlemler otomatik olarak gerçekleşecek ve güncelleme işlemi hızlı bir biçimde tamamlanacaktır.

Program Kurmak

Linux’ta program kurmak için birden fazla yöntem bulunuyor. Bunlardan bir tanesi kullandığımız dağıtıma uygun programı, paket yönetim sistemi ile kurmaktır. Diğer bir yol, programı kaynak koddan derleyerek kurmaktır. Diğer seçenek ise dağıtımın kullandığı depolardan(repository) otomatik kurulum yapmaktır.

Depodan Kurulum

Depoda bulunan programların kurulumlarını yaparken apt-get install program_adı komut bütünü kullanılıyor. Unutmayın depodan(repository) kurulum yaparken sisteminizin güncel olması önemlidir. Şayet sisteminizi güncel tutmuyorsanız yani repolarınız güncel değilse depodan program yükleme çabalarınız hüsranla sonuçlanabilir.

Ancak programın yüklenmeme sebebi bir tek güncelleme işlemi ile ilgili değil. Şayet yüklemek istediğimiz program depolarda yer almıyorsa depodan yükleme işlemimiz de haliyle başarısız olacaktır.

Bu yüzden öncelikle kurmak istediğimiz program depolarda yer alıyor mu ona bakalım. Ben örnek olması açısından depolarda filezilla aracını araştırıyorum eğer depolarda varsa kurulum yapabiliriz. Depoları kontrol etmek üzere konsola apt-cache search filezilla şeklinde komutumu vererek filezilla aracını depolarda var mı diye kontrol ediyorum.

Ve gördüğünüz gibi filezilla aracı depolarda mevcutmuş. Sizler de bu şekilde depolarda yer alan programları apt-cache search program_adı şeklinde aratarak sorgulayabilirsiniz.

Örnek olması açısından filezilla isimli bir programın depodan kurulumunu yapmak için konsola apt-get install filezilla komutunu girdim.

Ve program kurulmuş oldu. Konsola filezilla yazarak da bu durumu teyit ettim.

Şayet kurduğunuz programı kaldırmanız(silmeniz) gerekirse konsola apt-get remove program_adı şeklinde girdiğinizde ilgili program otomatik olarak sistemden kaldırılacaktır.

Sadece programı kaldırmakla yetinmeyip bir de programın yapılandırma dosyalarını da sistemden kaldırmak isteyebilirsiniz. Yapılandırma dosyaları ile birlikte programı kaldırmak için komutu;

apt-get --purge remove program_adı

veya

apt-get purge program_adı

şeklinde kullanabilirsiniz.

Bu sayede program yapılandırma dosyaları ile birlikte tamamen silinmiş oluyor.

İşte sizler de bu şekilde depolarda yer alan programları oldukça kolay şekilde kurup kaldırabilirsiniz.

Paket Yönetim Sistemi İle Kurulum

Bu işlem için kullandığımız dağıtıma uygun derleyiciyi kullanmalıyız. Daha önce Kali’nin .deb uzantılı paketleme sistemi olduğunu öğrenmiştik. Bu yüzden biz .deb uzantılı kurulum paketlerini açmak için dpkg komutunu kullanıyoruz. Sanırım kodun kısaltmasının nereden geldiğini bilirsek daha kolay akılda kalabilir. Kodun kısaltması “debian package(debian paketi)” kısaltmasından gelmektedir. Ayrıca dpkg komutunu kullanmadan yardımcı bir paket yöneticisi programı(synaptic) kullanarak da kurulum işlemlerini yerine getirebiliriz. Konumuza ilk olarak dpkg komutu ve kullanımı ile devam edelim.

Örnek olması açısından ben “master pdf” adında bir programın kurulumunu ele aldım. Bunun için öncelikle programın .deb uzantılı dosyasını programın kendi sitesinden indirdim.

Şimdi programı kurmak için dpkg -i paket_adı.deb şeklinde komutumu giriyorum.

Ve programım kurulmuş oldu.

Kurduğumuz programı kaldırmak istersek komutumuzu dpkg -r program_adı şeklinde yani -r parametresini ekleyerek kullanıyoruz.

Program otomatik olarak kaldırılmış oldu. Ancak /etc dizini altındaki konfigürasyon dosyaları silinmedi. Eğer bu dosyaları da kaldırmak istersek -P parametresini kullanabiliriz.

Bu sayede programa ait konfigürasyon dosyaları da tamamen kaldırılmış oldu.

Konfigürasyondan bahsetmişken aklınızda bulunsun eğer yüklediğimiz paketin konfigürasyon ayarlarını tekrar yapılandırmamız gerekirse dpkg-reconfigure paket_adı şeklinde komutumuzu kullanabiliriz.

Kurulu olan tüm paketler hakkında bilgi almak için -l parametresi kullanılabilir.(Çıktı uzun olduğundan kısa kesilmiştir.)

Çıktıda yer alan paketlerin sol tarafındaki ifadelerin anlamı:

ii : paket normal olarak sisteme yüklendi.

rc : paket yüklendikten sonra silindi ancak konfigürasyon dosyaları halen mevcut.

pn : paket konfigürasyon dosyalar ile birlikte sistemden kaldırıldı.

Kurulu paketin durumunu öğrenmek için -s parametresini kullanabiliriz. Ben örnek olması açısında leafpad programı hakkında bilgi almak için komut satırına dpkg -s leafpad komutunu giriyorum.

Kurulu paketin içeriğini öğrenmek istersek -L parametresini kullanırız.

Eğer indirmiş olduğumuz .deb uzantılı dosyanın içeriğini henüz kurmadan görmek istersek -c parametresini kullanabiliriz.

Sistemde kurulmuş ve kaldrılmış tüm paketleri görmek istersek dpkg --get-selections komutunu kullanabiliriz.

Bu paket listesini daha sonra kullanmak üzere bir dosya içerisine yedeklemek istersek komutumuzu dpkg --get-selections >dosya_adı.txt şeklinde kullanmamız yeterli olacaktır.

Yedeklediğimiz bu program listeleri sayesinde başka bir sisteme aynı paketleri tek seferde yüklememiz mümkün. Bunun için komutlar aşağıdaki şekildedir.

dpkg --set-selections > yedek_dosya_adı.txt

Daha sonra tanıma işlemi bittikten sonra eksik olanların yüklenmesi için konsola aşağıdaki komutu giriyoruz.

apt-get deselect-upgrade

Ayrıca bu işlemin uzun süreceğini unutmayın. Yani çok fazla spesifik programlarınız yoksa, bu yöntemi kullanmanızı tavsiye etmem. Bunun yerine kendiniz de pekâla elle kurulumları gerçekleştirebilirsiniz.

Şimdi sıra geldi ikinci yol olan yardımcı paket yöneticisi programı aracılığı ile program kurma-kaldırma-güncelleme işlemlerini yapmaya. Bunun için ilk olarak paket yönetim programı olan synaptic programını kurmamız gerek. Komut satırına apt-get install synaptic yazarak yardımcı programı depolardan indiriyoruz.

Evet “y” diyerek kuruluma onay veriyoruz ve programımız kurulmuş oluyor. Programı açmak için komut satırına synaptic komutunu vermemiz yeterli. Bu program(synaptic) sayesinde depolarda yer alan programları çok kolay şekilde kurup kaldırabilir ve programlar için diğer gerekli işlemleri yerine getirebiliriz. Programın kullanımı oldukça kolay olduğundan keşfini sizlere bırakarak anlatıma devam ediyorum.

Kaynak Koddan Derleyerek Kurulum

Linux’a uyumlu sürümü bulunan açık kaynak kodlu yazılımların kaynak kod paketleri bu yazılımların internet sitelerinde, genellikle tar.gz biçiminde arşivlenmiş olarak indirilmeye sunulurlar. Bu arşivlenmiş olan kaynak kod paketi daha önce gördüğümüz .deb uzantılı paketlerin aksine ham şekilde yani derlenmemiş (kuruluma hazır olmayan) şekilde gelirler. Bu derleme işlemini bizim yaparak kurulumu gerçekleştirmemiz gerekir. Ancak her kurulum aynı olmayabilir. tar.gz veya tar.bz2 benzeri uzantılı paketlerde genellikle programın nasıl kurulacağına dair “install”, “readme”, “configure” ve benzeri isimlerde yönergeler bulunur. Bu dosyalar okunarak yükleme işlemi gerçekleştirilmelidir. Çünkü her programın gereksinimleri birbirinden farklıdır, yani kurulum için geliştirici ekibin verdiği kurulum yönergesini takip etmek en doğru tercih olacaktır. Ancak biz şimdi burada genel kurulum hakkında bilgi edinelim. Kaynak koddan derleyerek kurulum işleme genel olarak aşağıdaki şekildedir:

İndirdiğimiz program arşivini klasöre çıkartırız.

Ve arşiv içeriğini çıkarmış olduğumuz klasörden komut satırımızı çalıştırırız. İlgili konumda olduğumuzdan emin olduktan sonra;

Programı derlemeden önce gerekli kütüphaneler ve bağımlılıkları kontrol etmek için aşağıdaki komutu kullanırız.

./configure

Bu işlemin sonunda eksik paketler ve bağımlılıklar çıkarsa bunları tek tek kurmamız gerekecek.

Eğer bu aşamada;

bash: ./configure: Böyle bir dosya ya da dizin yok

gibi bir hata çıktısı alıyorsanız:

O program configure dosyası içermiyordur yani o program için ./configure aşamasına gerek yoktur. Böyle bir durumla karşılaştığınızda bu aşamayı atlayarak direk make aşamasına geçin. Ancak configure dosyası varsa mutlaka ./configure diyerek programın ihtiyacı olan bağımlılıkları kontrol edip eksik olanları yükleyin. Aksi halde program kurulum işlemi başarısız olacaktır. Şimdi devam edelim.

Gerekli kütüphaneler ve bağımlılıkları kontrol edip varsa eksik olanların kurulumlarını yaptıktan sonra, make aşaması için derleme yapacak paketleri apt-get install build-essential komutu ile kuruyoruz.

Daha sonra make diyerek programımızı derlemiş oluyoruz.

Son olarak make install komutu ile programı sistemimize kuruyoruz.

Silme işlemleri için de programa göre farklı durumlar ve dosyalar oluşabildiği için; kurulum yaparken olduğu gibi silme işlemi için de aynı şekilde programla birlikte gelen yönergeleri okumanız en doru silme yönetimini size gösterecektir.


Joker Karakterler(wildcards)

Bu kavram sizlere kesinlikle yabancı değil, daha önceki kısımlarda defaatle kullanmış ve joker(wildcard) karakterlerinin az da olsa işlevini görmüştük. Bu kısımda da bu konu hakkında bilgi sahibi olacağız.

joker (wildcard)

Linux kullanımında işimizi konsoldan yürüteceğimiz zaman bir komutun tek seferde birden fazla nesneyi etkilemesini yani kapsamasını isteyebiliriz. Örneğin bir dizindeki dosyaların tamamını silmek istiyoruz diyelim; bu iş için aşağıdaki gibi tüm dosya adlarını komut satırına yazmak çok zahmetli ve gereksiz olacaktır.

Yukarıdaki kullanımın yerine joker karakter(wildcard) desteğini kullanmak bizlere çok fazla avantaj sağlar. Ayrıca gördüğünüzde şaşırmayın, kimi kaynaklarda joker karakterler(wildcards)globbing” olarak da adlandırılmaktadır.

Bahsi geçen joker karakterler ve kullanım alanları aşağıdaki gibidir;

* : Anlamı * olan yere herhangi bir şey gelebileceğidir.

Örneğin “dosya” ismiyle başlayan tüm belgeleri tek seferde silmek için komutu rm dosya* şeklinde kullanabilirim.

Ayrıca bu yıldız (asterix)* işaretinin farklı kullanım şekilleri de var. Farklı kullanımların açıklaması ile devam edelim.

Herhangi bir komutu, örneğin listeleme işlevinde olan ls komutunu ls dosya* şeklinde kullanırsak komut yıldız (asterix) * işaretinden önce yazmış olduğumuz “dosya” ismi ile başlayan tüm her şeyi kapsar.

Aynı şekilde yıldız (asterix) * işaretinden sonra bir ifade belirtirsek de komut o ifade ile bitenleri kapsayacak şekilde çalışır.

? : Herhangi bir tek karakterle eşleşir.

Karakterin kullanımına örnek olarak. Diyelim ki dizin içerisinde hem “index_page” hem de “index-page” şeklinde birbirine yakın yazılışlara sahip iki dosyamız var. Yani başlangıç ve bitiş isimleri aynı ancak aradaki işaretler farklı. İşte böyle bir durumda hem _ işaretini hem de - işaretini karşılayacak olan soru işareti ? joker karakterini kullanabiliriz.

Çıktılarda da görüldüğü gibi ? karakteri dosya isimlerinin arasında yer alan - ve _ işaretini de karşılayarak ls -l index?page şeklindeki komut ile çıktıya her ikisini de basmış oldu.

[] : ? karakterine benzer olmakla birlikte daha çok hedefe odaklı çalışır.

[] karakterinin kullanımı, iki köşeli parantez arasına ulaşmak istediğiniz hedefteki ayırt edici karakterli yazmak üzerinedir.

Örnek olması açısında “dosya” isimli belgelerden sadece sonunda 2,3,4 olanları kapsayacak bir komut olması için konsola ls -l [234] komutunu verdim.

Bir örnek daha verelim.

[Dd]osya[Aa]dı şeklinde bir belirtme; DosyaAdı, Dosyaadı, dosyaAdı, dosyaadı şeklindeki bütün isimleri kapsayacaktır. Bu sayede ilgili dosyalar için tüm küçük büyük harf kombinasyonu kolaylıkla sağlanmış olur.

Ayrıca kullanım şekillerine çok fazla örnek verilebilir ancak burada birkaç örnek daha vererek keşfi size bırakıyorum.

Not : Burada belirtilen x y z temsili değerleri ifade etmektedir !

[0-9] : 0’dan 9’a kadar olan rakamları kapsar.

[x,y,z] : belirtilen değerlerle eşleşenleri basar.

[x-z] : x ile z değerleri arasındaki karakterlerle eşleşir.

[xyz] : belirtilen değerlerle eşleşenleri basar.

[!xyz] : Belirtilen karakterlerin dışındakileri diğer tüm karakterleri basar.

[!x-z] : Verilen x ile z değeri arasındaki değerler haricindeki karakterler basar.

Temel ve en çok başvurulan joker karakterler bu şekildedir. Sizler de joker karakterler sayesinde konsoldan çalışırken oldukça pratik şekilde işlemlerinizi yerine getirebilirsiniz. Konuyu daha iyi anlamak adına mutlaka ama mutlaka kendiniz de örnek denemeler yapın.


Ağ(Network) Komutları

Ağ ve komutları başlı başına bir kitap konusu o yüzden burada sadece sıkça veya gerekli durumda işimize yarayacak belli başlı komutları ele alacağız. Eğer detaylı bilgi edinmek istiyorsanız internet aracılığı ile network(ağ) hakkında bir çok güncel kaynağa ulaşabilirsiniz. Lafı daha fazla uzatmadan anlatıma ifconfig komutu ile başlayalım.

ifconfig

Sistemde bulunan ağ bağlantı ve IP yapılandırması ayarlarını inceleyip değiştirmemize olanak tanır.

Ağ bağlantı kartlarını listelemek için ifconfig komutu kullanılır.(Bu çıktıda ip, mac ve broadcats adresi gibi bilgiler yer alıyor.)

enter image description here

Çıktıda yer alan eth0 ethernet kartımızı ifade ediyor. Başka ethernet kartları olması durumunda diğer kartlar da eth1 ..eth2 şeklinde belirtilir.

lo bilgisayarın kendisini yani localhost‘u ifade ediyor.

wlan0 ise kablosuz ağ kartını ifade eder. Yine başka kartlar olması durumunda wlan1 ..wlan2 şeklide belirtilir.

Ayrıca bütün kart bilgilerini listelemek yerine teker teker de listelemek mümkün. Bunun için komutumuzu ifconfig kart_adı şeklinde girmemiz yeterli.

Örneğin yalnızca kablosuz kart bilgilerini listelemek istersem ifconfig wlan0 komutunu vermem yeterli olacaktır.

Yukarıdaki çıktıda yer alan ayarlarda değişiklik yapmamız mümkün. Örneğin kablosuz ağ bağlantısının yerel ip adresini değiştirmek istersek komutumuzu ifconfig wlan0 yeni_ip_adresi şeklinde kullanabiliriz.

Ben kablosuz bağlantımın 192.168.1.9 olan adresi 192.168.1.10 olarak değiştirmek istiyorum bunun için ifconfig wlan0 192.168.1.10 komutunu vermem yeterli.

Gelin bu durumu çıktıları karşılaştırarak test edelim.

Ve son duruma bakarak ip adresimizin istediğimiz şekilde değiştiğini görmüş olduk. Aynı şekilde ağ maskesini(netmask) ve broadcast adreslerini dilediğimiz gibi düzenleyebiliriz. Hatta bu işlemi hepsi birlikte olacak şekilde bile yapabiliriz. Bunun için komutumuzu ifconfig wlan0 yeni_ip_adresi netmask yeni_ağ_maskesi broadcast yeni_broadcast_adresi şeklinde kullanmamız yeterli olacaktır.

Bu durumu bir örnek ile açıklayalım. Değişiklik yapmak üzere konsola ifconfig wlan0 192.168.1.15 netmask 255.255.255.255 broadcast 192.168.2.255 komutunu girerek bir önceki durumu ile karşılaştıralım.

Çıktıları incelediğimizde istediğimiz doğrultuda değişikliklerin yapılmış olduğunu gördük.

ifconfig komutu kullanımı ile ilgili son olarak mevcut kartları açma ve kapatma işlemi görelim.

Örnek olarak kablosuz kartı ele alalım:

Kablosuz kartı kapatmak istersek; ifconfig wlan0 down komutunu kullanırız.

Kapalı kablosuz kartı açmak istersek ise; ifconfig wlan0 up komutunu kullanırız.

Ayrıca diğer kartlar için de açama-kapama işleminde aynı şekilde komutumuzu ifconfig kart_adı down ve ifconfig kart_adı up şeklinde kullanabiliriz.

ping

Hedef ile bizim sistemimiz arasında iletişimin sağlanıp sağlanmadığını kontrol ederek hedef sunucunun çalışıp çalışmadığını veya aktarım hızının ne kadar olduğunu öğrenmemizi sağlar. Bir tür kontrol mekanizması da diyebiliriz. Komutun kullanımı ping hedef_adresi şeklindedir.

Örneğin biz www.google.com adresi ile aramızdaki iletişimin hızını sorgulayalım. Bunun için komut satırına ping www.google.com yazıyorum. Ancak burada önemli bir nokta var, o da bu işlemin biz Ctrl + C tuş kombinasyonu ile durdurana kadar devam edecek olmasıdır.

Eğer direk olarak sınırlama getirmek isterseniz komutu ping -c 4 www.google.com şeklinde kullanabilirsiniz. Bu sayede www.google.com adresine yalnızca 4 sorgu paketi gönderilir. Elbette buradaki sayı sizin belirlemeniz ile değişebilir.

route

Sistemimizdeki IP yönlendirme tablosunun içeriğini görmemizi sağlar. IP yönlendirme tablosunun içeriğini görmek için konsola route -n komutunu yazalım.

Burada yer alan gateway(ağ geçidi adresi) yerel ağdan internet ağına geçerken kullanılan yönlendirme adresidir.

traceroute

Bir önceki kısımda route komutu ile gördüğümüz yerel ağda geçerli olan yönlendirme takibini, belirli bir hedef adrese yapabilmemize olanak sağlayan komut traceroute komutudur. Yani komutumuz belirli bir hedefe gönderilen paketin hangi host’lardan geçtiğini bizlere gösterir. Bir nevi izlediği yolu yani adımlarını takip etmemizi sağlar. Komutun kullanımı traceroute hedef_adresi şeklindedir. Bu sefer hedef adres olarak www.offensive-security.com adresini örnek verelim. Bunun için konsola traceroute www.offensive-security.com yazıyorum.

Çıktı ile birlikte adresin yönlendirme rotasını görmüş olduk.

whois

Whois kavramını bilmeyenler için whois, genel olarak domain bilgilerini içeren bir mekanizmadır. Yani whois; domain ne zaman kurulmuş, ne zamana kadar geçerli, kimin üzerine kayıtlı ve bunun gibi diğer tüm bilgileri tutar. Bizler de bu bilgileri konsol ekranından whois hedef_adresi şeklinde kullandığımız komut bütünü ile sorgulayabiliriz.

Whois sorgusuna örnek olarak yine www.offensive-security.com adresini hedef alalım.

host

Hedef adres hakkında bilgi almanızı sağlar.host komutu ile IP adresinden alan adı(domain name) ve alan adından(domain name) IP adresine ulaşabiliriz. Bu komutun alabildiği farklı parametreleri bulunmaktadır. Ancak ben bu kısımda bunlara değinmeden yalnızca temel kullanımına örnek veriyorum. Kullanımı host adres_adı şeklindedir.

Bu komut hakkında ufak bir araştırma ile çok fazla Türkçe de dahil olmak üzere kaynağa ulaşabilirsiniz.

dig

dig(domain information groper/domain bilgi çukuru) DNS kayıtlarına bakmak iin kullanımı oldukça kolay olduğundan yaygın olarak kullanılmaktadır.

Bu komutumuz da parametreler alabilmektedir, ancak ben burada sizlere yine temel işlevinden bahsederek geriye kalan parametrelerini araştırmayı sizlere bırakıyorum. DNS sorgulaması yapmak istediğimiz adresi konsoldan dig hedef_adresi şeklinde belirtiyoruz.

Örnek olması açısından ben tekrar www.offensive-security.com adresini hedef alıyorum.

arp

IP-MAC Adresi eşleştirmelerinin tutulduğu tablolardır. Kullanımı arp şeklindedir.

tcpdump

Sistemimizin yaptığı bağlantıları ve sistemimize yapılan bağlantıları anlık olarak görüntülememize olanak sağlar. Kullanımı tcpdump şeklindedir.

Ayrıca adres çözümlemesi yapmadan direk olarak bağlantıları takip etmek istersek tcpdump -n komutunu kullanabiliriz.

DNS Ayarları

Komut satırından DNS ayarlarımızı değiştirmek istersek DNS bilgilerinin tutulduğu /etc/resolv.conf/ dosyasında değişiklik yapmamız gerekiyor. İşlemeleri adım adım açıklayarak ilerleyelim.

İlk olarak DNS ayarlarının bulunduğu dosya içeriğine göz atıyorum. Çünkü daha sonra değişiklik yaptığımızda ilk hali ile kıyaslamamız gerekecek. Bu işlemi cat komutu yardımı ile gerçekleştireceğiz.

Şimdi eski DNS(nameserver) yerine bizim eklemek istediğimiz adresleri echo komutu yardmı ile girelim.

Komutları kısaca açıklayacak olursak ilk olarak echo "nameserver 8.8.8.8" > resolv.conf komut bütününde > karakteri ile birlikte dosya içerisinde var olan ifadeleri sildik ve dosya içerisine nameserver 8.8.8.8 ifadesini ekledik.

Daha sonra echo "nameserver 8.8.4.4" >> resolv.conf komut bütünü ile de daha önce eklediğimiz ifadeye ek olarak diğer bir DNS adresi olan 8.8.4.4 adresini >> karakteri yardımı ile ekledik.

Son olarak da eklediğimiz yeni DNS adreslerinin belgeye eklenme durumunu cat /etc/resolv.conf komutu ile teyit ettik.

hosts Dosyası

Yerel bir alan adı sunucusu işlevindedir. Sistemde alan adı çözümlemesi yapılırken bu dosyaya bakılır. Dosyanın konumu /etc/hosts şeklindedir. Hemen dosya içeriğine cat komutu yardımı ile bir göz atalım.

Böylelikle en sık kullanılan ağ komutları hakkında genel bilgi sahibi olmuş olduk. Artık daha fazla bilgi için network konusunda detaylı araştırma yapmak sizlere kalıyor.


Vim Editörü

Vim Editörü Terminalden kullanılabilen ve komut alabilen yaygın kullanıma sahip bir editördür. Vim editörü kullanımının yaygın olmasının nedeni çok hafif bir editör olmasından kaynaklanmaktadır. Uzaktan erişim durumunda bağlantı(ağ/network) üzerinde fazlaca yük bindirmeden kolayca efektif şekilde gerekli işlemleri yerine getirir. Günümüzde daha yetenekli editörler de vardır ancak biraz eski alışkanlıklardan biraz da hafif şekilde çalışmasından dolayı hala tercih edilen bir editördür. Genelde ğrenmek isteyen kişilere ilk öğrenim aamasında fazlaca karışık gelse de sonraları kullandıkça benimsenir. Bu durumu ileride sizler de gözlemleyeceksiniz. Ayrıca önceki adı vi olan editörün günümüzde gelişmiş versiyonu, vim ismini almış ve görsel arayüze sahip versiyonu ise gvim adıyla isimlendirilmiştir.

vi-vim-gvim

Editörü konsoldan açmak istersek vim komutu yeterli olacaktır. Ayrıca görsel arayüze sahip versiyonu olan gvim editörünü açmak için de gvim şeklinde komut kullanımı yeterli olacaktır. Ancak yeri gelmişken belirteyim görsel arayüz genel olarak pek tercih edilmiyor. Kullanıcılar terminal üzerinden tek pencerede hızlı işlem yapmak adına ve biraz da geçmişten gelen alışkanlıklarından dolayı editörü terminal üzerinden kullanmayı tercih ediyorlar.

Konsola vim komutunu vererek editörümüzü açalım.

Editörle çalışmak için i tuşuna basıyoruz ve editör sol alt köşede –INSERT– yazısı ile içerik almaya hazır olduğunu belirtiyor.

Örnek olması açısından editöre aşağıdaki şekilde birkaç dize yazı ekledim.

Gerekli ifadeleri girdikten sonra komut vermek istersek ESC tuşuna bastıktan sonra komutları : karakteri başta olacak şekilde vermemiz gerekiyor. Kullanabileceğimiz bazı komutlar aşağıdaki şekildedir.

:q = Eğer yapılan değişiklikler kayıt edilmişse Vim editörünü kapatır. Aksi durumda uyarı verecektir.

:q! = Editörü kaydetmeden direk olarak kapatır.

:w = Yapılan değişiklikleri kaydeder.

:wq = Yapılan değişiklikleri kaydeder ve çıkar. Daha önce isim verilmemiş bir dosya ise :wq dosya_ismi şeklinde kullanılmalıdır.

Dosya oluşturmak zere vi editöründe ESC tuşuna basıp :wq vi_dosyasi komutunu girelim.

Dosyamız oluştu, hemen bu durumu teyit etmek için ls -l komutunu kullanalım.

vi_dosyasi isimli dosyanın oluşturulduğunu teyit ettikten sonra tekrar vim editörü ile açmak için vim vi_dosyasi şeklinde komutumuzu kullanıyoruz.

Dosya oluşturup tekrar açtığımıza göre artık daha farklı komutlara ve diğer konsol komutlarını vim editörü aracılığı ile nasıl kullanacağımıza bakalım.

:x = Editörü kapatır ve değişiklikleri kaydeder.

:r dosya_adı = Hedef dosyayı okur ve içeriği mevcut dosyaya aktarır. Daha iyi anlaşılması için örneği inceleyin.

Adım adım açıklayalım:

İlk önce vim editörü ile x_dosyasi ve y_dosyasi isminde iki dosya oluşturuyorum ve bu dosyaların içerisine:

x_dosyasi için ; “Bu dosya x dosyasının içeriğini temsil ediyor”.

y_dosyasi için ; “Bu dosya ise y dosyasının içeriğini temsil etmekte..

İfadelerini ekliyorum daha sonra dosya içeriklerini cat komutu yardımı ile inceleyerek teyit ediyorum.

Şimdi Vim editörü ile oluşturulan bu dosyalardan birini diğerine eklemeye geldi sıra; Ben x_dosyasi‘na y_dosyasi içeriğini eklemek üzere, x_dosyasi‘nı vim x_dosyasi komutu ile açıyorum.

Vim editörü içerisinde açılan x_dosyası‘ndayken :r y_dosyasi komutunu veriyorum.

Böylelikle y_dosyasi içerisinde yer alan ifadeler x_dosyasi içerisine eklenmiş oldu.

Bu durumu hemen cat komutu yardımı ile teyit ettik zaten.

Konsol komutlarını vim editörü içerisinde kullanabileceğimizden bahsetmiştik. Bunu yapabilmemiz için komuttan önce iki nokta üst üste ve ünlem karakterlerini kullanmalıyız yani örnek kullanımı :!komut şeklindedir. Hemen bu durumu ls komutu için deneyelim.

Vim editörü içerisinde :!ls komutunu verdiğimizde sistem otomatik olarak vim editöründen çıkarak konsolda bize ls komutunun çıktılarını bastı. Eğer bu durumda tekrar vim editörüne dönmek istersek enter tuşuna basmamız yeterli olacaktır.

Şimdi biz neden konsol varken bu editörden komut vermekle uğraşalım diye düşünmüş olabilirsiniz sizlere bu durumu örnek ile açıklayalım.

Örnek olması açısından ls komutunun çıktılarını bir dosyaya kaydetmek isteyelim.

Bunun için vim editörü ile bir dosya oluşturuyorum.

vim dizinler komutu ile vim editörü içerisinde boş bir dosya açıyorum ve bu dosya içerisindeyken :r !ls komutunu veriyorum.

Komut sonucunda oluşturmuş olduğum dizinler dosyası içeriği aşağıdaki şekilde oluyor.

Kullandığımız komut bütününü açıklayacak olursak(aslında bunları zaten biliyorsunuz ama ben yine de açıklama gereksinimi duydum) :r komutu içerik aktarma işlevinde !ls komutu ise dizin altındaki dosya-klasörleri listelemekle görevli.

Dosyayı :x komutu ile kaydettik ve ayrıca teyit etmek için cat dizinler komutunu kullandık.

Vim editörü ile birden fazla dosya ile işlem yapmamız mümkün bunun için komutu vim dosya1 dosya2 dosya3 şeklinde kullanabiliriz.

Komutumuzu verdikten sonra dosya1 vim editöründe açılacaktır. Gerekli değişiklikleri yaptıktan sonra eğer diğer dosyalara geçiş yapmak istersek çalıştığımız dosyayı kaydettikten sonra :next komutu ile dosya2‘ye geçiş sağlanacaktır. Aynı şekilde dosya3 dosyasına da geçmek mümkün olacaktır.

Eğer geçiş yaptığımız dosyadan bir öncekine dönmek istersek de :previous komutunu kullanmamız yeterli olacaktır.

Ayrıca kaç dosyanın vim editöründe çalıştığını pencere ekranının üst bilgi kısmından öğrenebiliriz. Örneğin ben 3 dosya ile çalıştığım için üst kısımda bulunduğum dosya bilgisi ile beraber dosya1 (~) (1 of 3) - VIM şeklinde bir üst bilgi yazısı bulunuyor.

Dosyada bulunan ifadeleri değiştirmek istersek :satır_sayısı s/eski_ifade/yeni_ifade/g şeklinde bir komut btünümüz bulunuyor. Bu gösterim ile anlamamş olabilirsiniz o yüzden hemen birkaç örnek ile konuyu açıklayalım.

linux isimli bir dosya oluşturuyorum ve içerisine aşağıdaki ifadeleri ekliyorum.

İlk önce burada yer alan 1. ve 2. satırdaki linux ifadelerini LİNUX ile değiştirmek üzere vim editörü içerisinde iken :1,2s/linux/LİNUX/g komutunu veriyorum. Daha sonra :x komutu ile dosyayı kaydederek vim editörünü kapatıyorum. Ve dosya içeriğini cat komutu ile sorguladık.

Görüldüğü gibi 1. ve 2. satırdaki linux ifadeleri LİNUX şeklinde değişmiş oldu.

Eğer tüm satırlardaki linux ifadelerini LİNUX olarak değiştirmek istersek komutu başına yüzde işaretini ekleyerek :%s/linux/LİNUX/g şeklinde kullanmamız yeterli olacaktır.

Komutumuzu verdikten sonraki çıktı ile bu durumu teyit ettik.

.

Vim editörü çok güçlü bir araç ve gerçekten çok farklı kullanım şekilleri-özellikleri var. Yani bu editörün kendisini anlatmak zaten başlı başına koca bir kaynak oluşturmakla eşdeğer. Hatta bu durumu vim editörünün kendi wiki kaynağından da teyit edebilirsiniz.

Biz yine de birkaç kısa kullanım şeklini daha görelim.

Eğer direk olarak konsol üzerinden veri girişi yapmak istersek konsola vim - komutunu girmeliyiz.

Böylelikle konsol bize Vim: Reading from stdin… çıktısını verecek ve bizden veri girişi bekleyecektir.

Ben örnek olması açısından konsoldan vim editörüne birkaç ifade ekliyorum.

İfade giriş işlemim tamamlandığında Ctrl + D tuş kombinasyonunu uygulayarak, vim editörü ekranına yazdığım ifadeler ile birlikte dönmüş oluyorum.

Ayrıca vim editörü ile oluşturduğumuz dosyaları şifreleyerek koruma imkanımız da var. Bu durumu bir örnek üzerinden anlatalım.

vim vim_metni komutu ile bir belge açıyorum ve içerisini bazı ifadeler ekleyerek belgeyi kaydediyorum.

Dosyamızın özelliklerini file vim_metni komutu ile öğrenip, dosyanın içeriğini ise cat vim_metni komutu ile okuyalım.

İstediğimiz bilgilere kolayca ulaşabildik. Bu durumu birde dosyamızı şifreleyerek test edelim. Bunun için konsola vim -x vim_metni şeklinde komut veriyoruz ve konsol bizden şifre belirlememizi istiyor.

Dosyamıza birkaç veri daha ekledikten sonra dosyamızı :w komutu ile kaydettik. Ve sonuç olarak vim editörü alt bilgi çubuğunda bize dosyanın şifrelendiğini aşağıdaki çıktıda yer alan “vim_metni” [crypted] şekilde ifade ederek belirtti.

Daha sonra dosyamızı tekrar file ve cat komutları ile sınadık. Çıktı da görüldüğü üzere dosyamız artık şifrelenmiş durumda. Yani dosyayı tekrar okunaklı şekilde açabilmemiz için şifresini girmemiz gerekecek. Bu durumu hemen vim_metni isimli dosyamızı açmaya çalışarak test edelim. Bunun için konsola vim vim_metni komutunu giriyoruz. Ve konsol bize aşağıdaki çıktıyı veriyor.

Konsol çıktısında da görüldüğü gibi bizden bir parola isteniyor. Eğer parolayı doğru girersek dosyamız açılacaktır.

Ancak sizlere önemli bir uyarı;

Bu dosya şifreleme olayı iyi hoş ancak çok çok önemli bir nokta var o da belirlediğiniz şifre. Eğer uzun, karmaşık yazarsanız bu şifreyi unutma riskiniz yüksek olacağından daha sonra bulmanız veya bir şekilde kırmanız da bir o kadar zor olacaktır. Ayrıca kısa ve kolay şifreler de kolayca kırılabileceğinden pek güvenli bir yol sayılmaz. Yani anlayacağınız ne unutacağınız kadar uzun veya karmaşık ne de kolay kırılabilecek kadar kısa olsun. Şimdiden sizleri uyarıyorum sonradan bu durum yüzünden aman başınız ağrımasın.

Vim editörü konusunu yavaş yavaş bitirmek üzere devam edecek olursak.

Örneğin vim editöründe kod yazıyordunuz ve kod 101. satırda hata verdi. Bu durumda 101. satırı aramak yerine editöre :101 şeklinde yazarak hatalı kodun bulunduğu satıra ulaşabiliyoruz. Yani direk olarak atlamak istediğimiz satırı vim editörüne :satır_numarası şeklinde girerek bu işlemi gerçekleştirebiliriz.

Eğer yazdığınız ifadeler içerisinden herhangi bir ifadeyi bulmak isterseniz /aranacak_ifade şeklinde yazarsanız ilgili ifadeye ulaşmış olursunuz. Ve aynı ifadenin başka yerlerde geçmesi durumunda bir sonraki ifadeye gitmek için :/ komutu, bir önceki aynı ifadeye dönmek için ise :? komutunu kullanıyoruz.

Eğer aradığımız ifadede büyük küçük harf duyarlılığı olmadan hedefteki aranan ifadenin aynısı olan bütün ifadeleri bulmak istersek :set ic komutunu verdikten sonra ifademizi /ARNACAK_İFADE şeklinde ya da /aranacak_ifade hatta ArAnAcAk_İfAdE şeklinde dahi belirtebiliriz. Sonuçta aynı karakter bütününü içeren ifadeler karşımıza gelecektir.

Vim editörü anlatımının burada sonuna geliyoruz. Ancak dediğim gibi zaten vim editörü başlı başına bir dokümantasyon konusu ki bu bilgileri burada izah etsek bile fazlaca gereksiz ayrıntıya değinmiş, sizlere boş yere yormuş olurduk. Vim editörü ancak baştan beri bahsi geçen kendi kendine öğrenme, deneme, alıştırma yapma ve özümseme ile öğrenilecek bir konudur. Kullanmanız şart değil kimisi çok sever kullanır kimisi ayrıntılarından nefret eder bırakır.

Neticede internette yer alan tüm zengin kaynaklar ile birlikte man kılavuz sayfasından, vim editörü içerisinde iken :help komutundan ve daha önce verdiğim vim editörü wiki kaynağından diğer tüm bilgilere ulaşabilirsiniz.(Benim önerim ilk başlarda ayrıntıları kolay kavramak adına vim editörü için geniş çaplı Türkçe kaynak sağlayan bu adresi kullanmanızdır.)

Ve unutmayın bu araç ancak ve ancak, öğrenmek isteyen kişinin kendi kendine kurcalaması ve bolca alıştırmalar yapmasıyla öğrenilebilir.


Konsol Üzerinden Dosya İndirmek

İndirmek istediğimiz dosyanın direk indirme linkini biliyorsak bu dosyamızı herhangi bir ekstra program kullanmadan veya tarayıcıya ihtiyaç duymadan konsol üzerinden wget komutu yardımı ile indirmemiz mümkün. Gelin anlatıma wget komutunu ve kullanım şekillerini açıklayarak devam edelim.

wget

Eğer daha önce linux ile ilgili yönergeler okuduysanız veya videolar izlediyseniz wget komutuna mutlaka denk gelmişsinizdir. Kullanımı oldukça kolaydır ve parametreler alarak çalışır. Birkaç kullanım şekline değinecek olursak:

Tekil Dosya İndirmek :

wget komutunun en temel kullanım şeklidir. Hedef link aracılığı ile tekil dosya indirme işlevinde kullanılır.

Kullanımı: wget indirilecek_dosya_linki

Örnek olarak aircrack-ng aracını indirdim. Ve indirme işlemini ls -l komutu ile teyit ettim.

enter image description here

Ve.. bulunduğum dizin içerisine istediğim dosya(aircrack-ng) indirilmiş oldu.

Toplu Dosya İndirmek :

Bir metin belgesinin içerisine kayıt ettiğimiz linklerde yer alan dosyaları tek seferde wget komutu ile beraber -i parametresi kullanarak indirmemiz mümkün. Hemen örnek üzerinden bu durumu görelim.

Örneğin ben T.C Resmi Gazetesi pdflerinden 5 tanesini aynı anda indirmek istiyorum diyelim. Bunun için bu pdflerin indirme linklerini bir metin belgesine kaydetmem gerekiyor. Ben bu işlemi leafpad resmi_gazeteler komutu ile “resmi_gazeteler” isimli bir dosya oluşturarak ve içerisine gerekli linkleri ekleyerek gerçekleştiriyorum.

enter image description here

Artık sıra geldi toplu indirmelere. Bu işlem için konsola wget -i resmi_gazeteler komutumu giriyorum.

enter image description here

PDF belgelerimiz toplu şekilde indirilmiş oldu şimdi de bu dosyaların varlığını teyit etmek için konsola ls -l komutunu verdim.

Özel Konum Belirterek İndirmek : Eğer dosyanın konsolun üzerinde çalıştığı konuma değil de bizim istediğimiz özel bir konuma indirilmesini istersek bunun için wget -P kaydedilecek_dizin_yolu dosya_linki şeklinde komut vermemiz gerekiyor.

enter image description here

Dosyamızı istediğimiz konuma indirmek için indireceğimiz dizin adresinin tam yolunu belirtmemiz gerekiyordu bu nedenle buradaki ~/Desktop kullanımı sizi şaşırtmasın ~ işareti ana dizini temsil ediyor.

Ve sonuç olarak indirdiğimiz konuma gelerek dosyanın varlığını teyit etmiş olduk.

Özel Konum Ve İsim Belirterek İndirmek : İndirilecek dosyanın adını değiştirerek istediğimiz konuma indirmesini istersek wget komutumuzu -O parametresi ile birlikte wget -O kaydedilecek_dizin_yolu/dosyanın_yeni_adı indirme_linki şeklinde kullanıyoruz.

enter image description here

Dosyamızı “aircrack” ismi ile indirip /Desktop dizinine kaydettik bu durumu da ls -l komutu ile teyit ettik.

Ayrıca indirilen dosyanın konumunu değiştirmeden yalnızca ismini değiştirmek isterseniz de herhangi bir konum belirtmeden yalnızca yeni dosya ismini belirtmeniz yeterli olacaktır. Örneğin wget yeni_isim dosya_link şeklinde bir kullanım indirilen dosyanın isminde değişiklik yapılarak indirilmesini sağlar.

Kesintiye Uğrayan İndirmenin Devam Ettirilmesi : Bir şekilde dosyanın indirme süreci kesilirse yani dosya tam olarak indirilemez ise dosyanın geri kalanının daha sonra indirilmesi mümkündür. Kesintiye uğrayan dosyayı tekrar indirmek için wget komutuna ek olarak -c parametresi eklenmelidir. Böylelikle wget -c indirme_linki şeklinde bir kullanım sonucunda eğer dosya tam olarak indirilemezse sonradan dosyayı tekrar baştan indirmek yerine kaldığı yerden devam ettirme şansımız olur. Bu durum özellikle de büyük dosyalar için gerçekten çok büyük kolaylık sağlıyor. Adım adım yaptığım işlemleri inceleyelim.

İlk olarak içi tamamen boş olan /Documents dizinine cd /Documents komutu ile ulaştım. Bu dizinin içerisinin boş olduğunu ls -l komutu ile teyit ettim.

enter image description here

/Documents dizini içerisinde iken wget komutu ile dosyamı indirmeye başladım. Daha sonra indirme işlemini Ctrl + Z tuş kombinasyonu ile durdurdum. Durdurmamdaki amaç daha sonra devam ettirebilme özelliğini test etmekti.

enter image description here

İndirme işlemi durdurduktan sonra /Documents dizinini kontrol etmek için ls -l komutunu kullandım. Ve dosyamın 638681 bayt kadarının inmiş olduğunu gördüm.

enter image description here

Durdurmuş olduğum indirme işlemine devam etmek üzere wget komutu ile beraber -c parametresini de kullanarak dosya indirme işlemini kaldığı yerden devam ettirdim.

enter image description here

Ve son olarak dosyamın başarılı ve tam bir şekilde indirildiğini ls -l komutu ile teyit ettim.

Çıktıları karşılaştıracak olursanız başta 638681 bayt’ta kalan indirme sonuç itibari ile 4379880 bayt yani dosyanın tamamı şeklinde indirilmiş oldu. Yani dosya indirme işlemi yarıda dahi kesilse en baştan indirmemize gerek kalmadan wget komutunun -c parametresi sayesinde kaldığı yerden indirme işlemini devam ettirebiliyoruz.

İndirme Hızını Belirlemek : Eğer istersek indireceğimiz dosyanın ne kadarlık internet hızında ineceğini belirleyebiliriz. Bu limitleme işlemi için komutumuzu wget --limit-rate=indirme_limitiK indirme_linki şeklinde kullanıyoruz.

Örnek olması açısından ben dosyayı indirirken 300KB/s hızında indirme limiti koyuyorum.

enter image description here

Zaten üst kısımda yer alan çıktının sonucunda da bu hız sınırlamasının sonucu olarak ortalama indirme hızı (300 KB/s) olarak gözüküyor.

Arka Planda İndirmek : İndirmek istediğimiz dosyanın arka planda inmesini -b parametresi ile sağlarız. İndirme işleminin sonuçlarını öğrenmek istersek indirilen dosya ile aynı konumda yer alan wget-log dosyasını incelememiz yeterli olacaktır.

enter image description here

Dosyamızı arka planda indiriyoruz ve konsol çıktıda bize indirme detaylarının wget-log dosyasında olduğunu bildiriyor. Bu indirme kayıtlarına göz atmak istersek cat wget-log komutu ile kayıt dosyasına bakabiliriz.


Zamanlanmış Görevler

Sistemde yapılması gereken rutin işlerin zamanı geldiğinde otomatik olarak yapılması işine zamanlanmış görevler deniyor. Bu rutin işlere örnek söylemek gerekirse; benim her pazartesi sistemi yedeklemem gerekiyor diyelim, bunu her pazartesi elle yapmak yerine bu işi zamanlanmış görevlere ekleyerek otomatiğe bağlayabilirim. İşte zamanlanmış görevler bu ve bunun gibi durumlarda sıkça kullanılıyor.

cron

Rutin tekrarları sağlayan zamanlanmış görevleri yerine getirmemizi sağlayan servisimizin adı cron‘dur.

Anlatıma cron servisinin çalışma durumunu kontrol ederek başlayalım. Bunun için konsola service cron status komutunu verelim.

Cron servisimizin çalıştığını teyit etmiş olduk. Cron servisinin yapılandırma dosyası /etc/crontab konumunda yer alıyor göz atmak için konsola cat /etc/crontab komutunu verebiliriz.

Şimdi de düzenleme yapmak adına konsola crontab -e komutunu verelim. Burada yer alan -e parametresi “edit” kelimesini yani “düzenleme” ifadesini temsil ediyor.

Konsol bize düzenleme yaparken hangi aracı kullanmak istediğimizi soruyor. Ben nano aracını seçiyorum yani konsola 2 rakamını giriyorum.

Çıktıda bize bir örnek kullanım gösterilmiş biz bu kullanımı ele alarak servisin kullanım şeklini görelim.

Yukarıdaki şema yeterince açıklayıcı olmadıysa endişelenmenize gerek yok. Örnekler üzerinden yapacağımız anlatım ile cron servisimizin kullanımını rahat şekilde anlamış olacağınıza inanıyorum.

Zamanlanmış görevleri yerine getiren servis cron ve bu servisin yerine getirdiği işlere de cron job deniliyor. Bu tanımın çok da önemi yok ancak bunu böyle bilseniz daha iyi olur. Bizler de kendi zamanlanmış görevlerimizi (cron jobs) atamak istersek crontab -e komutu ile açtığımız dosyanın son satırına yapmak istediğimiz işi ve tam tarih düzenini girmemiz gerekiyor. Bu görevleri nasıl oluşturacağımızı konunun devamında örnekler üzerinden öğreniyor olacağız.

Örnekler

Kullanımın anlaşılması amacıyla örnekleri olabildiğince basit tuttum.

Sizlere vereceğim örnekler ne kadar gereksiz gelse de örneği konuyu anlamak adına kullandığımızı unutmayın ve asıl anlatılmak istenen noktaya odaklanın lütfen.

O anın tarihi detaylarını bir dosyaya kaydetmek istiyorum diyelim. Tarihi detayları zamanlar.txt isimli klasöre kaydetmek için * * * * * echo date >> ~/Desktop/zamanlar.txt komutunu kullanacağım.

Bütün yıl boyunca her dakikanın çıktılarını kaydetmesini istersem aşağıdaki şekilde bir kullanım işimizi görür.

Yıldız işareti (*) olan kısımlar hepsini kapsamaktadır yani haftanın bütün günleri, ayın bütün günleri ve saatin bütün dakikaları.. gibi.

Komutun düzenli hali * * * * * echo date >> ~/Desktop/zamanlar.txt şeklindedir.

Bir süre geçtikten sonra masaüstünde(Desktop dizininde) yer alan zamanlar.txt dosyasını cat zamanlar.txt komutu ile kontrol ediyorum.

Görev istediğimiz şekilde yani her dakikada yazılacak şekilde otomatik olarak gerçekleşmiş oldu.

Şimdi spesifik bir zaman belirleyerek görevin yerine getirilme durumunu ele alalım.

Her gün 10:25 da otomatik olarak test.txt isimli belgeye “test yazısı” yazdırmak için kalıbı crontab dosyasına aşağıdaki şekilde yazmalıyız.(Ayrıca başta hangi ifadenin neyin karşılığı olduğunu belirttiğim için tekrar tekrar üzerlerine yazmıyorum. Eğer şaşırırsanız yukarıdaki kısımları tekrar gözden geçirebilirsiniz.)

25 10 * * * echo "test yazısı" >> ~/Desktop/test.txt

ls -l komutu ile de dosyamızın üretildiği tarihi sorguladık ve çıktıdan da anladığımız üzere verdiğimiz görev zamanında yerine getirilmiş.

Eğer belirli bir saat-tarih arasında belirli kere tekrar eden görev atamak istersek kullanım şekilleri aşağıdaki örneklerdeki gibi olacaktır.

Belirli aralıklar ile olacaksa aralıkları -(kısa çizgi) işareti ile ayırarak belirtmemiz gerekiyor. Yani örneğin;

Her saatin ilk 5 ile 20 dakikası arasında komutum çalışsın istersem:

5-20 * * * * komut

Her gün saat 3 ile 5 arasında her dakika komutum çalışsın istersem:

* 3-5 * * * komut

Her ayın 5 ile 15. günleri arasında saat 16 ile 22 arasındaki her saatin ilk 20 dakikası komutum çalışsın istersem.

0-20 16-22 5-15 * * komut

Haziran ayında ilk 20 gününün her cuma günü saat 12 ile 15 arasındaki 35 ile 55 dakikaları arasında komutum çalışsın istersem:

35-55 12-15 1-20 6 5 komut 

Belirli gün ve tarihlerde olacaksa o tarihleri ,(virgül) işareti ile ayırarak tek tek belirtmemiz gerekiyor. Yani örneğin;

Her saatin 5 10 15 ve 20. dakikalarında komutum çalışsın istersem:

5,10,15,20 * * * * komut

Her gün saat 3 5 ve 7 de komutum çalışsın istesem:

0 3,5,7 * * * komut

Her ayın 20 22 24 ve 26. günleri 2 4 6 ve 8 saatlerinin 5. ve 10. dakikalarında komutum çalışsın istersem:

5,10 2,4,6,8 20,22,24,26 * * komut

Belirli süre içinde belirli kez çalışmasını istersek /(taksim) işareti ile kaç kez olacağını belirtebiliyoruz. Yani örneğin;

5 dakikada bir çalışmasını istersem:

*/5 * * * * komut

10 saatte bir komutumun çalışmasını istersem:

* */10 * * * komut

Elbette örnekleri çoğaltmak mümkün ancak daha fazlası gereksiz olacaktır. Ayrıca atadığınız zamanlanmış görevlerin doğruluğunu kontrol etmek isterseniz bu adresten verdiğiniz zaman aralığının karşılığını görebilir ve hata yapmaktan kaçınabilirsiniz.

Yani bu konu sizlerin de biraz kurcaladıktan sonra anlayacağı kolay bir konudur.

Eğer belirlenen zamanlanmış görevleri listelemek istersek crontab -l komutunu kullanabiliriz. Buradaki -l parametresi “list” kelimesini yani “listeleme” işlevini temsil ediyor.

Şayet oluşturduğumuz tüm zamanlanmış görevleri silmek istersek crontab -r komutunu kullanmalıyız. Buradaki -r parametresi “remove” kelimesini yani “silme” işlevini temsil ediyor.


Log Kayıtları

Sistemde meydana gelen hatalar, sorunlar, işlemler, değişiklikler ve neredeyse her şey kayıt altına alınarak saklanır. Bu kayıt altına alınan bilgilere log deniyor. Neden log(kayıt) tutulmak zorunda diye soracak olursanız; kısaca sistemin olumsuz bir durumla karşılaşması halinde sorunun yaşanma nedeninin belirlenmesi, sistem güvenliğini sağlama, gerektiğinde veri kurtarma ve adli bilişim gibi alanlarda başvurmamız gereken yegane kaynaklardır log dosyaları. Anlayacağınız log(kayıt) dosyaları sistem bütünü için çok önemli yer tutmaktadır.

Log Dosyaları

Linux sisteminde log dosyalarının çok büyük kısmı /var dizini altında log klasörü içerisinde tutuluyor. Ayrıca log dizini içerisinde de belli başlı programlara ve servislere ait logları bulunduran başka alt dizinler bulunuyor. Bu durumu gözlemlemek için komut satırına cd /var/log yazarak log dosyalarının tutulduğu dizine gidip dizin içerisinde iken ls komutu ile dizin içeriğini listeleyelim.

Bir çok kayıt dosyası listelenmiş oldu. Örneğin ben buradan, oturum açma ilemlerini ve detaylarını tutan auth.log dosyasını açarak sistemde yapılmış olan oturum açma işlemlerini ve detaylarını inceleyebilirim. Ancak bu noktada bir kısa bilgi Linux sistemi log dosyalarının çok fazla yer kaplamasını önlemek için üzerine yazma metodunu kullanıyor. Bu noktada cron servisi ile log kayıtları her hafta eklenerek maksimum 1 ay kadar eskiyi yani 4 haftayı kayıt altında tutuyor. Bu tutulan kayıtlar 4 hafta sonunda; “log_dosyası.1.gz”, “log_dosyası.2.gz”, “log_dosyası.3.gz” şeklinde arşivlenerek saklanıyor. Yani örneğin siz eğer auth.log dosyasının bu ay değil de geçmişteki aylardaki kayıtlarına bakmak isterseniz. Arşivlenmiş olan “auth.log.1.gz”, “auth.log.2.gz”, “auth.log.3.gz” şeklindeki dosyalara bakmanız gerekir.

Log dosyalarını incelerken kolaylık olması açısından daha önce de kullanmış olduğumuz ve dosyanın alt(tail/kuyruk) kısımlarını listeleyen tail komutundan yararlanacağız. Bu sayede uzun uzadıya dosyanın tamamına bakmak yerine son eklenen bilgileri inceleyebileceğiz.

Hemen örnek olması açısından oturum açma işlemlerini ve detaylarını tutan auth.log kayıt dosyasını açalım. Bu açma işlemini de yalnızca dosyada en son yapılmış 5 değişikliği gösterecek şekilde yapalım. Bunun için konsola tail -n 5 auth.log komutumuzu giriyoruz.

Komutumuzu girmemizle birlikte konsol bize son 5 oturum açma işlemlerini ve detaylarını listelemiş oldu.

Hazır yeri gelmişken tail komutuyla sistemdeki olayların anlık olarak takibini yapalım. Bunun için sistemdeki olayların kaydını tutan messages dosyasını okumalıyız. Bu okuma işlemini sistemdeki anlık hareketleri takip etmek için yaptığımızdan, okuduğumuz dosyaya yeni eklenen her veriyi anlık görmek için tail -f messages komutunu kullanıyoruz. Buradaki tail -f komutunu açıklayacak olursam; biliyorsunuz tail komutu dosyanın alt satırlarını görüntülememize olanak tanıyan bir komut. Ve bu komutun -f parametresi de bu görüntülenecek kısım için dosyayı sürekli yeniden tarayarak dosyaya en son eklenen verileri bize göstermekle mükellef. Yani tail komutunun f parametresi bize yalnızca dosyaya en son eklenen ifadeleri güncel şekilde listeliyor.

dmesg

Sistem açılışından itibaren çekirdek tarafından üretilen tüm iletiler ve kernel hakkındaki kayıtlar /proc/kmsg dizininde tutuluyor. Ancak biz bütün kernel kayıtları yerine, sistem açılışında yazan açılış notlarını dmesg komutu ile görüntüleyebiliriz. Yani dmesg komutu sadece tampondaki son iletileri gösterir. Bu komutun kullanımına genelde sistem açılışında bildirilen problemlerin tespiti ve diğer sistem uyarılarını saptamak için başvurulur.

Elbetteki çıktı çok daha uzun ancak ben örnek olması açısından çıktıları kısaca verdim. Eğer siz bu çıktıları filtrelemek isterseniz grep komutunu kullanarak ilgili çıktılara rahatlıkla ulaşabileceğinizi biliyorsunuz. Örneğin yalnızca hataları görüntülemek istersek konsola dmesg | grep "fail" şeklinde yazdığımızda, konsol bize yalnızca sistem açılışında belirtilen hataları basacaktır.

Gördüğünüz gibi “fail” ifadesinin geçtiği, yani hataların belirtildiği tüm iletiler karşımıza gelmiş oldu.

last

Komutumuzun isminden de az çok anlaşılacağı gibi; en son oturum açan kullanıcıları listelemek için last komutunu kullanabiliriz.

last komutuyla en son oturum açan kullanıcılar uzunca listelenmiş oldu.

Eğer uzunca liste almak istemezsek komutumuzu en son listelemek istediğimiz satır sayısını belirterek last -satır_sayısı şeklinde belirterek istediğimiz uzunlukta çıktı elde edebiliriz.

Örneğin ben sadece son 2 oturum hareketini görüntülemek istersem komutumu last -2 şeklinde belirtmem yeterli.

Veya sondan 4 oturuma bakmak istersem komutumuzu last -4 şeklinde kullanırım.

Ayrıca kullanıcı adına göre oturum açma bilgisi sorgulayabiliriz. Örneğin ben yalnızca “burak” isimli kullanıcı hesabının oturum hareketlerini görmek istersem, konsola last burak şeklinde yazdığımda karşıma yalnızca “burak” kullanıcı hesabının oturum hareketleri gelir.

Gördüğünüz gibi yalnızca “burak” kullanıcı hesabının oturum açma bilgileri listelenmiş oldu. Yani kullanıcıya göre oturum bilgilerini öğrenmek için, komutu last kullanıcı_adı şeklinde kullanabilirsiniz.


Linux Arayüzünü Özelleştirmek

Bu bölümde Linux’un en sevilen yanlarından olan grafiksel arayüzü özelleştirmeyi öğreneceğiz. Sizlerin de bildiği gibi Linux dışındaki işletim sistemlerinde bu grafiksel özelleştirme oldukça sınırlıdır. Windows ve macOS gibi dağıtımlarda sistem belirli bir arayüz ile gelir ve sizlere yalnızca bir kaç özelleştirme imkanı sunar.

Ancak Linux’ta durum böyle değildir. Linux, kullanıcısına bir çok konuda olduğu gibi grafiksel arayüz konusunda da tam özelleştirme imkanı tanır. Zaten Linux’un en sevilen yanlarından biri de bu sınırsız müdahale ve özelleştirme imkanıdır. Burada bahsedilen grafiksel arayüze müdahalenin kullanıcıya sağladığı imkanlar kullanıcının ihtiyaçlarına göre değişmektedir.

Şöyle ki; örneğin kullanıcı göze hitap eden bir sistem görünümü istiyorsa kendi zevklerine göre arayüzde özelleştirmeler yaparak severek kullanacağı bir sistem görünümü ortaya çıkarabilir. Ya da kullanıcı için sistem performansı daha ön plandaysa, buna uygun arayüzü de tercih edebilir. Yani kısacası bu özelleştirme imkanı kullanıcıyı belirli bir arayüz kalıbına zorlamadan ihtiyaçlarına göre bir arayüz kullanma imkanı tanır. İşte Linux’un kullanıcıları tarafından çok sevilmesinin ardında sistem ile ilgili herhangi bir sınırlamanın olmaması ve kullanıcının ihtiyacına göre sistemin baştan aşağı tıpkı bir hamur gibi şekil alması yatmaktadır. Kısacası Linux ne eksiği ne de fazlalığı olan bir işletim sistemidir. Linux sizin neye ihtiyacınız varsa size onu sunabilecek potansiyelde bir sistemdir. Bu da size bilgisayara gerçek anlamda hükmetme imkanı tanır.

İşte tüm bu esneklik sayesinde Linux kullanıcıları diğer işletim sistemlerine oranla Linux’u çok daha efektif şekilde kullanabiliyorlar. Aslında bu özelleştirme imkanı ve avantajları konusunda çok daha fazla şey söylenebilir ancak Linux’un sağladığı tüm bu güzellikleri anlamanın en iyi yolu bizzat sizlerin de deneyimleyip görmesidir. Tüm bu söylediklerimizden yola çıkacak olursak; sonuçta, Linux’u özelleştirmenin bir sınırı bulunmuyor ancak biz bu kısımda genel olarak özelleştirme imkanlarının neler olduğunu kısaca görmüş olacağız.

Arayüz Değişimi İle İlgili Kavramlar

Evet, özelleştirmenin sınırsz olduğundan ve bizim ihtiyaçlarımıza göre değişebileceğinden bahsettik. Bu durumda özelleştirme yapmadan önce bizim ihtiyacımızın ne olduğunu belirlememiz gerekiyor. İhtiyacımızı belirlerken oldukça fazla etmen olduğundan ben burada başlıca etmenlerden olan performans ve güzel görünüm etmenlerini kısaca ele alıp örneklendirmeye çalışacağım.

Ancak örnek vermeden önce grafiksel arayüzü değiştirme hakkında öğrenmemiz gereken iki kavram bulunuyor. Bu kavramlardan biri masaüstü ortamı değiştirmek diğeri ise yalnızca pencere yöneticisi değiştirmektir. Hangi işlemin bizim için daha uygun olduğuna karar verebilmemiz için öncelikle bu seçeneklerin neleri ifade ettiğini kısaca ele alalım.

Masaüstü ortamı dediğimiz şey, grafiksel arayüzün tamamını kapsayan arayüz paketi bütününe deniyor. Burada kast edilen arayüz bütünü; sistemde yer alan simgeleri, araç çubuklarını, duvar kağıtlarını, pencere yöneticisini ve sürükle bırak gibi kolaylaştırıcı imkanları kapsayan kısımlardır. Yani masaüstü ortamı dediğimiz şey bizlere kapsamlı grafiksel arayüz sunar.

Diğer bir seçeneğimiz olan pencere yöneticisi ise bizlere yalnızca pencereler üzerinden çalışma imkanı sunar. Yani pencere yöneticisi içerisinde, masaüstü ortamında olduğu gibi araç çubukları, animasyonlu menüleri ve bunun gibi kapsamlı grafiksel arayüz ögelerini barındırmaz. Böylelikle kullanıcının sistemi daha performanslı kullanabilmesi için yalnızca pencereler üzerinden sistemin yönetilebilmesini sağlar. Örnek olması açısından yalnızca pencere yöneticisini kullandığınızda sistemin nasıl gözükeceğini, aşağıdaki openbox pencere yöneticisi ekran görüntüsüne bakarak görebilirsiniz. enter image description here

Şimdi hangi seçeneği hangi durumda seçmemiz gerektiği konusuna değinecek olursak; Masaüstü ortamı, içerisinde tüm grafiksel arayüz araçlarını barındıracağı için eğer sistemi kullanırken çok fazla grafiksel öge olduğunu ve bunların da sisteminizi yavaşlattığını düşünüyorsanız masaüstü ortamını kaldırarak sistemi yalnızca pencereler ile de yönetebilirsiniz. Buradaki açıklama sizi tam olarak yönlendirmemiş olabilir ancak ileri ki kısımlarda hem yeni masaüstü ortamı kurulumunu hem de pencere yöneticisi kurulumunu göreceğiniz için hangisinin sizin için uygun olacağına kendiniz karar verebiliyor olacaksınız. Yani buradaki açıklamalar sizin için yeterli gelmediyse endişelenmeniz gerek yok. Şimdi devam edelim.

Masaüstü ortamını nasıl değiştirebiliriz ?

Masaüstü ortamı dediğimiz şeyin grafiksel arayüz içerisindeki ögelerin tamamına yakınını kapsadığını daha önceki kısımda belirtmiştik. Yani arkaplan, menü çubuğu, araç çubuğu, gösterge paneli ve bunlar gibi her şey masaüstü ortamını kapsıyor. enter image description here Yani biz yeni bir masaüstü ortamı kurduğumuzda tüm bu ögeler de yeni masaüstü ortamı ile birlikte değişiyor. Eğer şu anda kullanmakta olduğunuz mevcut masaüstü ortamını değiştirmek isterseniz birbirinden farklı bir çok masaüstü ortamı seçeneğiniz bulunuyor. Ben başlıca masaüstü ortamlarının genel özelliklerinden bahsedeceğim ancak ondan önce mevcut masaüstü ortamımızı nasıl kendimize göre düzenleyip özelleştirebiliriz onu öğrenelim.

Gnome3 Masaüstü Ortamını Özelleştirmek

Kullanmakta olduğumuz Kali Linux dağıtımı varsayılan olarak en çok kullanılan masaüstü ortamlarından olan Gnome 3 masaüstü ortamı ile birlikte geliyor. Gnome 3 masaüstü ortamı oldukça yaygın şekilde kullanılmakta ve grafiksel arayüz bakımından bir çok kolaylık sunmaktadır. Ancak son dönemlerde geliştirici ekibin almış olduğu radikal kararlar doğrultusunda; masaüstünde yer alan kısayolların ve bazı önemli grafiksel arayüz araçlarının kaldırılması ile birlikte bir çok kullanıcı tarafından Gnome 3 masaüstü ortamı kullanışsız bulunmaktadır. Ayrıca Gnome 3 çok fazla grafiksel öge ve gereğinden fazla animasyonlu içerik barındırdığından sistem performansını da diğer masaüstü ortamlarına göre oldukça fazla olumsuz etkilemektedir. Bu noktada belirtmeliyim ki Gnome 3 masaüstü ortamını kötülemek gibi bir niyetim yok, dileyen arkadaşlar elbette severek kullanmaya devam edebilir. Ancak son dönemlerde edindiğim tecrübeler ve bana yapılan geri bildirimler ile birlikte artık Gnome 3 masaüstü ortamının pek de verimli çalışmadığı kanaatine varmış bulunuyorum. Fakat yine de Gnome 3 masaüstü ortamını kullanmaya devam edecek olan arkadaşlar için Gnome 3 temasında nasıl değişiklik yapabileceğimizi ele almak istiyorum.

Öncelikle belirtmek isterim ki; bu tema değişikliklerinin bir sınırının olmadığı için bu özelleştirmelerin tamamını kapsamlı şekilde anlatmam mümkün değil. Ancak ben bu kısımda sizlere genel olarak, yeni bir temayı nereden bulabileceğinizi ve bulduğunuz bu temayı sisteme nasıl geçirebileceğinizi göstereceğim.

Gnome 3 masaüstü arayüzünü kullanıyorken genel tema değişimlerini ince ayarlar(tweaks) menüsü üzerinden gerçekleştiriyoruz. Bu nedenle öncelikle ince ayarlar menümüzden ne gibi değişiklikler yapabileceğimizi öğrenmek için ince ayarlar menüsünü açalım. İnce ayarlar menüsü açıldıktan sonra “Görünüm” sekmesine gelelim. enter image description here Burada yer alan seçenekler sistem arayüzünde yapabileceğimiz temasal değişiklikleri gösteriyor. Görünüm sekmesinde yer alan seçenekleri sırasıyla ele alacak olursak;

Uygulamalar; Sistemdeki pencerelerin görünümünü değiştiriyor. Herhangi bir uygulama çalıştığında uygulamayı çevreleyen çerçevelere pencere deniyor. Örnek için aşağıdaki “Uygulamalar” kısmı değiştirilmiş görsele bakabilirsiniz. enter image description here

İmleç; İmlecin görünümünü sağlayan kısım. Aşağıdaki görselde değiştirilmiş hali verilmiştir. enter image description here

Simgeler; Sistemde yer alan simgelerin görünümünden sorumlu kısım. Aşağıda değiştirilmiş halleri verilmiştir. enter image description here enter image description here

Kabuk; Sistem genelindeki panelleri kapsayan kısımı ifade ediyor. Aşağıdaki görselde panelleri değiştirilmiş görüntü verilmiştir. enter image description here

Ses; Sistem seslerini kapsayan kısımdır, değiştirilmesi önerilmez.

Geri kalan kısımlar da zaten bildiğimiz masaüstü arkaplanı ve kilit ekranı görünümünü ifade ediyor.

Artık Gnome 3 masaüstü ortamında değiştirebileceimiz kısımlara göz attığımıza göre sırası ile nasıl değiştirebiliriz görelim. Tema kurulumunu yapmak için öncelikle hoşumuza gidecek bir tema edinmemiz gerekiyor. Bunun için https://www.gnome-look.org/ adresine girelim. Bu site Gnome ile ilgili temasal değişiklikleri içeren oldukça geniş çaplı bir platform. Ama ben şimdi örnek olması için çok detaya girmeden yalnızca genel temayı değiştirmeyi ele alacağım.

Uygulamalar Kısmını Değiştirmek

enter image description here Tema değişimi için GTK3 Themes yazan sekmeye tıklayalım. enter image description here Buradan gözünüze hitap eden bir tema belirleyebilirsiniz ben şimdi örnek olması açısından ilk temayı seçiyorum. Açılan tema sayfasından tema ile ilgili detaylı bilgi alabilir ve ekran görüntüleri ile tema hakkında fikir sahibi olabilirsiniz. enter image description here Temayı indirmek için Download butonuna basalım ve buradan istediğimiz içeriği indirelim. Gördüğünüz gibi bu temanın bir çok farklı varyasyonu bulunuyormuş, ben herhangi birini seçiyorum. Ve Save File diyerek dosyanın inmesini sağlıyorum.

Bu arada ben burada sizlere yol göstermek amacıyla örnekler verdiğim için çok fazla tema içeriğini karıştırmıyorum ancak sizler elbette deneye deneye hoşunuza gidecek temayı bulabilirsiniz. Zaten kurulum işlemi de oldukça basit olduğundan çok çabucak bir sürü tema deneyebilirsiniz.

Neyse dosyamız da inmiş oldu. Şimdi dosyamızı sistemin görebilmesi için /usr/share/themes/ klasörüne çıkarmamız gerekiyor. enter image description here

Evet dosyamı ilgili konuma çıkardım. Artık böylelikle sistem yeni eklediğimiz tema içeriğini görebilecek. Hemen yeni temayı kurmak için ince ayarları açalım. İnce ayar menüsüne arama çubuğuna “tweaks” yazarak da ulaşabilirsiniz. enter image description here Evet ince ayar menüsünü açtık, buradan görünüm sekmesine tıklayalım. Ve buradan ***Uygulamalar *** kısmından indirdiğimiz temayı seçerek kurulması sağlayalım. İşte yeni bir tema kurulum işlemi bu kadar kolay. Diğer temasal değişim işlemleri de aynı şekilde gerçekleşiyor. Hemen kısaca diğer değişimleri de yapalım.

İmleç Kısmını Değiştirmek

İmleci değiştirmek için öncelikle yeni bir imleç paketi indirmemiz gerekiyor. Paketi indirdikten sonra imleç dosyasını /usr/share/icons/ konumuna atmamız gerekiyor. Böylelikle sistem yeni imlecimizi tanıyabilecek. İndirdiğimiz imleç dosyasını ilgili konuma attıktan sonra yine ince ayar menüsünden Görünüm sekmesine gerek buradan imleç değişimi yapılabilir. Tüm işlemi aşağıdaki gif resmine bakarak takip edebilirsiniz. enter image description here

Simgeler Kısmını Değiştirmek

Simgeler kısmını değiştirmek için tıpkı imleç değiştirirken yaptığımız gibi, indirdiğimiz simge dosyalarını /usr/share/icons/ konumuna taşımamız gerekiyor. Hem imlecin hem de simgelerin aynı konumda bulunması kafanızı karıştırmasın. Zaten dosya yapılar farklı olduğundan sistem kolayca ayırt edebiliyor. Siz sadece beğendiğiniz simge paketini /usr/share/icons/ konumuna atın ve ince ayar menüsünden Görünüm sekmesine gelerek simgeler kısmından indirdiğiniz simgeyi bularak seçin. Tüm işlemi aşağıdaki gif resmine bakarak takip edebilirsiniz. enter image description here

Kabuk Kısmını Değiştirmek

Kabuk diye bahsedilen kısmın sistemdeki genel arayüz içerisinde bulunan panelleri karşıladığını daha önce söylemiştik. Şimdi değişimi için yeni bir arayüz paketi indirelim ve bu paketi /usr/share/themes/ konumuna çıkaralım. Ve daha sonra ince ayar menüsünden Görünüm sekmesine gelerek kabuk kısmından indirdiğiniz kabuk temasını bularak seçelim. Ve işlem bu kadar ! Tüm işlemi aşağıdaki gif resmine bakarak takip edebilirsiniz. enter image description here

Benim Gnome 3 ile ilgili göstereceğim temasal değişiklikler bu kadar, dileyen arkadaşlar çok daha fazla kurcalayarak çok daha fazla seçeneğe ulaşabilir. Şimdi Gnome 3 masaüstü ortamını bir kenara bırakarak yeni masaüstü ortamlarını tanıyalım.

Masaüstü Ortamları ve Kısaca Özellikleri

Baştan belirtmek isterim ki benim burada yazacağım şeyler kendi deneyimlerim ve genel gözlemlerimdir. Yani tam anlamıyla sizi yönlendirmeyebilir. Ben burada sizlerin kurulum yapmadan önce daha iyi fikir sahibi olabilmeniz için Kali Linux dağıtımında kullanılabilen masaüstü ortamlarının başlıca özeliklerini kısaca açıklamaya çalıştım. Ancak burada belirttiğim özellikler bir çok faktöre göre değişmektedir, yani siz buradan fikir sahibi olun ancak kesinlikle ve kesinlikle kendiniz deneyerek hangisinin sizin için en ideali olduğuna kendiniz karar verin. Uyarımı peşin peşin yaptıktan sonra hadi artık lafı daha fazla uzatmadan Kali Linux’a uygun olan masaüstü ortamlarının genel özelliklerini tanımaya başlayalım.

XFCE Masaüstü Ortamı

enter image description here Görsel olarak oldukça yalındır ve hiç bir gereksiz görsel arayüz ögesi kullanmaz. Önceliği sistemin maksimum verimde çalışmasıdır, minimal bir sistemdir. Çok hafif olduğundan sistemi yormadan oldukça hızlı şekilde çalışır. Eğer benim işim performans görsellik önemli değil diyorsanız tercih edebilirsiniz.

KDE Masaüstü Ortamı

enter image description here Daha çok Windows’u andırır, asıl hedefi grafiksel arayüz kullanıcılarıdır. Yani konsoldan ziyade kullanıcının her işi grafiksel arayüzde yapabilmesi üzerine dizayn edilmiştir. İlk defa Linux kullanmaya başlayacak kullanıcılar için geçiş evresinde sıklıkla tercih edilen bir temadır. Ancak ben yine de kullanıcıyı konsoldan uzaklaştırdığı ve bu sebeple Linux’ un gerçek gücünü ortaya koyamadığı için pek de önermiyorum. Bu söylediklerimden bu ortam kötüdür anlamı çıkmasın, sadece konsol üzerine yoğunlaşacak arkadaşlara öneri olarak belirtiyorum. Geçiş evresinde kullanılabilir ancak aman ha bağımlılık yapmasın yoksa konsol hakimliği, sisteme hükmetmek falan yalan olur söyleyeyim :)

LXDE Masaüstü Ortamı

enter image description here Az bir donanım gücü ile çok iyi işler çıkarabileceğiniz oldukça yalın masaüstü ortamıdır. Dolayısı ile grafiksel arayüz kısmında pek bir şey beklememek lazım. Amacınız sistemi verimli şekilde kullanmaksa ve elinizde güçlü bir donanım yoksa tercih edebilirsiniz.

Cinnamon Masaüstü Ortamı

enter image description here Cinnamon Gnome baz alınarak alınarak geliştirildiği için en çok tercih edilen masaüstü ortamıdır. Hatta son zamanlarda bir çok kullanıcıya göre kötüye giden Gnome3 için harika bir alternatiftir. Grafiksel arayüzünün kullanıcı dostu olması ve sistemi de çok fazla yormaması Cinnamon’u normal kullanıcılar arasında popüler yapmıştır. Hatta en çok kullanılan Linux dağıtımı olan Linux Mint’ de varsayılan olarak Cinnamon kullanmaktadır. Ve Mint’ in bu başarısı Cinnamon’un kullanışlı yapsına bağlanmaktadır.

Mate Masaüstü Ortamı

enter image description here Mate masaüstü ortamı da Gnome3’ün hantallığından bunalan kullanıcılar için harika bir alternatiftir. Bir zamanlar bir çok kullanıcı tarafından oldukça sevilen Gnome2’nin çatallamasıdır , ve özlem duyulan Gnome2’nin temsilcisidir. Sistem çok fazla kaynak tüketmez ayrıca sizleri grafiksel olarak da yormaz. Günlük rutin işlerinizi de çok rahat şekilde yerine getirebilirsiniz.

e17 Masaüstü Ortamı

enter image description here Güçlüdür, aynı zamanda gayet de şıktır. Hani olağanüstü görsel bir arayüz sunmaz ama sunduğu performansın yannda içinizi daraltacak bir görünüme de sahip değildir. Birçok cihazda oldukça verimli şekilde çalışmaktadır. Deneyimlemenizde fayda var derim :)

Kali Linux için Masaüstü Ortamları Kurma-Kaldırma İşlemleri

Hatırlatma; Bu işlemleri yapmadan önce sisteminizin güncel olduğunda emin olun, aksi takdirde sisteminiz güncel değilse kurulum gerçekleşmeyecektir.

Bilgilendirme; Sisteminize birden fazla masaüstü ortamı kurabilir ve dilediğiniz zaman bu ortamlara geçiş yapabilirsiniz. Yani aşağıdaki tüm masaüstü ortamlarını kurup tüm bu ortamlar arasında dilediğiniz zaman kolayca geçiş yapabilirsiniz.

XFCE Masaüstü Ortamı

XFCE Masaüstü Ortamını Kali Linux’a Kurmak İçin:

apt-get install kali-defaults kali-root-login desktop-base xfce4 xfce4-places-plugin xfce4-goodies

Kurulu Olan XFCE Masaüstü Ortamını Kali Linux’tan Kaldırmak İçin

apt-get remove xfce4 xfce4-places-plugin xfce4-goodies

KDE Masaüstü Ortam

Debian için Standart KDE Masaüstü Ortamını Kali Linux’a Kurmak İçin:

apt-get install kali-defaults kali-root-login desktop-base kde-standard

KDE Full Masaüstü Ortamını Kali Linux’a Kurmak İçin:

apt-get install kali-defaults kali-root-login desktop-base kde-full

Kurulu Olan KDE Masaüstü Ortamını Kali Linux’tan Kaldırmak İçin

apt-get remove kde-plasma-desktop kde-plasma-netbook kde-standard

LXDE Masaüstü Ortamı

LXDE Masaüstü Ortamını Kali Linux’a Kurmak İçin:

apt-get install lxde-core lxde kali-defaults kali-root-login desktop-base

Kurulu Olan LXDE Masaüstü Ortamını Kali Linux’tan Kaldırmak İçin

apt-get remove lxde-core lxde

Cinnamon Masaüstü Ortamı

Cinnamon Masaüstü Ortamını Kali Linux’a Kurmak İçin:

apt-get install kali-defaults kali-root-login desktop-base cinnamon

Kurulu Olan Cinnamon Masaüstü Ortamını Kali Linux’tan Kaldırmak İçin

apt-get remove cinnamon

Mate Masaüstü Ortamı

Mate Masaüstü Ortamını Kali Linux’a Kurmak İçin:

apt-get install kali-defaults kali-root-login desktop-base mate-desktop-environment-extra

Kurulu Olan Mate Masaüstü Ortamını Kali Linux’tan Kaldırmak İçin

apt-get remove mate-core

e17(Enlightenment) Masaüstü Ortamı

e17 Masaüstü Ortamını Kali Linux’a Kurmak İçin:

apt-get install e17

Kurulu Olan e17 Masaüstü Ortamını Kali Linux’tan Kaldırmak İçin

apt-get remove e17

Masaüstü Ortamını Aktif Hale Getirmek

İlgili masaüstü ortamını kurduktan sonra kullanabilmeniz için ilgili ortamı seçip aktif hale getirmemiz gerekiyor. Öncelikle kurduğumuz masaüstü ortamının sistem tarafından tanınması için kurulum işlemi bittikten sonra bilgisayarımızı yeniden başlatıyoruz. Sistem yeniden başlatıldıktan sonra karşımıza aşağıdaki gibi giriş(login) ekranı geliyor. Bu ekrana kullanıcı adımızı giriyoruz. Ve daha sonra dişli-çark simgesine tıklayarak buradan dilediğimiz masaüstü ortamını seçiyoruz. Ve parolamızı girerek sistemi açıyoruz. enter image description here İşte bu kadar yeni masaüstü ortamı karşımızda!

Eğer herhangi bir zaman masaüstü ortamını değiştirmek isterseniz de sadece oturumu kapatın(logout) ve yine kullanıcı adınızı girdikten sonra dişli-çark simgesinden kullanmak istediğiniz masaüstü ortamını seçin. Bu şekilde dilediğiniz zaman masaüstü ortamları arasında geçiş yapabilirsiniz. Geçiş işlemi gif resmi ile aşağıda açıklanmıştır. enter image description here

Yeni bir masaüstü ortamı seçtik ve kurduk diyelim. Peki bu ortamlara nasıl yeni tema yüklemesi yapacağım diyorsanız;

Öncelikle yapmanız gereken ilk şey kullanmakta olduğunuz masaüstü ortamına uygun tema paketlerine ulaşmak. Bunun için de örneğin XFCE kullanıyorsanız internette “xfce themes” şeklinde arama yaptığınızda karşınıza bir çok kaynaktan bir çok kullanışlı tema paketleri çıkacaktır. Diğer ortamlar için de elbette isimlerine göre kde themes, cinnamon themes, mate themes .. şeklinde araştırma yapmanız yeterli olacaktır.

Daha sonra da bu temaların nasıl kurulduğunu sistemi kurcalayarak oldukça rahat şekilde bulabilirsiniz. Şimdi sen neden burada tek tek açıklamıyorsun diyecek olursanız; ben zaten Gnome 3 üzerinden detaylıca tema kurulumunu sizlere örnek olması açısından gösterdim. Ancak bu noktadan sonra sizlerin de yeni kullanacağınız sistemi daha iyi tanıyabilmeniz için biraz kurcalamanız ve kendi kendinize bu değişimin nasıl yapıldığını keşfetmeniz gerekiyor. Neticede bu sistemi kullanacak olan kişiler sizlersiniz ve dolayısıyla gerçekten verimli bir sistem olup olmadığını ancak detaylıca araştırma ve deneme yanılma yolu ile öğrenebilirsiniz. Yeni bir tema kurmak vesilesiyle; bakın bakalım bu ortamlarda çalışmak aradığını bulmak sizin için ne kadar kolay, hangi masaüstü ortamı size daha konforlu geliyor.

Pencere Yöneticisi Kurulumu Ve Kullanımı

Sistemi yalnızca pencere yöneticisi ile yönetmek performans açısından oldukça verimlidir. Zira bir çok masaüstü ortamında gördüğümüz fazladan grafiksel ögeler ve animasyonlu içerikler sistemi boş yere yorarak bizlere düşük verimli işlem gücü sağlıyorlar. Eğer amacınız işlerinizi en kısa sürede en verimli şekilde halletmekse ve elinizdeki cihaz güçlü bir donanıma sahip değilse sistemi, pencere yöneticisinden kullanmak sizin için en ideal tercih olabilir. Sistemi yalnızca pencere yöneticisi ile yönetmek, kullanıcılar tarafından başlarda biraz garipsense de zamanla bu yönetim formuna tüm kullanıcılar adapte olur. Yani eğer başlarda kullanımı biraz alışılmadık gelirse anlayın ki yalnız değilsiniz, olay alışkanlık meselesi rahat olun.. :)

Şimdi de Kali Linux Dağıtımında kullanabileceğimiz pencere yöneticilerine göz atalım.

Pencere yöneticisi konusunda kullanabileceğiniz çok fazla alternatif bulunuyor. Bu sebepten burada hepsine değinmemiz mümkün değil. O yüzden biz de bu kısımda buradaki listede yer alan başlıca 5 pencere yöneticisi kurulumunu ele alacağız. Benim bu listedeki favorim openbox ancak siz kendiniz deneyimleyerek kendiniz için ideal olana karar verebilirsiniz.

i3 Pencere Yöneticisi

enter image description here i3 Pencere Yöneticisini Kali Linux’a Kurmak İçin:

apt-get install i3-wm

Kurulu Olan i3 Pencere Yöneticisini Kali Linux’tan Kaldırmak İçin

apt-get remove i3-wm

i3 Pencere Yöneticisi Temel Kullanım Kılavuzu İçin Bu Kaynağa Bakabilirsiniz:

awesome WM Pencere Yöneticisi

enter image description here awesome WM Pencere Yöneticisini Kali Linux’a Kurmak İçin:

apt-get install awesome

Kurulu Olan awesome WM Pencere Yöneticisini Kali Linux’tan Kaldırmak İçin

apt-get remove awesome

awesome WM Pencere Yöneticisi Temel Kullanım Kılavuzu İçin Bu Kaynağa Bakabilirsiniz:

Xmonad Pencere Yöneticisi

Xmonad Pencere Yöneticisini Kali Linux’a Kurmak İçin:

apt-get install xmonad

Kurulu Olan Xmonad Pencere Yöneticisini Kali Linux’tan Kaldırmak İçin

apt-get remove xmonad

Xmonad Pencere Yöneticisi Temel Kullanım Kılavuzu İçin Bu Kaynağa Bakabilirsiniz:

Openbox Pencere Yöneticisi

enter image description here Openbox Pencere Yöneticisini Kali Linux’a Kurmak İçin:

apt-get install openbox

Kurulu Olan Openbox Pencere Yöneticisini Kali Linux’tan Kaldırmak İçin

apt-get remove openbox

dwm Pencere Yöneticisi

enter image description here dwm Pencere Yöneticisini Kali Linux’a Kurmak İçin:

apt-get install dwm

Kurulu Olan dwm Pencere Yöneticisini Kali Linux’tan Kaldırmak İçin

apt-get remove dwm

dwm Pencere Yöneticisi Temel Kullanım Kılavuzu İçin Bu Kaynağa Bakabilirsiniz:


Başlıca pencere yöneticilerinin kurulumlarını ele aldık. Ancak bu anlattıklarım dışındaki pencere yöneticileri için de bu adreste yer alan listeye bakıp, listede yer alan pencere yöneticisinin kali depolarında yer alıp almadığını bu adresten teyit ederek kurulumunu yapabilirsiniz. Ben örnek olması açısından listede yer alan fluxbox isimli pencere yöneticisini sorgulayıp, eğer depolarda mevcutsa kurulumunu yapmak istiyorum. İşlemleri aşağıdaki gif resiminden takip edebilirsiniz. enter image description here Tekrar belirteyim verdiğim adreste yer alan linkteki her pencere yöneticisi Kali Linux için uygun olmayabilir, o yüzden mutlaka depolarda olup olmadığını teyit edin.

Son olarak; pencere yöneticisinin temasını nasıl değiştirebiliriz diyecek olursanız, bu indireceğiniz pencere yöneticisine göre değişir dolayısıyla bu tema değişimini bireysel olarak internetten araştırarak ve sistemi kurcalayarak bulmanız gerekiyor. Üstelik bu araştırma süreci içerisinde pencere yöneticisini daha yakında tanıyıp, size uygunluğunu anlayabilirsiniz. Eğer bu işlem bile sizlere zor geliyorsa, muhtemelen pencere yöneticisi kullanmak sizi mutlu etmeyecektir. Tek başınıza tema değiştirme olayını sakın gözünüzde büyütmeyin bu işlem oldukça kolay, tıpkı masaüstü ortamını değiştirmek gibi. Sadece araştırın ve deneyin.

unix - gnu/linuxservereducationunixlinuxgnu

Rojen Zaman

Anarchist | GnuPG: 0x9089BB25

Şifre Oluşturucu (Basit bir Bash Script)

How to change the DNS server in Linux?