Linux İşletim Sistemi

Linux (telaffuz: Lin-uks), Unix’e fikirsel ve teknik anlamda atıfta bulunarak geliştirilmiş açık kaynak kodlu, özgür ve ücretsiz (destek hariç) bir işletim sistemi çekirdeğidir. Çekirdeğin kaynak kodları GNU Genel Kamu Lisansı çerçevesinde özgürce dağıtılabilir, değiştirilebilir ve kullanılabilir. Linux ismi ilk olarak Linus Torvalds tarafından yazılan ve 5 Ekim 1991 Linux 0.02 etiketiyle duyurusu yapılan, Linux çekirdeğinden gelmektedir. Linux'un Unix ile herhangi bir kod ortaklığı bulunmamaktadır yani Linux'un kodları sıfırdan başlanılarak yazılmıştır.

Linux İşletim Sistemi

Linux İşletim Sistemi/Linux Nedir?

Linux (telaffuz: Lin-uks), Unix’e fikirsel ve teknik anlamda atıfta bulunarak geliştirilmiş açık kaynak kodlu, özgür ve ücretsiz (destek hariç) bir işletim sistemi çekirdeğidir. Çekirdeğin kaynak kodları GNU Genel Kamu Lisansı çerçevesinde özgürce dağıtılabilir, değiştirilebilir ve kullanılabilir. Linux ismi ilk olarak Linus Torvalds tarafından yazılan ve 5 Ekim 1991 Linux 0.02 etiketiyle duyurusu yapılan, Linux çekirdeğinden gelmektedir. Linux'un Unix ile herhangi bir kod ortaklığı bulunmamaktadır yani Linux'un kodları sıfırdan başlanılarak yazılmıştır.

Çok geniş bir donanım desteğine sahip olan Linux çekirdeği; sunucu bilgisayarlar, masaüstü-dizüstü bilgisayarlar, iş istasyonları, akıllı telefonlar, yeni nesil TV'ler ve tabletler gibi hemen her platformda tam bir uyum içerisinde çalışabilmektedir. Linux sunucu işletim sistemlerinde kullanım oranı bakımından ilk sırada tercih edilmekte ve dünyanın 10 hızlı süperbilgisayarında da kullanılmaktadır.

Linux; işletim sistemi değildir, işletim sistemi çekirdeğidir. Linux çekirdeği, bu çekirdeği kullanan çeşitli "Linux dağıtımları" tarafından kullanıcıya tam teşekkülü bir işletim sistemi olarak sunulurlar. Bir Linux dağıtımı; Linux çekirdeği, GNU araçları, X pencere sistemi ve bir masaüstü ortamının bir araya gelmesiyle, bu birlikteliği sürdürülebilir şekilde yönetecek bir yapılandırma araçları seti, yazılım güncelleme araçları vb. ile oluşturulan bir tam teşekküllü bir işletim sistemini ifade eder.

Günümüzde Linux çekirdeğini kullanan işletim sistemleri büyük bir kitle tarafından genel olarak "Linux" adıyla anılmaktadır. Diğer yandan Özgür Yazılım Vakfı ve çeşitli özgür yazılım toplulukları, bir işletim sistemi olarak Linux'dan bahsederken, GNU araç ve yazılımlarını barındırıyor olması nedeniyle "GNU/Linux" tanımını kullanmaktadır.

GNU/Linux gelişimi açık bir şekilde yapılmaktadır. Bunun anlamı, işletim sisteminin her aşaması açık olarak Internet üzerinde yayınlanmakta, dünyanın dört bir yanında kullanıcılar tarafından test edilmekte, hataları ve eksiklikleri belirlenerek düzeltilmekte ve geliştirilmektedir. Zaman zaman bu deneme aşamaları belirli bir noktada durdurulur ve güvenilir bir işletim sistemi sunulup, geliştirme için ayrı bir seriye devam edilir. Hatalar, anında kullanıcılar tarafından belirlenip rapor edilmekte ve birçok kişinin katkısıyla düzeltilmektedir. Açık kaynaklı bir işletim sistemidir.


Linux İşletim Sistemi/Linux Genel Özellikler

 

Çekirdek

 

  • Linux’un çekirdeği bir bakıma sistemin beyni sayılabilir. Aslında çekirdeğin adı Linux’tur. Bütün versiyonları aynı çekirdeği kullanır. Değişenler dosya ve dizin yapısı, dağıtıma giren belgeler, paketler, dağıtımın hedeflediği kullanıcılardır.
  • Çekirdek, sistemin düzgün çalışmasından, bilgisayar kaynaklarının düzenlenmesinden, kullanıcıların görevlerinin sırasıyla yapılmasından, bellek denetiminden, yan birimlerin (CD-ROM, Ekran Kartı,SabitDisk vb.) çalışmasından ve benzeri işlemlerden sorumludur. Programlar, çekirdek içindeki “system call”lar (sistem çağrıları) yardımıyla birbiriyle haberleşirler. Çekirdeği oluşturan sistem çağrılarından kullanıcılarda yararlanabilir.Linux’ta sistemin temel yönetimi çekirdek tarafından yapılır.

Çoklu Kullanıcı

  • Linux, birden çok kullanıcıyı desteklemek için yazılmış ve ona göre programlanmıştır. Birden çok kullanıcı tarafından aynı kaynaklar paylaşılabilir ve kullanılabilir.

Çoklu Görev

  • Linux, birden çok görevin aynı anda yapılmasına olanak veren bir sistemdir. Siz bir klavyaeye bastığınız zaman yapılan işlem ile makineye uzaktan bağlanan bir başka kullanıcının işlemleri birbirinden bağımsız çalışır. Aynı anda arka planda örneğin bir web sayfasını sunan programlar olabilir, ya da bir başkası ftp isteğinde bulunabilir.

Kararlılık

  • Linux, 1.0 sürümünün Internet sitelerine konulduğu 14 Mart 1994 yılından beri beta denemelerini geçmiş ve kararlı bir yapıya bürünmüştür. Çekirdekte hatalar tespit edildikce üzerine yeni kodlar eklenir. Ancak Linux açık bir şekilde geliştiğinden sürekli bir kontrol altındadır. Çekirdeğin iki farklı sürümüde internette dağıtılır. Örnek olarak 1.2.13 kararlı bir çekirdek sürümüdür. 1.3.56 ise halen üzerinde geliştirme yapılıyor ve test ediliyor anlamına gelir. Çekirdek sürümünün ortasındaki rakam tek ise bu çekirdek deneyseldir. Hala test aşamalarından geçmekte ve üzerinde sürekli yeni kod yazılıyor demektir. Çift olması durumu ise bu çekirdeğin kullanılabilir ve çok büyük ihtimalle kararlı olduğu anlamına gelecektir.
  • Linux’un kararlı bir işletim sistemi olmasının en büyük kanıtı, Internet üzerindekullanıldığı alanların genişliği ve bu konudaki yönetici memnuyetleridir.

Çok İşlemci Desteği

  • SMP (symmetric multi processor – simetrik çok işlemci) desteği Linux’ta Intel ve SPARC platformlarında mevcuttur. Sürüm numarası 2.0 ile başlayan çekirdekler açılırken sistemde kaç tane işlemci olduğunu bulur ve buna göre kendini ayarlar. Linux ile 16 işlemciye kadar olan sistemler doğrudan desteklenebilir.

Güvenlik Mekanizması

  • Linux, 386 ve üstü işlemcilerde korumalı kipte çalışır. Çalışan programlar arasında bir koruma vardır. Bu koruma yardımıyla bir program özel şartlar olmadıkça diğer programların çalışmasını engelleyemez. Çok kullanıcılı bir sistem için bu çok önemlidir. Benzer şekilde herhangi bir kullanıcı istediği gibi bir program yazıp sistemin kapanmasını veya çalışamaz hale gelmesine neden olamaz. Kullanıcıların dosya ve dizinleri basit bir koruma mekanizması kullanılarak diğer kullanıcıların görmesini engelleyecek şekilde saklanabilir. Linux, geniş güvenlik mekanizması içerir.

Diğer

 

  • Birden fazla programın çalışması halinde bellekte bu programların sadece bir tanesi tutulur. Böylece bellekten tasarruf sağlanır.
  • Çalıştırılabilir bir program, belleğin tamamından büyük olabilir. Bu durumda programın sadece o an kullanılan bölümleri belleğe alınır ve çalıştırılır. Böylece bellek kısıtlaması programın çalışmasına engel teşkil etmez.
  • Disk alanı yardımıyla belleğin yetmediği durumlarda fazla veri diske yazılır. Bu bölüme takas alanı (swap space) denir. Her biri en çok 2Gb tutan 16 tane takas alanı açılabilir.
  • Paylaşılan kütüphaneler dinamik veya statik olabilir. Yani bir kütüphane aynı anda birden çok program tarafından yüklenebilir (dinamik), veya bir programın içine gömülebilir (statik). Linux’un çekirdeği büyük oranda POSIX , System V ve BSD standartlarıyla uyumludur. Pek çok klavye tipini destekler.
  • Aynı anda birden çok sanal ekranı destekler. Konsolda oturuken birden fazla (en çok 64) giriş yapabilirsiniz.

Linux İşletim Sistemi/Linux Komutları

 

Buradaki komutlar Pardus 2009.1 dağıtımında denenmiştir. Sizin kullandığınız versiyon veya dağıtıma bağlı olarak çok küçük de olsa farklılıklar olabilir.

Giriş

Komut satırı

Linux'ta komutlar Uçbirim, Console veya Bash denilebilen, komut girilebilen siyah ekranda yazılır. Bu ekranı açtığınızda şuna benzer bir yazıyla karşılaşırsınız.

kullanici@bilgisayar ~ $

kullanici, komut istemini hangi kullanıcı olarak başlattığınızı belirtir. bilgisayar, hangi bilgisayarda olduğunuzu belirtir. ~, hangi klasörde olduğunuzu belirtir. (~, home dizininizi belirtir)

man

Herhangi bir komut hakkında bilgi verir. Kullanım:

man komut

Dosya ve klasör komutları

ls

ls komutu salt olarak kullanıldığında aktif klasördeki dosya ve klasörleri listeler. Dosya ve klasörler farklı renklerde gösterilir. İstenirse belirli bir klasör veya dosya belirtilip o klasörün içeriği veya dosya listelenebilir. Dosya/klasör adı belirtirken joker karakterler (*,?) kullanılabilir. Örnekler:

ls

Bu komut aktif klasördeki tüm dosya ve klasörleri listeler.

ls Belgeler

Bu komutla aktif klasördeki Belgeler klasörünün içeriği görüntülenir.

ls ..

Bu komutla bir üst klasörün içeriği listelenir.

ls ../*.htm 

Bu komutla bir üst klasördeki uzantısı htm olan dosyalar listelenir.

ls ~

Bu komutla home dizininizin içeriği görüntülenir.

ls ../../Klasor1/Klasor2/deneme.htm

Bu komutla iki üst klasördeki Klasor1 klasöründeki Klasor2 klasöründeki deneme.htm dosyası listelenir.

ls deneme.htm

Bu komutla aktif klasördeki deneme.htm dosyası listelenir.

ls a?e.htm

Bu komutla aktif klasördeki ilk harfi a olan, üçüncü harfi e olan, uzantısı htm olan, ismi üç harfli olan dosyalar listelenir.

l parametresi

ls komutu l parametresiyle kullanıldığında dosya ve klasörleri ayrıntılı olarak listeler. Örnek:

ls -l ../deneme

Bu komut bir üst klasördeki deneme klasörünün içeriğini ayrıntılı olarak listeler. Eğer bir üst klasörünüzde deneme klasörü varsa deneme klasörünüzdeki dosya ve klasörlere bağlı olarak şuna benzer bir çıktı almanız gerekir.

-rwxr-xr-x 1 bekir users 20974 Mar  8  2009 ascii.pdf
-rwxr-xr-x 1 bekir users  1423 Mar  6 15:54 Ayarlar Listesi.txt
drwxr-xr-x 2 bekir users  4096 Mar  7 12:05 Resimler

Bu çıktıdaki ilk karakterler ilgili ögenin dosya mı yoksa klasör mü olduğunu belirtir. İlk karakter d ise ilgili öge klasördür, - ise dosyadır.

Bu çıktıdaki ikinci, üçüncü ve dördüncü karakterler ilgili dosya veya klasöre, dosya veya klasörün sahibi olan kullanıcının neler yapabileceğini belirtir. Beşinci, altıncı ve yedinci karakterler dosya veya klasörün sahibi olan grubun dosya veya klasöre yapabileceklerini belirtir. Sekizinci, dokuzuncu ve onuncu karakterler ise diğerlerinin dosya veya klasöre neler yapabileceğini belirtir.

Linux'ta bir dosya veya klasörün bir kullanıcı sahipliği bir de grup sahipliği vardır. Varsayılan durumda dosya veya klasörün sahibi olan kullanıcı hangi gruptaysa o grup dosya veya klasörün grup olarak sahibidir. Ama istenirse bir dosya veya klasörün kullanıcı sahipliği ve/veya grup sahipliği değiştirilebilir. (ileride göreceğiz) Bu durumda bir kullanıcının grup olarak sahibi, o dosya veya klasöre sahip olan kullanıcının grubu olmayabilir.

Bütün izinleri açılmış bir dosya şöyle gözükür:

-rwxrwxrwx

Bütün izinleri kapatılmış bir dosya da şöyle gözükür:

----------

r: Okuma iznini belirtir.
w: Yazma iznini belirtir.
x: Yürütme iznini belirtir.

-rwxr-x---

Bu çıktıdan ilgili ögenin bir dosya olduğunu, sahibinin her türlü izninin olduğunu, grubunun okuma ve yürütme izninin olduğunun ama yazma izninin olmadığının ve diğerlerinin de ilgili dosyayla ilgili hiçbir izinlerinin olmadığını anlayabiliyoruz.

Şimdi az önceki çıktıya geri dönelim:

-rwxr-xr-x 1 bekir users 20974 Mar  8  2009 ascii.pdf
-rwxr-xr-x 1 bekir users  1423 Mar  6 15:54 Ayarlar Listesi.txt
drwxr-xr-x 2 bekir users  4096 Mar  7 12:05 Resimler

Bu çıktıdaki ikinci sütun ilgili dosya veya klasöre yapılan "hard link" sayısını verir. Şimdilik bize "hard link", "soft link" gibi kavramlar biraz ağır geleceği için bu sütunu açıklamıyorum.

Üçüncü sütun ilgili dosya veya klasörün sahibini verir. (kullanıcı olarak)

Dördüncü sütun ilgili dosya veya klasörün grup olarak sahibini verir.

Beşinci sütun ilgili dosya veya klasörün boyutunu byte olarak verir. Ancak burada dikkat etmemiz gereken nokta klasörlerlerin içlerinin boyutunu değil, kendi boyutlarını vermesidir. Linux'ta bir klasör oluşturduğumuzda klasörün içi boş olsa bile Linux 4 KB'lık bir alanı klasör için ayırır ve alanda klasörle ilgili metadata denilen bilgiler tutulur.

Altıncı, yedinci ve sekizinci sütun ilgili dosya veya klasörün son değiştirilme zamanını verir. Eğer dosya ya da klasör içinde bulunduğumuz yılda değiştirilmişse yılı vermez, bunun yerine saati verir. Eğer bulunduğumuz yıldan eski bir zamanda değiştirilmişse yılı verir, saati vermez.

Son sütun ise ilgili dosya veya klasörün ismini verir.

a parametresi

ls komutunun gizli dosya ve klasörleri de göstermesini sağlar. Linux'ta gizli dosya ve klasörler . (nokta) karakteriyle başlar. Örnek:

ls -a

Bu komut aktif klasördeki bütün dosya ve klasörleri gizlileriyle birlikte gösterir.
NOT: Linux, her yeni klasör oluşturulduğunda ilgili klasöre otomatik olarak . ve .. gizli klasörlerini yerleştirir. Bu klasörler tahmin edebileceğiniz gibi geçerli klasör ve bir üst klasörü temsil ederler.

R parametresi

ls komutunun ilgili klasörü alt klasörleriyle beraber listelemesini sağlar. Deneyin, bu parametreyi çok seveceksiniz.

h parametresi

l parametresiyle birlikte kullanıldığında anlam kazanır. Dosya boyutlarını kolayca okunabilecek şekle dönüştürür. Örnek:

ls Belgeler -lh

Komutunu verdiğimizde aktif klasördeki Belgeler klasörünüzdeki dosya ve klasörlerler temsil edilebilecek en uygun türle gösterilirler. (byte, KB, MB veya GB) Bu sayede ilk bakışta dosyanın büyüklüğünü anlayabilirsiniz.

NOT: Parametre kullanırken birden fazla parametre kullanacaksanız parametreleri ard arda eklersiniz. Her parametre için farklı bir tire işareti kullanmazsınız ve parametrelerin sırası da önemli değildir. Örnek:

ls -laRh Belgeler

Bu komut aktif klasördeki Belgeler klasöründeki tüm dosya ve klasörleri, gizliler dahil olmak üzere, ayrıntılı olarak, alt klasörler de dahil olmak üzere ve dosya ve klasörlerin boyut bilgilerini kolay okunur şekilde vererek listeler.

NOT: ls komutu için özel olmak üzere dosya/klasör argümanıyla, parametre argümanının yerini değiştirebilirsiniz. Örneğin

ls -laRh Belgeler
ls Belgeler -laRh

Yukarıdaki her iki komut da çalışacaktır.

NOT: Linux komutları ve dosya/klasör adları büyük-küçük harf duyarlıdır.

cd

cd, dizinler arasında geçiş yapmak istediğimizde kullanabileceğimiz bir komuttur. Yani aktif dizini değiştirir. Kullanım:

cd klasor

Eğer klasörün başına / işaretini koyarsak Linux ilgili klasörü en üst klasörde arayacaktır, aksi takdirde aktif klasörde arayacaktır. Örnek:

cd /home/bekir/Belgeler

Bu komutla en üst klasöre bağlı home klasöründeki bekir klasöründeki Belgeler klasörü etkin hale getirilecektir. Yani komut isteminde bu klasörün içine girilecektir.

cd Müzik/Avril

Bu komutla aktif klasördeki Müzik klasöründeki Avril klasörüne girilir.

cd Müzik/..

Bilin bakalım bu komutla nereye girilir? Cevap basit: bu komutla bulunduğunuz klasörde kalırsınız.

cd .

Bu komutla da bulunduğunuz klasörde kalırsınız. Nokta işareti aktif klasörü belirtir.

NOT: Şimdiye kadar fark etmişsinizdir. Ama yine de ben söyleyeyim. Linux'ta herhangi bir komuta argüman olarak dosya/klasör adı veriyorsak bu dosya/klasör adını salt ad şeklinde verebileceğimiz gibi son derece karmaşık yol bilgileriyle beraber de verebiliriz. Salt ad şeklinde verdiğimizde aktif klasördeki dosya veya klasörlerle işlem yapılır. Yine bütün komutlar için klasör belirtirken .., . ve ~ özel işaretleri geçerlidir.

NOT: Yalnızca cd komutuna ve .. özel klasörüne özel olmak üzere cd.. gibi bir kullanım geçerlidir. Ancak cd../.. gibi bir kullanım elbette ki geçerli değildir. Diğer bütün klasörlerde klasör adını cd komutundan ayırmak gerekir.

NOT: Linux'ta bütün komutlarda geçerli olmak üzere bir komuta bir kelimeden fazla (yani boşluk içeren) bir argüman vermemiz gerekiyorsa ilgili metni çift tırnak arasına alırız. Örnek:

cd "Yeni Dizin"

Bu komutla aktif klasördeki Yeni Dizin klasörü aktif hale getirilir.

pwd

Geçerli dizini ekrana yazar.

mkdir

Yeni dizin oluşturmak için kullanılır. Örnek:

mkdir "../../Klasör/Yeni Klasör"

Bu komut iki üst klasördeki Klasör klasöründe Yeni Klasör adıyla bir klasör oluşturur. (bir berber bir berbere :)

rmdir

Dizin silmek için kullanılır. Ancak silinecek dizinin içinin boş olması gerekir. Örnek:

rmdir "../../Klasör/Yeni Klasör"

Bu komutla az önce oluşturduğumuz klasörü sildik.

NOT: Bu komut klasörleri çöp kutusuna taşımadan, direkt olarak siler.

touch

Boş bir dosya oluşturur. Örnek:

touch Deneme/Ornek.txt

Bu komut aktif klasördeki Deneme klasöründe Ornek.txt isminde boş bir dosya oluşturur.

cp

cp komutu dosya kopyalamaya yarar. Örnek:

cp Deneme/Ornek.txt .

Bu komut aktif klasördeki Deneme klasöründeki Ornek.txt dosyasını (az önce oluşturduğumuz dosya) geçerli klasöre kopyalar.

cp Deneme/Ornek.txt Ornek2.txt

Bu komut ise aynı işlemi dosyanın ismini Ornek2.txt olarak değiştirerek yapar. (klasör belirtmediğimizde aktif klasör sayılıyordu)

NOT: cp komutu klasör kopyalayamaz. Sadece dosya kopyalayabilir.

mv

Dosya taşımaya yarar. Dosyaları kopyalamak yerine taşıması haricinde cp ile aynı özelliklere sahiptir.Dosya ismi değiştirmeye de yarar.

rm

Dosya silmeye yarar. Örnek:

rm Deneme/Ornek.txt Ornek.txt Ornek2.txt

Bu komutla şimdiye kadar oluşturduğumuz bütün dosyaları sildik. Bu komut silmeden önce onay ister. y yazıp enter'a basarsak silinir, n yazıp enter'a basarsak silinmez. Yine rmdir'de olduğu gibi bu komutta da dosyalar çöp kutusuna taşınmadan, direkt olarak silinir.

NOT: Bu komutta olduğu gibi rmdir, touch, mkdir, cp ve mv komutlarında da çoklu dosya/klasör belirtme yöntemini kullanabilirsiniz. Örnekler:

rmdir "Yeni Dizin" "Yeni Dizin_1" "Yeni Dizin_2"
touch dosya1.txt dosya2.txt
cp dosya1.txt dosya2.txt Resimler

Birinci komutta aktif dizindeki Yeni Dizin, Yeni Dizin_1 ve Yeni Dizin_2 klasörleri silinir. İkinci komutta aktif klasörde dosya1.txt ve dosya2.txt dosyaları oluşturulur. Son örnekte de bu oluşturulan dosyalar aktif klasördeki Resimler klasörüne kopyalanır.

NOT: rmdir komutu rm'den farklı olarak silme için onay istemez ve klasörlerin içinin boş olması gerekir.

NOT: cp ve mv komutlarıyla en sık yaşayabileceğimiz aksilik hedef klasörde zaten aynı isimde dosya olmasıdır. Bu durumda komut istemi "Üstüne yazılsın mı?" diye sorar. y yazıp enter'a basarsanız üzerine yazılır, n yazıp enter'a basarsanız kopyalama/taşıma gerçekleşmez. Ancak bu durum touch ve mkdir için geçerli değildir. Bu komutlar benzer bir durumla karşılaştığında dosya/klasör oluşturulmaz. Eğer çoklu dosya/klasör belirtme yöntemini kullanmışsak bu durumda bu aksilik yalnızca ilgili dosya/klasörü etkiler, komutun çalışmasını tümden bitirmez.

chown

Bir dosya veya klasörün sahibini (kullanıcı olarak) değiştirmeye yarar. İstenirse çoklu dosya/klasör belirtimi yapılabilir. Örnek:

chown ayse Klasor dosya.txt

Bu komutla aktif klasördeki Klasor klasörünün ve dosya.txt dosyasının sahibi ayse olarak değiştirilir.

chgrp

chown komutuna benzerdir. Ancak chown komutundan farklı olarak dosya veya klasör(ler)in kullanıcı sahipliği değil grup sahipliği değiştirilir. Örnek:

chgrp disk Klasor dosya.txt

Bu komut aktif klasördeki Klasor klasörünün ve dosya.txt dosyasının sahibini disk denilen grup yapar. Pardus 2009.1'de tanımlı gruplar: users, disk, wheel, audio, dialout, video, pnp, removable, power ve pnpadmin'dir. Pardus'ta oluşturulan bir kullanıcı ön tanımlı olarak users grubuna dahil edilir. Açıkçası bir ev kullanıcısı için gerek chown, gerekse chgrp (özellikle chgrp) son derece gereksiz komutlardır. Bu komutlar daha çok yüzlerce kullanıcısı olan sistemler ve server görevi yapan bilgisayarlar için tasarlanmıştır.

NOT: chown veya chgrp ile bir klasörün bilgilerini değiştirdiğimizde bu, o klasörün içindeki dosya ve klasörlere etki etmez.

NOT: chown veya chgrp ile bir dosya veya klasörün özelliklerinde değişiklik yaptığınızda bunun sonucunu görsel arayüzlü dosya yöneticinizde görebilmeniz için "yenile" düğmesine veya F5 tuşuna basmanız gerekebilir.

NOT: Her Linux sisteminde root adında sınırsız yetkilere sahip olan bir kullanıcı vardır. İstersek chown ile bir dosya veya klasörün sahibini root yapabiliriz. Ancak normal şartlar altında bunu gerçekleştiremeyiz. Örneğin:

chown root Klasor dosya.txt

komutunu verdiğimizde komut istemi yetkimiz olmadığı gerekçesiyle bu işleme izin vermeyecektir. Bu engellemeyi aşabilmek için komut isteminde root moduna geçmeliyiz. Bunun için komut isteminde sudo su komutunu veririz:

sudo su

Bu komuttan sonra bizden root şifremiz istenecektir. Şifrenizi giriniz. Şifrenizi girerken ekranda şifre girdiğinizi belli edecek bir değişiklik olmaz. Ancak endişelenmeyin. Bu komut isteminin bir özelliğidir. Şifrenizi girip enter'a bastıktan sonra komut isteminde her komut beklenen satırın başında çıkan klasik kullanıcı@bilgisayar klasör $ yazısı bilgisayar klasör # olarak değişir. Bu değişim olduğunda root modundasınız demektir. Şimdi

chown root Klasor dosya.txt

komutunu verin. Artık aktif klasördeki Klasor klasörünün ve dosya.txt dosyasının kullanıcısını root olarak değiştirdiniz. Şimdi dosya.txt dosyasında değişiklik yapıp kaydetmeyi deneyin veya Klasor klasörünün içinde yeni bir dosya oluşturmayı veya içindeki dosyalardan birini silmeyi deneyin. Bunlardan hiçbirini başaramayacaksınız, çünkü bu dosya ve klasör artık root'un oldu. Linux sistemlerinde root olarak oturum başlatmak mümkün değildir. Bu güvenlik nedeniyle alınmış bir önlemdir. Çünkü root yetkilerine sahip bir kullanıcı sistemi çok kolay çökertebilir. Herhalde içeriği değiştirilemeyen bir klasör veya dosya istemezsiniz. O halde şimdi Klasor klasörünün ve dosya.txt dosyasının sahibini eskisine çevirin. Bunun için de root modunda olmanız gerekiyor.

chmod

Az önce bir dosya ve klasörün sahibini root yaptık. Bunun sonucunda normal kullanıcı olarak bu dosya ve klasörlerle ilgili çeşitli işlemlerden mahrum kaldık. Acaba bu engellemeler nasıl belirleniyor. Yani dosyanın sahibini root yaptığımızda dosyanın içeriğini değiştiremeyeceğimizi kim belirliyor? İşte bütün bunları o dosyanın sahibi olan kullanıcı belirleyebiliyor. ls komutunun -l seçeneğini anlatırken dosya/klasör izinlerinden bahsetmiştik. Şöyle bir şeydi:

rwxr-x---

Buradan dosya/klasörün sahibinin dosya/klasöre her şeyi yapabileceğini, dosya/klasörün grup olarak sahibinin dosya/klasörü okuyup yürütebileceğini ama yazamayacağını, diğerlerinin ise dosya/klasörle ilgili hiçbir şey yapamayacağını anlamıştık. İşte chmod komutu ile bu izinleri değiştirebiliriz. Ama bunun için komut istemini dosya/klasörün sahibinin açması, eğer dosya/klasörün sahibi root ise root moduna geçilmesi gerekir. Şimdi dosya.txt dosyasının sahibini root yapalım, ancak tabii ki önce root moduna geçelim:

chown root dosya.txt

Artık dosya.txt dosyasının içeriğini değiştirip kaydedemeyiz. Şimdi ls -l komutunu verelim ve çıktısına bakalım. Bizi ilgilendiren dosya.txt dosyasının izinleri. Bu dosyanın izinleri bende şu şekilde:

rw-r--r--

Yani dosyayı herkes okuyabiliyor, ama yazma işlemini sadece root yapabiliyor. Şimdi şu komutu verelim:

chmod og+w dosya.txt

Bu komutla other (diğerleri) ve grup sahiplerine yazma hakkı verdik. Şimdi siz users grubundaki birisi olarak veya bambaşka birisi olarak dosyayı değiştirip kaydetme iznine sahip oldunuz. (Dosyanın sahibini root olarak değiştirirken grup sahibine ellememiştik, grup sahibi users olarak kalmıştı.) Benzer şekilde bu verdiğimiz izinleri geri almak için

chmod og-w dosya.txt

komutu veririz. Başka bir örnek:

chmod ugo+wxr dosya.txt

Burada herkese bütün izinleri veriyoruz. Tahmin edebileceğiniz gibi bu komutlarda u harfi ilgili dosya veya klasörün kullanıcı olarak sahibini, g harfi grup olarak sahibini ve o harfi de diğerlerini belirtiyor. + işareti belirtilen kullanıcı(lar)a izin(ler) vermek istediğimizi - işareti de var olan izin(ler)i iptal etmek istediğimizi belirtiyor. Son olarak w, x, r harfleri de izin türlerini belirtiyor.

Notlar:

  1. root kullanıcısı, ilgili dosya veya klasörün sahibi kim olursa olsun, bütün izinleri geçersiz kılma yetkisine sahiptir.
  2. chmod komutuyla çoklu dosya/klasör belirtme yöntemi kullanılabilir.
  3. x izini klasörler için çok önemlidir. Klasörün içini görme, veya görememe anlamına gelir. Yani dosya gizlemeyi bu şekilde Windows'tan çok daha güvenli bir şekilde yapabilirsiniz. root şifresini bilmeyen hiç kimse klasörün içindekileri göremez.
  4. w izini klasörler için klasöre yeni bir dosya veya klasör ekleyebilme veya var olan dosya/klasörü silebilme anlamına gelir.
  5. r izini klasörler için pratikte x ile aynı anlama geliyor. Pardus'ta x izniniz olmayan bir klasöre girdiğinizde klasörün durum çubuğunda "erişim engellendi" diyor. Ancak r izniniz olmayan bir klasöre girdiğinizde ise "dizine girilemedi" diyor. Ama sonuçta her iki durumda da o klasördeki dosya ve dizinleri göremiyorsunuz.
  6. w izniniz olmayan bir dosyayı istediğiniz gibi silebilir veya taşıyabilirsiniz. w izni yalnızca dosyanın içeriğini değiştirmenizi kısıtlar.
  7. r izniniz olmayan bir dosyayı açamazsınız, hatta dosyanın önizleme özelliği varsa (örneğin jpg dosyaları) önizlemesi bile kapatılır. Ayrıca r izni dosya/klasör kopyalamaya da engeldir ancak taşımaya engel değildir. Ancak bunun çözümü de basittir. Bir üst klasörün w iznini kapatırsınız.
  8. x izni dosyalar için yalnızca çalıştırılabilir dosyalarda anlam kazanır. Örneğin kullanıcıların bir programı çalıştırmasını istemiyorsanız bu izni kapatırsınız. Çalıştırılabilir dosyalar için r izni çalıştırılabilir dosyanın makine kodunu görmek ve w izni de makine kodunu değiştirmek anlamına gelir.
  9. Dosya/klasör özelliklerini değiştirdikten sonra normal görsel arayüzlü dosya yöneticide değişiklikleri görebilmem için birkaç kez F5'e basmam hatta bazen dosya yöneticiyi kapatıp açmak zorunda kaldım, sizde de benzer durumlar olursa telaşlanmayın.
  10. Varsayılan durumda çalıştırılabilir dosyaların kullanıcı ve grup sahibi root'tur ve grup ve other kullanıcıları için x ve r izinleri açılmış ama w izni kapatılmıştır. Çünkü bir çalıştırılabilir dosyanın makine kodunu değiştirdiğiniz zaman program bozulabilir.
  11. x izni klasörler için tıpkı r gibi kopyalamaya engel ama taşımaya engel değildir.
  12. Diyelim ki her türlü izne sahip olduğunuz bir klasör var. Ama bu klasörün içindeki bir dosyaya r izniniz yok ve klasörü kopyalamak istiyorsunuz. Bu durumda klasörü, içinde o dosya olmadan kopyalayabilirsiniz. Yani diğer dosyaları hatasız bir şekilde kopyalarsınız.
  13. x izni dosyalar için kopyalama ve taşımaya engel değildir.
  14. Burada hep dosya/klasör sahibini root yapıp izinleri değiştirerek root şifresini bilmeyen kullanıcılara çeşitli kısıtlamalar getirilmesini sağladık. Ama elbette ki bunu illaki bu şekilde yapmak zorunda değilsiniz. Örneğin sisteminizde iki normal kullanıcı var. Kendinize ait olan dosyaların izinleriyle oynayarak sistemdeki diğer kullanıcının dosyalarınızla serbestçe oynamasına engel olabilirsiniz.
  15. Pardus 2009.1'de dosya ve klasörlerin varsayılan izinleri şu şekildedir: rwxr-xr-x. Yani varsayılan durumda sisteminizdeki diğer kullanıcılar dosya ve klasörlerinizi görebilir ama değiştiremezler.
  16. Linux'ta mevcut dosya ve klasörlerle işlem yapan ve çoklu dosya/klasör işleme yeteneğine sahip olan bütün komutlarla ? ve * joker karakterleri kullanılabilir. Örnekler:
mv *.jpg "Resim Dosyaları"
chmod ugo+rwx *~

Birinci komutta aktif klasördeki bütün jpg uzantılı dosyalar "Resim Dosyaları" klasörüne taşınıyor. İkinci komutta da sonu ~ ile biten dosyaların (yedekleme dosyaları) izinleri herkese açılıyor.

17. İstersek joker karakter kullanabileceğimiz bütün komutlarda joker karakterli belirtimle birlikte normal belirtim de yapabiliriz. Örnek:

chgrp wheel ?b* dosya.txt

Bu komutla ikinci harfi b olan dosya/klasörler ve dosya.txt dosyasının grup sahibi wheel olarak değiştiriliyor.

cp *.jpg *.png *.gif "Resim Dosyaları"

Bu komutla uzantısı jpg, png ve gif olan tüm dosyalar Resim dosyaları klasörüne kopyalanıyor.

mv *.odf word.doc dene.htm Belgeler

Bu komutla odf uzantılı tüm dosyalar, word.doc dosyası ve dene.htm dosyası Belgeler klasörüne taşınıyor.

18. Eğer bir dosya veya klasörün isminin değiştirilememesini istiyorsak bir üst klasörün w iznini kapatırız.

19. Şimdiye kadar öğrendiğimiz komutlar içinde çoklu dosya/klasör belirtimine izin verenler: ls, mkdir, rmdir, touch, cp, mv, rm, chown, chgrp ve chmod. Yani cd ve pwd hariç hepsi. Zaten bu iki komutun mantıksal olarak çoklu dosya/klasör belirtimine izin vermeleri mümkün değil. Zaten pwd komutu argüman bile almıyor.

tar

tar, Linux'ta dosya/klasör arşivlemeye yarayan bir komuttur. Yani Windows'taki Winrar'a benzer. Ancak dikkat: bu komut bir veya birden fazla dosya veya klasörü bir arşiv dosyası içinde saklamaya yarar. Sıkıştırma yapmaz. Örnek kullanım:

tar cvf yedek.tar dosya.pdf deneme.txt Klasor

Bu komutla dosya.pdf, deneme.txt dosyaları ve Klasor klasörü yedek.tar dosyasında arşivlenir. Elbette ki dolaylı olarak Klasor klasöründeki dosya ve klasörler de bu arşive girmiştir. Şimdi şu komutu vererek arşivdeki dosya ve klasörleri dışarı çıkaralım:

tar xvf yedek.tar

Bu komut yedek.tar dosyasındaki tüm dosya ve klasörleri aktif klasöre çıkaracaktır.

tar komutu parametreleri

-c Create: tar klasörünün yaratılacağını belirtir.

-x Extract: bir tar klasörünün açılacağını belirtir.

-t Tabel of contents: bir tar klasörünün iceriğinin listeleneceğini belirtir.

-v Verbose: bir tar klasörünün yaratılırken ya da açılırken elden geçen dosyaların isimlerini ekrana listelemek icin kullanılır.

-z : tar klasörünün sıkıştırılmış bir dosya olarak kullanılacağını belirtir.Gunzip kullanılacaktır.

-f File: yaratılacak,açılacak ya da içindekiler tablosu listelenecek tar klasörünün adının komut satırında verileceğini belirtir.

gzip

tar dosyalarını sıkıştırmaya yarar. Örnek:

gzip yedek.tar

Bu komutla yedek.tar dosyanızın adı artık yedek.tar.gz olur. Bu yöntem dosyalarınızı az da olsa sıkıştırmaya yarar. Benim arşivimi 40.8 MB'tan 40.4 MB'a sıkıştırdı :) Şimdi bu sıkıştırdığımız arşivi eski haline getirelim:

gzip -d yedek.tar.gz

Disk komutları

 

df

Salt olarak kullanıldığında sabit disk(ler)in ve bölüm(ler)in (partition) toplam boyutlarını, kullanılmış alanlarını, boş alanlarını, yüzde kaçının dolu olduğunu ve nereye bağlı olduğunu verir. Çıktısı şuna benzer bir şeydir:

Dosyasistemi         1K-blok        Dolu Boş       Kull%Bağlanılan yer
/dev/sda5             60743612  16382312  43744180  28% /
tmpfs                   509664       608    509056   1% /dev/shm
/dev/sda1             55505488  11465220  44040268  21% /mnt/sda1

"1K-blok" yazan yer ilgili bölümün (veya sabit diskin) toplam boyutudur. Varsayılan durumda bu değerler KB cinsinden görüntülenir. Ancak istersek ekleyeceğimiz çeşitli seçeneklerle bu birimi değiştirebiliriz. m seçeneği ile sonuçların MB cinsinden olmasını k seçeneği ile de KB cinsinden olmasını sağlarız (varsayılan). Ancak bunlardan en kullanışlısı h'dir. h seçeneği ile sonuçların gösterilebilecek en büyük birimle gösterilmesini sağlarız. Örnek:

df -h

du

Salt olarak kullanıldığında aktif klasörün ve aktif klasörün altındaki tüm klasörlerin (alt klasörler de dahil) isimlerini ve toplam boyutlarını verir. Burada boyuttan kastımız ilgili klasörün içindeki her şeyin boyutudur. Bu durumu kolay anlayabilmeniz için olayı şöyle somutlaştırayım: aktif klasörünüzün alt klasörleri şöyle olsun:

Ana Klasör

  • dosya1.mpg

Alt Klasör

  • dosya1.mpg
  • dosya2.mpg

Alt-Alt klasör

  • dosya1.mpg

Buradaki dosya1.mpg dosyasının birden fazla klasörde birer kopyası var. Alt Klasör klasöründe de bir dosya2.mpg dosyası var. dosya1.mpg dosyasının boyutu 10 MB, dosya2.mpg dosyasının ise 20 MB olsun. Biz Ana Klasör klasöründeyken du komutunu verirsek şöyle bir çıktı alırız (du komutunu h seçeneği ile verin ki boyut bilgilerini okumak kolay olsun):

10M     ./Alt Klasör/Alt-Alt klasör
40M     ./Alt Klasör
50M     .

Tahmin edebileceğiniz gibi du komutunun m, k (varsayılan) ve h seçenekleri vardır. Ayrıca istersek du komutuyla belirli bir klaasörün boyutunu da öğrenebiliriz. Ancak bunun için komuta s seçeneğini eklemeliyiz. Örnek:

du -sh ../Klasör

Bu komutla bir üst klasördeki Klasör klasörünün ismini ve boyut bilgisini en okunaklı şekilde alırız. Ancak bu durumda sadece belirttiğimiz klasörün bilgisi verilir. Alt klasörlerin bilgisi verilmez. Örneğin şu komutu verirsek:

du -sh "Ana Klasör"

şöyle bir çıktı alırız: (yukarıdaki klasör ağacımızdaki Ana Klasör klasörü)

50M     Ana Klasör

Bu yöntemle sadece klasör değil, dosya da belirtebiliriz. Örnek:

du -sh *.mpg

Bu komutla aktif klasördeki mpg uzantılı dosyaların boyutlarını bir liste şeklinde alırız.

du -sh *.mpg *.flv

Bu komutla aktif klasördeki mpg ve flv uzantılı dosyaların boyutlarını bir liste şeklinde alırız.

du -sh *.mpg *.flv Klasor

Bu komutla da aktif klasördeki mpg ve flv uzantılı dosyaların ve Klasor klasörünün boyutlarını bir liste halinde alırız.

mount

mount komutu ile herhangi bir aygıtı herhangi bir klasöre bağlayabiliriz. Bu sayede o klasörü açtığımızda o aygıtın içindekilere erişebiliriz. Aslına bakarsanız Ubuntu ve Pardus gibi modern dağıtımlarda bu işlem otomatik olarak gerçekleşir. Örneğin CD-ROM sürücüsüne bir CD taktığınızda CD'yle ne yapmak istediğinizi belirten bir ileti kutusu görüntülenir. Ancak modern dağıtımlarda mount komutunun kullanılması kısıtlanmamıştır. Şimdi CD-ROM sürücünüze bir CD yerleştirin ve şu komutu verin:

mount /dev/cdrom "Yeni Klasör"

Bu komutu verdikten sonra aktif dizininizdeki Yeni Klasör klasörünü açtığınızda taktığınız CD'deki dosya ve klasörleri görebileceksiniz.

umount

umount komutu mount komutunun yaptığının tersini yani "bağlantıyı kesme" işlemini yapar. Bu sayede CD-ROM'a bağlı klasörünüzün gerçek içeriğini tekrar görebilirsiniz. Az önceki bağlantıyı kesmek için şu komutu verin:

umount /dev/cdrom

NOT: mount ve umount komutlarını kullanabilmeniz için root modunda olmalısınız.

NOT: Dosya yöneticinizde mount komutunu vermenize rağmen Yeni Klasör klasöründe CD'nin içeriği gözükmüyorsa, veya umount komutunu vermenize rağmen halen gözüküyorsa birkaç kez F5'e basmanız, dosya yöneticinizi kapatıp açmanız ve/veya biraz beklemeniz gerekebilir.

NOT: Bağlantının yapılabilmesi veya sorunsuz kesilebilmesi için komut isteminde bağlanan klasörün içinde olmamanız tavsiye edilir.

Metin dosyalarıyla işlemler

Bu kısımda Linux komutları aracılığıyla metin dosyalarını görüntülemeyi ve metin dosyalarında arama yapmayı göreceğiz.

cat

Bir metin dosyasının içeriğini komut satırında görmemizi sağlar. Örnek:

cat dosya.txt

Bu komut dosya.txt dosyasının içeriğini komut isteminde okuyabilmemizi sağlar.

more

more komutu cat ile aynı ile vazifelidir. Ancak more komutunun bir avantajı tek sayfada gösterilemeyecek olan dosyalar okunurken boşluk tuşu ile kaydırma olanağı sağlamasıdır.

head

Bir metin dosyasının ilk birkaç satırını görüntülemek için kullanılır. Örnek:

head dosya.txt

tail

Bir metin dosyasının son birkaç satırını görüntülemek için kullanılır. Örnek:

tail dosya.txt

head ve tail komutları için varsayılan değer 10'dur. Ancak istenirse bu değer değiştirilebilir. Örnekler:

head -n 5 dosya.txt
tail -n 25 dosya.txt

Birinci örnekte dosyanın başından itibaren 5 satır görüntülenir. İkincisinde ise aynı dosyanın sonundan itibaren 25 satır görüntülenir. Eğer dosyanın satır sayısı belirtilen sayıdan az ise (veya sayı belirtilmediğinde 10'dan ise) dosyada olan kadar satır görüntülenir.

grep

Metin dosyalarında arama yapmaya yarayan bir komuttur. Örnek:

grep metin dosya.txt

Bu komutla dosya.txt dosyasında "metin" metnini içeren bütün satırlar görüntülenir ve "metin" metinleri de renkli gösterilir. grep komutu ile istenirse aynı anda birden fazla dosyada da arama yapılabilir. Bu durumda her bulunan metnin satırının sol kısmında metinin hangi dosyada bulunduğu yazar. Örnek komut:

grep metin dosya1.txt dosya2.txt

Komut yönlendirme

Bu bölümde bir komutun sonucunu ekran yerine bir dosyaya yazma ve bir komuta argüman olarak bir metin dosyası vermektense başka bir komutun çıktısını vermeyi göreceğiz.

> işareti

> işareti bir komutun sonucunu yeni oluşturulacak bir dosyaya yazmaya yarar. Örnek:

ls > dosya.txt

Bu komut aktif dizindeki dosya ve klasörleri yeni oluşturulacak dosya.txt dosyasına yazar. dosya.txt dosyası aktif klasörde oluşturulur. Başka bir örnek:

ls -lh ../Klasör > ../../dosya.txt

Bu komut da geçerlidir.

NOT: Eğer yaratılacak olan dosya isminde dosya varsa üzerine yazılır.

>> işareti

>> işaretinin > işaretinden tek farkı yeni dosya oluşturmaması, komut çıktısını var olan dosyanın sonuna eklemesidir.

2> ve 2>> işaretleri

> ve >> işaretleri normal çıktıyı basarken 2> ve 2>> işaretleri verilen komutun hata çıktısını basar. Örnek:

ls -z 2>dosya.txt   "ls: geçersiz seçenek -- z" hatasını dosya.txt dosyasına içeriği silerek yazar.
ls -z 2>>dosya.txt  "ls: geçersiz seçenek -- z" hatasını dosya.txt dosyasının son satırına ekler.

| (pipe) işareti

| işaretiyle bir komutun çıkışını başka bir komuta argüman olarak verebiliriz. Bu sayede dosya oluşturma işleminden kurtulmuş oluruz. Çünkü | işareti bir komutun sonucunun sanki bir metin dosyasının içeriğiymiş algılanmasını sağlar. Örnek:

ls Klasör | grep dosya

Bu komut "ls Klasör" komutunun çıktısında "dosya" kelimesini arayacak ve bulduğu satırları listeleyecektir. (ls komutunun çıktısındaki her dosya/klasör ismi bir satır olarak algılanır.)

Düzenli ifadeler

Düzenli ifadeler bir bilgisayar programcısının en çok seveceği yapılardandır. Çünkü programcıların normalde yapamayacağı veya çok zor yapacağı şeyleri son derece basit ve kullanışlı yöntemlerle yapabilmesini sağlar.

Yukarıdaki tanımdan düzenli ifadelerin ne demek olduğunu anlamadınız, biliyorum. O halde açıklayayım. Düzenli ifadeler, bazı ortak özelliklere sahip karakter dizeleriyle ilgili ortak işlemler yapabilmemizi sağlayan bir yapıdır. Örneğin iki karakter dizesi de a harfi ile başlıyorsa bunların ortak özelliği a harfi ile başlamalarıdır diyebiliriz ve bu ortak özelliğe dayanarak bu iki karakter dizesiyle ilgili ortak işlemler yapabiliriz. Örneğin ikisini de başka bir kelimeyle değiştirebiliriz.

Linux komut satırında düzenli ifadeler grep, sed ve awk komutlarıyla kullanılabilir. grep komutunu daha önce görmüştük. sed ve awk komutlarını da bu bölümde göreceğiz. Şimdi düzenli ifadelere başlayabiliriz.

Köşeli parantezler: [ ]

Köşeli parantezler ilgili yerde parantezin içindeki karakterlerden birisinin bulunması gerektiğini belirtir. Örnek:

grep [ktsş]an dosya.txt

Bu komutla dosya.txt dosyasında kan, tan, san ve şan kelimeleri aranır. Köşeli parantezlerin başka bir kullanımı da şu şekildedir:

grep [a-z]an dosya.txt

Bu komutla aan'dan zan'a kadar olan kelimeler aranır. (aan, ban, can, çan, ..., zan)

grep [f-m]an dosya.txt

Bu komutla fan'dan man'a kadar olan kelimeler aranır. (fan, gan, ğan, han, ..., man)

grep [1-9]an dosya.txt

Bu komutla 1an'dan 9an'a kadar olan kelimeler aranır. (1an, 2an, 3an, 4an, ..., 9an)

grep [4-7]an dosya.txt

Bu komutla 4an, 5an, 6an ve 7an aranır.

NOT: Yaptığım denemelerde büyük harf kullanımıyla küçük harf kullanımının genelde fark etmediği gördüm. Sadece bir yerde fark ediyor. Eğer köşeli parantezler içindeki ilk harf küçük harfse o harfin büyük harf olarak karşılığıyla başlayan karakter dizesi çıkmıyor. Bu sorunu köşeli parantezler içindeki ilk harfi büyük yaparak giderebilirsiniz.

Nokta: .

İlgili yerde herhangi bir karakter bulunması gerektiğini belirtir. Örnek:

grep ş.n dosya.txt

Bu komutla şan ve şen gibi ş ile başlayıp n ile biten ve üç karakterden oluşan bütün karakter dizeleri aranacaktır. Başka bir örnek:

grep f...r dosya.txt

Bu komutla bulunabilecek karakter dizelerinden bazıları: fener, fecir, fular, fiber, f)? r

Yıldız: *

Kendinden önceki karakterin (veya köşeli parantez ifadesinin) hiç bulunmayabileceğini, bir kere veya daha fazla bulunabileceğini belirtir. "O halde bunun aramaya bir etkisi yoktur" diyebilirsiniz, ki haklısınız. Evet, aramaya etkisi yoktur ama bulunan karakter dizesine etkisi vardır. Şimdi içeriği şöyle olan bir metin dosyası oluşturun ve adına dosya.txt verin:

benim adım hmet
benim adım ahmet
benim adım aahmet
benim adım aaaaaahmet

Komut isteminde bu dosyanın bulunduğu klasöre girin ve şu komutu verin:

grep a*hmet dosya.txt

Bu komutun çıktısı şöyle olacaktır:

benim adım hmet
benim adım ahmet
benim adım aahmet
benim adım aaaaaahmet

Gördüğünüz gibi * işareti "bulunabilme"yi değiştirmiyor, ama bulunan karakter dizesini değiştiriyor. Bu işaret bulunan bir karakter dizesinin başka bir karakter dizesiyle değiştirilmesini sağlayan ileride göreceğimiz sed komutunda işe yarayacak. Başka bir örnek:

grep [a-z]*m  dosya.txt

Bu komutun çıktısı da şöyle olur:

benim adım hmet
benim adım ahmet
benim adım aahmet
benim adım aaaaaahmet

^ işareti

grep komutuna argüman olarak verilen aranan metinin yalnızca başına konursa işe yarar. Anlamı şudur: bu karakter dizesini yalnızca satır başlarında ara. Şimdi dosya.txt dosyanızın içeriği şöyle değiştirin:

ahmet başta
ortada ahmet...
sonda ahmet

Şimdi şu komutu verelim:

grep ^ahmet dosya.txt

Bu komut sonucunda yalnızca ilk satır görüntülenir.

NOT: Şöyle bir komut istediğimiz aramanın yapılamamasına yol açar.

grep b^ahmet dosya.txt

$ işareti

^ işaretinin tam tersidir. Arama yalnızca satır sonlarında yapılır. Örnek:

grep ahmet$ dosya.txt

Bu komut sonucunda ekranda yalnızca son satır görüntülenir. Komutun işe yaraması için $ işareti aranan metnin sonuna konmalıdır.

\\

İki tane ters slash işareti (\\) düzenli ifadeler bakımından anlamı olan özel karakterlerin ([ ] . * ^ $) düz metin olarak algılanmasını sağlar. Diyelim ki metin dosyanızda ahmet$ metnini aramak istiyorsunuz. Ancak aramanızı bu şekilde, olduğu gibi yaparsanız komut istemi sizin sonu ahmet ile biten satırları aramak istediğinizi düşünecektir. İşte bunu engellemek için bir özel karakter olan $'ın önüne iki tane ters slash koyup $ karakterinin normal karaktermiş gibi algılanmasını sağlarız. Örnek:

grep ahmet\\$ dosya.txt

Bu komutla "ahmet$"lar aranır.

NOT: Eğer \ işaretinin düz karakter olarak algılanmasını istiyorsanız önüne üç tane \ koyarsınız. Yani yan yana dört tane \ karakteri bir tane düz \ karakteri anlamına gelir.

NOT: Arama yaparken özel karakterleri özel bir anlama gelmeyecek şekilde kullanırsak (örneğin arama metninin ortasında ^ kullanırsak) ilgili özel karakter düz karakter olarak algılanır. Ancak istersek yine de \\ ile düz karakter olarak algılanmalarını sağlayabiliriz. Örnekler:

grep be^nim dosya.txt
grep ad$ı dosya.txt
grep *ben dosya.txt

NOT: Arama yaparken [ veya ] karakterlerinden sadece birini kullansak bile \\ ile düz karakter olarak algılattırmalıyız.

NOT: grep ile arama yaparken arama metnimizin başında $ bulunması gerekiyorsa bunun düz metin olarak algılanması için tek ters slash işareti kullanırız. Örnek:

grep \$benim dosya.txt

Bu komut sonucunda "$benim"ler aranır.

sed komutu

sed komutu metin dosyalarının içeriğini değiştirmek için kullanılır. grep komutunu anlatırken söylediğimiz her şey sed için de geçerlidir. Yani [] . * ^ $ ve \\ işaretleri grep ile kullanıldığı şekilde sed ile de kullanılır. Ancak sed komutunun kendine özgü kuralları da vardır. Örnek bir komut:

sed s/benim/senin/ dosya.txt

Bu komutla dosya.txt dosyasındaki "benim"ler "senin" olarak değiştirilir. Daha doğrusu değiştirilmişi ekrana yazılır, orijinal dosya değiştirilmez. Ancak orijinal dosyanın da değiştirilmesi daha önce görmüş olduğumuz komutlar sayesinde oldukça kolaydır:

sed s/benim/senin/ dosya.txt > dosya2.txt
rm dosya.txt
mv dosya2.txt dosya.txt

Burada ilk komutun çıktısını direkt olarak dosya.txt dosyasına yazamadık. Çünkü dosya.txt dosyası zaten komut isteminde kullanımda olduğundan o tür bir kullanım istemediğimiz sonuçlara yol açıyordu. Şimdi dosya.txt dosyanızın içeriğini şununla değiştirin:

benim adım hmet
benim adım ahmet
benim adım aahmet
benim adım aaaaaahmet

Şimdi şu komutu verin:

sed s/a*hmet/osman/ dosya.txt

Bu komutun çıktısı şöyle olur:

benim adım osman
benim adım osman
benim adım osman
benim adım osman

Şimdi dosya.txt dosyanızın içeriğini şununla değiştirin:

1. deneme deneme deneme
2. deneme deneme deneme
3. deneme deneme deneme
4. deneme deneme deneme
5. deneme deneme deneme

Şimdi şu komutu verin:

sed s/deneme/mustafa/ dosya.txt

Evet, bu komut sonucunda beklenmedik bir çıkış aldınız. sed komutu her satırdaki yalnızca ilk "deneme"yi değiştirdi. İşte bu sed komutunun bir özelliğidir. sed komutu belirtilen metinle eşleşen her satırdaki yalnızca ilk metni değiştirir. Ancak bu sınırlamayı aşmak mümkündür:

sed s/deneme/mustafa/g dosya.txt

Gelelim sed komutunun başka bir özelliğine. Diyelim ki metin dosyasındaki bütün "deneme"ler yerine sadece 5. satırdaki "deneme"leri değiştirmek istiyorsunuz. Bunu yapmak için:

sed /5/s/deneme/mustafa/g dosya.txt

Bu komut bilgisayara şunu der: Önce "5" metninin olduğu satır(lar)ı bul. Sonra, bu satır(lar)daki "deneme" ile eşleşen metinleri "mustafa" olarak değiştir. Şimdi aynı konuyla ilgili başka bir örnek yapalım. dosya.txt dosyamızın içeriği şöyle olsun:

aaadenemebbb
aaadenemccc
qwertyfrdsx
deneme e

Komutumuzda şöyle olsun:

sed /deneme/s/a/e/ dosya.txt

Bu komut, içinde "deneme" olan satırlardaki yalnızca ilk "a"ları "e" olarak değiştirecektir. İlk ve son satırlarda "deneme" var. Ama son satırda "deneme" olmasına karşın hiç "a" yok. Bu durumda komut sadece ilk satırda etkisini gösterecektir. Bir de şöyle bir komut girelim:

sed /deneme/s/e/a/ dosya.txt

Burada dikkatimizi çeken şey ön arama yapılan kelimedeki harfin değişmesi. Yani böyle bir şey olabiliyor. Şimdi sed komutunun başka güçlü bir özelliğine geçelim: sed komutuyla tek seferde birden fazla değiştirme işlemi yapabilirsiniz. Örnek:

sed -e s/deneme/mustafa/g -e s/ayşe/fatma/g dosya.txt

Bu komutla dosyadaki "deneme"ler mustafa olarak, "ayşe"ler fatma olarak değiştirilir. "-e"ler artırılarak aynı komutla ikiden de fazla değişiklik yapılması sağlanabilir.

& işareti

& işareti sed komutuna özgü bir karakterdir. Bulunan metni temsil eder. Biliyorsunuz, düzenli ifadeleri kullandığımızda aramak için yazdığımız şey çıkan sonuçlardan farklı oluyor. Örneğin ".an"ı aramışsak "tan", "şan" vb. çıkıyor. Bunlar ".an"dan farklı şeyler. İşte & işareti buradaki tan, şan, ve benzerlerini temsil ediyor. Örneğin dosya.txt dosyamızın içeriği şöyle olsun:

mustafa yılmaz
ayşe matur
süleyman uysal
tuğçe kazakçı
yusuf fişek 

Şimdi biz burada her ismin başına "sayın" ifadesini getirmek istiyoruz. Bunu şimdiye kadar öğrendiğimiz bilgilerle yapamayız. Bunu ancak & işaretini kullanarak yaparız:

sed s/.*/"sayın "\&/ dosya.txt

Bu komutun çıktısı şöyle olur:

sayın mustafa yılmaz
sayın ayşe matur
sayın süleyman uysal
sayın tuğçe kazakçı
sayın yusuf fişek

NOT: sed komutuyla da tıpkı grep gibi birden fazla dosyayla çalışılabilir. Ancak komutun çıkışını tekrar her bir dosyaya geri göndermek pek mümkün olmadığı için çıktıları tek ve farklı bir dosyaya almak daha mantıklı olacaktır.

awk komutu

Şimdiye kadar grep ve sed komutlarını gördük. grep bulmaya, sed de bulup değiştirmeye yarıyordu. Ancak bu iki komutun birçok ortak yönleri vardı, ikisi de aynı mantığı kullanıyordu. Aralarındaki tek fark birisinin sadece aramaya yapması, birisinin de hem arama yapıp hem de değiştirmesiydi. Ancak şimdi göreceğimiz awk komutu bu iki komuttan tamamen farklı bir mantığa sahip. Şimdi dosya.txt dosyasının içeriğini şunlarla değiştirin:

benim adım osman, ya seninki ne
benimki de ayşe
memnun oldum
ben de memnun oldum

Şimdi şu komutu verelim:

awk '{print $1}' dosya.txt

Bu komutun çıktısı şöyle olur:

benim
benimki
memnun
ben

awk komutu belirtilen dosyayı okur. Dosyadaki boşlukla ayrılan her kelimeyi bir değişkene atar. Biz de özel karakterler kullanarak bu değişkenlere erişebiliriz. Yukarıdaki komut: "dosya.txt dosyasındaki her satırdaki birinci kelimeyi ekrana yaz" anlamına gelir. Başka bir örnek:

awk '{print $1" örnek deneme "$3}' dosya.txt

Bu komutun çıktısı da şöyle olur:

benim örnek deneme osman,
benimki örnek deneme ayşe
memnun örnek deneme
ben örnek deneme memnun

Gördüğünüz gibi " ve " arasına alıp normal metinleri de ekrana yazdırabiliyoruz. $3 de her satırdaki üçüncü kelime anlamına geliyor. Şimdi diyelim ki dosyadaki her satırla çalışmak istemiyoruz. Yalnızca istediğimiz satırdaki belirttiğimiz sütunları (kelimeleri) ekrana yazdırmak istiyoruz. Daha doğrusu istediğimiz satırlardaki istediğimiz kelimeleri awk değişkenlerine atamak istiyoruz. Bunun için:

awk '/benim/{print $2" "$3}' dosya.txt

Bu komut ile yalnızca içinde "benim" olan satırlar awk değişkenlerine atanır. Çıktısı şu şekildedir:

adım osman,
de ayşe

NOT: Düzenli ifadeler awk komutuyla da kullanılabilir. awk komutunda az önce "benim" yazdığımız yere bir düzenli ifade de yazabilirsiniz.

Şimdi boş bir klasöre uzantısı txt ve jpg olan dosyalar koyun, o klasöre girin ve şu komutu verin:

ls | awk -F"." '/txt/{print "mv "$1"."$2" "$1".doc"}' | bash

Komutun ayrıntılı açıklaması:

ls |

Bu kısımla ls komutunun çıktısını awk komutuna verdik.

-F"."

awk komutunun bu kısmıyla kelime ayırıcı karakterin boşluk yerine . (nokta) olacağını belirledik. Yani awk komutu, dosyadaki metni noktaya göre parçalayacak.

 '/txt/

Bu kısımla yalnızca içinde txt geçen satırlarla işlem yapılmasını sağladık.

{print "mv "$1"."$2" "$1".doc"}'

Bu kısımla ls komutunun listelediği her bir dosya için mv dosya.txt dosya.doc metninin üretilmesini sağladık.

| bash

Bu kısımla da awk komutunun verdiği çıktının ekrana yazılması yerine bash'e yani komut satırına komut olarak verilmesini sağladık. Sonuçta klasörümüzdeki txt uzantılı dosyaların uzantısı doc olarak değişecektir.

NOT: | bash yöntemi ekrana çıktı veren her komutla kullanılabilir. Başka bir örnek:

pwd | awk '{print "şu anda "$1" klasöründeyim."}'

NOT: ls komutunun sonucu başka bir komuta giriş olarak verilirken her dosya/klasör ismi farklı bir satırda sayılır. Yani ekranda gösterildiği gibi yan yana sayılmaz.

NOT: awk komutunu bir dosyayla kullanırken awk komutu, dosyadaki işlenen satır sayısı kere çalıştırılır. Örnek:

awk '{print "deneme"}' dosya.txt

Bu komutla ekrana dosya.txt dosyasındaki satır sayısı tane alt alta deneme yazılacaktır. Başka bir örnek:

awk '/ahmet/{print "deneme"}' dosya.txt

Bu komutla ise içinde ahmet olan satırlar kadar deneme alt alta yazılacaktır. Yani awk komutunun temel algoritması şudur:

  1. x=0
  2. x'i 1 artır.
  3. Bana verilen dosyanın veya komut çıktısının x. satırını oku.
  4. Bana ön arama için bir karakter dizesi verildi mi? Eğer verildiyse bir sonraki adıma geç. Verilmediyse 6. adıma geç.
  5. x. satırda bana ön arama için verilen kelime geçiyor mu? Geçiyorsa bir sonraki adıma geç, geçmiyorsa 2. adıma geç.
  6. $1, $2, $3, ... değişkenlerine x. satırdaki 1'inci, 2'nci, 3'üncü... kelimeleri ata.
  7. print içindeki ifadedeyi ekrana yaz. (veya dosya veya bash'e gönderilmesi gerekiyorsa oralara gönder)
  8. Bize verilen dosyanın veya komut çıktısının son satırında mıyız? Son satırındaysak çık. Son satırında değilsek 2. adıma git.

Tepkileriniz Nedir?

like
0
dislike
0
love
0
funny
0
angry
0
sad
0
wow
0