<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CETURK &#187; Sistem Mühendisliği</title>
	<atom:link href="http://www.ceturk.com/kategori/muhendislik/sistem-muhendisligi/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ceturk.com</link>
	<description>Türkiye&#039;nin Bilişim Platformu</description>
	<lastBuildDate>Sat, 05 May 2012 16:04:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>IPTables Resetleme İşlemleri</title>
		<link>http://www.ceturk.com/iptables-resetleme-islemleri/</link>
		<comments>http://www.ceturk.com/iptables-resetleme-islemleri/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 18:29:32 +0000</pubDate>
		<dc:creator>Ali Kapucu</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistem Mühendisliği]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[alikapucu]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[linux firewall]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=6484</guid>
		<description><![CDATA[Merhaba arkadaşlar büyük ihtimalle bir çok iptables kullanıcının başına gelmiştir sistemi kendi kullanımına kilitlemek. Bir çok kez benimde başıma geldi ve Cisco routerlarda gördüğüm bir özellik bana çok basit pratik bir fikri getirdi aklıma. O kodu tam hatırlamıyorum ama yapmış olduğunuz configurasyon dosyasını test etmeniz için bir komut; Çalışan config dosyasını aktif ediyor ancak startup [...]]]></description>
			<content:encoded><![CDATA[<p>Merhaba arkadaşlar büyük ihtimalle bir çok iptables kullanıcının başına gelmiştir sistemi kendi kullanımına kilitlemek. Bir çok kez benimde başıma geldi ve Cisco routerlarda gördüğüm bir özellik bana çok basit pratik bir fikri getirdi aklıma.</p>
<p>O kodu tam hatırlamıyorum ama yapmış olduğunuz configurasyon dosyasını test etmeniz için bir  komut; Çalışan config dosyasını aktif ediyor ancak startup confige yazmıyor böylelikle sizin belirtiğiniz süre içinde reset atıp eski config dosyanıza geri dönmenizi sağlıyor. Hatırlayan olursa bi zahmet yazıversin bana  Neyse konumuza geri dönelim kullandığımız script çok basit iptables’ı sıfırlıyor tabi cronjob a bunu atıyoruz çalışamaya başlamadan olurda kendimizi kilitlersek diye<br />
<code>#!/bin/bash<br />
# Firewallumuzu olduğu gibi bırakmak için aşağıdaki durum değerini 0 bırakıyoruz.<br />
# Firewallumuzu resetlemek istiyorsak durum degeri 1 olmalı ki döngüye girip firewallu sıfırlasın.<br />
durum=1<br />
# Centos Redhat ve Fedora sistemler dışındaki dağıtımlar için değerimiz "hayir" olucak<br />
# Ben Centos kullandığım için benim değerim evet<br />
sistem=evet<br />
yol=/sbin/iptables<br />
if [ "$durum" == "1" ];<br />
then<br />
if [ "$sistem" == "evet" ];<br />
then<br />
# Firewall'u durdurmak için<br />
/etc/init.d/iptables stop<br />
else<br />
# Diğer linux distroları için aşağıdaki kodları kullanıyor.<br />
$yol -F<br />
$yol -X<br />
$yol -Z<br />
for tablo in $(/proc/net/ip_tables_names)<br />
do<br />
$yol -t $tablo -F<br />
$yol -t $tablo -X<br />
$yol -t $tablo -Z<br />
done<br />
$yol -P INPUT ACCEPT<br />
$yol -P OUTPUT ACCEPT<br />
$yol -P FORWARD ACCEPT</code></p>
<p>fi<br />
else<br />
:<br />
fi<br />
Çalıştırma izni için<br />
chmod +x /root/sifirla.sh<br />
Bu dosyamızı 5 dk da bir çalıştırmak için /etc/crontab altına<br />
*/5 * * * * root /root/sifirla.sh satırını ekliyoruz.<br />
Önemli nokta: Çalışmaya başlamadan önce yukarıdaki durumu dikkate alınız!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/iptables-resetleme-islemleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeBSD&#8217;de IP Değiştirme</title>
		<link>http://www.ceturk.com/freebsd-de-ip-degistirme/</link>
		<comments>http://www.ceturk.com/freebsd-de-ip-degistirme/#comments</comments>
		<pubDate>Mon, 21 Jun 2004 12:53:51 +0000</pubDate>
		<dc:creator>yido</dc:creator>
				<category><![CDATA[İşletim Sistemleri]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistem Mühendisliği]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[freeBSD de ip]]></category>
		<category><![CDATA[Özkan KIRIK]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=954</guid>
		<description><![CDATA[Genellikle FreeBSD&#8217;yi kurduktan sonra &#8220;IP Adresimi Nasıl Değiştirebilirim?&#8221; sorusuyla karşı karşıya kalıyor yeni kullanıcılar. Öncelikle sisteminizin şu anki ip adresini kontrol edin: kitap# ifconfig lnc0: flags=8843 mtu 1500         inet 10.0.0.58 netmask 0xffffff00 broadcast 10.0.0.255         ether 00:0c:29:a7:61:41 lp0: flags=8810 mtu 1500 lo0: flags=8049 mtu 16384         inet 127.0.0.1 netmask 0xff000000 kitap# _ Koyu harflerle [...]]]></description>
			<content:encoded><![CDATA[<p>Genellikle FreeBSD&#8217;yi kurduktan sonra &#8220;IP Adresimi Nasıl Değiştirebilirim?&#8221; sorusuyla karşı karşıya kalıyor yeni kullanıcılar.</p>
<p>Öncelikle sisteminizin şu anki ip adresini kontrol edin:</p>
<p><code>kitap# ifconfig<br />
lnc0: flags=8843 mtu 1500<br />
        inet 10.0.0.58 netmask 0xffffff00 broadcast 10.0.0.255<br />
        ether 00:0c:29:a7:61:41<br />
lp0: flags=8810 mtu 1500<br />
lo0: flags=8049 mtu 16384<br />
        inet 127.0.0.1 netmask 0xff000000<br />
kitap# _</code><br />
Koyu harflerle yazılmış olan kısım lnc0 isimli ethernetinizin ip adresidir.<br />
ether Kelimesiyle başlayan ifade ise ethernet kartınızın MAC adresidir.</p>
<p>Gelelim ethernet kartımızın (unixte ağ arayüzü yani network interface diye geçer) ayarlarını yapmaya:</p>
<p><code>kitap# /stand/sysinstall </code></p>
<p>komutunu çalıştırıyoruz.<br />
Karşımıza gelen menüden <strong>Configure</strong> seçeneğini seçelim.<br />
Gelen seçeneklerden ise <strong>Network</strong> konfigurasyonu bölümüne girelim.<br />
Network konfigurasyonunda ise <strong>Interfaces</strong> kısmına girelim.<br />
(Girdiğimiz menülerin isimlerini bir araya getirin. Bakın ne oluyo= Configure Network Interfaces Dikkat ettiniz mi? <img src='http://www.ceturk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p>Aşağıdaki gibi bir menü gelecek:</p>
<p><img class="aligncenter size-full wp-image-955" src="http://www.ceturk.com/images/freebsdde-ip-degistirme-1.png" alt="freebsdde-ip-degistirme-1" width="540" height="300" /></p>
<p> </p>
<p>Bu menüden IP adresini değiştirmek istediğiniz ethernet kartınızı seçin.<br />
(Burada benim ethernet kartım lnc0: Lance/PCnet (Isolan/Novell Ne2100/NE32-VL) ethernet)</p>
<p>Kartınızı seçtikten sonra aşağıdaki gibi bir konfigurasyon ekranı gelecek. Burada istediğiniz değişikliği yapın:</p>
<p><img class="aligncenter size-full wp-image-956" src="http://www.ceturk.com/images/freebsdde-ip-degistirme-2.png" alt="freebsdde-ip-degistirme-2" width="540" height="300" /></p>
<p> </p>
<p>Değişiklikleri yaptıktan sonra <strong>OK</strong> seçeneğini seçin ve program çıkın.</p>
<p>Yapmış olduğunuz değişiklikler henüz uygulanmadı ancak konfigürasyon dosyasına kaydedildi.<br />
Bu değişiklikleri aktif hale getirmek için:</p>
<p><code>kitap# /etc/netstart</code></p>
<p>komutunu çalıştırın.</p>
<p><code>kitap# /etc/netstart<br />
hw.bus.devctl_disable: 1 -&gt; 1<br />
lnc0: flags=8843 mtu 1500<br />
        inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255<br />
        ether 00:0c:29:a7:61:41<br />
lo0: flags=8049 mtu 16384<br />
        inet 127.0.0.1 netmask 0xff000000<br />
add net default: gateway 10.0.0.2<br />
Additional routing options:.</code></p>
<p> </p>
<p>Değişikliklerin uygulanıp uygulanmadığını netstart&#8217;ın ekrana vermiş olduğu çıktıdan kontrol edebilirsiniz.</p>
<p>IP Değiştirme bitti. Hepsi bu kadar <img src='http://www.ceturk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Özkan KIRIK <br />
<em>FreeBSD Sistem Yöneticisi</em> <br />
    </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/freebsd-de-ip-degistirme/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<enclosure url="http://www.ceturk.com/images/freebsdde-ip-degistirme-1.png" length="23451" type="image/jpg" />	</item>
		<item>
		<title>Kabuk Programlama (Bash) &#8211; II</title>
		<link>http://www.ceturk.com/kabuk-programlama-bash-ii/</link>
		<comments>http://www.ceturk.com/kabuk-programlama-bash-ii/#comments</comments>
		<pubDate>Thu, 11 Mar 2004 13:08:27 +0000</pubDate>
		<dc:creator>yido</dc:creator>
				<category><![CDATA[Bilgisayar Mühendisliği]]></category>
		<category><![CDATA[İşletim Sistemleri]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Sistem Mühendisliği]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Yazılım Mühendisliği]]></category>
		<category><![CDATA[bash nedir?]]></category>
		<category><![CDATA[bash programlama]]></category>
		<category><![CDATA[bash programming]]></category>
		<category><![CDATA[kabuk programlama]]></category>
		<category><![CDATA[kabuk programlama ornek]]></category>
		<category><![CDATA[linux de programlama]]></category>
		<category><![CDATA[M.Barış Demiray]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=958</guid>
		<description><![CDATA[Merhaba, Bu derste Bash kabuğunda betik yazarken kullanabileceğimiz kontrol yapılarından bir kaçına değineceğim. Bash kabuğu, gerçek programlama dillerinde bulunan if/if-else, switch/case kontrollerini ve for, while gibi döngüleri destekler. C, Pascal gibi dillerde çalıştıysanız işiniz biraz daha kolay, zira kullanım alanı ve mantık aynı. Önce if/if-else yapısı ile başlayalım: if / if-else Yapısı: Kullanımı diğer dillerde [...]]]></description>
			<content:encoded><![CDATA[<p>Merhaba,<br />
Bu derste Bash kabuğunda betik yazarken kullanabileceğimiz kontrol yapılarından bir kaçına değineceğim. Bash kabuğu, gerçek programlama dillerinde bulunan if/if-else, switch/case kontrollerini ve for, while gibi döngüleri destekler. C, Pascal gibi dillerde çalıştıysanız işiniz biraz daha kolay, zira kullanım alanı ve mantık aynı. Önce if/if-else yapısı ile başlayalım:</p>
<p><strong>if / if-else Yapısı:<br />
</strong>Kullanımı diğer dillerde olduğu gibi;</p>
<p><strong>if</strong>  <em>koşul</em><br />
        <strong>koşul gerçeklenmişse çalışacak kod</strong></p>
<p>Yalnız, sözdizimi C programcıları için biraz yabancı olabilir. Herşeyden önce kontrol yapılarının bloklarının kapanışları ve karşılaştırma operatörleri biraz farklı. Mesela çok basit bir if örneği yazacak olursak;<br />
<code>root@gnu [17:13:53] # cat current.sh<br />
#!/bin/bash</code><br />
 <br />
Gördüğünüz gibi gerçekliğini denediğimiz koşul köşeli parantezler arasında ve blok kapanışı da farklı. Bu arada kısa bir not; köşeli parantezleri kullanmadan da karşılaştırmalar yapabiliriz. Bunun için <strong>test</strong> deyimi kullanılır. Yukarıdaki kodun test ile yazılmış hali aşağıdadır.<br />
<code>if test $bir -lt $iki; then<br />
        echo 'bir &gt; iki'<br />
fi</code><br />
 <br />
Tekrar sözdizimine dönecek olursak;if yapısının şablonunu Bash&#8217;e göre tekrar yazalım:</p>
<p>bir=1<br />
iki=2</p>
<p>if [ $bir -lt $iki ]; then<br />
        echo &#8216;bir &gt; iki&#8217;<br />
fi</p>
<p>exit<br />
root@gnu [17:14:30] # ./current.sh<br />
bir &gt; iki</p>
<p><strong>if </strong><em>koşul</em>; then<br />
        # Çalışacak Kod<br />
<strong>elif</strong> koşul; then<br />
        # Çalışacak Kod<br />
<strong>fi</strong></p>
<p>if&#8217;in bloğunu kapatan anahtar sözcüğün if&#8217;in tersi olduğuna dikkat; aynı kural <strong>case</strong> (o da <strong>esac</strong> anahtar sözcüğü ile kapanır) yapısında da geçerli.</p>
<p>Burada kullanabileceğimiz operatörlerden bazıları şunlar:<br />
<span style="color: #ff0000;">-eq  :  eşit (equal)<br />
-ne  :  eşit değil (not equal)<br />
-lt  :  küçük (less than)<br />
-le  :  küçük eşit (less than or equal to)<br />
-gt  :  büyük (greater than)<br />
-ge  :  büyük eşit (greater than or equal to) </span><br />
<strong>Not</strong>: Bash betiklerindeki karşılaştırmalarda &lt;, &gt; ve != gibi operatörleri de kullanabilirsiniz ancak bunlar diziler için kullanılırlar (mesela iki karakter dizisinin karşılaştırılmasında).</p>
<p>Bu operatörlerle ilgili bir örnek daha sanırım yeterli olacaktır. Betiğimizin parametre olarak aldığı dosyanın satır sayısını ekrana yazsın ( <span style="color: #ff9900;">biri wc -l &lt; current.sh</span> mi dedi? <img src='http://www.ceturk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) Tabii ki daha kolay sonuca ulaşabiliriz ancak bu sadece bir örnek;<br />
<code>root@gnu [18:32:06] # cat -n current.sh<br />
     1  #!/bin/bash<br />
     2<br />
     3  if [ $# -ne 1 ]; then<br />
     4          echo "Hatali parametre!";<br />
     5          echo "Kullanim: $0 dosya_adi";<br />
     6          exit;<br />
     7  fi<br />
     8<br />
     9  echo $1 adli dosya `wc -l &lt; $1` satir<br />
    10<br />
    11  exit<br />
    12<br />
root@gnu [18:32:41] # ./current.sh current.sh<br />
current.sh adli dosya 12 satir</code><br />
 <br />
Geçen dersten hatırlarsanız $# kabuk değişkeni betiğe gelen parametre sayısını tutuyordu;</p>
<p><strong>Not</strong>: Eğer betiğinizde bir hata varsa Bash kabuğuna -x parametresini göndererek yapılan işlemleri ve çalıştırılan komutları adım adım görebilirsiniz:<br />
<code>root@gnu [18:43:29] # cat current.sh<br />
#!/bin/bash -x</code><br />
 <br />
Bu şekilde, özellikle ayırma (parsing) hataları, çok kolay bulunuyor.</p>
<p>if [ $# != 1 ]; then<br />
        echo &#8220;Hatali parametre!&#8221;;<br />
        echo &#8220;Kullanim: $0 dosya_adi&#8221;;<br />
        exit;<br />
fi</p>
<p>echo $1 adli dosya `wc -l &lt; $1` satir</p>
<p>exit</p>
<p>root@gnu [18:43:32] # ./current.sh current.sh<br />
+ &#8216;[' 1 '!=' 1 ']&#8216;<br />
++ wc -l<br />
+ echo current.sh adli dosya 12 satir<br />
current.sh adli dosya 12 satir<br />
+ exit</p>
<p><strong>case/esac Yapısı:</strong></p>
<p>case/esac de tıpkı C ve Pascal&#8217;da olduğu gibi olması muhtemel durumları ele almak için kullanılır. Genel yapısı aşağıdaki şekildedir:<br />
<span style="color: #ff0000;">case seçenek in<br />
     durum_1)<br />
          komutlar<br />
          ;;<br />
     durum_2)<br />
          komutlar<br />
          ;;<br />
     durum_3)<br />
          komutlar<br />
          ;;<br />
     *)<br />
          komutlar<br />
esac </span><br />
Burada tahmin edeceğiniz gibi çeşitli durumlarda aradığımız seçenek&#8217;in gerçekleşip gerçekleşmediğine bakıyoruz. Yukarıda yazılan 3 durumda da aradığımız koşulun olmaması durumunda *) ile belirtilen kısımdaki kod çalıştırılır. Sanırım bir örnekle daha rahat anlaşılacaktır. Aşağıdaki örnekte kullanıcıdan bir dosya adı alıp bu dosyanın çeşitli özelliklerini yazdıralım; yazdırılacak özellikler de bir menüden seçilsin. Ancak bundan önce kodda kullanacağımız bir kaç özelliği söylemekte fayda var.</p>
<p>Aşağıdaki operatörler sorunun cevabının evet olduğu yerlerde <strong>doğru</strong> değerini üretir.</p>
<p><span style="color: #ff0000;">-a dosya : Dosya var mı?<br />
-b dosya : Dosya var mı ve blok özel dosyası mı? (aşağıdaki not&#8217;a bakınız)<br />
-c dosya : Dosya var mı ve karakter özel dosyası mı? (aşağıdaki not&#8217;a bakınız)<br />
-d dosya : Dosya var mı ve bir dizin mi?<br />
-e dosya : Dosya var mı?<br />
-f dosya : Dosya var mı ve sıradan bir dosya mı?<br />
&#8230;. </span><br />
Bu gibi bir çok kontrol operatörü var; diğerleri için bash kabuğunun yardım dosyalarına bakmanızı tavsiye ederim..</p>
<p><strong>Not</strong>: &#8220;block special file&#8221; ve &#8220;character special file&#8221; kelimelerinin çevirilerinin sırıttığının farkındayım ve çeviri önerilerinizi bekliyorum. Bunları açıklamak gerekirse blok özel dosyalar taşıdıkları veriye rastgele erişim yapabildiğimiz dosyalardır ve bunlara örnek olarak ana bellek ve sabit diskler verilebilir. Karakter özel dosyalar ise çoğunlukla girdi/çıktı işlemlerinde kullanılan ve sadece veri alıp yolladığımız -yani rastgele erişimin sözkonusu olmadığı- dosyalardır. Bunlara ise USB girişleri ve konsol örnek verilebilir. Daha ayrıntılı bir liste için:<br />
<code>root@slackware [20:11:37] # cat /proc/devices<br />
Character devices:<br />
  1 mem<br />
  2 pty<br />
  3 ttyp<br />
  4 ttyS<br />
  5 cua<br />
  7 vcs<br />
10 misc<br />
14 sound<br />
29 fb<br />
...........</code><br />
 <br />
komutunu kullanabilir ve devices dosyasını inceleyebilirsiniz. Artık örneğimize dönebiliriz (örneğin ne yaptığını hatırlıyoruz değil mi? <img src='http://www.ceturk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )<br />
<code>#!/bin/bash<br />
# -x</code><br />
 </p>
<p>echo &#8220;Dosya Adi:&#8221;<br />
read dosya</p>
<p>echo : $dosya adli dosya hakkinda bilmek istedikleriniz?</p>
<p># Seçenekleri ekrana yaz ve kullaniciya sor<br />
echo &#8220;1) Ben yazdim ama bu dosya var mi?&#8221;<br />
echo &#8220;2) Bu dosyadaki haklarim nelerdir?&#8221;<br />
echo &#8220;3) Ayni isimde baska neler var?&#8221;<br />
echo &#8220;4) Sil sen bu dosyayi isim yok onla!&#8221;<br />
echo &#8220;Seçiminiz: &#8221;<br />
read secenek</p>
<p>case $secenek in<br />
     1)<br />
          if [ -a $dosya ]; then<br />
               echo &#8220;Evet var&#8221;<br />
          else<br />
               echo &#8220;Hayir yok ama yaratirizz <img src='http://www.ceturk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8221;<br />
          fi<br />
          ;;<br />
     2)<br />
          echo &#8220;Haklariniz: &#8221;<br />
          if     [ -r $dosya ]; then<br />
               echo -n &#8220;r (okuma) &#8220;;<br />
          fi;if     [ -w $dosya ]; then<br />
               echo -n &#8220;w (yazma) &#8220;;<br />
          fi;if     [ -x $dosya ]; then<br />
               echo &#8220;x (calistirma) &#8220;;<br />
          fi<br />
          ;;<br />
     3)<br />
          echo \&#8221;$dosya\&#8221; adinda `locate -i $dosya|wc -l` tane daha dosya var<br />
          ;;<br />
     4)<br />
          rm -i $dosya<br />
          ;;<br />
     *)<br />
          echo &#8220;Hatali seçenek! <img src='http://www.ceturk.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> &#8221;<br />
esac</p>
<p>exit</p>
<p> </p>
<p>Örnek bir çıktı ise;<br />
<span style="color: #ff0000;">root@slackware [22:59:14] # ./shell.sh<br />
Dosya Adi:<br />
core<br />
: core adli dosya hakkinda bilmek istedikleriniz?<br />
1) Ben yazdim ama bu dosya var mi?<br />
2) Bu dosyadaki haklarim nelerdir?<br />
3) Ayni isimde baska neler var?<br />
4) Sil sen bu dosyayi isim yok onla!<br />
Seçiminiz:<br />
3<br />
&#8220;core&#8221; adinda 2231 tane daha dosya var</span></p>
<p> </p>
<p>case/esac yapısıyla ilgili son bir örnek; bu örneğimiz ise calc adında olsun ve komut satırından girilen basit aritmetik işlemleri (3+5, 7*8 gibi 2 sayı ve bir operatörden oluşan) yapsın.<br />
<code>#!/bin/bash</code><br />
 <br />
Yalnız bu betikte dikkat edilmesi gereken iki nokta var: Birincisi çarpma operatörünün Bash kabuğunda özel bir anlamı vardır ve komut satırı parametrelerinin elde edilmesinde kullanılır. Bu yüzden çarpma işlemi yaparken betiğe &#8220;3 \* 4&#8243; gibi bir parametre vermelisiniz (hatırlarsanız ters bölü karakteri özel karakterlerin anlamlarını yitirmesine yarıyordu). İkincisi ise bir bug (böcük); case/esac yapısında en sondaki -düşündüklerimizin dışındaki durumları ele alan- *) kısmı çarpma işlemi ile çakışıyor. Yani, operatör yerine herhangi bir değer girmeniz halinde kendince bir çıktı üretecektir. Bu konuda aklıma gelen bir şey yok, önerilerinizi bekliyorum.</p>
<p>if [ $# -ne 3 ]; then<br />
     echo hatali parametre!<br />
     echo kullanim: $0 sayi operator sayi<br />
     exit<br />
fi</p>
<p>case $2 in<br />
     +)<br />
          echo sonuc: `expr $1 + $3`<br />
          ;;<br />
     -)<br />
          echo sonuc: `expr $1 &#8211; $3`<br />
          ;;<br />
     /)<br />
          echo sonuc: `expr $1 / $3`<br />
          ;;<br />
     *)<br />
          echo sonuc: `expr $1 \* $3`<br />
          ;;<br />
esac</p>
<p>exit</p>
<p>Örnek bir çıktı;<br />
<span style="color: #ff0000;">root@slackware [20:22:05] # ./calc.sh 3 + 99<br />
sonuc: 102</span><br />
Şimdilik benden bu kadar. Bir sonraki derste görüşmek üzere.</p>
<p>M.Barış Demiray</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/kabuk-programlama-bash-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kabuk Programlama (Bash) &#8211; I</title>
		<link>http://www.ceturk.com/kabuk-programlama-bash-i/</link>
		<comments>http://www.ceturk.com/kabuk-programlama-bash-i/#comments</comments>
		<pubDate>Tue, 23 Dec 2003 23:21:05 +0000</pubDate>
		<dc:creator>yido</dc:creator>
				<category><![CDATA[Bilgisayar Mühendisliği]]></category>
		<category><![CDATA[İşletim Sistemleri]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mühendislik]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Sistem Mühendisliği]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Yazılım Mühendisliği]]></category>
		<category><![CDATA[Barış Demiray]]></category>
		<category><![CDATA[bash programlama makale]]></category>
		<category><![CDATA[bash programming]]></category>
		<category><![CDATA[Kabuk Programlama (Bash)]]></category>
		<category><![CDATA[kabuk programlama ornek]]></category>
		<category><![CDATA[linuxte programlama]]></category>
		<category><![CDATA[unix sistemler]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=1161</guid>
		<description><![CDATA[Bash kabuğu çoklu ya da karmaşık komutların basite indirgenmesi için büyük kolaylık sağlar. Komut satırından kullanabildiğimiz tüm komutları kontrol yapıları, fonksiyonlar gibi gerçek programlama dillerinde bulunan yapılar ile çalıştırmamızı sağlar. Bu sayede sadece ardarda komut çalıştırmak yerine &#8220;duruma göre&#8221; işlemler yapabiliriz. Öncelikle kod yazarken gerekli olan bir kaç noktaya değinmek istiyorum; bu yüzden önce bash&#8217;te [...]]]></description>
			<content:encoded><![CDATA[<p>Bash kabuğu çoklu ya da karmaşık komutların basite indirgenmesi için büyük kolaylık sağlar. Komut satırından kullanabildiğimiz tüm komutları kontrol yapıları, fonksiyonlar gibi gerçek programlama dillerinde bulunan yapılar ile çalıştırmamızı sağlar. Bu sayede sadece ardarda komut çalıştırmak yerine &#8220;duruma göre&#8221; işlemler yapabiliriz. Öncelikle kod yazarken gerekli olan bir kaç noktaya değinmek istiyorum; bu yüzden önce bash&#8217;te kabuk programlamanın genel yapısına göz atalım.</p>
<p>Öncelikle kabuk programları DO$&#8217;taki .bat (batch) dosyaları gibi düz metin dosyalarıdır. Yani bildiğiniz/duyduğunuz C, Pascal dillerinde olduğu gibi yazdığınız kod derlenmez, yorumlanır (interpretation). Derlenen dillerde oluşturulan ikili dosyada herhangi bir çevirime gerek yoktur, çünkü zaten bilgisayarın anlayabileceği dilde (ikilik) oluşturulmuş dosyalardır. Ancak yorumlanma işleminde adı üstünde kod okunur ve karşılaşılan ifadeye göre bir işlem yapılır (Örnek Java). Kabuk programlarının düz metin olduğunu söylemiştik. Yani istediğiniz herhangi bir metin editörünü kullanabilirsiniz. Bir örnek olarak yeni bir dosya yaratalım ve bu betiğimiz (script) windows bölümümüzü (partition) bağlasın ve çalışma dizinimizi seçtiğimiz bir dizin olarak değiştirip o dizindeki dosyaları listelesin. Bunun için ben pico&#8217;yu kullandım.</p>
<p><code>pico win_c.sh</code></p>
<p><span style="text-decoration: underline;">win_c.sh</span></p>
<p><span style="color: #0000ff;">mount -t vfat /dev/hda1 /windows/C<br />
cd /windows/C; clear; ls -la</span></p>
<p>Bu satırları win_c.sh dosyası içine yazdıktan sonra editörden çıkıyoruz. Yalnız dosya uzantısının .sh olmasına gerek yok. Herhangi bir uzantı olabilir. Linux&#8217;te, dosya türlerini uzantılarına bakarak belirleme gibi bir saçmalık yoktur. Burada ayrıntılı bir dizin listelemesi yaparsak</p>
<p><code>ls -la</code></p>
<p><span style="color: #ff0000;">root @ linux # ls -la<br />
total 12<br />
drwxr-xr-x    2 root     root         4096 Dec 23 18:16 .<br />
drwxr-xr-x    7 root     root         4096 Dec 21 12:19 ..<br />
-rw-r&#8211;r&#8211;    1 root     root           65 Dec 23 18:16 win_c.sh</span></p>
<p>Gördüğümüz gibi win_c.sh dosyasının çalıştırma hakları ayarlı değil. Bu durumda bu dosyayı çalıştıramayacağımızdan aşağıdaki komutla çalıştırma haklarını veriyoruz.</p>
<p><code>chmod 755 win_c.sh</code></p>
<p>Tekrar listeleyecek olursak:</p>
<p><span style="color: #ff0000;">root @ linux # ls -la<br />
total 12<br />
drwxr-xr-x    2 root     root         4096 Dec 23 18:16 .<br />
drwxr-xr-x    7 root     root         4096 Dec 21 12:19 ..<br />
-rwxr-xr-x    1 root     root           65 Dec 23 18:16 win_c.sh<br />
</span></p>
<p>Burada 755&#8242;in anlamı şudur. Bu sayıyı ayırırsak</p>
<p><span style="color: #ff0000;">7 5 5<br />
|  | |______ Diğerlerinin hakları<br />
|  |________ Dosya sahibinin ait olduğu grubun hakları<br />
|__________ Dosya sahibinin hakları</span></p>
<p>7,5,5 rakamları ise şu şekilde oluşur.</p>
<p><span style="color: #ff9900;">4 &#8211; (R) Okuma hakkı<br />
2 &#8211; (W) Yazma hakkı<br />
1 &#8211; (X) Çalıştırma hakkı</span></p>
<p>Bu sayılardan verilen hakların karşılıkları toplanarak yukarıdaki sayılar elde edilir. Yani win_c.sh dosyasını sahibi okur,yazar,çalıştırır; grubu ve diğerleri ise sadece okur ve çalıştırır.</p>
<p>Dosya haklarını belirlemek için aşağıdaki komutu da kullanabilirdik.</p>
<p><code>chmod u+x win_c.sh</code></p>
<p>Şimdi &#8220;e peki madem böyle oluyor neden kendimize eziyet edelim?&#8221; diyorsanız şunu söylerim, bir problemde zor yoldan gidiyorsanız daha çok şey bilmeniz gerekir. Burada u+x ifadesini kullanırsanız kabuk sizin yerinize komutu ayırır (parse), yorumlar ve gerekeni yapar. Ancak 755 ifadesinin mantığı &#8220;bit manipulation&#8221; (tek tek bit değiştirme) &#8216;a kadar gidiyor. Bu yüzden ikisini de öğrenmekte fayda var.</p>
<p>Burada da user&#8217;a (sahibine), execute (çalıştırma) hakkını veriyoruz. Verilen çalıştırma hakkı</p>
<p><code>chmod 644 win_c.sh</code></p>
<p>ya da</p>
<p><code>chmod u-x win_c.sh</code></p>
<p>şeklinde geri alınabilir.</p>
<p>Konudan yeterince uzaklaştığımıza göre artık kabuk programlamaya geri dönebiliriz <img src='http://www.ceturk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bahsetmek istediğim bir başka şey de yorum satırları. # karakteri ile betiklerinize yorum satırları koyabilirsiniz. Örneğin;</p>
<p><code># Yazar : Dionysos<br />
# Tarih  : 23 Aralık 2003</code></p>
<p># karakteri ile tüm satır yorum satırı haline gelecektir.</p>
<p>Yazdığınız betikleri çalıştırmanın ise bir kaç yolu vardır:</p>
<p><code>win_c.sh</code></p>
<p>ya da</p>
<p><code>. win_c.sh</code></p>
<p>yazarak çalıştırabilirsiniz. İkinci örnekte dosya adının başında . karakteri olduğuna dikkat. Bu kabuğa &#8220;bir betik geliyor, adam gibi iyice oku anla ve adım adım çalıştır&#8221; direktifini verir. Yani içinde çalıştırılabilir kod olan herhangi bir dosyayı -haklarını verdikten sonra- başına . karakterini ekleyerek çalıştırabiliriz. Betiklerinizi çalıştırmak için bir başka yol da betiğin yazıldığı kabuktan yeni bir tane çalıştırmak ve dosya adını parametre olarak göndermektir. Bunun için aşağıdaki gibi bir komut kullanabilirsiniz:</p>
<p><code>bash win_c.sh</code></p>
<p>Bu durumda yeni bir kabuk çalıştırılır ve komutlar o kabukta çalışır. Tabi bu durumda win_c.sh dosyasının ya bulunulan dizinde ya da PATH adlı kabuk dizininde bulunması gerekir. Hatırlayacağınız gibi PATH değişkeninde komutların aranması gereken dizinler yer alır.</p>
<p><strong>Değişkenler: </strong>Çoğu kabukta aşağıdaki formatta bir komutla değişken tanımlayabilir ve değer verebilirsiniz:</p>
<p><code>Sampiyon=Fenerbahce</code></p>
<p>Burada Sampiyon adında bir değişken tanımladık ve değerini Fenerbahçe yaptık. Bu değişkenin uzun bir süre kullanılabileceğinden emin olabilirsiniz. <img src='http://www.ceturk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>NOT:</strong> tcsh kabuğunda<br />
<code>set Sampiyon = Fenerbahce</code><br />
yazmanız gerekir.</p>
<p>Yukarıdaki notu yazma sebebim değişken tanımlarken komut formatına dikkat çekmekti. Bash kabuğunda = karakteri ve değişken isimleri/değerleri arasında boşluk olmamalıdır. Ancak örneğin tcsh ( csh kabuğunun geliştirilmiş hali ) &#8216;de arada boşluk olup olmaması farketmez.</p>
<p>Ayrıca değişken tanımlarken &#8220;bildirim&#8221; kısmının olmadığına dikkat! Kabuk betiklerinde bildirim (bellekten yer ayırma) işlemine gerek yoktur çünkü kodlar yorumlanır. Kabuk satır satır kodları okurken bu işlemi yapacaktır. Ayrıca bu bize karakterleri, dizgileri (string) ve sayıları aynı değişkende tanımlama esnekliğini kazandırır. Örnek olarak yukarıda tanımladığımız Sampiyon değişkenine bir dizgi değeri atamıştık.</p>
<p>Değişkenlere Erişim: Kabuk programlamada değişkenlerin değerlerini elde etmek için $ karakteri kullanılır. Değişkenlerin değerlerini direk değişken adıyla yazamayız çünkü bu durumda dizgi olarak algılanırlar.</p>
<p><code>echo Sampiyon</code></p>
<p>Bunun yerine aşağıdaki formatı kullanmalıyız:</p>
<p><code>echo $Sampiyon</code></p>
<p><span style="color: #ff0000;">root @ linux # Sampiyon=Fenerbahce<br />
root @ linux # echo Sampiyon # Yanlis!<br />
Sampiyon<br />
root @ linux # echo $Sampiyon # Dogru!<br />
Fenerbahce</span></p>
<p><strong>Komut Satırı Parametreleri</strong>:<br />
Bash kabuğunda kabuk betiğimize parametre gönderebiliriz (Bu komutlara Positional Parameters adı verilir). Komut satırı parametrelerini elde etmek için bir kaç öntanımlı değişken vardır. Bunlara girmeden önce bir hatırlatma yapmak istiyorum. Bir programa gönderilen parametreler çoğunlukla bir dizide tutulur. Mesela C&#8217;de bu dizinin ilk elemanı (0. indeksteki) parametrelerin yollandığı programın adını alır. Kabuk betiklerinde de bu parametreler bir dizidedir ve ilk parametre (0. indeks) betik dosyasının ismidir.</p>
<p>Bu parametreleri almak için Bash&#8217;te aşağıdaki değişkenler tanımlanmıştır:</p>
<p><code><strong>$# :</strong> Betiğe gönderilen parametre sayısını saklar<br />
<strong>$* : </strong>Betiğe gönderilen parametrelerin değerlerini tutar (Yani $0 dosya adı, $1 ilk parametre, ..)<br />
<strong>"$@" :</strong> Komut satırından yollanan tüm parametreler, " karakteriyle beraber ("$1", "$2", gibi)<br />
<strong>$? :</strong> Çalıştırılan bir önceki komutun gönderdiği değer (Exit Value).</code></p>
<p><span style="text-decoration: underline;">$# Örneği</span></p>
<p><span style="color: #ff0000;">root @ linux # . win_c.sh bir iki uc<br />
3</span></p>
<p><span style="text-decoration: underline;">$* Örneği</span></p>
<p><span style="color: #ff0000;">root @ linux # . win_c.sh bir iki uc<br />
bir iki</span></p>
<p>Bu değişkenler ile parametreleri tek tek ya da beraber olarak işleyebiliriz. Mesela</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; sil &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+</p>
<p><code>#Gönderilen parametredeki dosyayı sil<br />
rm -i "$1"</code></p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;- /sil &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+</p>
<p>Bu dosyayı oluşturursanız ve aşağıdaki şekilde çalıştırırsanız ismini verdiğiniz dosyayı -sizden onay alıp- silecektir. Onay işlemini ise -i (interactive) parametresi sağlar.</p>
<p><span style="color: #ff0000;">root @ linux # ls -l<br />
total 4<br />
-rw-r&#8211;r&#8211;    1 root     root            0 Dec 23 18:32 bi_ayagi_cukurda<br />
-rwxr-xr-x    1 root     root           12 Dec 23 18:33 sil<br />
root @ linux # . sil bi_ayagi_cukurda<br />
rm: remove `bi_ayagi_cukurda&#8217;? y<br />
root @ linux # ls -l<br />
total 4<br />
-rwxr-xr-x    1 root     root           12 Dec 23 18:33 sil<br />
</span></p>
<p>Ya da ilk parametreyi alarak bu isimde başka bir dosya olup olmadığına bakan kompleksli bir betik..:</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; var_mi &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+</p>
<p><code>find / -name "$0"</code></p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;- /var_mi &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+</p>
<p>$# gibi diğer değişkenler döngüleri anlattıktan sonra daha iyi anlaşılacağından o zamana bırakıyorum.</p>
<p><strong>&#8220;, &#8216; ve \ karakterlerinin kullanımı</strong>:</p>
<p>Eğer yazdığımız komutlarda kabuk tarafından çalıştırılabilecek kodlar varsa ve biz bunları engellemek istiyorsak başlıktaki karakterleri kullanabiliriz.</p>
<p>Bu üç karakterin hepsinin engelleme derecesi farklıdır. Engelleme derecesinden kastım; tek bir karakterin yorumlanmasını ya da tüm dizginin yorumlanmasını engelleme arasındaki fark.</p>
<p><span style="color: #0000ff;">&#8221; (Çift Tırnak) Karakteri ve Yorumu: </span>Çift tırnak karakteri, yukarıda bahsettiğimiz engelleme derecelerinden en alt seviye olanıdır. Sadece boşlukların yok sayılmasını sağlar. Bu ise birden fazla kelimeden oluşan dizgileri kullanırken işe yarar. Örnek olarak kimlik adlı değişkene baris demiray dizgisini atamak için kullanabiliriz;</p>
<p><code>kimlik="baris demiray"</code></p>
<p>Eğer çift tırnakları kullanmasaydık:</p>
<p><span style="color: #ff0000;">root @ linux # kimlik=&#8221;baris demiray&#8221;<br />
root @ linux # kimlik=baris demiray<br />
bash: demiray: command not found</span></p>
<p><span style="color: #0000ff;">&#8216; (Tek Tırnak) Karakteri ve Yorumu:</span> Tek tırnak karakteri çift tırnaktan daha etkilidir. Kabuktan tüm özel karakterleri saklar. Örneğin programınızda;</p>
<p><code>echo "Program Adı $0" #Çift Tırnak</code></p>
<p>yazarsanız sorunsuz çalışacak ve dosya adını yazacaktır.</p>
<p><span style="color: #ff0000;">root @ linux # betik_ad<br />
Program Adi ./betik_ad</span></p>
<p>Ancak tek tırnak kullanırsanız tüm özel karakterler yok sayılacağından ;</p>
<p><code>echo 'Program Adı $0' #Tek tırnak</code></p>
<p>kodu</p>
<p><span style="color: #ff0000;">root @ linux # betik_ad<br />
Program Adi $0</span></p>
<p>çıktısını üretir. Bu nedenle bu karakterleri kullanırken derecelerini hesaba katarak biraz daha dikkatli olmakta fayda var.</p>
<p><span style="color: #0000ff;">\ Karakteri ve Yorumu: </span>Ters bölü karakteri ise karakter bazında işlem yapar. Yani \ karakteri ile sadece bir özel karakteri kabuktan saklayabiliriz. Örneğin $ karakterini görüntüleyebilmek için;</p>
<p><code>echo \$Test</code></p>
<p>yazmalıyız ( ya da <span style="color: #ff0000;">echo &#8216;$Test&#8217;</span> tabii ki). Mesela ilk örnekte &#8221; karakterinin boşlukları yok saydığını söylemiştik. \ karakterini kullanarak &#8221; kullanmadan boşlukları tanıtabiliriz. Bu durumda -normalde komut ayıracı olan- boşluklar özel anlamını kaybederek bildiğimiz boşluk olacaktır:</p>
<p><code>kimlik=baris\ demiray</code></p>
<p><span style="color: #ff0000;">root @ linux # kimlik=baris\ demiray<br />
root @ linux # echo $kimlik<br />
baris demiray</span></p>
<p>Yukarıdaki karakterlerden ayrı olarak bir karakterden daha bahsetmek istiyorum. Amacı &#8220;saklamak&#8221; değil ancak gerçekten güzel işler yapıyor: ` (Ters tek tırnak) Bu karakterin görevi de çevrelediği komutun sonucundan standart çıktı oluşturmak. Örneğin ;</p>
<p><code>kim_var_kim_yok=`who`</code></p>
<p>kod parçasını yazarsak kim_var_kim_yok değişkeni o anda sistemde bulunan kullanıcıları içerecektir:</p>
<p><span style="color: #ff0000;">root @ linux # kim_var_kim_yok=`who`<br />
root @ linux # echo $kim_var_kim_yok<br />
root :0 Dec 23 18:10 (console)</span></p>
<p>Ya da</p>
<p><code>file `ls`</code></p>
<p>komutu ile bulunduğumuz dizindeki -görünür- tüm dosyaların türlerini öğrenebiliriz.</p>
<p><span style="color: #ff0000;">root @ linux # file `ls`<br />
betik_ad: ASCII text</span></p>
<p>Son olarak bir ipucu.. Betiğinizin çalışacağı kabuğu belirtmek için kodun ilk satırı olarak aşağıdaki ifadeyi yazabilirsiniz:</p>
<p><code>#!/bin/bash</code></p>
<p>Şimdilik benden bu kadar. Kolay gelsin.</p>
<p><strong>Barış Demiray</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/kabuk-programlama-bash-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bash Kabuğu</title>
		<link>http://www.ceturk.com/bash-kabugu/</link>
		<comments>http://www.ceturk.com/bash-kabugu/#comments</comments>
		<pubDate>Sat, 20 Dec 2003 23:45:44 +0000</pubDate>
		<dc:creator>yido</dc:creator>
				<category><![CDATA[Bilgisayar Mühendisliği]]></category>
		<category><![CDATA[İşletim Sistemleri]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mühendislik]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Sistem Mühendisliği]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Yazılım Mühendisliği]]></category>
		<category><![CDATA[Barış Demiray]]></category>
		<category><![CDATA[Bash Kabuğu]]></category>
		<category><![CDATA[bash nedir?]]></category>
		<category><![CDATA[kabuk programlama nedir]]></category>
		<category><![CDATA[linux da programlama]]></category>
		<category><![CDATA[noclobber nedir]]></category>
		<category><![CDATA[unix sistemlerde programlama]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=1163</guid>
		<description><![CDATA[Bash kabuğunun özelliklerine girmeden önce kabuk nedir sorusuna cevap verelim. İşletim sistemlerinde genel olarak çekirdek (kernel) ve kabuk (shell) diye iki kısım vardır. Çekirdek işletim sisteminin bellek yönetimi, donanımlar arası iletişim,.. gibi alt seviye görevlerini yapar. Kabuk ise kullanıcıyla etkileşen kısımdır. Kabuğa örnek olarak Bash, Korn Shell&#8217;i verebiliriz (M$-DOS da aslında bir kabuktur). Kabuğa komut [...]]]></description>
			<content:encoded><![CDATA[<p>Bash kabuğunun özelliklerine girmeden önce<strong> kabuk</strong> nedir sorusuna cevap verelim. İşletim sistemlerinde genel olarak çekirdek (kernel) ve kabuk (shell) diye iki kısım vardır. Çekirdek işletim sisteminin bellek yönetimi, donanımlar arası iletişim,.. gibi alt seviye görevlerini yapar. Kabuk ise kullanıcıyla etkileşen kısımdır. Kabuğa örnek olarak Bash, Korn Shell&#8217;i verebiliriz (M$-DOS da aslında bir kabuktur). Kabuğa komut yorumlayıcısı da diyebiliriz. Linux&#8217;te kabuk komutları çekirdeğe gömülü (cd gibi) ya da PATH dizininde bulunan dosyalar olabilir. Ayrıca kabuğun bize sağladığı kabuk programlama (Shell Scripting) sayesinde karmaşık komutları ya da sürekli yaptığımız belirli işleri tek bir komut haline getirebiliriz.</p>
<p>Kullandığınız kabuğu öğrenmek için ise SHELL çevresel kabuk değişkenini kullanabilirsiniz. Bunun için aşağıdaki komutu kullanabilirsiniz:</p>
<p><code>echo $SHELL</code></p>
<p>Artık Bash&#8217;e geçebiliriz sanırım.<br />
Bash kelimesinin açılımı &#8220;Bourne-Again Shell&#8221;&#8216;dir ve Bash Kabuğu Brian Fox tarafından yazılmıştır. Bash kabuğu sağladığı komut tamamlama gibi özelliklerle varsayılan kabuk haline gelmiştir, ayrıca POSIX uyumludur. Komut tamamlama özelliğini kullanmanız için komutun/dosyanın bir kaç karakterini yazmanız yeterlidir. TAB tuşuna basarak aradığınız komutu bulabilir ya da bir kaç tane varsa ardarda iki TAB ile tümünü listeleyebilirsiniz. Kabuk komutları kullandığı özelliklere göre çeşitli adlar alır. Bunlardan Tekli Komut (Simple Command) En temel komut şeklidir. Sadece bir komuttan ve -varsa- parametrelerinden oluşur. Örnek olarak;</p>
<p><code>cat /etc/lilo.conf</code></p>
<p>komutunu verebiliriz. Burada sadece /etc/lilo.conf dosyası ekrana basılacaktır. Komutlarımızda yönlendirme de kullanabiliriz. Bu işleme komut yönlendirme (piping) denir ve | (Boru karakteri &#8211; Pipeline) kullanılır. Mesela /bin dizininde kaç tane dosya olduğunu öğrenmek için ls ve wc komutlarını kullanabiliriz:</p>
<p><code>ls -l | wc -l</code></p>
<p>Burada ls &#8216;den alt alta dosya isimlerini sıralamasını istiyoruz ve bu komutun çıktısını wc (Word Count) komutuna yönlendirerek -l (line) parametresiyle kaç satır olduğunu öğreniyoruz.</p>
<p>Ayrıca bir komutun çıktısını bir dosyaya ya da standart çıktılara da yönlendirebilirsiniz. Bunun için ise &lt;, &gt;, &gt;&gt; gibi karakterler kullanılır. &gt; karakteri ile bir akıma (stream) yönlendirmek için aşağıdaki formatta komutlar yazmalısınız:</p>
<p>Komut &gt; Akım</p>
<p>Burada yönlendireceğiniz akım bir cihaz bile olabilir. Örnek olarak sistemde kimlerin olduğunu ve ne yaptıklarını yazdırmak için aşağıdaki komutu kullanabiliriz.</p>
<p><code>w &gt; /dev/lp0</code></p>
<p>Dosyaya yönlendirme yaparken &gt; karakteri kullanırsanız belirttiğiniz dosya varsa sıfırlanır, yoksa oluşturulur (C bilenler için: w modu gibi) . Eğer bir dosyanın içeriğini sıfırlamadan sonuna eklemek isterseniz &gt;&gt; karakterlerini kullanabilirsiniz. Örneğin aşağıdaki komut /var/log/messages dosyasının sonuna belirtilen mesajı ekler:</p>
<p><code>echo "Hata: Kullanıcı uyukluyor!" &gt;&gt; /var/log/messages</code></p>
<p>&gt; karakteri ile standart çıktıları kullanmak isterseniz ise ya &gt; olarak tek başına ya da 2&gt; olarak standart akım numarasıyla beraber kullanabilirsiniz. Birincide standart çıktı, ikincide ise standart hata çıktısı (Hatırlatma: stdin 0, stdout 1, stderr 2 numaralı akımlardır) kullanılır. Ayrıca komutlarınızı bir akımdan almak için &lt; karakterini kullanabilirsiniz. Örneğin</p>
<p><code>wc -l &lt; /etc/passwd</code></p>
<p>komutu ile sistemde kayıtlı kaç kullanıcı olduğunu öğrenebilirsiniz.</p>
<p>Tekli komuttan ayrı olarak bir kaç komutu birleştirecek ve aralarındaki ilişkiyi tanımlayacak şekilde listeler (list) oluşturabilirsiniz. Listelerde komutlar çeşitli operatörlerle birleştirilirler. Örnek olarak ; karakteri ile birleştirdiğiniz komutlar sadece ardarda çalışırken &amp;&amp; ya da || operatörleri ile biri diğerine bağlı olacak şekilde işlemler yapabilirsiniz. Ardarda çalışmaya bir kaç örnek;</p>
<p><code>clear; pwd; ls -la</code></p>
<p>Benim de alias olarak tanımladığım bir liste. Burada ekran temizlenir, çalışma dizini yazılır ve dosyalar listelenir.<br />
<code>echo Islem Tamam &gt; Sonuc.txt &amp;&amp; Sonuc.txt | lpr</code><br />
Bu komutla bildiğimiz AND operatörünün görevi yapılır. Birinci komut başarılıysa ikinci komut çalıştırılır, başarısız ise ikinci çalıştırılmaz.<br />
<code>cd /Belgeler || mkdir /Belgeler</code><br />
Burada ise önce /Belgeler dizinine geçilmeye çalışılıyor, başarılı olunamazsa (dizin yok) yaratılıyor.</p>
<p><strong>Takma Ad (Alias):</strong> Takma adlar karmaşık bir komutu daha basit bir adla kullanmak ya da sadece bir komutun ismini değiştirmek için kullanılabilir. Örnek olarak listele diye bir komut yaratmak için aşağıdaki komutu kullanabilirsiniz.</p>
<p><code>alias listele="ls -la"</code></p>
<p>ya da çalışma dizininizi öğrenmek için aşağıdaki gibi bir komut olabilir:</p>
<p><code>alias nerdeyim="pwd"</code></p>
<p>Bir takma adı kaldırmak için unalias komutunu kullanabilirsiniz.</p>
<p><code>unalias nerdeyim</code></p>
<p>Ayrıca Bash kabuğunda dizin değiştirirken kolaylık sağlayacak bazı özellikler vardır. Örneğin ev dizininize geçmek için kısaca</p>
<p><code>cd ~</code></p>
<p>yazabilirsiniz. Bu işlem Tilda Expansion (Tilda Açılımı) adını alır ve Bash&#8217;e C Shell&#8217;den gelmiştir. Burada yapılan işlem ise ~ karakteri yerine HOME kabuk değişkeninin koyulmasıdır.</p>
<p>Bir diğer özellik ise bir önceki dizine</p>
<p><code>cd -</code></p>
<p>komutunu kullanarak erişebilmenizdir. Burada da OLDPWD adlı kabuk değişkeninden yararlanılır.</p>
<p>Bash kabuğunda bulunan bir başka özellik de Brace Expansion (Küme parantezi açılımı) &#8216;dir. Genel olarak &#8220;wildcard karakterleri&#8221;yle ilgili fikrinizin olduğunu sanıyorum. Yani</p>
<p><code>ls *.txt</code><br />
ile .txt uzantılı tüm dosyaların listelenebildiğini ya da<br />
<code>rm a?b</code><br />
ile 3 harfli ancak a ile başlayıp b ile sonlanan tüm dosyaların silinebildiğini biliyorsunuz.</p>
<p>Küme parantezleri kullanarak bir adım daha gibiyoruz ve olabilecek karakterleri ya da dizgi (string) leri de belirleyebiliyoruz. Şöyle ki;</p>
<p><code>file P{enguen, isibaligi}</code></p>
<p>ile Penguen ve Pisibaligi ( amma attım <img src='http://www.ceturk.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  adında dosyalar varsa bunların türlerini öğrenebiliriz. Bu işlemde ise gördüğünüz gibi önek (prefix) veya sonek (suffix) leri belli olan ancak arada sadece istediğimiz dizgileri içeren dizgiler elde edip istediğimiz işlemde kullanabiliriz.</p>
<p><strong>Kabuk Tanımları: </strong>Bash kabuğunda çeşitli özellikleri belirleyen tanımlar vardır. Bir kabuk tanımını set komutuyla aktif edebilir ya da kaldırabilirsiniz. Bazı kabuk tanımlarını aşağıya yazıyorum:</p>
<p><strong>History:</strong> Kullanıcının komut tarihinin kaydını belirler ( kayıt ~/.bash_history dosyasındadır )<br />
<strong>Noclobber:</strong> Bir dosyaya çıktı gönderilirken içeriğin sıfırlanmasını belirler<br />
..</p>
<p>Örnek olarak komutlarınızın kaydedilmesini istemiyorsanız</p>
<p><code>set +o history</code></p>
<p>komutunu kullanabilirsiniz.</p>
<p><strong>Kabuk Değişkenleri:</strong> Bir kabukta işlemlerde kullanılan genel değişkenler kabuk değişkenlerinde tutulur. Örneğin kabukta bir komut girdiğiniz zaman kabuk bu komutu/programı öntanımlı PATH değişkenindeki dizinlerde arayacaktır. Mesela daha önce bahsettiğimiz kabuk geçmişimizi tutan dosya HISTFILE adlı değişkende tutulur. Bir kabuk değişkeninin değerini ekrana yazdırmak için</p>
<p><code>echo $HISTFILE</code></p>
<p>ya da tüm değişkenleri ve değerlerini görmek için</p>
<p><code>printenv</code></p>
<p>komutunu kullanabilirsiniz. Bu gibi kabuk değişkenlerini, takma adları tanımlamak ya da sadece başlangıçta yapılacak işlemler için ~/.bashrc (ev dizininiz altında) dosyasını kullanabilirsiniz.</p>
<p>Kabuk değişkenleri ile yapabildiğiniz bir başka işlem de &#8220;prompt&#8221; u değiştirmek. Bunun için komut satırında ve komut bir alt satıra uzadığında kullanılan yazıları tutan kabuk değişkenleri PS1 ve PS2&#8242;yi kullanabiliriz. Burada kullanabileceğimiz bazı &#8220;escape sequence&#8221; lerden bazıları şunlar:</p>
<p><code>\u  :  Kullanıcı Adı<br />
\h  :  Makine Adı<br />
\t   :  Saat<br />
\$  :  Kullanıcı simgesi ( Normal kullanıcıyken $, root olduğunuzda # değerini alır )<br />
...</code></p>
<p>Şimdi bir örnekle PS1&#8242;i değiştirelim:</p>
<p><code>export PS1='\u@\h [\t]\$'</code></p>
<p>Bendeki sonuç :<br />
<code>root@linux [16:08:18]#</code></p>
<p>Şimdilik benden bu kadar. Burada kısaca bahsettiğim komut/özelliklerin herhangi birini incelerseniz sayfalarca yardım sayfası olduğunu görürsünüz. Bu yüzden meraklı arkadaşlara <a href="www.gnu.org/software/bash?phpMyAdmin=63a3674d1e046bcf0e004b12dbd305f5" target="_blank">www.gnu.org/software/bash</a> sayfasını tavsiye ediyorum. Kolay gelsin.</p>
<p><strong>Barış Demiray</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/bash-kabugu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux&#8217;un Özellikleri</title>
		<link>http://www.ceturk.com/linux-un-ozellikleri/</link>
		<comments>http://www.ceturk.com/linux-un-ozellikleri/#comments</comments>
		<pubDate>Sat, 20 Dec 2003 00:00:07 +0000</pubDate>
		<dc:creator>yido</dc:creator>
				<category><![CDATA[Bilgisayar Mühendisliği]]></category>
		<category><![CDATA[İşletim Sistemleri]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mühendislik]]></category>
		<category><![CDATA[Sistem Mühendisliği]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Ayhan ERGUN]]></category>
		<category><![CDATA[linux nedir]]></category>
		<category><![CDATA[Linux'un Özellikleri]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=1166</guid>
		<description><![CDATA[LİNUX &#8216;UN ÖZELLİKLERİ LINUX, sunucu ve istemci bilgisayarlarda çalışan türleriyle yaygın kullanılan bir işletim sistemi haline gelmiştir. Bu bölümde LINUX &#8216;un bazı özelliklerine göz atacağız: 1. BİRDEN ÇOK KULLANICI DESTEĞİ İşletim sistemi aynı anda birçok kullanıcıya hizmet verir. 2.ÇOK GÖREVLİ İşletim sistemi aynı anda birçok programı çalıştırır ve çok sayıda kullanıcıya hizmet verir. İşletim sistemi [...]]]></description>
			<content:encoded><![CDATA[<p><strong>LİNUX &#8216;UN ÖZELLİKLERİ</strong></p>
<p>LINUX, sunucu ve istemci bilgisayarlarda çalışan türleriyle yaygın kullanılan bir işletim sistemi haline gelmiştir. Bu bölümde LINUX &#8216;un bazı özelliklerine göz atacağız:</p>
<p><strong>1. BİRDEN ÇOK KULLANICI DESTEĞİ</strong></p>
<p>İşletim sistemi aynı anda birçok kullanıcıya hizmet verir.</p>
<p><strong>2.ÇOK GÖREVLİ</strong></p>
<p>İşletim sistemi aynı anda birçok programı çalıştırır ve çok sayıda kullanıcıya hizmet verir.</p>
<p>İşletim sistemi üzerindeki programları korumalı (protected) moda çalışırlar. Bu moda uygulamalar birbirini etkilemeden sanki tek başına çalışıyormuş gibi bilgisayar üzerinde çalışırlar.</p>
<p><strong>3. ÇOK İŞLEMCİ DESTEĞİ</strong></p>
<p>Linux işletim sisteminin çok işlemci desteği vardır. 16 işlemciye kadar destekleyen Linux işletim sistemleri vardır.</p>
<p><strong>4. TCP/IP DESTEĞİ</strong></p>
<p>Linux, yerleşik TCP/IP desteği ile gelir ve Internet bağlantılarını kolayca yapar.</p>
<p><strong>5. ORTAMLAR: KABUKLAR</strong></p>
<p>Linux &#8216;te çekirdek üzerindeki işlemleri kabuk (shell) sağlar. Örneğin bir komut yazdığınızda bu komutu yorumlayan program kabuktur.</p>
<p><strong>6. DOSYA YAPISI</strong></p>
<p>Linux işletim sisteminde dosyalar, dizinler (directory) halinde düzenlenmiştir. Yaygın olarak kullanılan bu yapıda, programlar, sistem dosyaları ve kullanıcı dosyaları belli dizinler içinde yer alır. Kullanıcılar kendi dosyalarını istedikleri dizinleri açarak tutabilirler. Dosya sistemi aynı zamanda hiyerarşiktir. En tepede bir kök (root) nokta bulunur. Ardından dizinler dallanarak devam eder.</p>
<p><strong>Microsoft® Sistem Mühendisi<br />
Microsoft® Veri Tabanı Yöneticisi<br />
Microsoft® Eğitmen<br />
Bilgisayar Mühendisi<br />
Webmaster<br />
<span style="text-decoration: underline;">Ayhan ERGUN</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/linux-un-ozellikleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux Arabirimleri</title>
		<link>http://www.ceturk.com/linux-arabirimleri/</link>
		<comments>http://www.ceturk.com/linux-arabirimleri/#comments</comments>
		<pubDate>Fri, 19 Dec 2003 00:07:32 +0000</pubDate>
		<dc:creator>yido</dc:creator>
				<category><![CDATA[Bilgisayar Mühendisliği]]></category>
		<category><![CDATA[İşletim Sistemleri]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mühendislik]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Sistem Mühendisliği]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Yazılım Mühendisliği]]></category>
		<category><![CDATA[AfterStep WindowMaker]]></category>
		<category><![CDATA[Ayhan ERGUN]]></category>
		<category><![CDATA[BlackBox]]></category>
		<category><![CDATA[Enlightenment]]></category>
		<category><![CDATA[GNOME nedir]]></category>
		<category><![CDATA[IceWm]]></category>
		<category><![CDATA[KABUK (SHELL)]]></category>
		<category><![CDATA[KDE nedir]]></category>
		<category><![CDATA[LILO]]></category>
		<category><![CDATA[Linux Arabirimleri]]></category>
		<category><![CDATA[linuxte KOMUT SATIRI]]></category>
		<category><![CDATA[X WINDOWS  nedir]]></category>

		<guid isPermaLink="false">http://www.ceturk.com/?p=1169</guid>
		<description><![CDATA[Linux yüklü (kurulu) bir bilgisayarı açtığınızda; eğer kurulum sırasında LILO kurulmuşsa, bilgisayardaki işletim sistemlerinden birisini seçmeniz gerekecektir. Ardından seçtiğiniz işletim sistemi yüklenir. LILO: Linux Linux &#8216;un seçilmesiyle bilgisayarınıza Linux yüklenecektir. Linux &#8216;e komut vermek için $ ya da # işareti ile başlayan bilgi istemi (prompt) kullanılır. Bu işaretin ardından komutlar yazılır ve ENTER tuşuna basılır. [...]]]></description>
			<content:encoded><![CDATA[<p>Linux yüklü (kurulu) bir bilgisayarı açtığınızda; eğer kurulum sırasında LILO kurulmuşsa, bilgisayardaki işletim sistemlerinden birisini seçmeniz gerekecektir. Ardından seçtiğiniz işletim sistemi yüklenir.</p>
<p><code>LILO: Linux</code></p>
<p>Linux &#8216;un seçilmesiyle bilgisayarınıza Linux yüklenecektir.</p>
<p>Linux &#8216;e komut vermek için $ ya da # işareti ile başlayan bilgi istemi (prompt) kullanılır. Bu işaretin ardından komutlar yazılır ve ENTER tuşuna basılır.</p>
<p><code># ls 's</code><br />
gibi.</p>
<p>Linux, komut satırı arabiriminin yanı sıra, X Windows gibi grafik kullanıcı arabirimine sahiptir.</p>
<p><strong>1. KOMUT SATIRI</strong></p>
<p>Komut satırı (command line, command prompt), komutları yazabileceğiniz bir satırdır. Komutların yazılarak işletilmesini sağlar.</p>
<p>Komut satırı kullanımı eskiden beri (DOS, UNIX, vb) işletim sistemlerinde yaygın olarak kullanılan bir ortamdır. Günümüzde hemen her işletim sisteminde komut satırı aracılığıyla yazabileceğiniz komut (hala) vardır.</p>
<p>Genel olarak komut satırı formatı:</p>
<p><code># komut parametreleri</code></p>
<p>Komutun ardından komutun parametreleri yazılır. Örneğin ls bir komut s ise bir parametredir.</p>
<p><code># ls 's</code></p>
<p>Komut satırında, kullanılan komutların parametreleri hakkında geniş bilgi için man komutu kullanılır.</p>
<p><code># man ls</code></p>
<p>Yukarıdaki komut sayesinde, ls komutuna ait yardım bilgileri alınır.</p>
<p><strong>2. KDE</strong></p>
<p>K Desktop Environment olarak bilinen bir masaüstü arabirim programıdır. KDE, Windows işletim sistemlerinde yer alan, masaüstü ve grafik arabirim olarak kullanılan programlara benzer.</p>
<p>KDE, sayesinde programları başlatmak, sistem ayarları yapmak ve diğer yönetim işlemlerinin çoğu grafik kullanıcı arabirimi sayesinde kolayca yapılır. KDE &#8216;nin diğer arabirim ortamları gibi ana amacı, kullanıcıların işletim sistemini kolayca (fare ile) kullanabilmelerini sağlamaktır. Grafik kullanıcı arabiriminin alternatifi komut satırıdır. Komut satırında işlem yapabilmek için komutları ve parametrelerini bilmek gerekir.</p>
<p>KDE pencereleri, Windows pencereleri gibi belli bir stile sahiptir.</p>
<p><strong>3. GNOME</strong></p>
<p>GNOME (GNU Network Object Model Environment) da KDE gibi kullanıcı arabirimi için araçlar (programlar) topluluğudur. GNOME arabiriminde bir panel ve ekranın alt tarafından da bir görev çubuğu vardır.</p>
<p>Pencere yönetiminde KDE kadar etkili olmayan GNOME özellikle dosya yöneticisi olarak kullanılır. Dosya yöneticileri, bildiğiniz gibi sistemin sabit diskinde yer alan dizin ve dosyaları görüntüler ve üzerinde çeşitli işlemlerin yapılmasını sağlar.</p>
<p><strong>4. X WINDOWS</strong></p>
<p>X WINDOWS SYSTEM X olarak bilinen diğer bir grafik kullanıcı arabirimi de özellikle Windows işletim sistemine benzer kullanıcı arabirimi sağlar.</p>
<p>X WINDOWS ortamında pencere, dosya ve program yöneticileri vardır. Pencere yöneticileri, komut satırı arabirimi yerine Linux işletim sistemi üzerinde pencereleri, menüleri kullanabilme olanağı sunar.</p>
<p>Dosya yöneticileri sistemin sabit diskinde yer alan dizin ve dosyaları yönetmek için grafik kullanıcı arabirimi sağlar.</p>
<p><strong><br />
5. LİNUX İÇİN PENCERE YÖNETİCİLERİ</strong></p>
<p>Bazı pencere yöneticileri:</p>
<p>BlackBox<br />
Enlightenment<br />
AfterStep<br />
WindowMaker<br />
IceWm</p>
<p>Linux üzerinde kabuk (shell) işlemlerini açıklamak.</p>
<p><strong>A. KABUK (SHELL)</strong></p>
<p>Kabuk (shell) işlemleri denince genellikle UNIX işletim sistemlerinde bulunan gelişmiş komut satırı sistemi düşünülür. Onu da size şu size şekilde aktarmak istiyorum: Hepimiz DOS işletim sistemini duymuş ve kullanmışızdır. İşte DOS üzerinde DIR komutu ile yaptığımız işlemler, bu sözü edilen kabuk işlemlerine (komutlarına) karşılık gelmektedir.</p>
<p>Kabuk, Linux işletim sistemini komut satırı arabirimi ile yönetebileceğimiz bir arabirimdir. Kabuk, yalnızca verilen komutları yorumlamak ya da yerine getirmenin yanı sıra gelişmiş ve etkileşimli bir programlama ortamıdır. Yani kullanıcı ve uygulama yönetimi için çeşitli kabuk programları yazılabilir.</p>
<p>Genel olarak komut satırı formatı:</p>
<p><code># komut parametreleri</code></p>
<p>Komutun ardından komutun parametreleri yazılır. Örneğin <span style="color: #0000ff;">ls</span> bir komut <span style="color: #0000ff;">s</span> ise bir parametredir.</p>
<p><code># ls 's</code></p>
<p>Komut satırında, kullanılan komutların parametreleri hakkında geniş bilgi için man komutu kullanılır.</p>
<p>Linux ve UNIX işletim sistemleri üzerinde çalışmak üzere çok sayıda kabuk sistemi vardır. Programcı ya da sistem yöneticisi bunlardan istediğini seçebilir.</p>
<p><strong>Microsoft® Sistem Mühendisi<br />
Microsoft® Veri Tabanı Yöneticisi<br />
Microsoft® Eğitmen<br />
Bilgisayar Mühendisi<br />
Webmaster<br />
<span style="text-decoration: underline;">Ayhan ERGUN</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ceturk.com/linux-arabirimleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

