Shell nedir?

Başlatan kurch, 09 Haziran 2008 - 00:02:54

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

heartsmagic

Hmm, şimdi "betik" kelimesini bir daha görünce hafif hafif şimşekler çakmaya başladı kafamda. Eğer ortada betik varsa bunu çalıştıracak bir kabuğun da olması lazım. Hal böyle olunca hem @erginemr'ın güzel açıklamaları hem de @MURATSPLAT'ın söyledikleri doğru olmuş oluyor. Fakat başlıkta ortalarda konuşulan şeyi düşününce de init ile kabuk yan yana çalışıyor izlenimi görülmekte. Hele ki ilk çalıştırılan işlemin init olduğu düşünülürse.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

DeFacto

@erginemr'e güzel paylaşımı için teşekkür ediyorum. Bu paylaşımla kafamdaki bazı soru işaretlerine anlam verebilmeniz ile birlikte farklı soru işaretleri uyandırabildiğiniz için sizi ayrıca tebrik ediyorum :) Aslında yeni soru işaretlerinin uyanması, bu konuya ilginin, şefkatin :) ve merakın arttığını gösterir. Konuyu uzatmak istiyorum, yönetici arkadaşlar artık taşırlar mı silerler mi bilemem ama :) Şaka bir yana bu sorularım 2 tane-ciktir.

1)Bash ve zsh kabuk setlerinin komutları farklı mıdır ? Bir de şu yanlış komut yazdığımızdaki en bashtaki :) bash yazısının yazmasının sebebi default olarak başlatılan bash midir ? Ve bu zsh ile bash aynı sistemde bulunabilir mi ?

2)Bu pstree komutu çıktısındaki başlatılan modülleri değiştirebilir miyiz ? Yani kısacası sistemi kurcalayıp bozmak istiyorum, bu sebeple Linux bu pstree çıktısı modülleri başlatma seçeneklerini değiştirme imkanı sunuyor mu bana :)

ufuk_k

Farklı kabuklar arasında geçiş yapılabilir.
Sistemde başlayan süreçlerin hangi kullanıcı kipinde, ne zaman çalışacağını değiştirmek için:
sysv-rc-conf

DeFacto

İlgin için sağ ol. Linux aleminde ufak da olsa bir şey daha kattınız kafama :)

heartsmagic

pstree'ye de müdahale olmaz zira programların kendi çalışma mekanizmasıdır o.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

erginemr

#30
Sağ ol DeSPeRaDo,

İkinci sorunuzu heartsmagic & ufuk_k güzelce yanıtlamış.

Kabuk ile ilgili ilk sorunuza gelince:
http://www.enderunix.org/docs/linuxileprogramlama.html
adresinden bir alıntı yaparsak:
Alıntı YapShell(Bash,sh, zsh,) Programming- Kabuk Programlama

Linux altında hızlı ve pratik programlama yapmanın en kısa yolu shell(kabuk) programlamadır diyebiliriz. İşletim sisteminin doğal komutlarını çalıştırma ve ek herhangi bir yorumlayıcı istememesi shell script(betik) dilini diğerlerinden ayıran en önemli faktördür. Yazdığınız bir kodu tüm Linux/UNIX sistemlerde değişiklik yapmadan  kullanabilirsiniz.  Linux altında shell(kabuk) programlama birçok farklı shell  ile yapılabilir.

Linux ve UNIX sistemlerde yaygın kullanılan bazı kabuk(shell)lar;
sh (Shell , Bourne Shell): Ilk UNIX kabuğudur ve çoğu UNIX dağıtımı ile birlikte öntanımlı kabuk olarak dağıtılır.
ksh (Korn Shell): sh uyumlu, birçok ek programlama özelliği  de içeren bir kabuk.
bash(Bourne Again Shell): Kullanım kolaylığı bakımından en çok rağbet gören bash,  sh ve ksh uyumluluğunu korurken, özellikle etkileşimli kullanıma yönelik (komut tamamlama, gibi) birçok yenilik de içerir.
csh (C shell): Berkeley Üniversitesi'nde geliştirilen csh'in C diline benzer bir programlama yapısı vardır. Özellikle programcılar tarafından tercih edilir.
tcsh: csh'ın biraz geliştirilmiş hali diyebiliriz.

Standart bir kullanıcı için BASH yeterli ancak aralarında en yeteneklisinin zsh olduğunu duymuştum:
http://en.wikipedia.org/wiki/Zsh

Ubuntu'da diğer (temelde aynı ancak betik programlamada farklı komutlara sahip) kabuk setlerini varsayılan olarak yüklememişler ancak merak ederseniz Synaptic'ten yükleyip deneyebilirsiniz. Tek yapmanız gereken terminalde kabuğun ismini yazıp (örn. zsh) Enter'a basmak. Çıkmak için "exit" ya da "Ctrl+D".

Kullanıcıların sisteme giriş yaptığında kullanacakları kabuk türü, /etc/passwd dosyasındaki temel kulanıcı bilgileri içinde saklanıyor. Örneğin sizin için varsayılan kabuk:
cat /etc/passwd | grep $USER
komutunun çıktısının son satırından da görebileceğiniz gibi "/bin/bash" olacaktır.

BASH betik dilini öğrenmeyi düşünürseniz, hızlı bir temel kurs için:
http://www.arachnoid.com/linux/shell_programming.html

DeFacto

Shell konusu üzerinde verdiğiniz bilgilerden dolayı teşekkür ederim. Bu mesajınızın shell ile ilgili öğrenilmesi gereken önbilgi olarak burada kalacak olması, bir çok shell meraklısı arkadaşımızın işine yarayacaktır eminim.

MURATSPLAT

Alıntı yapılan: heartsmagic - 30 Haziran 2008 - 22:01:53
Hmm, şimdi "betik" kelimesini bir daha görünce hafif hafif şimşekler çakmaya başladı kafamda. Eğer ortada betik varsa bunu çalıştıracak bir kabuğun da olması lazım. Hal böyle olunca hem @erginemr'ın güzel açıklamaları hem de @MURATSPLAT'ın söyledikleri doğru olmuş oluyor. Fakat başlıkta ortalarda konuşulan şeyi düşününce de init ile kabuk yan yana çalışıyor izlenimi görülmekte. Hele ki ilk çalıştırılan işlemin init olduğu düşünülürse.

  Demek  hiç bir zaman kesin konuşmamak lazım  ;D

 
Donanım:
GA-MA790XT-UD4P Anakart
AMD Phenom(tm) II X4 945 Processor
2048*2 DDR3(1333MHZ) + 2048*2 DDR3(1600MHZ) = 8 GB  Asus Nvidia GeForce GT-430 1GB DDR3 128bit Samsung HD502HJ 500 GB + Samsung HD322HJ 320 GB + Western Box USB 640 GB =1.4 TB ATI Technologies Inc SBx00 Azalia (Intel HDA) SkyStar HD 2 Digital Uydu Kartı Logitech MK250

heartsmagic

Elbette böyle. Hayat kesin bir kavram olsaydı çok da çekilmezdi sanırım :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

DeFacto

Şimdi Script = Betik mi ? Yani sistem açılışlarında ve yönetiminde bu betikler rol alıyorsa, (winzort gibi kapalı bir sistem dışında) bu betikleri işleyecek seviyeye gelmek demek de bir dağıtımı kendimize göre özelleştirebiliyor olmamız demek mi ? Bir de sanırım bu Hardy'nin kaynak kodları da verilmişti değil mi ?

ufuk_k

Yok bu sefer Hardy'nin kaynak kodları verilmedi :D
Sistem betikleriyle kaynak kodların pek ilgisi yok. Sistem betikleriyle her zaman oynanabilir, linux bu tip ayarlara özellikle izin veren bir sistem.

hasanyılmaz


ufuk_k

Alıntı yapılan: DeSPeRaDo - 07 Temmuz 2008 - 15:38:47
Şimdi Script = Betik mi ? Yani sistem açılışlarında ve yönetiminde bu betikler rol alıyorsa, (winzort gibi kapalı bir sistem dışında) bu betikleri işleyecek seviyeye gelmek demek de bir dağıtımı kendimize göre özelleştirebiliyor olmamız demek mi ? Bir de sanırım bu Hardy'nin kaynak kodları da verilmişti değil mi ?

Başlangıç betikleri hikayesine gireceksek, buradan devam edelim:
http://www.ubuntu-tr.net/index.php?topic=2315.0

onuragtas

Alıntı yapılan: erginemr - 30 Haziran 2008 - 17:31:32
Alıntı yapılan: DeSPeRaDo - 30 Haziran 2008 - 16:10:17
init değerlerini değiştirdiğimizde X'in başlangıcını da etkiliyor ve konsola düşüyorsak, shell aracı olmuyor mu X ile kernel arasında ? Kabukta verdiğimiz bir startx ile kernel ile X arasındaki ilgiyi kurmuyor mu ? Bunlar düz mantık sonucu üretilmiş fikirlerdir :) Kaale alınmamasını tavsiye eder fakat bu kararsızlığımın da aydınlatılmasını reca ederim :)

Efendim, şimdi şöyle izah edeyim: X karşıdan geliyor, shell ise sol şeritten seyrederken, aniden karşısına çıkan startx'i ezmemek için sola kırınca init bariyerlerine çarparak X ile birbirine giriyor. Son anda shell arkadan dolanıp X'i kündeye getiriyor ve puanı alıyor. Bunu gören kernel da "hani bana, hani bana" diyor. ;)

Şaka bir yana, olayı kendince özetleyen aşağıdaki yazının sahibine göre:
http://www.physics.nmt.edu/~rsonnenf/research/LinuxCourse/bigpicture.rs

Linux sistem açılış sırası şu şekilde gerçekleşiyor:

1. Sisteme elektrik geliyor ve BIOS yazılımı donanımları başlatıyor.

2. BIOS, kontrolü boot sektörde yüklü olan GRUB/LILO yazılımına bırakıyor. GRUB, ilgili sabit disk bölümünden kendine verilen ayar dosyasındaki yönergeleri izleyerek Linux çekirdeğini ve initrd (init ram diskini) başlatıyor.

3. Kernel kullanıcı seviyesindeki ilk ve temel işlem olan "init"i başlatıyor. Bundan sonra, ilgili dosyalardan (eskiden ve hala bazı sistemlerde /etc/inittab, şimdiyse /etc/init.d/*) hangi kullanıcı seviyesinde (tek ya da çok kullanıcılı, metin ya da grafik ekran) başlayacağına karar vererek, ilgili seviyedeki betikleri çalıştırıyor. Tabii ki bu betikleri çalıştırmak için de shell'e (kabuğa) ihtiyacı var.

4. Bu aşamadan sonra kullanıcı login ekranı geliyor ve ilgili kabuk (bash, zsh, vb.) setinin komutları kullanıcının emrine sunuluyor.

Şahsen bu resme baktığımda, ben init ile shell arasında bir ayrım gözetmiyorum. init bütün proseslerin babası ama kendisi de shell (kabuk) komutlarını kullanıyor. Ayrıyeten, kullanıcıların kullanımına, aynı nesne-tabanlı programlarda sınıfların bir kopyası, görüntüsü nasıl oluşturuluyorsa, shell'in bir görüntüsünü (instance) sunuyor.

Proses hiyerarşinini göz önüne seren güzel bir konsol komutu var: pstree. Gnome yüklüyken, ayrıca 2 sanal terminalden giriş (login) yaptıktan sonra bu komutu verdiğim zaman, proses ağaç şeması şu şekilde oluşuyor:


init-+-NetworkManager---{NetworkManager}
     |-NetworkManagerD
     |-acpid
     |-atd
     |-avahi-daemon---avahi-daemon
     |-bonobo-activati---{bonobo-activati}
     |-console-kit-dae---61*[{console-kit-dae}]
     |-cron
     |-cupsd
     |-2*[dbus-daemon]
     |-dd
     |-dhcdbd---dhclient
     |-gconfd-2
     |-gdm---gdm-+-Xorg
     |           `-x-session-manag-+-at-spi-registry
     |                             |-gnome-panel
     |                             |-gnome-settings--+-pulseaudio-+-gconf-helper
     |                             |                 |            `-2*[{pulseaudio}]
     |                             |                 `-{gnome-settings-}
     |                             |-metacity
     |                             |-nautilus
     |                             |-seahorse-agent
     |                             |-ssh-agent
     |                             `-{x-session-manag}
     |-4*[getty]
     |-gnome-keyring-d
     |-gnome-power-man
     |-gnome-screensav
     |-gnome-terminal-+-bash---pstree
     |                |-bash
     |                |-gnome-pty-helpe
     |                `-{gnome-terminal}
     |-gnome-volume-ma
     |-gvfs-fuse-daemo---3*[{gvfs-fuse-daemo}]
     |-gvfsd
     |-gvfsd-burn
     |-gvfsd-trash
     |-hald---hald-runner-+-hald-addon-acpi
     |                    |-hald-addon-inpu
     |                    `-2*[hald-addon-stor]
     |-hcid---2*[bluetoothd-serv]
     |-klogd
     |-2*[login---bash]
     |-mixer_applet2---{mixer_applet2}
     |-syslogd
     |-system-tools-ba
     |-trashapplet---{trashapplet}
     |-udevd
     `-vboxadd-timesyn


ordaki seahorse-agent nedir ? isminden tehlikeli bişi olduğu aklıma geliyor. ama siz daha iyi bilirsiniz o nedir ?
System.out.println("Hadi gülüm yandan yandan.");

erginemr

man seahorse-agent
yazdığım zaman aşağıdaki açıklamayı alıyorum:
Alıntı YapNAME
      seahorse-agent - seahorse pass phrase caching agent

SYNOPSIS
      seahorse-agent [ OPTION... ]

DESCRIPTION
      Seahorse is a GNOME application for managing encryption keys.

      This  is  the agent program for seahorse which keeps a temporary secure
      storage of your pass phrases. It also  works  with  the  SSH  agent  to
      prompt you for SSH passphrases.
...

Buna göre Seahorse, Gnome program şifrelerini saklayan ve yöneten bir anahtarlık hizmetiymiş.

Anahtarlık hizmet programına Uygulamalar > Donatılar altından erişebiliyorsunuz.

ironic

Zamanında sistem izleyicisinde dikkatimi çekmişti. İçerdiği "agent" sözcüğünden dolayı telaşa kapılıp; araştırınca da derin bir oh ..! çektiğim bileşen.  :)

onuragtas

Alıntı yapılan: erginemr - 01 Eylül 2009 - 04:48:45
man seahorse-agent
yazdığım zaman aşağıdaki açıklamayı alıyorum:
Alıntı YapNAME
      seahorse-agent - seahorse pass phrase caching agent

SYNOPSIS
      seahorse-agent [ OPTION... ]

DESCRIPTION
      Seahorse is a GNOME application for managing encryption keys.

      This  is  the agent program for seahorse which keeps a temporary secure
      storage of your pass phrases. It also  works  with  the  SSH  agent  to
      prompt you for SSH passphrases.
...

Buna göre Seahorse, Gnome program şifrelerini saklayan ve yöneten bir anahtarlık hizmetiymiş.

Anahtarlık hizmet programına Uygulamalar > Donatılar altından erişebiliyorsunuz.

çok teşekkürler artık hiç bi kuşku yok :D
System.out.println("Hadi gülüm yandan yandan.");