04 - Linux ile çalışmak

Giriş

Linux ile çalışmak için bir Linux ortamına ihtiyacınız var. Bunun için en iyi ortam sisteminizde kurulu bir Linux dağıtımı, ancak bilgisayarınızı açar açmaz hazır bir Linux ortamı sunan CD/USB disk gibi ortamları da kullanabilirsiniz. Linux’u kurmak için gerekli işlemler ise dağıtıma göre değişmekte. Örnek dağıtımımız Gentoo’nun kurulum prosedürü de Gentoo web sitesinde gayet derin şekilde anlatılıyor. Ama şimdilik kurulum işlemlerinden bahsetmeyeceğiz. Kitabın ilerleyen kısımlarında, daha iyi anlayabileceğiniz şekilde kuruluma yoğunlaşacağız. Şimdilik Linux’a özel bazı önemli başlıklardan kısaca bahsedelim. Sırası geldiğinde her başlık uzun bir şekilde ele alınacak. Unix veya Linux kullanım deneyimine sahip olmayan kullanıcılar bu ortamı diğer işletim sistemlerinden oldukça farklı bulacaklardır (özellikle Microsoft Windows’dan). Sistem yapısındaki ana farkllılıklardan bahsedip hızlı bir değerlendirme yaparak, sonrasında (Gentoo Linux kullanmak için olmazsa olmaz bir özellik olan) Linux komut satırında çalışma ile ilgili detaylara gireceğiz. Kapanışı da komutlar ile ilgili daha fazla bilgi bulabileceğiniz ortamlara yönlendirerek yapacağız.

Sistem Yapısı

Kullanıcı Hesapları ve İzin Yapısı

Bir Linux sistemde tanımlı çok sayıda kullanıcı vardır. root olarak bilinen yönetici kullanıcı, sistemde istediği herşeyi yapabilir. Bu yönetici hesabı ile çalışmanız gayet mümkün olmakla birlikte, sisteme erişmesi gereken kişilere ayrı birer kullanıcı hesabı açmanız daha mantıklı olacaktır. Bu kullanıcı hesaplarına sadece gerekli olan kaynakları ve komutları erişilebilir yapabilirsiniz. İhtiyacınız olduğunda tabi ki bir komutu farklı bir kullanıcının yetkileri ile de çalıştırabileceksiniz. Kişisel bilgisayarınız için bu bahsettiğimiz, kendiniz için bir tane kullanıcı açmanız gerektiği anlamına geliyor. Eğer paylaşılan bir bilgisayar ise (örneğin ev halkına ait bilgisayar veya işyerindeki ortak kullanılan bir bilgisayar) herkes için ayrı bir kullanıcı açmanız gerekebilir. Aklınıza dosya ve dizinleri diğer insanlarla paylaşacağınız için, aynı hesabı paylaşmak gelebilir. Ancak bunun için hesabı paylaşmaktan daha mantıklı çözümler mevcut. Kullandığınız kişisel hesap, sınırlı bir hesaptır, ancak kullanışsız değildir. Standart bir kullanıcı hesabı ile root hesabının arasındaki bazı farkları şöyle sıralayabiliriz:

  • Kişisel hesap sadece kendi oluşturduğu dosyaları düzenleyebilir. İşletim sistemi dosyaları kullanıcılar tarafından değiştirilemediği için bir kullanıcının sistemi bozma ihtimali ortadan kalkar. Bu, ayrıca kişisel bir hesabın sistemin genelinde yeni bir uygulama kuramaması anlamına da gelmektedir (ancak bu bir sorun değil - ilerde sisteminizi yönetmeye ihtiyaç duyduğunuzda gerekli hakları nasıl alacağınızı anlatacağız).
  • Kişisel hesap, bir disk bölümünü sistemin çalışmasını tehlikeye sokacak kadar dolduramaz: Öntanımlı olarak her bölümün %5lik bir kısmı sadece yetkili kullanıcılara ayrılmıştır
  • Eğer kullanıcı hesabında şüpheli hareketler olursa, bunun kayıtları o kullanıcının ulaşamadığı kayıt dosyalarında görülebilir.


Kullanıcının başlattığı her görev, sistemde bir işlem olarak belirir. Örneğin, web tarayıcısı çalıştıran bir kullanıcı olursa, tarayıcıya ait en az bir işleminin o kullanıcının yetkileri ile çalışmakta olduğunu görebilirsiniz. Yine kullanıcının çalıştırdığı programlar da, çalıştıran kullanıcının yetkileri ile çalışacağı için, sadece kullanıcının ulaşabildiği dosya ve kaynaklara ulaşabilir. İşte sıradan işlerinizde root hesabını kullanmamak için bir başka neden. Web tarayıcınızda çalışan kötü amaçlı bir komut, bir güvenlik açığından faydalanarak (ki bu hayal değil, böyle şeyler yaşanabilir) sisteminizdeki önemli dosyaları silebilir/değiştirebilir. root kullanıcısının yönetici olarak herhangi bir kısıtlamaya tabi olmaması sebebiyle, root tarafından yapılan her hareket potansiyel olarak sisteminize zarar verebilir:

  • Yanlış dosya veya dizinleri silmek (geri getir gibi bir seçenek yok)
  • Sistem dosyalarını silmek veya değiştirmek (muhtemelen hata veren bir sisteme sebep olacak ve bilgisayarı yeniden başlatmanız sorunu çözmeyecektir)
  • Ağı devre dışı bırakmak veya bağlantı ayarlarını değiştirmek
  • Dosyaları yanlış yere yerleştirmek (dosya kaybı ve sistemde aksamaya sebep olabilir)
  • Yanlış işlem(ler)i sonlandırmak veya değiştirmek (muhtemelen servis hatası, kapanma veya mantıksız davranışlara sebep olacaktır)


Bu sebeplerden, kullanıcılara hesaplar oluşturulmalıdır. Öntanımlı bir kullanıcı hesabı:
* Sadece kendisine ait dosyaları düzenleyebilir veya silebilir
* Sistemin tümünü ilgilendiren bir ayarı değiştiremez (ağ veya donanım erişimi gibi)
* Dosyaları sadece kendisine atanmış ev dizinine yerleştirebilir
* Sadece kendi çalıştırdığı işlemleri sonlandırabilir / yönetebilir

Önemli root olmayan bir kullanıcının da zarar vermesi mümkün. Örneğin çalıştırdığı zararlı bir program, kullanıcının kendisine ait tüm dosyalarını silebilir. Bu durum, işletim sistemini etkileyen dosyalara dokunulmadığı için sistemin çalışmasını etkilemese de, kullanıcı için bir felaket anlamına gelir. Bu yüzden lütfen düzenli olarak yedek almayı unutmayın!

Kullanıcı hesaplarının yanı sıra her Linux yüklü sistemde sistem hesapları da bulunur. Bu hesaplar da kullanıcı hesapları gibi sınırlamaları bulunan hesaplardır. Ancak sisteme giriş yapmak için kullanılamazlar (geçerli bir parolaları yoktur). Genellikle ayrı bir ev dizinleri bulunmaz ve (güvenlik sebebiyle) sadece işletim sisteminin belirlediği işlemleri kendilerine verilen sınırlı haklar ile çalıştırmak için kullanılırlar. Kullanıcı hesaplarının yönetimini (yetkilerini ve kaynaklara erişimlerinin denetimini) kolaylaştırmak için hesaplar gruplara dahil edilirler. Dosyalara erişim grup izinleri ile yönetilebilir ve bu sayede belirlenen bir gruba üye olan herkes o gruba açılan dosyalara erişebilir (hatta dosyayı düzenleyebilir). Bir kullanıcı hesabı birden çok gruba dahil olabilir. Kullanıcı ve yetkilerin yönetimine ilerde detaylı olarak değineceğiz.

İşlemler

İşlem, sistemde yürütülen bir görevi ifade eder. Her işlem bir kullanıcı tarafından başlatılır. Bir işlem, sadece kendisini başlatan kullanıcının yetkisi dahilindeki kaynaklara ulaşabilir, sadece başlatan kullanıcı (ve root kullanıcısı) tarafından yönetilebilir (örn. sonlandırılabilir). Her işlemin bir üst işlemi (ebeveyni) vardır (en üst işlem olan init işlemi hariç). Ve her işlem bir veya birden fazla işleme ebeveynlik yapabilir. Eğer işlem sonlandırılırsa, ebeveyni olduğu işlemler de sonlanacaktır. Yani ölürken çocuklarını da feda ederler. Buna bir örnek olarak: init’i sonlandırmak isterseniz, sistemde çalışan bütün işlemleri sonlandırmaya çalışmış olursunuz. Bu kadar fazla işlemden bahsettiğimiz için korkmayın. Bunlar bilgisayarınızı yoracak diye bir kural yoktur. Boşta duran bir sistem onlarca (hatta yüzlerce) işlemi arkaplanda çalıştırıyor olabilir. Bunun sebebi işlemlerin belirli durumlara sahip olabilmesi: çalışıyor, uyuyor, beklemede, durdu vb. Linux işletim sistemi, uygulamaların ihtiyaç duyduğu kaynakları elindekiler ile karşılamakta oldukça kabiliyetli olduğu için, son kullanıcı olarak genelde sisteminizde çalışan işlem sayısını hız etkisi ile fark etmezsiniz.

Not Bir işlem birden fazla iş parçacığına sahip olabilir. İş parçacıkları (thread) uygulamanın (işletim sistemi tarafından yönetilen) birer parçasıdır ve uygulama içinde paralel olarak kod çalıştırabilmeye yararlar. Yüzlerce iş parçacığına sahip bir uygulama, sistem açısından halen tek bir işlemden oluşur.

Dosya ve Dizin Yapısı

Linux’da (ve tüm Unix tabanlı işletim sistemlerinde) dizin sistemi hiyerarşik yapıdadır. En üstte “/” olarak ifade edilen kök dizin bulunmaktadır. Altında önceki bölümde anlattığımız “Dosya Sistemi Hiyerarşisi” standarında uygun olarak dosya ve dizinler bulunur. Her yerleşmenin kendine göre bir anlamı vardır. Örneğin /home/bob dizini, “bob” kullanıcısının ev dizini anlamına gelir. Bir diğer örneğimiz /usr/share/doc/googleearth-4.2.198.2451/, GoogleEarth programının o sürümüne ait olan paketin dökümanlarını içermektedir. Normal dosyaların (örn. yazı ve uygulama dosyaları) yanı sıra, Linux’da ayrıca farklı türlerde dosyalar bulunur:

  • Aynı dosyaya farklı isimler ile ulaşmayı sağlayan *hardlink*ler (sert bağlantı). Bir dosyaya birden fazla hardlink atanabilmekte.
  • Diğer dosyaları işaret eden sembolik bağlantı veya kısayollar (diğer bir deyişle “symlink”). Hardlink’den farklıdır, çünkü kısayollar olmayan bir dosyayı da işaret edebilir ve Microsoft Windows’daki kısayollara benzerler.
  • Bir uygulamanın çıktısını diğer uygulamaların okuması için geçici olarak depolayan borular (pipe) veya FIFO’lar
  • Bir işlem tarafından oluşturulan ve diğer birçok işlemin bilgi alabileceği veya yazabileceği, veri akışını sağlayan unix soketleri
  • Normal dosya işlemleri ile bir donanım arasındaki iletişimi sağlayan karakter veya blok aygıtı dosyaları

Tüm bu özel dosyalar Linux dosya sisteminde birer dosya olarak temsil edilir. Örnek olarak /dev/sda1‘i ele alalım. Sistem tarafından bilinen ilk (a) SCSI donanımının (sd) birinci bölümünü (1) temsil eder. /dev/sda1 bir blok aygıtı dosyasıdır çünkü bu dosyaya okuma yazma işlemleri bloklar (belirli yığınlar) halinde uygulanır. Karakter aygıtlarında bu işlemler karakter başına yapılmaktadır. İlerdeki bölümlerde aygıt dosyaları ve Linux’un onları yönetim şeklinden de bahsedeceğiz.

İzinler

Dosyalar (dizinler ve bahsettiğimiz özel dosyalar dahil, bu noktadan sonra hepsine genel olarak dosya olarak hitap edelim) üç grup izine tabidir; sahibi için, grubu için ve geri kalan herkes için. Bu izin gruplarında belirli bayraklar atanabilir:

  • Erişim (okuma) izni
  • Yazma izni
  • Çalıştırma izni (dosya ise uygulama gibi çalıştırılabilmesi, klasör ise içine girilebilmesi için)

Bu üç grubun yanısıra çalıştırılabilir dosyalar ve dizinler için ek izinler ayarlanabilir, ancak şimdilik fazla detaya girmeyeceğiz:
* Bir dosyaya kullanıcı/grup kimliği ayarlama (dosya çalıştırıldığında, işlemin onu çalıştıran kullanıcı tarafından değil, atanan sahibi tarafından çalıştırılmış gibi iş görüp, atanan sahibinin yetkilerini kullanması)
* Silme kısıtlaması (uygulanan dizinin içindeki dosyaları, dosya veya dizinin sahibi olmayan kullanıcıların silebilmesini engeller)

Silme kısıtlaması bayrağını biraz açıklayalım. Genelde yazma izni tüm kullanıcılara açık olan dizinlerde kullanılır (iyi bilinen bir örnek olarak geçici dosyaların tutulduğu /tmp dizinini verebiliriz) ve kullanıcıların kendi oluşturmadıkları dosyaları silmelerini engeller. Yazma izni açık olan bir dizin normalde kullanıcıların dosya silmesine de olanak tanır (çünkü yazma hakları var). Silme kısıtlaması bayrağı aynı zamanda yapışkan bayrak (sticky) olarak da bilinir.

Komut Satırı

Çoğu Linux dağıtımı başlatıldıktan sonra size grafiksel bir giriş ekranı sunar, hatta bazıları otomatik olarak masaüstüne giriş yapar. Gentoo Linux’da durum böyle değildir. Bunun yerine komut satırı ekranı sizi karşılar ve kendinizi tanımlamanızı ister.:

    This is seaheaven.homeworld (Linux x86_64 3.8.5) 22:30:00
    
    seaheaven login: 

Bu ekranda, (Linux kurulumu sırasında oluşturmuş olduğunuz) kullanıcı adınızı girmeniz beklenir. Sonraki adımda hesabınızın parolasını girmenizi ister. Eğer girdiğiniz kullanıcı adı sistemde bulunuyorsa ve parola ile eşleşiyorsa, sistemin komut satırına giriş yaparsınız. Örneğin bob kullanıcı adı ile giriş yaptığınız seaheaven adına sahip bir bilgisayarda, tipik bir komut satırı şu şekilde görünür:

    bob@seaheaven ~ $

Yapısı şu şekildedir:

  1. Sisteme giriş yapmış olan kullanıcı adı
  2. Kullanıcının giriş yaptığı bilgisayarın adı
  3. Kullanıcının dosya sistemindeki mevcut konumu (~ işareti kullanıcının ev dizini anlamına gelir)
  4. Kullanıcının normal kullanıcı mı ($) yoksa root mu (#) olduğunu gösteren bir belirteç

Sonraki bölümlerde Linux komut satırı dünyasını hızlı bir şekilde tanıtacağız.

Dolaşım

Komut istemcisi aslında kabuk tarafından sunulan bir hizmettir. Kabuk (shell), kullanıcıdan klavye yoluyla aldığı komutları sistemde çalıştıran uygulamaya denir. Komutlara örnek olarak dosya sistemi içerisinde gezinmeyi sağlayan komutları verebiliriz:

  • pwd şu anda içinde bulunduğuz dizinin ismini verir
  • cd farklı bir dizine geçiş yapmaya yarar
  • ls bulunduğunuz dizinin veya dilerseniz farklı bir dizinin içeriğini listeleyebilirsiniz

Aşağıda örnekleyelim:

    bob@seaheaven ~ $ pwd
    /home/bob
    bob@seaheaven ~ $ ls
    Filmler     Dosyalar     kayitlar.txt
    bob@seaheaven ~ $ cd Dosyalar
    bob@seaheaven Dosyalar $ pwd 
    /home/bob/Dosyalar

Dizin değiştirmek için cd komutunu birkaç farklı şekilde kullanabilirsiniz. Örnekteki pwd komutunu yalnızca içinde bulunduğumuz dizinin yerini görüntülemek için verdiğimize dikkat edin, bu gezinti sırasında yapmanız gereken bir işlem değil. Gezinirken bağıl yer isimleri verebilirsiniz. Örneğin “cd Dosyalar” komutu ile /home/bob ‘dan /home/bob/Dosyalar klasörüne geçiş yapacaktır.

        $ pwd
        /home/bob
        $ cd Dosyalar
        $ pwd
        /home/bob/Dosyalar

..’ (nokta nokta) kullanarak üst dizine çıkabilirsiniz. Yani /home/bob/Dosyalar dizininden cd .. kullanarak /home/bob dizinine geçiş yapabilirsiniz.

        $ pwd
        /home/bob/Dosyalar
        $ cd ..
        $ pwd
        /home/bob

Tam yollar da kullanabilirsiniz. Örneğin, /etc/init.d dizinine (ilerde bahsedeceğimiz önemli bir dizin) gitmek isterseniz vermeniz gereken komut cd /etc/init.d

        $ pwd
        /home/bob
        $ cd /etc/init.d
        $ pwd
        /etc/init.d

Bir özel karakter de ev dizininizi işaret eden ~ karakteridir. Yani cd ~ komutu ile ev dizininize gidersiniz:

        $ pwd
        /etc/init.d
        $ cd ~/Dosyalar
        $ pwd
        /home/bob/Dosyalar

Herhangi bir sebeple giriş başarısız olursa, sistem sizi uyaracaktır:

    $ pwd
    /home/bob
    $ cd /etc/cron.daily
    bash: cd: /etc/cron.daily: Permission denied
    $ pwd
    /home/bob

Listeleme

Bir dizinin içeriğini listelemek için ls komutu kullanılır. Öntanımlı olarak bulunduğunuz dizindeki dosya ve dizinleri görüntüleyen bu komut, oldukça fazla görüntüleme seçeneği sunuyor. Tüm seçeneklere tek tek değinemeyiz, ancak şu anda bilmeniz gereken birkaç önemli özellik var. İlk olarak, “-l” seçeneği sadece bulunduğunuz (ya da ismini verdiğiniz) dizinin içeriğini göstermek ile kalmaz, aynı zamanda görüntülediği dosya/dizinler hakkında bilgi de verir:

    bob@seaheaven ~ $ ls -l
    drwxr-xr-x 2 captain users 4096 2013-10-31 22:24 Documents
    drwxr-xr-x 2 captain users 4096 2013-10-31 22:24 Movies
    drwxr-xr-x 2 captain users 4096 2013-10-31 22:25 Music
    drwxr-xr-x 2 captain users 4096 2013-10-31 22:24 Pictures
    -rw-r--r-- 1 captain users   66 2013-10-31 22:30 TODO

Verilen bilgiler arasında izin bilgileri (üç defa üç karakter: Okuma, Yazma ve Çalıştırma), dosyaya/dizine sahip olan kullanıcı ve grup, boyut (dizinler için 4’ün katlarından oluşmakta) ve oluşturulma zamanları bulunmaktadır. Bir diğer ilgi çekici seçenek ise (gizli dosyalar dahil) tüm dosyaları göstermeye yarayan “-a” seçeneği. Unix / Linux sistemlerde gizli dosyalar isminin başında nokta bulunduranlardır. Mesela ev dizininizde gizlenmiş bir sürü dosya bulabilirsiniz:

    captain@seaheaven ~ $ ls -a
    Documents    Movies    Music    Pictures
    .history     .maildir  .profile .vimrc

Bir dosyanın gizli olması onu gerçekten saklamaya değil, normal kullanımda fazla göz önüne çıkmamasını sağlamaya yarar. Bu şekilde listeleme esnasında da kirliliğin önüne geçilmiş olur. Gizli dosyaların çoğu, ayar dosyalarıdır (vim programına ait kullanıcı ayarlarını saklayan .vimrc dosyası gibi). Çoğu komut satırı aracında olduğu gibi, ls ile de parametreleri beraber kullanabilirsiniz. Yani “ls -l -a” ile “ls -la” aynı komuttur. Ayrıca sıra da önemli olmadığı için “ls -al” da aynı görevi görür.

ls -l çıktısını inceleyelim

Genellike hızlıca detaylı bilgi almak için “ls -l” komutu kullanılır. Hatta bazı dağıtımlarda bu komut sık kullanıldığı düşünülerek ll olarak kısaltılmıştır. ls -l’ çıktısına bir göz atalım:

    -rw-r--r-- 1 swift users 26976 Apr 22 21:21 12-servicemanagement.xml
    |<+><+><+> | <-+-> <-+-> <-+-> <-----+----> <---------+------------->
    | |  |  |  |   |     |     |         |                `- dosya veya dizinin adı
    | |  |  |  |   |     |     |         `- son düzenlenme tarihi
    | |  |  |  |   |     |     `- boyutu (byte cinsinden)
    | |  |  |  |   |     `- dosya veya dizinin sahibi olan grup
    | |  |  |  |   `- dosya veya dizinin sahibi olan kullanıcı
    | |  |  |  `- dosya veya dizine işaret eden sert bağ (hardlink) sayısı
    | |  |  `- tüm kullanıcılar için yetkiler (bu senaryoda: sadece okuma)
    | |  `- sahip grup ("users") için yetkiler (bu senaryoda: sadece okuma)
    | `- sahip kullanıcı ("swift") içim yetkiler (bu senaryoda: okuma-yazma)
    `- dosyanın türü (bu senaryoda: normal dosya)

Temel Dosya Yönetimi

Kopyalama, taşıma, yeniden adlandırma ve silme gibi temel işlemlere bir göz atalım.

Dosya ve Dizin Kopyalama

Bir dosyayı kopyalamak için cp komutu kullanılır. Temel kullanımı basittir: cp kaynakdosya hedefdosya. Hedef bir dizin olabilir, bu durumda dosya o dizinin içine kopyalanacaktır. Eğer hedef bir dosya adı ise dosya o isimle kaydedilecektir.

    captain@seaheaven ~ $ ls Dosyalar
    captain@seaheaven ~ $ cp isler.txt Dosyalar/isler_kopya.txt
    captain@seaheaven ~ $ ls Dosyalar
    isler_kopya.txt
    captain@seaheaven ~ $ cp isler.txt Dosyalar
    captain@seaheaven ~ $ ls Dosyalar
    isler.txt     isler_kopya.txt

Öntanımlı olarak cp komutu hedef dosyayı komutu çalıştıran kullanıcının hakları ve sahipliği ile oluşturur. Gelecek örnekte /etc/inittab dosyasını şu anda içinde bulunduğum dizine (kısaca nokta ile gösterebiliriz .) kopyalayalım.

    $ ls -l /etc/inittab
    -rw-r--r-- 1 root root 1890 Feb 15 20:39 /etc/inittab
    $ cp /etc/inittab .
    $ ls -l inittab
    -rw-r--r-- 1 swift users 1890 Apr 22 22:49 inittab

cp komutundan bütün bilgileri (erişim izinleri, dosya sahipliği ve zaman damgaları) korumasını isteyebilirsiniz, ama bunun için bazı durumlarda root olmanız gerekebilir. Bir dizini ve içindeki tüm dosya/dizinleri kopyalamak için -r seçeneği kullanılır. Sıradaki örnek isyeridosyalari dizinini (içindeki tüm dosya ve dizinlerle beraber) bulunduğunuz dizine kopyalayacaktır:

    $ cp -r /media/usb/isyeridosyalari .

Dosyaları Taşıma ve Yeniden Adlandırma

Bir dosyayı taşımak için mv komutu kullanılır. Kullanımı cp gibidir: mv kaynakdosya hedefdosya Eğer hedef dizin değil de bir dosya adı ise mv komutu yeniden adlandırma işlemi de gerçekleştirir. Gelecek örnekte isler.txt dosyasını Dosyalar dizininden /media/usb/isyeridosyalari dizinine taşıyalım:

    captain@seaheaven ~ $ ls
    TODO     isler.txt
    captain@seaheaven ~ $ mv isler.txt /media/usb/isyeridosyalari
    captain@seaheaven ~ $ ls
    TODO
    captain@seaheaven ~ $ ls /media/usb/isyeridosyalari
    isler.txt

Dosya ve Dizinleri Silmek

Son görevimiz dosyaları silmek. Bu işi gören rm komutunun kullanım şekli rm dosyaadı şeklindedir. Dizinler için ise durum biraz farklı. Dolu bir dizini silerken rm -r ( -r içindekileri de sil anlamına gelir), boş dizinler için ise rmdir kullanabilirsiniz.

    captain@seaheaven ~ $ rm Dosyalar/tekdosya.txt
    captain@seaheaven ~ $ rmdir Dosyalar

rm komutu için popüler bir seçenek de “-rf“dir: Verdiğiniz hedefteki tüm dosya ve dizinleri derinlemesine silmeyi ve kullanıcıdan herhangi bir onay almamayı (zorla silmeyi) emreder. Bunu kullanırken ne yaptığınızdan emin olun, Linux’da geri alma özelliği bulunmamakta!

    captain@seaheaven ~ $ rm -fr Dosyalar

Neyse ki, rm komutu sadece onu çalıştıran kullanıcının yetkisinin olduğu dosyaları silebilir. Yani eğer yetkili kullanıcı (root) değilseniz sistem dosyalarını kazara silemezsiniz:

    $ rm /etc/passwd
    rm: cannot remove '/etc/passwd': Permission denied

Metin Dosyalarını Düzenlemek

Her Linux kullanıcısının bildiği önemli bir iş de metin dosyalarını nasıl düzenleyeceğidir. Linux’da çoğu yapılandırma işi ilgili metin dosyalarını düzenleyerek kolaylıkla halledilebilmektedir. Kullanabileceğiniz birçok editör program bulunmakta (örn. vim veya emacs). Gentoo ilk editör olarak nano’yu tavsiye etmekte, çünkü nano ile çalışmak daha kolay.

Nano’yu Kullanmak

Nano’yu kısaca tanıtalım. nano komutu verdiğinizde açılışta sizi boş bir yeni belge ile karşılayacaktır. Eğer parametre olarak bir dosya adı verirseniz, verdiğiniz yazı dosyasını düzenlemeye açık halde açacaktır. Örneğin isler.txt dosyasını nano ile açalım:

    captain@seaheaven ~ $ nano isler.txt

nano Üst bölümde dosya adı, alt bölümde gerekli kısayol tuşlarını göstermekte. ^ karakteri Ctrl tuşuna basmanız gerektiği anlamına geliyor. Yani dosyayı kaydetmek için Ctrl+O, editörden çıkmak için Ctrl+X kombinasyonlarını kullanmalısınız. Bazı metin dosyaları yeni satırlara karşı duyarlıdır. Öntanımlı olarak nano, satır doldurduğunda alt satıra geçebilir. Bunu engellemek ve satırları olduğu uzunluklarında bırakmak için -w parametresini kullanabiliriz: nano -w isler.txt. Sistem ve yazılımların ayarlarını içeren dosyaları düzenlerken bu şekilde kullanmanız daha sağlıklı olacaktır.

Metin Dosyalarını Açmak

Eğer metin dosyalarının içeriğine bakmak, ancak bir metin editörü kullanmak istemiyorsanız, “cat” veya “less” araçlarını kullanabilirsiniz. Bu sayede yanlışlıkla düzenleme riskinden de kurtulmuş olursunuz.

  • cat ile bir dosyanın içeriğini terminale bastırabilirsiniz. Eğer dosya büyükse, tüm içerik aynı anda ekrandan akıp gidecektir. Shift+PgUp tuşları ile elbette yukarı doğru çıkarak bakabilirsiniz ama terminalin hafızasının da bir sınırı var.
  • less ile bir dosyanın içeriğine sayfa sayfa bakabilirsiniz. Yukarı aşağı kaydırma, belirttiğiniz metni arama gibi özelliklere sahip olan less, sadece yazı dosyalarını değil, aynı zamanda uygulamaların yardım dosyalarını (man) da görüntülemek için kullanılır (ilerde bahsedeceğiz).

komut
bir satır aşağı in e, j, enter veya aşağı ok tuşu
bir satır yukarı çık y, k veya yukarı ok tuşu
bir sayfa aşağı in f, boşluk veya PgDown
bir sayfa yukarı çık b veya PgUp
ileriye doğru aranacakyazı’yı ara /aranacakyazı , sonraki sonuç için “n”
geriye doğru aranacakyazı’yı ara ?aranacakyazı , önceki sonuç için “?”
yardım ekranını göster h

Dosya ve Dizin Kısayolları

Linux iki çeşit bağlantı (link) türünü destekler: sembolik bağlar ve sert bağlar. Muhtemelen neden tanıtım bölümünde bundan bahsettiğimi merak edeceksiniz. Linux’da sembolik bağlar oldukça sık kullanılır, ayrıca sert bağlar da birçok yerde karşınıza çıkabilir. Symlink (sembolik bağ) anlaması kolay bir bağlantı çeşididir. Gerçek bir dosya değil, sistemdeki başka bir dosyanın ismine işaret eden dosyalardır. İçeriklerinde sadece dosya ismi bulundurdukları için, (artık) var olmayan dosyalara da işaret ediyor olabilirler. Symlink oluşturmak için ln -s komutunu kullanabilirsiniz:

    $ ln -s kaynak_dosya_adı link_adı

Hardlink (sert bağlar) ise daha farklıdır. Dosya sistemindeki bir dosyaya işaret ederler ve sistem tarafından o dosyaya direkt olarak ulaşmanın farklı bir yolu olarak algılanırlar. En kolay şekilde örnekleyerek anlatabiliriz; a.txt dosyasına yeni bir hardlink oluşturalım, ismi a_hardlink.txt olsun:

    $ ln a.txt a_hardlink.txt

Artık asıl dosyanın, sistemde 2 farklı ismi var: a.txt ve a_hardlink.txt. Bu iki dosyadan birini silseniz dahi, halen ona işaret eden bir hardlink olduğu için, asıl dosyamız silinmeyecek, sadece sildiğiniz referans linki kaybolacaktır. Dosya, sistemden eğer kendisini işaret eden hiç dosya/hardlink kalmamış ise gerçekten silinir. Arka planda kullandıkları teknolojiden dolayı, hardlink’lerin bazı kısıtlamaları vardır: sadece aynı disk üzerinde bulunan dosyalara oluşturulabilmekte ve dizinler için kullanılamamaktadırlar. Bağlantılar sayesinde dosyalarınızı daha kolay yönetebilirsiniz. Örneğin ~/Dosyalar/okul/tez/tezdosyam.txt konumunda sık ulaştığınız bir dosyanız varsa, bu dosya için ev dizininizde ~/tezdosyam.txt adında bir link oluşturabilir ve dosyaya her ulaşmak istediğinizde birkaç dizine girmek zorunda kalmazsınız.

Dosya Adı / Komut Tamamlama

Birçok Linux kabuğunun güçlü bir özelliği de otomatik tamamlamadır. Örneğin isler.txt isminde bir dosyayı düzenlemek istiyorsunuz. nano is yazıp, ardından tab tuşuna basarsanız, eğer bulunduğunuz dizinde ismi is ile başlayan başka dosya yoksa, komut tamamlanıp nano isler.txt haline gelecektir. Eğer birden fazla ismi is ile başlayan öğe varsa iki kez tab tuşuna basarak hangileri olduğunu görebilirsiniz. Aynısı komutlar için de geçerli. Eğer nano, ismi na ile başlayan tek komut olsaydı (ki değil, öyle varsayalım) na yazdıktan sonra tab tuşuna basmanız, nano olarak tamamlanmasına yeterdi. Birden fazla na ile başlayan komut olduğu için, seçenekleri görmek için bu durumda da iki kez basabilirsiniz:

    $ na<tab><tab>
    namei           nautilus
    nano            nasl
    nasm            native2ascii
    $ na

Terminaller Arası Geçiş

Unix / Linux sistemlerin bir avantajı da birden fazla terminali desteklemesidir. Sisteminize giriş yaptığınızda aslında karşınıza çıkan yer bir (sanal) terminaldir, büyük ihtimalle de birinci sanal terminal. Bir terminalden diğerine Alt+F# tuşları işe geçebilirsiniz. Burdaki F#; _F1, F2, F3_… tuşlarını temsil etmektedir. Eğer grafiksel ortamda iseniz ilk olarak Ctrl+Alt+F# (örn: Ctrl+Alt+F4) kullanmalısınız. Grafiksel ortam, kullanıcının oturum açamayacağı ilk ekranda çalışır (büyük ihtimalle 7. terminal, bu yüzden geri grafiksel ekrana dönmek için Alt+F7 kullanabilirsiniz). Birden çok terminalde çalışmak size birçok farklı işi aynı anda yürütme kolaylığı sağlar. Örneğin bir uygulamayı denemek üzere düzenliyorsanız, terminalin birinde uygulamanın kendisini, diğerinde de uygulamanın ayarlarını açmak isteyebilirsiniz. Grafiksel ortamda iseniz tabi ki birden fazla terminal uygulaması açarak da bu tür işlerinizi yapabilirsiniz.

İpucu: Eğer komut satırında çalışıyorsanız, terminaller arası geçiş için chvt komutunu da kullanabilirsiniz: chvt 2 komutu sizi ikinci sanal terminale götürür (_Alt+F2_’ye benzer).

Oturumu Kapatmak

Eğer terminal oturumunuzu kapatmak isterseniz exit komutu verebilir veya Ctrl+d kombinasyonunu kullanabilirsiniz:

    captain@seaheaven ~ $ exit
 
    This is seaheaven.homeworld (Linux x86_64 3.8.5) 22:30:00
    
    seaheaven login: 

Bilgisayarı kapatmak

Son olarak bilgisayarınızı kapatmaya değinelim, öncelikle root haklarına sahip olmanız gerekmekte. Bunun için başka bir terminale geçip root olarak giriş yapabilir veya su komutunu kullanabilirsiniz. Bu komut sizden root şifresini isteyecek ve doğru girdiğiniz zaman size root yetkisi verecektir:

    captain@seaheaven ~ $ su
    Password: 
    root@seaheaven ~ # 

Şimdi shutdown komutunu kullanarak sistemi kapatabilir (-h) veya yeniden başlatabilirsiniz (-r):

    root@seaheaven ~ # shutdown -h now

Yardım mı gerek?

Linux başta biraz karmaşık görünebilir, Sonuçta yeni başlayan kullanıcıların kullandığı komutlar ile ileri düzey kullanıcıların kullandıkları komutlar aşağı yukarı aynı. Bu kitap gibi, kullanıcılara yardımcı olmak için çok sayıda kaynak var. Ancak er ya da geç her kullanıcı takıldığı özel bir noktada yardıma ihtiyaç duymakta. Şimdi Linux’da “daha fazla bilgi” alabileceğiniz kaynaklara bakalım.

Yardım (man) Sayfaları

Yardım sayfaları Linux sistemlerin içinde bulunur ve man komutu ile ulaşılabilir. Komutun ardından bir komut ismi yazarak, o komut hakkında bilgi alabilirsiniz; komutun ne işe yaradığı, nasıl kullanılması gerektiği, hangi dosya veya komutlar ile ilişkisi olduğu vb. Yardım sayfaları genellikle şu yapıdadır: - Komutun (tek satırlık açıklaması ile birlikte) ismi - Komutun özeti - Hangi seçenekler ile kullanılabileceği - Her birinin açıklaması ile komutun seçenekleri - Komut hakkında kullanım kısıtlamaları veya öntanımlı davranışı gibi daha detaylı bilgi - Telif ve sahiplik hakları - Diğer ilgili yardım sayfaları Yardım sayfaları sadece komutlar için değil; dosyalar (sistem veya aygıt dosyaları), sistem çağrıları ve kütüphane fonksiyonları (programlama ile alakalı bilgiler) hatta standartlar ve sözleşmeler ile ilgili dahi olabilir. Bu başlıklar (eşlik eden numaralar ile beraber) aşağıdaki kategorilere ayrılmıştır:

  1. Kullanıcı komutları
  2. Sistem çağrıları
  3. Kütüphane fonksiyonları
  4. Özel dosyalar (aygıt dosyaları)
  5. Dosya biçimleri ve protokolleri
  6. Oyunlar ve eğlenceli programlar
  7. Genel bakış, sözleşmeler ve ilgili başlıklar
  8. Yönetimle ilgili ve ayrıcalıklı komutlar

Bu bölümler hakkında detaylı bilgi için her bölümün tanıtım (intro) sayfasını açabilirsiniz. Örneğin oyunlar bölümünün tanıtım sayfasına man 6 intro komutu ile ulaşabilirsiniz. Hangi bölümün ne işe yaradığını bilmek önemli olabilir, özellikle de aynı başlık birden fazla kategoride bulunuyorsa. Örnek olarak passwd verilebilir: passwd komutu için bir yardım sayfası (man 1 passwd) ve /etc/passwd dosyası için başka bir yardım sayfası (man 5 passwd) bulunmaktadır. Eğer numara belirtmezseniz (man passwd gibi), sıralamada önce gelen yardım sayfası açılacaktır (passwd örneğinde, 1. bölüm). Yardım sayfasının içindeyken, yukarı/aşağı ok tuşları ve PgUp/PgDn tuşları ile gezinebilirsiniz. Ayrıca istediğiniz bir yazıyı aratabilirsiniz (/ karakterine basıp arkasından aramak istediğiniz metni girerek). Yardım sayfası açma aracının (çoğu sistemde less) komutları hakkındaki tam açıklamayı h tuşuna basarak görebilirsiniz. Sayfadan q tuşuna basarak çıkabilirsiniz. Eğer istediğiniz şeyin yardım sayfası olup olmadığına emin değilseniz, apropos veya man -k komutunu kullanarak arama yapabilirsiniz.

    ~$ apropos passwd

Bilgi Sayfaları

Sistemde bir diğer başvuracağınız kaynak da bilgi (info) yardım sistemidir. info aracı hiyerarşik olarak (üst/alt bölüm, sonraki sayfa vs.) ve bağlantılar kullanarak bilgi sayfaları arasında gezmenizi sağlar. GCC’nin bilgi sayfalarına bir göz atalım:

    ~$ info gcc
    ...
    File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
    
    Introduction
    ************
    
    This manual documents how to use the GNU compilers, as well as their
    features and incompatibilities, and how to report bugs.  It corresponds
    to GCC version 4.1.2.  The internals of the GNU compilers, including
    how to port them to new targets and some information about how to write
    ...

Bilgi sayfaları birçok GNU projesinde (örneğin GCC) gayet iyi biçimde kullanılmıştır. Yine de yardım (man) sayfaları daha popülerdir, muhtemelen bunun sebebi geliştiricilerin yazmayı kolay bulduğuna yönelmesi.

Sözdizimi Yardımı

Eğer bir komutun açıklamasını değil de nasıl kullanılacağını öğrenmek istiyorsanız, birçok komutta -h veya \--help parametresini kullanabilirsiniz:

    $ man -h
    man, version 1.6e
    
    usage: man [-adfhktwW] [section] [-M path] [-P pager] [-S list]
               [-m system] [-p string] name ...
    
      a : find all matching entries
      c : do not use cat file
      d : print gobs of debugging information
      D : as for -d, but also display the pages
      f : same as whatis(1)
      h : print this help message
      k : same as apropos(1)
      K : search for a string in all pages
      t : use troff to format pages for printing
      w : print location of man page(s) that would be displayed
          (if no name given: print directories that would be searched)
      W : as for -w, but display filenames only
    
      C file   : use `file' as configuration file
      M path   : set search path for manual pages to `path'
      P pager  : use program `pager' to display pages
      S list   : colon separated section list
      m system : search for alternate system's man pages
      p string : string tells which preprocessors to run
                   e - [n]eqn(1)   p - pic(1)    t - tbl(1)
                   g - grap(1)     r - refer(1)  v - vgrind(1)

Paketler ile Sağlanan Belgeler

Bazı paketler (HTML, PDF veya diğer türlerinde) daha fazla yardım belgesi sağlıyor olabilir. Bu belgelerin çoğunu /usr/share/doc altında bulabilirsiniz. Gentoo Linux belgeleri bzip2 veya gzip (ikisi de Unix dünyasında zip gibi iyi bilinen sıkıştırma araçlarıdır) kullanarak sıkıştırır. Bu yüzden bu dosyalara göz atmak için önce yazma izniniz olan bir dizine çıkarmanız gerekmekte. Örneğin zip paketi, programın sıkıştırma/açma için hangi algoritmayı kullandığını açıklayan belgeye sahip:

    $ cd /usr/share/doc/zip-*
    $ ls
    algorith.txt.bz2   BUGS.bz2            CHANGES.bz2      MANUAL.bz2
    README.bz2         timezone.txt.bz2    txtvsbin.txt.bz2 WHATSNEW.bz2
    WHERE.bz2           ziplimit.txt.bz2
    $ bunzip2 -c algoritm.txt.bz2 > ~/algoritma.txt

Sonuçta ev dizininizde, algoritma.txt isminde bir dosya oluşmakta. Bu örnekteki dosya basit bir metin dosyası ve less komutu ile incelenebilir. Yukardaki örnekte bir yönlendirme kullanıldı: Bir komutun çıktısı (bunzip2 -c algoritm.txt.bz2) ekranda gösterilmek yerine, bir dosyaya (~/algoritma.txt) aktarıldı. Yönlendirmeyi ileri bölümlerde detaylı olarak göreceğiz. Ayrıca isterseniz bzip2 ile sıkıştırılmış metin dosyalarını direkt olarak okuyabileceğiniz bzless aracını da kullanabilirsiniz:

    $ bzless algoritm.txt.bz2

Online Belgeler

Birçok proje geniş yardım belgesi içerir. Yardım almak için projenin web sayfasına giderek veya arama yaparak hakkında yazılmış belgelere ulaşabilirsiniz. Çoğu kez en güzel belgeler projenin sahipleri tarafından değil, deneyimli kullanıcıları tarafından yazılır.

Alıştırmalar

  1. Ev dizininizi bölümler halinde düzenlemeye çalışın. Örneğin kişisel belgeleriniz, resimleriniz, işle alakalı belgeleriniz ve geçici dosyalarınız için dizinler oluşturun.
  2. Zip formatının Microsoft Windows’da yaygın olması gibi, Unix/Linux sistemlerde de popüler olarak dört sıkıştırma formatı kullanılır. GZip ve BZip2, genellikle tar ile birlikte kullanılır. Peki bu sıkıştırma formatları nasıl birlikte kullanılır ve dördüncü format nedir?
  3. Belirttiğimiz gibi, Unix/Linux sistemlerde geri alma gibi bir seçenek bulunmamakta. Yani bir dosyayı sildiğiniz zaman, dosya silinmiştir. Ancak dosya silmenin teknik altyapısından dolayı, bir dosya silinse bile (diskte bulunduğu yere yeni bir veri yazılana kadar) diskte kalmaya devam eder. Linux’da veri kurtarma uygulamalarına örnekler bulmaya çalışın.

Ek Kaynaklar