2. Linux kabuk erişimi dizin yapısı ve dosya yapıları
Labaratuar içersinde kabuk üzerinden erişim, dosya yapıları, dizinlere erişim, Temel komutlara giriş ve filtreleme komutlarından bahsedeceğiz. Ayrıca küçük bir test ile konular ile ilgili bilginizi sınayabileceksiniz.
Bölüm içersinde aşağıdaki konular işlenecektir:
- Labaratuar içersinde kabuk üzerinden erişim, dosya yapıları, dizinlere erişim, Temel komutlara giriş ve filtreleme komutlarından bahsedeceğiz. Ayrıca küçük bir test ile konular ile ilgili bilginizi sınayabileceksiniz.
- Labaratuar Kullanım İpuçları
- 1. Shell arayüzüne bağlanma ve Linux dizin yapısı
- 2. Kabuk(shell) Giriş ve Çıkışlar ile yönlendirmeler (Redirections)
- ; Birden fazla komutu tek bir komutta çalıştırma
- && Birden fazla komutu yalnızca bir önceki komut başarılıysa tek bir komutta çalıştırma
|
pipe - boru veya akışlar- stdout (komut değildir) işlemin komut satırından dışarı bilgi vermek için kullandırdığı yönlendirme
- Hem stdout hem de stderr yeniden yönlendiriliyor
- stdout ve stderr‘i Aynı Dosyaya yönlendirme
- tee stdin üzerinden aldıklarını stdout ve dosyalara yönlendirir
- 3. Ortam komutları
- Sonraki Bölüm - (info/man)Bilgi ve El kitabı
- Linux101 - Başlangıç
Labaratuar Kullanım İpuçları
Eğitim içersinde, komut satırı bilgileri aşağıdaki üç farklı şekilde belirtilmiştir.
-
buradaki
gibi görünen komut betimleri şeklinde gösterilmler daha çok örnekler ve yazılması gereken komutları tanımlamak için kullanılır. - Aşağıdaki gibi kutu içersinde gördüğünüz kodlar üzerine tıkladığınızda, kopyala yapıştır yapmanıza gerek kalmadan terminal içersinde çalıştırılacaktır:
uname -a
- Aşağıda gördüğünüz gibi bir pencere içersinde yazılmış olan kod betimleri sizin klavyeden yazmanız gereken kod betimleridir.
Genellikle benzersiz bir ID veya başka bir değişken girmeniz gerekiyordur. Buradaki benzersiz veri eğitim sırasında kullandığınız ortam içersinden bulunabilir.
<> içersinde bulunan maddeler sizin değiştirmeniz gereken verinin yerini göstermektedir.
hostnamectl set <sunucu adı>
1. Shell arayüzüne bağlanma ve Linux dizin yapısı
Linux’ta ve tüm UNIX benzeri işletim sistemlerinde, genellikle “Her şey bir dosyadır” denir veya en azından bu şekilde değerlendirilir. Bu, ister normal veri dosyaları ve belgelerle, ister ses kartları ve yazıcılar gibi aygıtlarla uğraşıyor olun, onlarla aynı tür Giriş / Çıkış (Input/Output) işlemleriyle etkileşimde bulunduğunuz anlamına gelir.
Bu yaklaşım işleri basitleştirir, bir “dosya” açarsınız ve dosyayı okumak ve üzerine yazmak gibi normal işlemleri gerçekleştirirsiniz (bu, ilerideki bir bölümde öğreneceğiniz metin editörlerinin bu kadar önemli olmasının bir nedenidir).
Linux ilk Bağlantı ve Kabuk (Shell) üzerinde kullanım
Öncelikle berlirteyim, çoktan kabuk nasıl birşeye benziyor gördünüz bile. Ekranınızın sağ tarafında bulunan siyah ekran bir shell ekranı.
Linux, çoğunlukla Unix üzerinden gelen altyapıları barındırır, Unix metin tabanlı bir işletim sistemi (OS) olarak başladı. Dolaysı ile Linux bu durumu devam ettiriyor ve içinde çokça metin tabanlı yazılım barındırıyor.
Özellikle Linux’u yönetirken, komut satırı araçlarının en azından temellerini anlamalısınız. Bu nedenle, Linux-101 eğitimi içersinde temel olarak kabuk kullanımını anlatıyoruz.
Linux kabuklarına (metin modu komutlarını kabul eden ve yorumlayan programlar) ve bir kabuktan kullanabileceğiniz birçok temel komut ve prosedüre girişle başlar.
Komut Satırı Temellerini Anlamak
Linux ile henüz başka bir şey yapmadan önce, bir Linux kabuğunu nasıl kullanacağınızı anlamalısınız. Birkaç shell (kabuk) mevcuttur, ancak çoğu benzer yetenekler sağlar. Birkaç temel konuyu anlarsanız ilerde öğreneceğiniz diğer komutlar ile kolaylıkla ilişkilendirebilirsiniz.
Ayrıca, birçok program için yararlı olabilecek veriler için yer tutucu olan kabuk ortamı değişkenlerini(Environment Variable) de anlamalısınız. Son olarak, komut satırı temelleri konusunda, kullanmaya çalıştığınız komutlarla ilgili nasıl yardım alacağınızı bilmelisiniz.
Linux Kabuk Seçeneklerinizi Keşfedin
Linux, kabuklar için bir dizi seçenek sunar. Eğitim içersinde sadece Bash
üzerinde durduk. Merak edenler için, “Linux different shell” ile google üzerinde aramaları yeterli olacaktır.
Bourne Again Shell (bash), Unix için daha önceki Bourne kabuğunu temel alır, ancak onu birkaç şekilde genişletir. Linux’ta bash, kullanıcı hesapları için en yaygın varsayılan kabuktur.
diğer yaygın kabuklar “Zsh”, “Tcsh”, “Fish”, “Ksh” şeklindedir. Özellikle yazılım geliştiriciler için Zsh
incelemelerini tavsiye ederim.
Kabuk Kullanma
Linux kabuk kullanımı, daha önce metin modlu bir işletim sistemi kullanan herkes için oldukça basittir. Bir komut ve parametrelerini yazarsınız ve bilgisayar komutu çalıştırır. Çoğunlukla, Linux komutları haricidir(external), yani kabuktan ayrı programlardır. Yine de birkaç komut kabuğun içindedir ve ayrımın bilinmesi önemli olabilir.
a. Kabuk Başlatma
Bir metin modu giriş ekranı kullanarak Linux’ta oturum açarsanız, büyük olasılıkla doğrudan varsayılan shell ile bilgisayar açılır. Tekrar söyleyelim, kabuk(shell), komut istemi sunan ve sonraki Komutları kabul eden yerdir.
Linux’ta bir grafik kullanıcı arabirimi (GUI) oturum açma ekranı kullanarak oturum açarsanız, manuel olarak bir kabuk başlatmanız gerekir.
Bazı GUI’ler, terminal, xterm, Konsole veya benzeri bir program adı verilen bir programı başlatmak için bir menü seçeneği sağlar. Bu programlar, Linux içinde metin modu programları çalıştırmanızı sağlar ve varsayılan olarak kabuğunuzu çalıştırır.
Böyle bir menü seçeneği bulamazsanız, rastgele bir komutu çalıştırmanıza olanak tanıyan bir menü arayın. Bunu seçin ve komut adı olarak xterm veya konsole yazın; bu, bir kabuk çalıştıracak xterm tipi bir program başlatacaktır.
b. İç ve Dış Komutları Kullanma
İç komutlar, tahmin edebileceğiniz gibi, kabuğun içine yerleştirilmiştir. Çoğu kabuk, benzer bir dahili komut seti sunar, ancak kabuktan kabuğa farklılıklar vardır.
Kullanacağınız dahili komutlar, genellikle sıklıkla kullandığınız görevler içindir.
Bir komutun iç veya dış olduğunu anlamak için type komut_adı
, şeklinde sorgulayabilirsiniz.
type echo
Bütün iç (built-in) komutların listesine help
komutu ile ulaşabilirsiniz.
help
c. Programlar Nasıl Çalışır
Kabuk tarafından dahili komutlarından biri olarak tanınmayan bir komutu yazdığınızda, kabuk, onu yürütmek için bu isimde bir program bulmak için yolunu(path) kontrol eder. Yol(path), komutların bulunabileceği dizinlerin bir listesidir. PATH
ortam değişkeni ile tanımlanır. Tipik bir kullanıcı hesabının yolunda yaklaşık yarım düzine veya bir düzine dizin vardır.
Yolu, bir kabuk yapılandırma dosyasında(~/.bashrc ve ~/.profile) PATH ortam değişkenini değiştirerek ayarlayabilirsiniz. Komut satırında tam bir yol sağlayarak yolda olmayan programları çalıştırabilirsiniz. Örneğin, ./calistirbeni yazıldığında mevcut dizinde calistirbeni programı çalıştırılır ve /home/senol/calistirbeni
yazıldığında bu program /home/senol
dizininde çalıştırılır.
Burada neden ./
kullandığımızı merak ediyor olabilirsiniz, linux üzerinde path içersinde tanımlı olmayan dosyalar, bulunduğunuz dizinde dahi olsa onlara execution(çalışma) verebilmeniz için bunu doğru tanıtmalısınız. Örn. .
-> bulunduğum dizinde /calistirbeni
isimli dosyayı çalıştır gibi.
d. Başlarken kabuk hakkında 1-2 kullanım kolaylığı
Bash ve tcsh gibi en popüler Linux kabukları, support command ve dosya adı tamamlama(autocomplete) özelliklerine sahiptirler. Ekranda komut satırı kullanan birisini görüyorsanız, bilin ki tüm komutları ekrana yazmıyordur, yazarken belli bir süre sonra alışkanlık haline gelen bu özelliklere beraber bakalım.
Çoğu kullanıcı shell üzerinden komut yazmayı sıkıcı ve hataya açık bulmaktadır. Bu, özellikle yavaş veya baştan savma yazanlar için geçerlidir. Bu nedenle, Linux kabukları, işlemleri hızlandırmaya yardımcı olabilecek çeşitli araçlar içerir.
Bunlardan ilki komut tamamlamadır: Bir komutun bir bölümünü veya (bir komuta seçenek olarak) bir dosya adı yazın ve ardından Sekme(Tab) tuşuna basın. Kabuk, komutun geri kalanını veya dosya adını doldurmaya çalışır.
Şu ana kadar yazdığınız karakterlerle yalnızca bir komut veya dosya adı eşleşirse, kabuk onu doldurur ve ardından bir boşluk ekler. Yazdığınız karakterler bir komutu veya dosya adını benzersiz şekilde tanımlamıyorsa, kabuk yazabileceği son yere kadarki kısmı yazar ve sonra durur.
Kabuğa ve yapılandırmasına bağlı olarak bip sesi gelebilir. Sekme tuşuna tekrar basarsanız, sistem olası tamamlamaları görüntüleyerek yanıt verir.
Daha sonra başka bir veya iki karakter yazabilir ve komutu veya dosya adını tamamlamadıysanız, işlemin tekrarlanması için Sekme tuşuna tekrar basabilirsiniz. En temel Linux komutlarının oldukça kısa adları vardır ls
, cd
, set
vb.
Bazen birkaç komutu bir arada yazmanız ve dosya isimleri de eklemeniz gerekir, dosya adları oldukça uzun olabilir. Bu nedenle, komut tamamlama, yazarken çok zaman kazandırabilir. Ayrıca yazım hatalarını önlemenize de yardımcı olur. Bir başka kullanışlı kabuk kısayolu da geçmiş(history)’dir. History, yazdığınız her komutun kaydını tutar.
Yakın zamanda uzun bir komut yazdıysanız ve tekrar kullanmak veya küçük bir varyantını kullanmak istiyorsanız, komutu geçmişten çekebilirsiniz. Bunu yapmanın en basit yolu klavyenizdeki Yukarı ok tuşuna basmaktır; bu önceki komutu getirir. Yukarı ok tuşuna art arda basmak, istediğiniz komutu bulabilmeniz için birden çok komut arasında hareket eder.
Aşarsanız, geçmişte aşağı gitmek için Aşağı ok tuşuna basın. Yukarı ve Aşağı ok tuşları için sırasıyla Ctrl+P
ve Ctrl+N
tuş kombinasyonları PgUp ve PgDown gibi daha uzak aralıklarda yukarı aşağı History getirirler.
Komut geçmişini kullanmanın bir başka yolu, içinde arama yapmaktır. Geriye doğru (ters) aramaya başlamak için Ctrl+R
tuşlarına basın, eğitim içersinde örnekler ile history kullanımını gösteriyoruz.
Metin(Text) çıktıların yönlendirilmesi
Linux’un bağlı kaldığı Unix felsefesinin bir kısmı, mümkün olduğunca çok sayıda basit aracı birleştirerek karmaşık şeyler yapmaktır. Yeniden yönlendirme(redirection) ve streams, basit programların bağlar ile bir araya getirilmesini sağlayarak bu görevde yardımcı olur, her bir bağlantı bir önceki bağlantının çıktısını besler.
cikti1 | cikti2 | cikti3 | cikti4 |
Akışlar, yeniden yönlendirme ve kanallar, Linux’taki daha güçlü komut satırı araçlarından bazılarıdır. Linux, programların girdisini ve çıktısını, manipüle edilebilen bir veri varlığı olan bir akış olarak ele alır.
Normalde, girdi klavyeden gelir ve çıktı ekrana gider
"Burada söylemek istediğim tam ekran metin modunda oturum açma, bir xterm ekranı ya da uzaktaki bir bilgisayarın terminaline bağlanma oturumu olabilir"
Bu giriş ve çıkış akışlarını, dosyalar gibi başka kaynaklardan gelen veya bunlara giden şeklinde yeniden yönlendirebilirsiniz. Benzer şekilde, bir programın çıktısını başka bir programa aktarabilirsiniz. Akışlar (stream)lar, birden çok programı birbirine bağlamak için harika araçlar olabilir
Akış Türlerini Keşfetme
Yönlendirme ve boruları anlamaya başlamak için, önce farklı girdi ve çıktı akış türlerini anlamalısınız. Bu konu için en önemli üç tanesi:
Standart Giriş(Standart Input) Programları, standart giriş veya stdin yoluyla klavye girişini kabul eder. Çoğu durumda bu, bilgisayara klavyeden gelen verilerdir. (stdin)
Standart Çıktı(Standart Out) Metin modu programları çoğu veriyi standart çıktı aracılığıyla kullanıcılarına gönderir (stdout). Stdout, çıktı formatı “tam ekran metin modunda” olaraki ya ekranda görüntülenir veya xterm gibi bir GUI penceresinde. (GUI aslında xterm ile çıktıları Grafik arayüz üzerine metin olarak gönderir, sadece Grafik arayüzü vardır)
Standart Hata(Standart Error) Linux, standart hata veya (stderr) olarak bilinen ikinci bir tür çıktı akışı sağlar. Bu çıkış akışının, hata mesajları gibi yüksek öncelikli bilgileri taşıması amaçlanmıştır. Normalde, standart hata, standart çıktıyla aynı çıktı cihazına gönderilir, bu nedenle bunları birbirinden kolayca ayırt edemezsiniz.
Fakat birini diğerinden bağımsız olarak yeniden yönlendirebilirsiniz. Bu sayede, standart çıktıyı ekrana yönlendirirken, standart hatayı bir dosyaya yeniden yönlendirebilirsiniz. İlerleyen bölümde, bu komutların kullanımlarını ve nasıl yönlendiklerini örneklerle anlatıyoruz.
2. Kabuk(shell) Giriş ve Çıkışlar ile yönlendirmeler (Redirections)
(redirections, pipes, stdin, stdout, stderr, tee)
Linux işletim sisteminde komut satırı (Command Line Interface-CLI) üzerinden yapabilecekleriniz, her bir yönlendirme ile daha da çeşitli hale gelmektedir. Çıktılarınızı bir yazıcıya doğrudan yönlendirebilirsiniz, ekrana veya daha farklı bir yere aldığınız bir çıktıyı diğer bir komuta yönlendirip kendi çözümünüzü üretebilirsiniz.
Yönlendirmeler linux işletim sistemine özgü ve çok kullanışlı özelliklerdir. Yönlendirmeleri dosyalara gönderirseniz filesystem üzerinde dosya oluşturabilirsiniz.
Dilerseniz hata bilgilerinizi standart çıktıya yazabilir ve çalıştırdığınız bir program için error.log oluşturabilirsiniz.
Kafanızın karıştığını düşünüyorum, bu konu linux kullananların hepsinin bildiği ve çok sıklıkla fayda sağladığı bir konu. Sizin de mantığını anladığınızda çok fazla kullanacağınız bir özellik.
Öncelikle basit bir komut çalıştıralım
ls /
bu komut ile / (kök) dizin altındaki klasörler sıralandı.
; Birden fazla komutu tek bir komutta çalıştırma
Diyelim ki, birkaç komutu birbiri ardına çalıştırmanız gerekiyor. İlk komutun çalışmayı bitirmesini ve ardından bir sonrakini çalıştırmasını mı bekliyorsunuz?
Bunun için ;
ayırıcısını kullanabilirsiniz. Bu şekilde, bir satırda birkaç komut çalıştırabilirsiniz. Önceki komutların işlerini bitirmesini beklemeye gerek olmadan diğer komut çalışacaktır.
komut_1; komut_2; komut_3
&& Birden fazla komutu yalnızca bir önceki komut başarılıysa tek bir komutta çalıştırma
Önceki komutta, zamandan kazanmak için tek bir satır içinde birkaç komutun nasıl çalıştırılacağını gördünüz. Peki ya komutların başarısız olmadığından emin olmanız gerekiyorsa?
Bir kod compile etmek istiyorsunuz mesela, başarılı bir şekilde çalıştırılan bir önceki komuttan sonra bir başka komutun çalışması gerek. bu durumda ``configure&&make&&make install` şeklinde komut çalıştırabiliriz.
Bu durum için && ayırıcı kullanabilirsiniz. &&, sonraki komutun yalnızca önceki komut başarılı olduğunda çalışacağından emin olur.
$ komut_1 && komut_2
Bu komutu sıklıkla tembellik yüzünden kullanırım. Örneğin, sisteminizi yükseltmek için “sudo apt update && sudo apt upgrade -y” yazarak tek satırda bilgisayarı güncellerim.
bu sistem içinde aynı komutu kullanabilirsiniz.
apt-get update && apt-get upgrade
|
pipe - boru veya akışlar
şimdi bu komutun çıktısını |
(pipe) ile bir sonraki komut için (stdin) olarak yönlendirelim
cikti1 | cikti2 | cikti3 | cikti4
ls / | cat
burada ilk komut ls /
çalışıyor ve çıktısını ekran yerine cat
komutuna yönlendiriyor, cat komutu ise kendi çıktısını üretiyor.
stdout (komut değildir) işlemin komut satırından dışarı bilgi vermek için kullandırdığı yönlendirme
ls
komutunun çıktısını(stdout) başka bir programa yönlendirebileceğimiz gibi işletim sistemindeki bir dosyaya da yönlendirebiliriz.
ls / >/tmp/kokdizinlistesi.txt
yukarıdaki komutu çalıştırdığımızda çıktımız (stdout)ekran yerine bir dosya oluşturacaktır /tmp/kokdizinlistesi.txt
dosyanın içini görüntülerseniz ls /
komutu çıktısını olduğunu görebilirsiniz.
cat /tmp/kokdizinlistesi.txt
Stdout ve stderr yeniden yönlendirmek
Hata mesajlarının özel bir akış tarafından teslim edilmesinin bir avantajı vardır. Bu, bir komutun çıktısını (stdout) bir dosyaya yeniden yönlendirebileceğimiz ve yine de terminal penceresinde herhangi bir hata mesajını (stderr) görebileceğimiz anlamına gelir.
İhtiyaç duyduğunuzda hatalara tepki verebilirsiniz. Ayrıca, hata mesajlarının stdout’un yönlendirildiği dosyayı kirletmesini de durdurur.
Aşağıdaki metni bir düzenleyiciye yazın ve error.sh adlı bir dosyaya kaydedin. (çalıştırmanız durumunda dosya oluşacaktır)
cat >> /tmp/hataver.sh <<EOL
#!/bin/bash
echo "Var olmayan bir dosyaya erişmeye çalışıyor!"
cat yanlis-dosya.txt
EOL
Komut dosyasını şu komutla çalıştırılabilir hale getirin:
chmod +x /tmp/hataver.sh
Komut dosyasının ilk satırı, stdout akışı aracılığıyla metni terminal penceresine yansıtır. İkinci satır, var olmayan bir dosyaya erişmeye çalışır. Bu, stderr aracılığıyla gönderilen bir hata mesajı oluşturacaktır.
Komut dosyasını şu komutla çalıştırın:
/tmp/hataver.sh
gördüğünüz gibi önce varolmayan bir dosyaya erişmeye çalıştığı mesajı, sonrasında bir hata mesajı geliyor. Her iki çıktı akışının, stdout ve stderr’in terminal pencerelerinde görüntülendiğini görebiliriz.
Çıkışı bir dosyaya yönlendirmeyi deneyelim:
/tmp/hataver.sh > /tmp/hataversonuc.txt
oluşacak dosyada 2 satır olduğunu düşünüyorsunuz, fakat sadece 1 satır var. Çünkü verilen hata stdout içersinde görünmez biz aslında yukarıdaki komutu yazarken sadece stdout çıktılarını /tmp/hataversonuc.txt
dosyası içine aktarıyoruz, stderr sonuçları bu dosya içersinde oluşmazlar.
dosyayı görüntülediğimizde sadece 1 satır bilgi olduğunu görürüz.
cat /tmp/hataversonuc.txt
>
veya 1>
stdout çıktıları için kullanılır, herhangi bir sayı vermezseniz bunu 1 kabul eder.
2>
stderr hata çıktıları için kullanılır
komutu 1
ile çalıştıralım
/tmp/hataver.sh 1> /tmp/hataversonuc.txt
şimdide hata stderr sonucunu başka bir dosyaya yönlendirelim, 2>
/tmp/hataver.sh 2> /tmp/hataversonuc.err
dosyaları incelediğimizde hataversonuc.txt
dosyasında stdout çıktısının olduğunu. hataversonuc.txt
dosyası içersinde ise stderr sonucunun olduğunu görürüz.
cat /tmp/hataversonuc.txt
cat /tmp/hataversonuc.err
Hem stdout hem de stderr yeniden yönlendiriliyor
Şüphesiz, stdout veya stderr’i birbirinden bağımsız olarak bir dosyaya yönlendirebiliyorsak, ikisini de aynı anda iki farklı dosyaya yönlendirebilmeliyiz?
Evet yapabiliriz. Bu komut stdout‘u /tmp/hataversonuc.txt
adlı bir dosyaya ve stderr‘i /tmp/hataversonuc.err
adlı bir dosyaya yönlendirecektir.
/tmp/hataver.sh 1> /tmp/hataversonuc.txt 2> /tmp/hataversonuc.err
stdout ve stderr‘i Aynı Dosyaya yönlendirme
Her bir standart çıktı akışının kendi özel dosyasına gitmesini sağladık. Yapabileceğimiz son kombinasyon, hem stdout hem de stderr’i aynı dosyaya göndermek olacaktır..
Bunu şu komutla başarabiliriz:
/tmp/hataver.sh > /tmp/hataversonuc.txt 2>&1
parametreleri analiz edelim,
/tmp/hataver.sh çalışan script/program kendisi
/tmp/hataversonuc.txt stdout akışını hataversonuc.txt dosyasına yeniden yönlendirir. >
ve 1>
aynı şeydir
2>&1 Burada, &>
yönlendirme talimatını kullanır. Bu talimat, kabuğa bir akışın başka bir akışla aynı hedefe gitmesini söylemenizi sağlar. Bu durumda, akış 2'yi, stderr'i, akış 1'in, stdout'un yönlendirildiği aynı hedefe yönlendir
diyoruz.
tee stdin üzerinden aldıklarını stdout ve dosyalara yönlendirir
tee
stdin okur, çıktı olarak stdout ve dosya/dosyalar’a veri yazar.
Kullanım şekli:
stdin --> tee --> stdout , dosya1, dosya2...
ls -la
bu komut ekrana(stdout) ls çıktısı dönecektir. Buradan tee komutu ile çıktıyı hem ekrana, hemde 2 ayrı dosyaya yazdırabiliriz.
ls -la |tee /tmp/dosya1.txt /tmp/dosya2.txt
oluşan her iki dosyayı da control ettiğimizde aynı çıktıların olduğunu görürüz.
dosya1.txt içeriği
cat /tmp/dosya1.txt
dosya2.txt içeriği
cat /tmp/dosya2.txt
3. Ortam komutları
(history, alias, env, set, export)
history geçmiş - komut satırındaki geçmişte yazılı komutları sıralar
Bir diğer çok kullanışlı linux komutu history ‘dir. önceden yazdığınız komutlar kullandığınız shell’e bağlı olarak home dizininizde bir dosya içersine yazılır, yani son çalıştırdığınız komutlar sürekli olarak kaydedilir, böylece eskiden yazdığınız komutları da tekrar görebilirsiniz. Eski komutları tekrar görebilmek için history
komutu kullanılır
history
History komutu ile shell içindeki bazı keyler birleştirilerek önceden yazdığınız komutları history komutunu kullanmadan tekrar shell içinde yazabilirsiniz.
komut satırında doğrudan Ctrl+R tuşuna basarsanız aşağıdaki gibi bir soru gelecektir
(reverse-i-search)`':
ve sizden arayacağınız şeyi yazmanızı isteyecektir, buradaki arama history içersinde olacaktır, örnek olarak sizden önce sunucuya bağlanan kişi touch
komutunu kullanmışmı diye bakmak isterseniz tou(harflerini yazdığığınızda aşağıdaki çıktı gelecektir)
(reverse-i-search)`touch': touch ilkdosyam
history
komutu /home/~/.bash_history dosyası içini günceller. Sunuculara yapılan shell erişimli hacker saldırılarında ilk kopyalanıp sıfırlanan dosyadır. Ayrıca shell üzerinden yazılmış parolalar burada durabildiği için ciddi tehlike arzeder.
alias mahlas / Takma ad - bir komut veya komut dizisine verilen takma ad
Bazen komutları yazmak gerçekten tekrarlayıcı olabilir veya birçok kez uzun bir komut yazmanız gerekirse, bunun için kullanabileceğiniz bir takma ada sahip olmak işleri kolaylaştırabiliyor. Bir komut için bir takma ad oluşturmak için, bir takma ad belirtmeniz ve bunu komuta atamanız yeterlidir.
$ alias getir = 'ls -la'
Şimdi ls -la yazmak yerine, getir yazabilirsiniz ve bu komutu çalıştıracak. Kullanıdığınız shell ortamından çıktığınızda bu tanımların silineceğini unutmayın. Komutların kalıcı alias
sahibi olabilmesi için .bashrc dosyası içersine veya kullandığınız shell içersine bu satırı eklemeniz yeterli olacaktır.
~ /.bashrc
Verdiğiniz takma adları unalias
komutuyla kaldırabilirsiniz:
$ unalias getir
env ortam
Ortam değişkenlerinin bir listesini yazdırmak ya da mevcut ortamı değiştirmek zorunda kalmadan değiştirilmiş bir ortamda başka bir yardımcı programı çalıştırmak için kullanılır. Env kullanılarak değişkenler eklenebilir veya kaldırılabilir ve mevcut değişkenler bunlara yeni değerler atanarak değiştirilebilir.
Yazdığımız shell programları içersindeki değişkenler sadece shell programı içersinde geçerli olurlar, bu değişkenlerin shell içersinde etkin olarak çalışabilmesi için tanımlanmaları gerekir.
Belirtilen değişkenin değerninin gösterilmesi
echo $SHELL
veya çok popüler olan
echo $PATH
Yeni değişken değerinin dışarı aktarılması
export VARIABLE=deger (veya VARIABLE=deger; export VARIABLE)
Bir değişkeni kalıcı olarak eklemek için
- ~/.bashrc dosyası içinde
export VARIABLE=deger
eklenir. - ‘source ~/.bashrc’ yazıp enter yapabilirsiniz veya sadece ~/.bashrc çalıştırabilirsiniz. yeni bir shell ekranı açarsanız yine değerler tanımlı gelecektir.
Ortam değişkenleri özellikle sistem yöneten kişiler için bazen ciddi sorunlar yaratabilir (Windows işletim sistemlerindeki “,
” ve “.
” sorunu gibi). Wikipedia içersinde hazırlanmış çok güzel bir Env sayfası var, burayı kesinlikle incelemenizi tavsiye ederim
export komutu içersinde en sık kullanılan ortam değişkenlerine değineceğiz (HOME,PATH,SHELL,PS1)
set shell kullanımı için tanımlar
Set komutu, komut dosyalarınızın davranışını belirlemek için Bash’deki belirli bayrakları ve özellikleri kontrol etmenizi sağlar. Bu kontroller, komut dosyalarınızın istenen yolu izlemesini ve Bash’te istediğiniz gibi bir ortam yaratmanızı sağlar.
Basit bir şeyle başlayın. Bash’in dosyaların üzerine yazma şeklindeki varsayılan davranışını devre dışı bırakmak istediğinizi varsayalım, ‘-C’ parametresi bunu engelleyecektir.
set -C
şimdi bir dosya oluşturmaya çalıştığınızda artık hata verecektir
ls -la / >/tmp/list.root
gördüğünüz gibi artık redirect işlemi yapamıyorsunuz.
başka bir parametre olan ‘-f’ ise, shell üzerindeki Globbing özelliğini kapatacaktır. Globbing *
dediğimizde tüm dosyalar anlamına gelen özellik.
set ile bash üzerinde çoğunlukla yazmış olduğunuz script’leri sınırlarsınız.
export dışa aktar
ortam değişkenini değiştirmek için kullanılır, yukarıda env komutunu işlerken görmüştük.
HOME
HOME, kullanıcının ev (veya oturum açma) dizinini temsil eden bir ortam değişkenidir. argümansız cd, geçerli çalışma dizinini HOME değerine değiştirir. Yaklaşık karakterinin (~) genellikle $ HOME için bir kısaltma olarak kullanıldığını unutmayın. Bu nedenle, cd $HOME
ve cd ~
tamamen eşdeğer ifadelerdir.
$ echo $HOME
bize ev dizinimizin adını verir, her kullanıcının sistem üzerinde biz ev dizini vardır, ev dizini tanımlı olmayan kullanıcılar /
kök dizinine düşerler ve kök üzerinde erişim hakları olmadığı için prompt olarak $
ile çalışmak zorunda kalırlar.
SHELL
Ortam değişkeni SHELL, kullanıcının varsayılan komut kabuğunu işaret eder (bir komut penceresinde yazdıklarınızı işleyen program, genellikle bash) ve kabuğun tam yol adını içerir:
$ echo $SHELL
/bin/bash
PATH
PATH, yani YOL çalıştırılacak uygun programı veya betiği bulmak için bir komut verildiğinde taranan sıralı bir dizin listesidir (path). Yoldaki her dizin iki nokta üst üste (:) ile ayrılır. null (boş) bir dizin adı (veya ./) herhangi bir zamanda geçerli dizini gösterir.
yol1: yol2
yol1 :: yol2
Örnekte: yol1:yol2
, ilk iki nokta üst üste işaretinden (:) önce boş bir dizin vardır. Benzer şekilde, yol1::yol2
için yol1 ve yol2 arasında boş bir dizin vardır.
Yolunuza özel bir bin dizininin önüne eklemek için:
export PATH=$HOME/bin:$PATH
şimdi yeni path bilgisini tekrar ekrana getirelim,
echo $PATH
PS1
Örnek olarak (PS), Komut istemcisi (shell ekranında yanda yazan kısım) değiştrimeyi deneyelim.
PS1, komut satırı isteminizin neye benzediğini kontrol eden birincil istem değişkenidir. Aşağıdaki özel karakterler PS1’e dahil edilebilir:
\u - Kullanıcı adı
\h - Ana bilgisayar adı
\w - Geçerli çalışma dizini
\! - Bu komutun geçmiş numarası
\d - Tarih
Aşağıdaki örnekte olduğu gibi, kullanıldıklarında tek tırnak içine alınmaları gerekir:
echo $PS1
export PS1='\u@\h:\w$'
Değişiklikleri geri almak için:
export PS1='$'
Daha da iyi bir uygulama, önce eski istemi kaydetmek ve ardından aşağıdaki gibi geri yüklemek olacaktır:
OLD_PS1=$PS1
istemi değiştirin ve sonunda şununla tekrar değiştirin:
PS1=$OLD_PS1
exit - çıkış
exit komutu shell bağlantınızı sonlanrımak için kullanılır.
kullanım şekli.
$ exit [geri-dönüş-değeri]
0 başarılı 1 başarısız
genellikle
$ exit
şeklinde kullanılır. scriptler içersinde kullanırken geri dönüş değerleri önem arz eder, ve istediğiniz sayıyı verebilirsiniz.
örn.
$ exit 999