: sh uyumlu, birçok ek programlama özelligi içeren bir kabuk. Bu kabuk da yaygin bir kitle tarafindan kullanilmaktadir.

Benzer belgeler
Orta Düzey Linux Komutları

Linux'ta Kabuk ve Kabuk Programlama

[1]+ Stopped find /usr -name "o*" -print linux:/etc/rc.d#

Komut Penceresi ile Çalışmaya Başlamak

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

Komutlar (Devam) ls -a > deneme (ls -a komutunun çıktısı deneme isimli. ls -a >> deneme (ls -a komutunun çıktısı deneme

Temel Linux Komutları

BİLGİ İŞLEM DERS 3. Yrd Doç Dr. Ferhat ÖZOK MSGSU FİZİK BÖLÜMÜ MSGSU FİZİK BÖLÜMÜ

Linux altında komut satırında...

Kabuk Programlama (Bash)

C Konsol ve Komut Satırı

CHAPTER 7. LINUX KABUKLARI ve ÖZELLİKLERİ

Dosya/Dizin İzinleri. Okuma (r) Yazma (w) Çalıştırma (x) Dosya içeriğini görebilir mi? (Klasörler için) dosya listesini alabilir mi?

man komut man ls (ls komutu hakkında bilgi verir.) man pwd (pwd komutu hakkında bilgi verir.)

Linux ta komutlar hakkında yardım almak için aşağıdaki komutlar kullanılır : - man - info - whatis - apropos

Regular Expressions Version 0.1

SIMAN KULLANIM KILAVUZU

Linux Dosya ve Dizin Yapısı

Aşağıda listelenen temel linux komutları bilgisayarınızın komut satırında çalıtırılacaktır.

KABUK PROGRAMLAMA (shell programming- scripting)

Kullanım şekli: cal <ay> <yıl> Bu komut ile takvim görüntülenebilir.

Pardus ta Komutlarla Çalışmak

Bash ile Programlama. Cem Ahmet Mercan. Ulusal Yüksek Başarımlı Hesaplama Merkezi (UHeM) 13 Temmuz 2017

PBS Betiği Hazırlama ve PBS Komutları. Feyza Eryol

Dr. Fatih AY Tel: fatihay@fatihay.net

BİLGİ İŞLEM DERS 1. Yrd Doç Dr. Ferhat ÖZOK MSGSU FİZİK BÖLÜMÜ MSGSU FİZİK BÖLÜMÜ

Pardus 2013 te Metin Editörleri

Linux işletim sistemlerinde dosya hiyerarşisinde en üstte bulunan dizindir. Diğer bütün dizinler kök dizinin altında bulunur.

Proses. Prosesler 2. İşletim Sistemleri

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

PROSESLER. Proses. Proses

$ rm dosya1 dosya2 dosya3 dosya4 dosya5 dosya6 dosya7 dosya8

qmail ile üniversite mail sistemi yönetimi Devrim Sipahi Dokuz Eylül Üniversitesi

$ echo $PATH /sbin:/bin:/usr/sbin:/usr/bin:/usr/x11r6/bin: /usr/local/sbin:/usr/local/bin:/usr/games:.

Temel Linux Eğitimi. İçindekiler

CHAPTER 3. ZAMANLANMIŞ GÖREVLER (Automated Tasks)

HSancak Nesne Tabanlı Programlama I Ders Notları

qmail ile üniversite mail sistemi yönetimi Devrim Sipahi Dokuz Eylül Üniversitesi

BTP 205 İŞLETİM SİSTEMLERİ

Öğr. Gör. Serkan AKSU 1

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Linux Dosya Yapısı. Eren BAŞTÜRK.

Ünite-3 Bilgisayar Yazılımı.

Ağ Üzerinde MATLAB kurulum rehberi (Sunucu makine)

BIND ile DNS Sunucu Kurulumu

Yrd. Doç. Dr. A. Burak İNNER

Yrd. Doç. Dr. A. Burak İNNER

WebInstaller. 1. Kurulum Đçin Gereksinimler

Bilgisayar. Bilgisayarın Özellikleri. Giriş İşleme Çıkış. Bilgisayar Nedir? Bilgisayarın Çalışma Prensibi

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

Kurumsal Güvenlik ve Web Filtreleme

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

Widows un çalışmasında birinci sırada önem taşıyan dosyalardan biriside Registry olarak bilinen kayıt veri tabanıdır.

12 TBT / WEB TASARIM ve PROGRAMLAMA ( Not 3 )

DOSYA NEDİR? Verilerin HDD de saklanması. Verilerin HDD de saklanması DOSYA SİSTEMİ NEDİR?

Kurumsal Güvenlik ve Web Filtreleme

Sistem Programlama. (*)Dersimizin amaçları Kullanılan programlama dili: C. Giriş/Cıkış( I/O) Sürücülerinin programlaması

İNTERNET PROGRAMCILIĞI - II

Bölüm 10: PHP ile Veritabanı Uygulamaları

Bilgisayar Programlama MATLAB

KLAVYEDE TUŞLAR İMLEÇ NEDİR?

Temel Bilgisayar Programlama

İşletim Sistemlerine Giriş

1.1. Yazılım Geliştirme Süreci

LINUX KOMUTLARI. Emin Islam Tatli

DRAYTEK VIGOR 3300V. Login(Oturum Açma)

Bilgisayar İşletim Sistemleri BLG 312

Bir üst dizinde yer alan prog1 programını çalıştırmak için aşağıdaki komutlardan hangisini çalıştırmak gerekir?

Linux/Unix Sistem Yönetimi Prosedürleri - 1

FreeRADIUS ile Kimlik Denetimi. Gökhan AKIN, Hüseyin Yüce, ve Hüsnü DEMIR

Temel Li nux Eği t i mi Böl üm

Elbistan MYO Güz Dönemi Öğr.Gör. Murat KEÇECİOĞLU

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

BİLGİSAYAR UYGULAMALARI Şırnak Üniversitesi Mühendislik Fakültesi Güz Dönemi Arş.Gör. Eren DEMİR ve Arş.Gör. Veysel KIŞ (

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1

Düzenli İfadeler & Kullanım Alanları

Shell(Bash,sh, zsh,) Programming- Kabuk Programlama

Düzenli İfadeler & Kullanım Alanları

İşletim Sistemi. BTEP205 - İşletim Sistemleri

C Programlama Dilininin Basit Yapıları

Discount Trke Ingilizce Szck Testi Programi latest free software download ]

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu

Temel Linux Eğitimi 1., 2. ve 3. Bölümler

Yrd. Doç. Dr. A. Burak İNNER

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

MatLab. Mustafa Coşar

1 STUNNEL NEDİR? 2 STUNNEL KURULUMU

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

İŞLETİM SİSTEMLERİ. (Operating Systems)

Açık Kaynak Kodlu Yazılım

NESNEYE YÖNELİK PROGRAMLAMA

BİT in Temel Bileşenleri (Yazılım-1)

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar) Öğr.Gör. Dr. Dr. Şirin KARADENİZ

PBS Betiği Hazırlama ve PBS Komutları

Get Trke Japonca Ingilizce Szck Testi Programi computer software online ]

Transkript:

DERS 6: 6. Kabuk Islemleri Sisteme girdigimiz anda, aslinda bir kabuk (shell) programi içinde çalismaya baslamis oluruz. Klavyeden girilen her komut çalistigimiz kabuk tarafindan algilanir ve gerçeklestirilir. Kabuklar tek degildir, ve her kullanici kendine uygun birisini seçebilir. Linux sürümleri genellikle öntanimli olarak bash (Bourne Again Shell) ile gelirler. Ama bunun yaninda birçok kabuk vardir. Bunlardan sik kullanilanlari sunlardir : sh (Shell ya da Bourne Shell) : Ilk UNIX kabugu. ksh (Korn Shell) : sh uyumlu, birçok ek programlama özelligi içeren bir kabuk. Bu kabuk da yaygin bir kitle tarafindan kullanilmaktadir. bash(bourne Again Shell) : Kullanim kolayligi bakimindan en çok ragbet gören bash, GNU tarafindan kaynak kodu olarak dagitiliyor. bash sh ve ksh uyumlulugunu korurken, özellikle etkilesimli kullanima yönelik (komut tamamlama, gibi) birçok yenilik de içerir. csh (C shell) tcsh : California Üniversitesinde (Berkeley) gelistirilen csh'in C diline benzer bir programlama yapisi vardir. : csh'in biraz gelistirilmis hali. Hangi kabuk ile çalistiginizi asagidaki sekilde ögrenebilirsiniz : $ echo $SHELL /bin/bash Kabuk bir girdiyi okuduktan sonra bir dizi islem yürütür. Eger girdi bir açiklama baslangici içeriyorsa, kabuk açiklama sembolünü (`#') ve satirin kalanini yoksayar. Aksi takdirde kabuk, girdiyi okur ve onu sözcüklere ve isleçlere ayirir, ayrimlama kurallarini kullanarak sözcükleri ve karakterleri anlamlandirir. Bundan sonra bu dizgecikleri komutlar ve bagli yapilar olarak çözümler, özel anlamlari olan sözcükleri ve karakterleri kaldirir, kalanlari yorumlar, gerekiyorsa girdi ya da çiktiyi yönlendirir, belirtilen komutlari çalistirir, komutlarin çikis durumu olusturmasini bekler ve bu çikis durumunu denetim veya islem yapilabilmesi için çiktilar. Kabuk Islemleri Asagidaki kisa açiklamada bir komutun okunmasi ve çalistirilmasi sirasindaki kabuk islemleri anlatilmistir. Temel olarak, kabuk sunlari yapar:

1. Girdiyi bir dosyadan veya `-c' çagri seçeneginin bir argümani olarak saglanan bir dizgeden ya da kullanicinin uçbiriminden okur. 2. Ayrimlama kurallarina uygun olarak girdiyi sözcüklere ve isleçlere ayirir. Bu dizgecikler metakarakterlerle ayrilir. Takma ad uzantisi da bu adimda uygulanir. 3. Dizgecikleri basit ve birlesik komutlar olarak çözümler. 4. Yorumlanan dizgecikleri dosya listelerine, komutlara ve argümanlara ayirarak çesitli kabuk açilimlarini uygular. 5. Varsa gerekli yönlendirmeleri uyguladiktan sonra yönlendirme isleçleri ile terimlerini argüman listesinden kaldirir. 6. Komutu çalistirir. 7. Istege bagli olarak komutun isini bitirmesini ve çikis durumu üretmesini bekler. Bu kisimda Kullanilan Terimler POSIX Unix'i temel alan bir açik sistem standartlari ailesi. Bash, POSIX 1003.2 Kabuk ve Araçlar Standardi'ni uygular. alan - (field) Kabuk açilimlarindan birinin sonucu olan bir metin birimidir. Açilimdan sonra, bir komut icra edilirken olusan alanlar komut ismi ve argümanlari olarak kullanilir. anahtar sözcük - (reserved word) Kabukta özel anlami olan bir sözcük. Anahtar sözcüklerin çogunlugu for ve while gibi kabuk akis denetimi yapilarinda kullanilir. bosluk - (blank) Bir bosluk ya da sekme (tab) karakteri. çikis durumu - (exit status) Bir komutun kendini çagirana döndürdügü deger. Deger, sekiz bit genislikle sinirlidir ve dolayisiyla en çok 255 degerini alabilir. denetim isleci - (control operator) Bir denetim islevi gerçeklestiren bir sözcüktür. Bir satirsonu (LF) karakteri olabildigi gibi ` ', `&&', `&', `;', `;;', ` ', `(' veya `)' dizgeciklerinden biri de olabilir. dizgecik - (token) Kabuk tarafindan tek birim olarak ele alinan bir karakter dizisi. Bir sözcük olabildigi gibi bir isleç de olabilir. dosyaismi - (filename) Bir dosyayi tanimlayan bir karakter dizgesidir. dönüs durumu - (return status) Çikis durumu ile esanlamlidir. isim - (name) Bir harf veya altçizgi karakteri ile baslayan ve altçizgiler, harfler ve rakamlardan olusan bir sözcük. Isimler, kabuk degiskenleri ve islev isimleri olarak kullanilir. Ayrica belirteç olarak da bilinir. is - (job) Bir boruhatti (` ') içeren bir süreç kümesi ve tamami ayni süreç grubundan olarak onun alt süreci olan süreçlerin hepsi. isleç - (operator) Bir denetim ya da bir yönlendirme isleci. is denetimi - (job control) Kullanicilarin süreçleri durdurma ve yeniden baslatmayi seçebildikleri bir mekanizma. metakarakter - (metacharacter)

Tirnaklarla sarmalanmamis, tek basina bir anlami olan bir karakter. Bir metakarakter bir bosluk olabildigi gibi ` ', `&', `;', `(', `)', `<' veya `>' karakterlerinden biri de olabilir. özel yerlesik - (special builtin) POSIX 1003.2 standardina göre özel olarak siniflanmis bir yerlesik kabuk komutu. sinyal - (signal) Sistem içinde bir eylem olusturmak üzere çekirdek tarafindan bir sürecin uyarilmasini saglayan mekanizma. sözcük - (word) Isleç olmayan bir dizgecik. süreç grubu - (process group) Ayni süreç kimligine (PID) sahip birbiriyle iliskili süreçlerden olusan küme. süreç grubu kimligi - (process group ID) Bir süre grubunu yasami süresince tanimlayan bir essiz belirteç. yerlesik - (builtin) Dosya sisteminin içinde bir yerlerde bulunan bir çalistirilabilir program degil, kabugun kendi içinde gerçeklenmis komutlar Basit Komutlar Bir basit komut en çok rastlanan komut çesitidir. Bosluklarla ayrilmis sözcüklerden olusur ve kabuk denetim isleçlerinden biri ile sonlanir. Ilk sözcük genelde çalistirilmasi istenen komuttur, kalanlar ise bu komutun argümanlaridir. Sistemde Geçerli Kabugu Degistirmek : Kullanmakta oldugumuz kabugu degistirmek istedigimizde chsh komutunu asagidaki gibi kullaniriz. $ chsh Enter Password: The current Shell is : /bin/bash You can choose one of following : 1: /bin/csh 2: /bin/bash 3: /bin/zsh Enter a number between 1 and 3: 3 Shell changed. Sifreyi girdikten sonra 1 den 3 kadar bir rakamla istedigimiz kabugu seçiyoruz ve sonra Shell changed diye mesaj aliyoruz. Öntanimli geldigi için, bash kabugunun özelliklerine göz atmakta fayda vardir. Bash'in kullaniciya zaman kazandiran en önemli özelliklerinden birisi, dosya isimlerini tamamlamasidir. Komut satirinda tamamlanmamis bir komut veya dosya ismi yazdiktan sonra TAB tusuna basilirsa satir tamamlanacaktir. Eger komut satirindaki karakter kümesiyle baslayan birden fazla komut varsa bir sinyal sesi duyulacak ve sizden yeteri kadar karakteri yazmanizi bekleyecektir. $ ls

postgres mandel.doc lilo-howto $ vi post <TAB> $ vi postgres Komut satirindaki karakterler dosyayi veya komutu tanitmaya yetmiyorsa, <TAB> tusunun iki kez ard arda basilmasiyla ekrana mümkün olan tüm dosya isimleri getirilebilir. $ ta <TAB> <TAB> tac tail talk tar $ talk Bash, komut satirinda iken satirin kolayca degistirilebilmesini saglar. Böylece komut çalistirilmadan önce birkaç tus darbesiyle üzerinde degisiklik yapilabilir. Klavye üzerindeki alt ve üst yön tuslari, daha önce yazdiginiz komutlari görmenizi ve arasinda seçim yapmanizi saglar. Sag ve sol yön tuslari ile seçtiginiz komutun üzerinde degisiklikleri uygulabilirsiniz. Ortam Degiskenleri Linux bash kabugunda bahsedecegimiz ortam degiskenleri Linux yada Windows NT deki ortam degiskenlerinden teorik olarak çok farkli degildir. Ancak atamalarinda izlenmelerinde ve silinmelerinde bazi farkliliklar mevcut olabilir. Ortam Degiskenlerinin Listelenmesi Ortam degiskenlerinin tümünü listelemek için asagidaki komutu girebilirisiniz. #printenv Belirli bir ortam degiskenini listelemek içinse printenv komutunun yanina o degiskenin ismi belirtilmelidir. Ortam Degiskenlerine Deger Atamak Bir ortam degiskenine deger atamak için asagidaki yazilis biçimi kullanilmalidir: #degisken=deger Burada degisken parametresi kendine deger atanacak olan degiskenin adini, deger parametresi ise degiskene atanacak olan degeri göstermektedir. Örnegin USER degiskenine root degerini atamak için asagidaki komutu kullanmalisiniz. #USER=root Bir ortam degiskenine atanan deger, degiskenin ortama export komutu ile gönderilmesi ile geçerlilik kazanir. Bu komutun kullanis biçimi asagidaki gibidir. # export degisken Örnegin yukaridaki USER degiskeni :

# export USER komutu ile ortama gönderilirse degeri root olarak kullanilacaktir. Kabuk Degiskenleri: Bir kabuk içinde tanimlanan degiskenlere kabuk degiskenleri adi verilir. Çok farkli sayida ve yapida kabuk vardir. Hatta kabuk betigi ile kendi kabugumuzu da olusturabiliriz. Sisteme giris yaptigimizda aktif hale gelen bir kullanici kabugu vardir. Bu kabuk genellikle login kabugu olarak adlandirilir. Kabukta tanimlanan degiskenler kabuk aktif oldugu sürece geçerlidir. Bir kabuk içinde degisken tanimlayabilmek için bir degisken ismi kullanmamiz gerekir. Bir degiskene deger atayabilmek için = isareti kullanilmalidir. Asagidaki örnekte poet degiskenine, Virgil karakter dizisi atanmistir. $ poet = Virgil Artik degiskenin degerini çagirmak için $ isaretini takiben degisken adini kullanmamiz gerekir. Her ne zaman $ isareti degisken adindan önce kullanilirsa degisken ismi degiskenin degeri ile yer degistirir. Asagidaki örnekte kabuk degiskeni poet, echo komutunda $ kullanilarak tasidigi degere ulasilmistir. $ echo $poet Virgil Çogunlukla uzun dizin isimlerini her seferinde yazmak oldukça zahmetli bir istir. Eger klasörün veya dosyanin dizin adresini bir degiskene atarsak, daha sonra $ kullanarak bu degiskeni çagirip daha pratik bir sekilde çalismamiz mümkün olur. $ Ldir = /home/serdar/works/float_body $ cp myprogram $Ldir Eger simdiye degin tanimlanan kabuk degiskenlerinin neler oldugunu ve hangi degerleri tasidigini ögrenmek istiyorsak set komutunu kullanmamiz gerekir. $ set poet Virgil Ldir /home/serdar/works/float_body $ Eger belirli bir degiskeni kullanmak istemiyorsak, unset komutu ile o degiskeni tanimsiz yapabiliriz. Asagidaki örnek poet degiskeninin degerini kaldirir. $ unset poet $ set Ldir /home/serdar/works/float_body

Login Kabugunun Konfigürasyonu (.bash_profile veya.profile).bash_profile veya.profile dosyasi BASH kabugunun baslangiç ayar dosyasidir. Kullanici sisteme girdiginde otomatik olarak çalistirilan bir betik dosyasidir. Dosya kabugunuzun yönetiminde kullanilan özel çevre degiskenlerinin tanimlandigi kabuk komutlarini içerir. Örnek bir dosya asagida verilmistir: #.bash_profile #get the aliases and functions if[-f ~/.bashrc]; then.~/.bashrc fi #user spesific environment and startup programs PATH = $PATH:$HOME/bin BASH_ENV = $HOME/.bashrc USERNAME = Export USERNAME BASH_ENV PATH Sistemin ayar dosyasi sadece profile olarak anilir ve /etc/profile adresindedir. Asagida sistemin.profile dosyasi verilmistir. Sistemin ilk çalistirilan ve /etc/ altindaki dosyasina profile denir. /usr/x11r6/bin i içeren PATH in nasil tanimlandigina dikkat edin. Bu dizin X Windows komutlari ile masaüstü programi olan KDE nin yerini tutar. Tekrar tanimlanan, /opt/kde/bin.histfile geçmiste yapilan olaylari tutar. /etc/profile # /etc/profile # System wide environment and startup programs # Function and aliases go in /etc/bashrc PATH = $PATH: /usr/x11r6/bin:/opt/kde/bin: PS1= [\u@\h \W]\\$ ulimit -c 1000000 if[ id gn = id un a id u gt 14 ]; then umask 002 else fi umask 002 USER = id un LOGNAME = $USER MAIL= /var/spool/mail/$user HOSTNAME= /bin/hostname HISTSIZE=1000 HISTFILESIZE=1000 NNTSERVER=nntp.myservice.com export PATH PS1 HOSTNAME HINTSIZE HISTSIZE HISTFILESIZE USER LONGNMAE

MAIL NNTPSERVER for i in /etc/profile.d/*.sh ; do if [ -x $i ]; then. $i fi done unset i ///////////////////////////////////////////////// ///////////////////////////////////////////////.bash_profile #.bash_profile # get the aliases and function if [ -f -/.bashrc ]; then./~.bashrc fi # User specific enviroment and startup programs PATH=$PATH:$HOME/bin:$HOME HISTSIZE=30 NNTPSERVER=nntp.myserver.com EXINIT= set nu ai PS= \w \$ export USERNAME ENV PATH CDPATH HISTSIZE EXINIT PS1 NNTPSERVER/ Sisteme her girisinizde,.profile çalistirildigi halde, program üzerinde degisiklik yaptiginizda sisteme bir daha girise kadar çalistirilmayacaktir. BASH Çekirdegini Konfigüre Etmek:.bashrc.bashrc, BASH her girisinizde çalistirilan konfigürasyon dosyasidir. Eger login oldugunuz çekirdek BASH çekirdegiyse,.bashrc dosyasi siz login olurken.bash_login ile birlikte çalisacaktir. BASH Çekirdegi.bash_profile.bashrc.bash_logout Görevleri Sisteme login olmasini saglayan programdir. BASH çekirdeginin konfigürasyon dosyasidir. Çikis ismi TCSH Çekirdegi.login.tcshrc.logout Z Çekirdegi.zshenv.zprofile Sisteme login olmasini saglayan programdir. TCSH çekirdeginin konfigürasyon dosyasidir. Çikis ismi. Çekirdege giris dosyasidir. Sisteme login olmasini saglayan programdir.

.zlogin.zshrc.zlogout PDKSH Çekirdegi.profile.kshrc Çekirdege giris dosyasidir. Z- çekirdeginin konfigürasyon dosyasidir. Çikis dosyasidir Sisteme login olmasini saglayan programdir. PDKSH çekirdeginin konfigürasyon dosyasidir. 6.1 Yönlendirme Kullanici, ekrana yazdigi bir komutun neler yaptigini en rahat sekilde komut tarafindan ekrana yönlendirilen bilgilerden anlayabilir. Program, kullaniciyi bilgilendirme amaciyla mümkün oldugu kadar çok, fakat ortaligi fazla karistirmamak için de mümkün oldugu kadar az bilgiyi ekrana vermelidir. 6.1.1 Standart Girdi, Çikti ve Hata Linux'ta, programin ekrana yazilan bilgiyi iki sinif altinda toplayabiliriz. Birincisi, olagandisi bir durumu bildiren standart hata, digeri de her türlü verinin yazildigi standart çikti. Program çalistigi andan itibaren bu iki kanal üzerinden akan bilgiler, programin çalistigi sanal terminale yazilirlar. Program girdilerini ise standart girdi araci olan klavyeden alir. Girdi Yönlendirmesi Girdi yönlendirmesinde, verilen sözcük'ün yorumlanmasi ile elde edilen isme sahip dosya, verilmisse dosya tanitici n üstünde, aksi takdirde standart girdide (dosya tanitici 0) açilir. Girdi yönlendirmesi olarak degerlendirilecek sözdizimi: [n]<sözcük Eger bu bilgiler bir ekran boyundan (25 satir) fazla tutuyorsa bazi satirlar programcinin gözünden kaçabilir. Bunu önlemek amaciyla standart çikti ve hata bir dosyaya yazilacak sekilde ayarlanabilir. Yönlendirme olarak da bilinen bu islem UNIX altinda (DOS'ta oldugu gibi) > karakteri ile gerçeklestirilir. Örnek olarak o an bulundugunuz dizinde yeralan dosyalari ekrana getirin : $ ls al Bu komut, standart çikti olarak dosyalarin bilgilerini ekrana getirecektir. Bu çiktiyi, bir dosyaya yönlendirelim ve dosyanin içerigine göz atalim: linux:~$ ls -al > liste linux:~$ cat liste total 16 drwxr-xr-x 5 gorkem users 1024 Feb 13 13:10. drwxr-xr-x 4 root root 1024 Jan 7 1980..

-rw-r--r-- 1 gorkem users -rw-r--r-- 1 gorkem ftpadm -rw-r--r-- 1 gorkem users -rw-r--r-- 1 gorkem users -rw-r--r-- 1 gorkem users -rw-r--r-- 1 gorkem users drwxr-xr-x 2 gorkem users -rw-r--r-- 1 gorkem users -rw-r--r-- 1 gorkem users -rw-r--r-- 1 gorkem users drwxr-xr-x 2 gorkem users drwxr-xr-x 2 gorkem users -rw-r--r-- 1 gorkem users linux:~$ 390 Feb 13 12:56.Xdefaults 2016 Feb 13 13:09.bash_history 1 Feb 13 12:57.bashrc 163 Nov 24 1993.kermrc 34 Nov 24 1993.less 114 Nov 24 1993.lessrc 1024 Jan 7 1980.term 87 Feb 13 12:56.xinitrc 2795 Feb 13 13:06 adres 0 Feb 13 13:10 liste 1024 Feb 13 12:54 mail 1024 Feb 13 12:54 perl 0 Feb 13 13:10 typescript > karakteri standart hatayi dosyaya yönlendirmez. Bu islem için 2> kullanilir. Ama hatayi görebilmek için, hata yaratan bir komut yazmaliyiz, öyle degil mi? $ ls /deneme /deneme : No such file or directory $ ls /deneme 2> hata $ cat hata /deneme : No such file or directory Asagidaki komutun isletilmesinin ardindan standart çikti oku1 dosyasina, standart hata ise oku2 dosyasina yazilacaktir. Bu dosyalari komutu çalistirdiktan sonra incelemek suretiyle neler olup bittigini anlamak mümkün olur. $ mkdir ~/deneme (deneme isimli bir dizin yarat) $ touch ~/deneme/gecici (gecici isimli bir dosya yarat) $ cat ~/deneme 2>oku2 >oku1 Kabuk, standart çikti ve standart girdi için sirayla 2 ve 1 numaralarinin kullanimina izin verir. Yukarida yeralan son komutta, standart hata mesajlari için 2 kullanilarak hatalarin oku2 dosyasina yazilmistir. Asagida, çekirdek derlemek için sürekli olarak kullanilan program yer aliyor. Yönlendirme sayesinde ekrana gelmesi gereken mesajlar kullanilmayan 9. sanal konsola yönlendiriliyor. # make config # make dep > /dev/tty9 # make clean > /dev/tty9 # time make zimage > /dev/tty9 Son satirdaki time komutu, kendinden sonra gelen komutun ne kadar zaman içinde çalistirildigini gösterir. Çekirdek derlemede geçen zaman, makinanin gücü hakkinda bir fikir verebilir. Peki ne hata, ne de çiktiyi ekranda görmek istemiyorsam ne yapmaliyim? Bunun için standart çikti ve hatayi biraraya getirerek yönlendirilen her çiktinin kayboldugu kara delige atmak yeterlidir: $ ls /deneme > /dev/null 2>&1 Yukaridaki komutun yazilis sirasina dikkat edin.

Standart çikti ya da standart hatayi yönlendirirken, > isareti kullanirsaniz, dosya yoksa, olusturulur ve komutun çiktisi dosyaya yazilir. Dosya varsa, içerigi yok olur ve komutun çiktisi dosyanin yeni içerigi olur. Var olan bir dosyayinin eski içerigini tamamen silmek degil de komutun çiktisini dosyaya eklemek istiyorsaniz >> kullanmalisiniz. Bu durumda dosya varsa komutun çiktisi dosyanin eski içerigi korunarak sonuna eklenir, dosya yoksa olusturulur ve komutun çiktisi dosyaya yazilir. Örnegin: $ echo deneme1 >>deneme.txt $ cat deneme.txt deneme1 $ echo deneme2 >>deneme.txt $ cat deneme.txt deneme1 deneme2 $ Örnekte görüldügü gibi ilk komut deneme.txt dosyasini olusturdu. Ikincisi ise olusan dosyanin içerigini koruyarak ikinci komutun çiktisini bu dosyanin sonuna ekliyor. Standart hata ve çiktiya ek olarak UNIX'in destekledigi bir yönlendirme daha vardir: Standart girdi sayesinde bir dosyayi olusturan satirlar, bir komut veya programa yönlendirilebilir. Daha önce bir metin editor kullanarak hazirlamis oldugumuz raporu patrona kisa yoldan göndermek için, $ mail -s "rapor" patron < rapor.txt Dosyanin içerigi, mail komutuna girdi olmus ve rapor.txt dosyasi patron kullanicisina rapor konu basligiyla e-posta ile gönderilmistir. Bazi yaygin kabuk sembolleri Sembol Islerligi ENTER Komut satirini çalistir ; Ayni satirda farkli komutlari ayir [ ] Dosya isimlerinde olasi karakter dizilerini benzestir \ Takip eden karaktere izin verir & Geri planda bir komutu çalistirir! history komutunun sembol sekli olup verilmis komutlari listeler * Dosya isimlerinde herhangi karakter setini benzestir? Dosya isimlerinde herhangi bir karakteri benzestir > Bir dosya veya aygita standart çiktiyi yönlendir, bu esnada eger dosya mevcut degilse yarat, eger mevcut ise üzerine yaz >! Eger dosya halen mevcut ise üzerine yazma islemine zorlar bunu noclobber seçeneginin üzerine yazar < Bir dosya veya aygittan bir programa standart giris islemini yönlendir >> Bir dosya veya aygita standart çiktiyi yönlendir, çiktiyi dosyanin

sonuna ilave et komut 2> dosya_ismi komut 2>> dosya_ismi komut 2>&1 komut >& dosya_ismi Standart hatayi (Bourne kabugunda) bir dosyaya veya aygita yönlendir Standart hatayi (Bourne kabugunda) bir dosya veya aygita yönlendir ve sonuna ekle Standart hatayi (Bourne kabugunda) standart çiktiya yönlendir Standart hatayi (C kabugunda) bir dosyaya veya aygita yönlendir Standart Çikti ve Standart Hatanin Yönlendirmesi Bash, hem standart çikti (dosya tanitici 1) hem de standart hatayi (dosya tanitici 2), sözcük'ün yorumlanmasi ile elde edilen isme sahip dosyaya yönlendirebilir. Standart çikti ve standart hatanin yönlendirilmesine konu iki sözdizimi vardir: ve &>sözcük >&sözcük Bu iki biçemden birincisinin kullanilmasi önerilir. Her ikisi de asagidakine esdegerdir: >sözcük 2>&1 Çikis Durumu Kabugun amaçlarina uygun olarak, sifir çikis durumu ile çikan bir komut basarilidir. Sifirdan farkli bir çikis durumu ise basarisizlik göstergesidir. Böylece sayilardan olusan hem basari durumunu hem de basarisizlik nedenlerinin ifade edilebildigi bir yapi saglanir. Bir komut, numarasi N olan bir ölümcül sinyal ile sonlandirilirsa, Bash, çikis durumu olarak 128+N degerini kullanir. Bir komut bulunamamissa, bir çocuk süreç olusturulur ve bu süreç 127 çikis durumu ile döner. Bir komut bulunmus ancak çalistirilabilir degilse, 126 dönüs durumu döner. Yönlendirme ya da yorumlama sirasinda bir hatadan dolayi komutun çalistirilmasi basarisiz olursa, sifirdan büyük bir çikis durumu döner. Bash yerlesiklerinin de basari durumunda sifir ve basarisizlik durumunda sifirdan farkli bir çikis durumu ile dönerek, çikis durumlarnin kosul ve liste yapilarinda kullanilabilmesi saglanmistir. Tüm yerlesikler yanlis kullanim halinde 2 çikis durumu ile döner. 6.1.2 Boru (pipe) Islemleri Bazi durumlarda, bir komutun çiktisi diger bir komuta yönlendirilebilir. Baska bir deyisle, komutun standart çiktisini bir dosyaya degil, bu çiktiyi isleyecek baska bir komuta yönlendirmek istiyorsunuz. Bu amaçla UNIX altinda (yine DOS'ta oldugu gibi) boru ( ) karakteri kullanilir. Bu karakter, kendinden önce gelen komut veya komut serisinin çiktisini, kendinden sonra gelen komuta gönderir. Örnegin bir dizinde yeralan tüm dosyalari yaziciya aktarmak için, $ komut komut

$ ls -al lpr komutlari kullanilabilir. Artik ls -al komutunun ekrana vermesi gereken tüm bilgiler, lpr komutu araciligiyla yaziciya gönderilmistir. Ilk komutun standart çiktisi, ikinci komuta standart girdi olarak atanir. Diger bir örnekte, README dosyasinda kaç satir oldugu bulunuyor. Bir dosyadaki veya komut çiktisindaki satir, karakter ve kelime sayilarini bulmak için wc komutunu kullanabilirsiniz. Asagidaki komut, dosya.txt dosyasinin içinde kaç satir oldugunu ekrana yazar : $ wc l dosya.txt 40 wc komutunun parametreleri sunlardir: -l : satir sayisini bulur -w : kelime sayisini bulur -c : karakter sayisini bulur Yönlendirme ve boru islemleri bazen insanin kafasini karistirabilir. Yönlendirme, bir programdan bir dosyaya yapilabilir, fakat bir komut dan baska bir komut a yönlendirme yapamazsiniz. Benzer sekilde, iki dosyanin arasinda boru islemi uygulamak mümkün olmaz. Asagida /etc dizini içinde yeralan alt dizinlerin tamami listelenmistir. $ ls F /etc grep / acct/ cron.d/ default/ Iki komuttan daha fazla komutu içeren bir boru islemi olusturulabilir: $ head -10 dante tail -3 lp request id is printera-177 (standart input) Simdi de biraz karisik bir örnek: # ps -aux grep inetd grep -v grep awk '{print $2}' xargs kill 1 Yukaridaki örnek zorlama bir örnek degil, bir Linux sistem yöneticisinin her an kullanmasi gerekebilecek türden. Bu örnegi burada ayrintili olarak açiklamayacagiz, sadece pipe kullanarak ne kadar fazla sayida komutun birbirine baglanabildigini göstemek amaciyla verilmistir. Bu ve benzeri komutlarin ayrintili açiklamalarin kabuk programlamayla ilgili bölümde bulabilirsiniz. Standart çiktiyi mevcut bir dosyaya yönlendirmek önceki dosya içeriginin kaybina yol açacak olan üzerine yazma islemini gerçeklestirir. Mevcut veri üzerine yeni veri yazma islemi clobbering olarak olarak adlandirilir. Bunun gerçeklesmesini engellemek için kabuk noclobber opsiyonunu sunar. Asagida kabuk içinde noclobber opsiyonu set komutu yardimi ile aktive edilmistir. $ set o noclobber

$ set o grep noclobber noclobber on $ ps ef > file_new $ cat /etc/passwd > file_new ksh: file_new: file already exists $ Geçici olarak noclobber opsiyonunu de-aktivate etmek istersek > kombinasyonunu kullanmamiz gerekmektedir. $ ls l > file_new 6.2 Çok Görevlilik UNIX'in en büyük silahlarindan biri süreçlerdir. Her süreç sistemde bagimsiz çalisan, birbirini etkilemeyen ve herbiri kendi kaynagini kullanan programdir. Süreçler arka planda veya kabugun kontrolünde çalisabilir. Çekirdek, her sürecin kullandigi sistem kaynagindan haberdar olur ve bu kaynaklarin süreçler arasinda esit bir sekilde paylasilmasindan sorumludur. Bir süreç, aksi belirtilmedikçe çalistigi süre içinde klavyeden bilgi alir ve ekrana bilgi verir. Kullanicilarin haberi bile olmadan çalisan süreçler, Linux makinasindaki G/Ç islemlerini gerçeklestirebilmek için sürekli faaliyet içinde bulunurlar. Onlarca süreçten bazilari kullanicilarin sisteme girmesini saglarken (getty) bazilari da WWW ve FTP gibi Internet tabanli istekleri yerine getirir (httpd, ftpd). UNIX/Linux altinda çalisan her program en az bir süreçten olusur. Isletim sistemleri teorisine göre her süreç diger süreçlerden bagimsizdir. Bilgisayar kaynaklarinin paylasimi istenmedigi sürece her süreç bellege alinir ve CPU bu sürece tahsis edilir. Bir sürece ayrilan bellek alanini baska bir süreç kullanmak istedigi zaman buna tesebbüs eden süreç öldürülür. Burada öldürme terimi hiçbir sürece hiçbir kaynagin tahsis edilmeyerek sürecin pasif hale birakilmasi halidir. UNIX/Linux tipi isletim sistemlerinin kararli biçimde çalismasi bu yaklasimin neticesidir. Yani bir kullaniciya ait bir uygulama ne diger kullanici programlarina, ne de isletim sistemine etki eder. Buradaki anlami ile süreç, icra edilen bir programdir. Bu program icra esnasinda, isletim sistemi tarafindan durdurulabilir ve bekletildikten sonra tekrar çalistirilabilir. Isletim sisteminde her süreçle ilgili bilgileri saklayan bir süreç tablosu vardir. Bu süreç tablosu, -Her süreç ile iliskili bilgileri kaydeder -Program kodu ile iliskili veriyi kaydeder -Program sayaci(program counter), yigit göstergesi (stack pointer) ve diger yazmalar ile iliskili diger bilgileri saklar.

Her sürecin ebeveyn süreci (parent process) ve çocuk süreci (child process) olabilir. Ebeveyn süreç, söz konusu sürece referans verir. Çocuk süreç ise söz konusu süreç tarafindan referans verilen süreçtir. Her süreci digerlerinden ayirtan tek bir (unique) kod vardir; buna süreç belirleyici (process identifier PID) adi verilir. Örnegin kullandiginiz WWW tarayiciniz bir süreçtir. 6.3 Arka Planda Çalistirma Bir komutu arka planda çalistirmak için, komutun sonuna & karakteri getirilir. Komut girildikten sonra tekrar kabuk istemcisine düsecek ve kaldiginiz yerden devam edebileceksiniz. Program, arka planda diger süreçlerle çakismadan bir süre çalisir ve isi bittiginde durur. $ sort buyuk_dosya > buyuk_dosya.sirali & [1] 772 Komutun arka plana atilmasindan sonra ekranda yeralan 1, sürecin sira numarasini, 772 sayisi ise süreç kimligini (Process ID) gösterir. Her program, sistem kaynaklarini biraz daha azalttigindan genel anlamda makina yavaslar. ps komutu, sistemde o esnada mevcut süreçler hakkinda, durum bilgisi, boyut, isim, sahiplik, CPU zamani, duvar saati zamani vb. bilgileri listeleyen bir komuttur. ps komutunun pek çok parametresi mevcuttur. Bunalar arasinda en önemli olanlar asagida tabloda listelenmistir: PARAMETRE ANLAMI -a Belirli bir terminal kontrolündeki listele (sadece aktif kullanicilarin süreçleri degil) -r Sadece çalismakta olan (running) süreçleri listele -x Bir terminal kontrolünde olamayan süreçleri listele -u Süreç sahiplerini listele -f Süreçler arasindaki ebeveyn çocuk iliskilerini göster -l Uzun formatli bir liste üret -w Bir sürecin komut satiri parametresini göster (kisa biçim) -ww Bir sürecin komut satiri parametresini göster (uzun biçim) ps komutu ile birlikte kullanilan en sik parametre kümesi auxww seklindedir. Böylece tüm süreçler, bunlarin sahipleri, tüm süreçlerin komut satiri parametreleri listelenir. Asagida, # ps auxww komutu sonucu elde edilen bir liste görülmektedir. Sütün Basligi Anlami

USER PID %CPU %MEM VSZ TTY STAT START TIME COMMAND Sürecin sahibi olan kullanici Süreç belirleme numarasi CPU nun toplam kullaniminin yüzde kaçinin o süreç tarafindan kullanil digi bilgisi Süreç tarafindan bellegin yüzde kaçinin kullanildigi bilgisi Sürecin kullandigi görüntü bellek miktari Süreci kontrol eden terminal. Bu sütunda bir? sembolünün olmasi, sürecin artik terminal kontrolünde olmadigini gösterir Sürecin o anki durumu Sürecin baslangiç zamani Sürecin CPU da harcadigi süre Sürecin adi ve komut satiri parametreleri Asagidaki tablo STAT parametresinin alabilecegi degerleri göstermektedir : S R D T Z Süreç uyuyor. Icra edilmeye hazir olan süreçlerin tümü uykudadir. Süreç CPU da islem görüyor. Süreç araya girilemez biçimde uykuda. Süreç ya bir hata ayiklayicida inceleniyor yada durdurulmustur. (kullanici tarafindan ctrl Z vb. sekilde) Süreç zombie durumundadir. Bunun anlami, a) ebeveyn süreç çocugu olan sürecin öldügü hakkinda bilgi sahibi degildir b) veya ebeveyn süreç kural disi öldürüldügü için init süreci çocuk süreci yok edemez. Zombie durumundaki süreçler öldürülemez ancak sistem kaynaklarindan da yararlanamaz. Bu durum genellikle kötü yazilmis bir yazilimin sonucu olusur. Bir örnek : $ ps PID TTY STAT TIME COMMAND 76 v02 S 0:00 -bash 111 v02 R 0:00 ps $ ps -aux

USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND bin 63 0.0 5.5 64 364? S 11:12 0:00 /usr/sbin/rpc.portmap mehmet 76 0.0 9.7 101 644 v02 S 11:12 0:00 -bash mehmet 112 0.0 5.0 59 332 v02 R 11:16 0:00 ps -aux root 1 0.0 5.0 56 332? S 11:12 0:00 init [5] root 6 0.0 4.2 35 284? S 11:12 0:00 bdflush (daemon) root 7 0.0 4.2 35 284? S 11:12 0:00 update (bdflush) root 48 0.0 5.1 45 340? S 11:12 0:00 /usr/sbin/crond -l10 root 59 0.0 5.5 53 364? S 11:12 0:00 /usr/sbin/syslogd root 61 0.0 5.0 44 336? S 11:12 0:00 /usr/sbin/klogd root 65 0.0 5.5 62 364? S 11:12 0:00 /usr/sbin/inetd root 67 0.0 5.8 79 388? S 11:12 0:00 /usr/sbin/rpc.mountd root 69 0.0 6.0 88 400? S 11:12 0:00 /usr/sbin/rpc.nfsd root 75 0.1 9.9 115 660 v01 S 11:12 0:00 -bash root 77 0.0 4.6 52 304 v03 S 11:12 0:00 /sbin/agetty 38400 tty3 root 78 0.0 4.6 52 304 v04 S 11:12 0:00 /sbin/agetty 38400 tty4 root 79 0.0 4.6 52 304 v05 S 11:12 0:00 /sbin/agetty 38400 tty5 root 80 0.0 4.6 52 304 v06 S 11:12 0:00 /sbin/agetty 38400 tty6 root 81 0.0 5.5 42 368? S 11:12 0:00 gpm -t ms ps komutuna bilgisayar üzerinde çalistiginiz her an ihtiyaç duymaniz mümkündür, bu yüzden çesitli parametrelerle kullanilmasi iyi anlasilmalidir.