UNIX Dilinde Konuşma, Bölüm 2: Daha çok değil, daha akıllı çalışma

0
tongucyumruk
IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

UNIX Dilinde Konuşma, Bölüm 2: Daha çok değil, daha akıllı çalışma

Kabuk kısayolları, daha az iş yapıp zamandan tasarruf etmenizi sağlar

Düzey: Orta

Martin Streicher (martin.streicher@linux-mag.com), Şef Editör, Linux Magazine

08 Ağustos 2006

UNIX® kabuğunun sağladığı birçok kısayoldan nasıl yararlanacağınızı öğrenin. Birkaç alıştırmayla, daha çok değil, daha akıllı çalışacaksınız.

Beceri gerektiren her işin kendi sırları vardır -- bunlar, en karmaşık görevi bile kolaylaştıran küçük incelikler, teknikler ve araçlardır. Örneğin, komşum usta bir marangoz. Çıplak gözle açıları büyük bir doğrulukla ölçüp aktarabiliyor, köşeleri kesintisiz olarak birleştirebiliyor ve işçiliği yerel gazetelerde beğeni topladı.

Ancak, daha da önemlisi (en azından - işi bilmeyen ve her an başına bir kaza gelebilecek bir kişi olarak - benim için) komşumun çalışmasındaki rahatlık. İşinde geçirdiği 20 yıldan sonra, ustalaşmadığı hiçbir kısayol yok. Kısayollar buradan biraz zaman, şuradan biraz işçilik tasarrufu yapılmasını sağlar. Kesim, çivilerin çakılması ve çerçevenin oluşturulması gibi tekrarlanan görevlerde, bu küçük tasarruflar gerçekten de fark yaratır.

Programcıların, sistem yöneticilerinin ve UNIX® ile profesyonel olarak uğraşan diğer bilgisayar çalışanlarının kendi özel araçları vardır:

  • CPU'lar
  • RAM
  • İşletim sistemleri
  • Uygulamalar
  • Kabuk
Deneyimli bir marangoz gibi birkaç inceliği bilerek ve birkaç aracı kullanarak büyük miktarda zaman ve çabadan tasarruf edilebilir. UNIX Dilinde Konuşma dizisinin ilk yazısında UNIX komut satırının gücünü tanıtmıştık. Bu makalede, kabuk komut istemindeki ustalığınızı artıracak bazı işe yarar kabuk kısayolları gösterilecektir.

Parmaklarınızı yormayın, biraz dinlendirin

Bölüm 1'de gösterildiği gibi UNIX komut satırının gücü benzersizdir. Birkaç tuşla ve biraz sözdizimsel birleştirici (glue) ile (dikey çubukları (|), tee ve yeniden yönlendirme dahil), her bir kabuk komut isteminde kendi doğaçlama veri dönüştürmelerinizi oluşturabilirsiniz.

Örneğin, aşağıdaki komut, ana dizininizdeki, Aylık Rapor sözcüklerini içeren tüm metin belgelerini bulur:

$ find /home/joe -type f -name '*.txt' -print | xargs grep -l "Aylık Rapor"

Komut, .txt sonekli tüm düzenli dosyaları bulmak için (-type f) tüm ana dizininizde (find /home/joe) arama yapar ve daha sonra, Aylık Rapor dizesini aramak için grep komutunu çalıştırır. -l seçeneği, bir eşleşme bulunursa dosyanın adını yazdırır. Bu nedenle, komutun çıkışı eşleşen dosyaların bir listesidir.

Yukarıdaki komut oldukça yararlıdır; bununla birlikte, komutu hatırlamak ve düzenli kullanıyorsanız, yeniden yazmak güçtür. Dahası, e-posta, dosyalar, araçlar (düzenleyiciler, derleyiciler, izleme programları gibi) ve uzak sistemler için birincil arabiriminiz komut satırı olduğunda, komut satırında tasarruf edebileceğiniz her an ve her çaba, yapmakta olduğunuz görevde daha iyi bir şekilde harcanabilir. Sonuçta, bir saniyenin bin küçük parçası da toplamda fark yaratır.

Yinelenen görevleri azaltmak için UNIX kabuğu çeşitli yardımcı kısayollar sağlar:

  • İşaretler
  • Genel arama karakterleri
  • Komut geçmişi
  • Ortam değişkenleri
  • Diğer adlar
  • Başlangıç dosyaları
Örneğin, ana dizininizi ~ (tilde) işaretiyle belirtebilirsiniz. Liste 1 içinde gösterilen şekilde $HOME ortam değişkenini kullanarak ana dizininize de başvurabilirsiniz.
Liste 1. UNIX kabuğu kısayolları
   
$ whoami
strike

$ echo ~
/Users/strike

$ echo $HOME
/Users/strike

$ !!

echo $HOME
/Users/strike

Son komut olan !! (iki ünlem işareti) biraz garip görünebilir, ancak bu, önceki komutu harfi harfine yineleyen bir komut geçmişi işaretidir. (Birçok kabuk yukarı ok tuşunu kullanarak ya da Control+P tuşlarına basarak önceki komutlara göz atmanıza olanak tanır.)

Her bir kabuk kısayolu türüne daha ayrıntılı bir şekilde bakalım. Bu makale, genellikle /bin/zsh dizinine kurulan Z kabuğuna dayanır (zsh -- bkz. Kaynaklar). (Sisteminizde Z kabuğu yoksa, sistem yöneticinizden kabuğu kurmasını isteyin.) Z kabuğuna özgü birkaç özellik vardır; bunlar dışında, burada gösterilen tüm örnekler tüm modern UNIX kabuklarında çalışır.


Kabuk işaretleri

Birçok komut satırı bağımsız değişkeni o kadar sık kullanılır ki, kabuklar kısaltma olarak birtakım işaretler (sigils) ya da simgeler sağlar. Bağımsız değişken yerine işareti girmeniz yeterlidir.

Yukarıda belirtildiği gibi ~, ana dizinizi belirtir. Benzer bir kısayol olan ~username, kullanıcı adınızın ana dizinini belirtir. Örneğin, ~joe, joe'nun ana dizinini belirtir. Dolayısıyla, joe'nun doc dizininden kendi info dizininize bir dosya kopyalamak için aşağıdaki komutu yazabilirsiniz:

$ cp ~joe/doc/report.txt ~/info

Joe'nun ana dizinin /guests dizininde ve sizin ana dizininizin /staff/bobr dizininde olduğunu düşünürsek, ~joe, /guests/joe ile değiştirilir ve ~ karakteri, /staff/bobr olarak sonuçta cp /guests/joe/doc/report.txt /staff/bobr/info komutunu oluşturur. (Komut satırının nasıl önizleneceğine ilişkin bilgileri görüntülemek için kenar çubuğunda "Çalışmanızın sağlamasını yapma" konusuna bakın.)

Çalışmanızın sağlamasını yapma

Komut satırı işaretlerinin açılımlarını görmek istiyorsanız echo komutunu kullanın:

$ echo ~joe/doc/report.txt ~/info
/guests/joe/doc/report.txt /staff/bobr/info

$ echo $SHELL

/bin/zsh

$ ls
architecture.txt  Services.pdf
services.txt      Schema.pdf

$ echo *.txt
architecture.txt services.txt

echo komutu, komut satırına yazdıklarınızı gösterir. Ancak, kabuk herhangi bir programı çağırmadan önce (çoğu) komut satırı bağımsız değişkenini açtığından, tüm ikame karakterlerinden de sonuçlarını gösterir. (Kabuk ortamı değişkeni $SHELL, çalışmakta olan kabuğun adını içerir.)

Başka bir değerli işaret de, geçerli dizinin hemen üstündeki dizin için kısayol olan .. (iki nokta) işaretidir. .. ve geçerli çalışma dizinine ilişkin işaret olan . işaretiyle, dosya sistemindeki dosyalara ve dizinleri geçerli çalışma dizininize göre belirtebilirsiniz.

Örneğin, geçerli çalışma dizininiz ~/jane/projects/lambda diziniyse, ../.. kısayolu iki üst dizin ya da ~/jane dizinini belirtir. ~/jane dizinini içeren dizine başvuruda bulunmak için ../../../ ("üç dizin yukarı") ya da ~jane/../ yolunu kullanabilirsiniz. İkinci yol, ~jane dizininden başlanacağını ve bir dizin yukarı çıkılacağını belirtir.

Geçerli dizininize bir dosya kopyalamak için dosyanın adını belirtmenize gerek yoktur; dosyayı yalnızca . ("nokta") ile belirtebilirsiniz:

 
$ cp -pr /path/to/lots/of/stuff .

Önceki komut özyinelemeli olarak /path/to/lots/of/stuff dizinini geçerli dizininize kopyalarken özgün tarih ve saat damgalarını da korur. .. ve . karakterlerinin belirttiği yol adlarına göreli yol adları denir. Bir / (sağa eğik çizgi) ya da bir ~ (tilde) karakteriyle başlayan yol adları mutlak yol adlarıdır; bunun nedeni, dosyaya dosya sisteminin ya da bir dizin hiyerarşisinin en üstünden başvuruda bulunmanızdır.


Genel arama karakterleri ve kalıplar

İşaretlerle yazma süresini azaltır ve belirli bir dizini hızlı ve kesin olarak belirtebilirsiniz. Genel arama karakterleri, bir dizinin içeriğine başvuruda bulunmak için kullanılan başka bir kısayol biçimidir.

Örneğin, bir dizininizin içinde 100 dosyanın bulunduğunu varsayın. Bunlardan bazıları .c sonekiyle biten C kaynak kodu dosyaları, diğerleri, .o sonekiyle biten nesne dosyaları ve bir kısmı da metin belgeleri (.txt), komut dosyaları (.sh) ve yürütülebilir dosyalardır (yürütme izni olan dosyalar). Yalnızca C dosyalarını listelemek için aşağıdakini yazın:

 
$ ls *.c

* genel arama karakteri (genellikle asterisk yerine yıldız denir), herhangi bir karakter dizisini eşleştir anlamına gelir. .c dosya adı uzantısı, yalnızca bir nokta işaretini izleyen küçük c harfiyle eşleşen tam bir kalıptır. Bu nedenle, *.c, bir nokta ve küçük c harfi ile biten herhangi bir karakter dizisi anlamına gelir. *.c belirtildiğinde, kabuk geçerli dizine (önünde bir mutlak ya da göreli yol adı belirtmezseniz) bakar, kalıpla eşleşen her dosya adını bulur, *.c'yi ad listesine genişletir ve listeyi ls komutunun bağımsız değişkenleri olarak geçirir.

Liste 2'de komut satırı karşıdan yükleme yardımcı programı olan wget kaynak koduna dayalı *.c kullanımı gösterilmektedir.

Z kabuğu glob'ları

Z kabuğunda birkaç tane benzersiz ve harika glob işleci vardır. Göze çarpan birkaç tanesi şunlardır:

**/ glob işleci, aşağıdaki tüm dizinleri açar ve geçerli çalışma dizinini içerir. **/ işlecini, yerleşik find komutu olarak düşünebilirsiniz. Yeniden wget kaynak koduna bakarsak, komutla tüm Makefile'ları bulabilirsiniz:

$ echo **/Makefile
Makefile doc/Makefile po/Makefile 
src/Makefile util/Makefile 
windows/Makefile

Geçerli çalışma dizinini içermek istemiyorsanız, aşağıdaki örnekte gösterilen şekilde yalnızca */**/ yazın:

$ echo */**/Makefile
doc/Makefile po/Makefile 
src/Makefile util/Makefile 
windows/Makefile

Başka bir yararlı Z kabuğu glob işleci, dosya tiplerini eşleştirir. Önceki gibi bir kalıp sağlayın, ancak düzenli dosyalar için (.), dizinler için (/), yürütülebilir dosyalar için (*) ya da simgesel bağlantılar için (@) karakterini ekleyin:

$ ls -d -F *(/)
ChangeLog-branches/ doc/ po/ src/ util/ windows/

Z kabuğu, (/) ifadesi için de bir kısayol sağlar. Sonuçları dizinlerle sınırlandırmak için kalıbı bir sağa eğik çizgiyle sona erdirin:

 
$ ls -d  */  
ChangeLog-branches/ doc/ po/ src/ util/ windows/



Liste 2. Bir dizindeki C kaynak kodu dosyalarını bulmak için genel arama karakterlerini kullanın
       
$ ls *.c
alloca.c
ansi2knr.c
cmpt.c
connect.c
convert.c
...

Bir genel arama karakterini eşleşen dosya adları listesine genişletme işlemine globbing denir ve UNIX kabuklarının, aradığınız şeyi ifade etmenize yardımcı olacak çeşitli globbing işleçleri (sözde glob'lar) vardır:

  • * (yıldız) glob'u, herhangi bir karakter ya da boş bir sırayı da içeren karakter sırasını eşleştirir.
  • ? (soru işareti) glob'u herhangi bir tek karakteri eşleştirir.
  • [ ] (köşeli parantez) glob'u önü ve arkası kapatılmış karakterleri eşleştirir. Parantez içinde - (tire) işaretini kullanarak bir karakter aralığını belirtebilirsiniz; örneğin, [a-z] ya da tüm küçük harfler.

(Z kabuğu benzersiz birçok glob işlecine sahiptir. Ek bilgi için kenar çubuğunda Z kabuğu glob'larına bakın.)

Gerektiğinde glob işleçlerini yineleyebilirsiniz. Liste 3 içinde ek örnekler sağlanmıştır.


Liste 3. Genel arama karakteri örnekleri
      
1 $ ls -1 -a -F
./libs
ChangeLog
ChangeLog-branches/
Makefile
Makefile.in
alloca.c
ansi2knr.c
cmpt.c
cmpt.o
config.h
config.h.in
connect.c
connect.h
connect.o
convert.c
convert.h
convert.o
...
wget*

2 $ ls -a -F .*
./lib

3 $ ls -1 *.?
alloca.c
ansi2knr.c
cmpt.c
cmpt.o
config.h
connect.c
connect.h
connect.o
convert.c
convert.h
convert.o
...

4 $ ls -1 ????.?
cmpt.c
cmpt.o

5 $ ls [a-c]?*.*
alloca.c
ansi2knr.c
cmpt.c
cmpt.o
config.h
config.h.in
connect.c
connect.h
connect.o
convert.c
convert.h
convert.o
cookies.c
cookies.h
cookies.o

Liste 3 içinde Komut 1, uzun bir listede . (nokta) ile başlayan girişlerin de içinde bulunduğu dizindeki tüm girişleri gösterir. (-a seçeneği, sözde nokta dosyalarını gösterir; -1 seçeneği, bir sütundaki her şeyi listeler ve -F seçeneği, dizinleri / (sağa eğik çizgi) ile ve yürütülebilir dosyaları * (yıldız) işareti ile vurgular.)

Komut 2, adı bir nokta ile başlayan (.*) her bir girişi bulur. Üçüncü komut yalnızca soneki bir harften oluşan öğeleri bulur.

Dördüncü komut yalnızca dört karakterin ardından bir nokta ve bir karakterin geldiği öğeleri bulur. Son olarak Komut 5, küçük a, küçük b ya da küçük c ile başlayan ve ardından sırasıyla en az bir harf, herhangi bir karakter, bir nokta ve daha sonra herhangi bir sonek gelen öğeleri bulur. Görebileceğiniz gibi gerektiğinde glob işleçlerini yineleyebilirsiniz.

Dolayısıyla, ls *.z komutu hangi sonuçları getirirdi (böyle dosyaların olmadığını düşünürsek)? Yararlı bir hata iletisi görüntülenirdi:

$ ls *.z
zsh: no matches found: *.z

Biraz komut geçmişi

Şimdiye kadar yolları nasıl belirteceğinizi ve dosyaları nasıl seçeceğinizi gördünüz. Komut satırında kendinizi ifade edebilirsiniz. Ancak, tüm komut satırları kısa ve güzel olsa bile, aynı şeyi sürekli olarak yeniden yazmaktan yorulma olasılığınız yine de vardır. Özellikle, birçok seçeneğin bulunduğu ya da değişkenlerin sırasının belirli bir şekilde olması gereken uzun, karmaşık komut satırları yazmaktan yorulabilirsiniz. Neyse ki çoğu kabuk, önceki komutlara ilişkin bir geçmiş sağlar. Bir komutu yeniden çalıştırmak için yalnızca geçmiş listesindeki girişini bulun ve yeniden çalıştırın. Kabuğun diğer kısımları gibi kısayollar burada da hızlı ve kolay başvurular yapmanızı sağlar.

Z kabuğunda komut geçmişini etkinleştirmek için aşağıdakileri yazın:

$ HISTSIZE=500
$ SAVEHIST=500

Burada komutlar, hem kabuğun hem de devam eden geçmiş dosyasının son 500 komutu içermesi gerektiğini belirtir. (Varsayılan değer olarak Z kabuğu yalnızca son 30 komutu kaydeder.) Komut geçmişlerini almaya ve devam ettirmeye ilişkin bilgiler için kabuğunuzun belgelerine bakın.

Kabukla bir süre çalıştıktan sonra yalnızca history yazarak komut geçmişinizi görüntüleyebilirsiniz:

$ history
...
781  /bin/ls -d */
782  /bin/ls -F *(/)
783  /bin/ls -d -F *(/)
784  /bin/ls -d -F */
785  /bin/ls -d  */

Çalıştırdığınız her bir komuta sıralı bir sayısal tanıtıcı atanır. Bir komutun tamamına ya da her bir komutun parçalarına başvurmak için bu tanıtıcıyı (örneğin, 782) kullanırsınız. Bir komutun aynısını yeniden çalıştırmak için ! (ünlem işareti) karakterini ve ardından komutun numarasını yazın:

$ !785
ChangeLog-branches/ doc/ po/ src/ util/ windows/

Geçmişte girilmiş bir komuttaki belirli bir bağımsız değişkeni istiyorsanız, komuta bir ! (ünlem işareti) ile başvurun ve :N değerini sağlayın; burada 0 komut adını, 1 ilk bağımsız değişkeni, vb. belirtir. Örneğin, geçmiş günlüğündeki 782 numaralı komutun ikinci bağımsız değişkenini ayıklamak için Liste 4 içinde gösterilen kodu yazın.


Liste 4. 782 numaralı komuttan ikinci bağımsız değişkenin ayıklanması
   
$ echo !782:2   
echo *(/)
ChangeLog-branches doc po src util windows

$ ls AUTHORS COPYING INSTALL MACHINES
AUTHORS   COPYING   INSTALL   MACHINES

$ echo !!:3
echo INSTALL

$ history -2
788  ls AUTHORS COPYING INSTALL MACHINES
789  echo INSTALL

$ echo !788^
echo AUTHORS
AUTHORS

$ echo !788$

echo MACHINES
MACHINES

history -2 komutu, önceki iki komutu görüntüler. Kısayol olarak bir komutun ilk bağımsız değişkenine (komut adının kendisine değil) ^ (şapka) ve geçmişte girilen bir komutunun son bağımsız değişkenine $ (dolar işareti) karakteri ile başvurabilirsiniz. Bir bağımsız değişken aralığına, Liste 5 içinde gösterilen bir aralık gösterimini kullanarak da başvurabilirsiniz.


Liste 5. Aralık gösterimi
       
$ echo AUTHORS COPYING INSTALL MACHINES
AUTHORS COPYING INSTALL MACHINES
$ echo !!:1-2
echo AUTHORS COPYING
AUTHORS COPYING

Geçmişteki komutları geri çağırmak için başka doğrudan yöntemler de vardır. Bunlardan biri komutu aramaktır:

$ ls I*

$ ls M*
$ echo !?M
ls INSTALL

!?M yapısı, bir büyük M harfi içeren en son geçmiş komut satırını arar.


Ortam değişkenleri

Komut satırını akıcı bir şekilde kullanmak önemli bir UNIX becerisidir. UNIX dilini konuşma kabuk isteminde bitmez -- sayısız UNIX yardımcı programıyla da iletişim kurmanız gerekir. UNIX'te, ortam değişkenleri kabuğunuzun ayarlarını tutar ve komut satırından başlattığınız her bir yardımcı programın tercihlerinizle başlatılmasına olanak tanır.

Bazı ortam değişkenleri (bunlara kabuk değişkenleri denir), davranışını denetlemek için yalnızca kabuğunuz tarafından kullanılır. Örneğin, Z kabuğu yukarıda gösterildiği gibi komut geçmişlerini yönetmek için $HISTSIZE ve $SAVEHIST değişkenlerini kullanır. Kabuk değişkenlerini ayarlar gibi düşünebilirsiniz.

Diğer ortam değişkenleri dışa aktarılır ya da genel olarak kullanılabilir kılınır ve komut satırından başlattığınız her komutun işlem alanına (ortam) kopyalanır. Örneğin, $HOME, ana dizininizin konum bilgilerini saklayan özel bir ortam değişkenidir. UNIX oturum açma sırası, $HOME değişkenini (ve diğer ortam değişkenlerini) ayarlar ve daha sonra, kabuğunuzu başlatır. Kabuğunuz da tüm kabuk başlatma dosyalarını bulmak için $HOME değişkenini kullanır. SSH ve FTP gibi başlattığınız diğer uygulamalar, .netrc dosyanızı (gizli, uzaktan erişim parolalarını saklamak için kullanılır) bulmak için $HOME değişkenine başvurur. Bazı ortam değişkenlerini -- $HOME, $PATH ve $SHELL gibi -- her uygulama kullanır. Diğer ortam değişkenleri bir uygulamaya özel olabilir.

Geçerli tüm ortam değişkenlerinizi görmek için Liste 6'da gösterilen şekilde printenv yazın. (Sistem yöneticinizin sisteminizi yapılandırmasına bağlı olarak burada gösterilenlerden çok daha fazla ya da çok daha az ortam değişkeniniz olabilir.)


Liste 6. Ortam değişkenlerinin görüntülenmesi
     
$ printenv
PATH=/Users/strike/bin:/Applications/xampp/xamppfiles/bin:/Users/strike/bin:/usr/bin:/
    bin:/usr/sbin:/sbin
HOME=/Users/strike
SHELL=/bin/zsh
USER=strike
TERM=xterm-color
LOGNAME=strike
SHLVL=1
PWD=/Local/src/versions/wget/wget-1.9
OLDPWD=/Local/src/versions/wget/wget-1.9/src
PERL5LIB=/Applications/xampp/xamppfiles/lib/perl5/site_perl/5.8.7:/Projects/IGSP/src
CLICOLOR=true
MANPATH=/Local/root/share/man:/usr/share/man:/opt/local/share/man
INFOPATH=/opt/local/share/info
LESS=-n

Bu değişkenlerin birçoğunu tanıyabilirsiniz; diğerleri yeni olabilir. Kabuk düzeyi ($SHLVL), kaç kabuk derinde olduğunuzu gösterir. 1 bir oturum açma kabuğunu; 2 oturum açma kabuğunuzdan başka bir kabuk başlattığınızı gösterir, vb. Her bir ardışık, iç içe geçmiş kabuğa ilişkin isteminizi değiştirmek için $SHLVL değerini kullanabilirsiniz. $TERM, uçbirim (uçbirim öykünme programı olabilir) ayarlarınızı gösterir -- basılan tuşların doğru yorumlanmasının yanı sıra metin ve renklerin doğru biçimde görüntülenmesini sağlama açısından önemlidir. $PWD geçerli çalışma dizininiz, $OLDPWD ise önceki çalışma dizininizdir. İki dizin arasında hızlı bir şekilde ileri ve geri gitmek için her iki değişkeni de Liste 7'de gösterildiği gibi kullanabilirsiniz.


Liste 7. Dizinler arasında geçiş yapma
     
$ echo $PWD
/Users/strike

$ echo $OLDPWD

/Local/src/versions/wget/wget-1.9

$ cd $OLDPWD

$ echo $PWD 
/Local/src/versions/wget/wget-1.9

$ echo $OLDPWD
/Users/strike

Yukarıdaki listede yer alan diğer ortam değişkenleri uygulamaya özgüdür. Her biri, ilişkilendirildikleri uygulama başlatıldığında nasıl çalışacağını denetleyen tercihleri içerir. $PERL5LIB, Perl'ün özel kitaplıkları bulması için kullanılan bir arama yoludur. ls komutu, $CLICOLOR değişkenini dosya tiplerini renkli (dizinleri mavi, yürütülebilir dosyaları yeşil, vb.) görüntülemek için kullanır. Özel uygulama ortam değişkenleri, genellikle programın "man" sayfalarında bulunur.

Bir ortam değişkeninin ayarlanması, kabuk değişkeninin ayarlanmasıyla aynıdır. Ancak, değişkeni genel olarak kullanılabilir kılmak için dışa aktarmanız gerekir:

$ MYVARIABLE=$HOME/projectX
$ export TMPDIR=/tmp/projectX

Birinci komut $MYVARIABLE adlı bir kabuk değişkeni ayarlar. (Önündeki dolar işareti kabuk komut istemidir. Bir değişken ayarladığınızda, $ işaretini sağlamazsınız. Ancak, $MYVARIABLE değişkeninde olduğu gibi, değişkeni kullanırken dolar işaretini de kullanmanız gerekir.) $MYVARIABLE, dışa aktarılmadığı için yalnızca kabukta görünür. Tüm kabuk değişkenlerinin bir listesini görmek için set yazın. set komutunun çıkışı, ortam değişkenlerini içerir. Bunun nedeni, bu değişkenlerin kabukta da kullanılabilir olmasıdır.

İkinci komutta, $TMPDIR ayarlanır, dışa aktarılır ve kabuktan başlatılan tüm uygulamalar için kullanılabilir kılınır. $TMPDIR değişkenini kullanan bir uygulama, GNU Compiler Collection (GCC) derleyicisidir. GCC, $TMPDIR değişkeninde saklanan dizin değerinde geçici dosyalarını oluşturur.

Bir ortam değişkenini kaldırmak istiyorsanız, Liste 8'de gösterildiği gibi unset ve değişkenlerin adını yazın.


Liste 8. Bir ortam değişkeninin kaldırılması
 
$ set
HOME=/Users/strike
MYVARIABLE=/Users/strike/projectX
TMPDIR=/tmp/projectX
...

$ unset MYVARIABLE TMPDIR

$ set
HOME=/Users/strike
....

Diğer adlar ve başlangıç dosyaları

Önceki bölümlere bakıp komut satırına ne kadar çok giriş yapmanız gerektiği konusunda endişelenmiş olabilirsiniz. Evet, öğrenilecek çok şey var -- bunun nedeni, kabuk ortamının çok zengin olmasıdır. Ancak yine de büyük gücün büyük bir üretkenlik sağlayacağını unutmayın.

UNIX kabukları, basılan tuş sayısını azaltmak için diğer adlar ve yaptığınız tüm ayarları saklamak için başlatma dosyaları sağlar. Diğer adlar, oluşturduğunuz kısayollardır. Başlatma dosyaları, kabuğunuz her başlatıldığında okunur ve kabuk değişkenleri (seçenekler), ortam değişkenleri ve diğer adlar gibi tüm kabuk ayarlarınızı saklamak (ve paylaşmak) için en uygun yerdir.

Diğer ad, daha uzun bir komut yerine kullandığınız kısa bir karakter dizisidir. Diğer adı, bir komut satırının takma adı olarak düşünebilirsiniz. Aşağıdakini yazmak yerine:

$ find /home/joe -type f -name '*.txt' -print | xargs grep -l "Aylık Rapor"


komut istemine, oluşturduğunuz bir takma adı yazabilirsiniz:

$ findreports

findreports diğer adını açılımıyla değiştirerek ağır işi kabuk yapar. findreports diğer adını oluşturmak için aşağıdaki komutu yazın:

alias findreports='find $HOME -type f -name "*.txt" -print | 
  xargs grep -l "Aylık Rapor"

Her bir diğer ad, tek tırnak işaretleri içine yerleştirilmelidir. Diğer adın içinde tırnak işaretlerinin bulunması gerekiyorsa, çift tırnak işaretlerini kullanın. Z kabuğu diğer adları, değişkenler, dikey çubuklar, yeniden yönlendirme, diğer adlar ve diğer kabuk işlenenleri gibi birçok temel kabuk öğesini içerebilir (bkz. Liste 9).


Liste 9. Z kabuğunun temel öğeleri
     
$ alias ll='/bin/ls -l'
$ ll -d 2002*

drwxrwxr-x  2 www-data   www-data    4096 Jan 16  2002 2002-02
drwxrwxr-x  2 www-data   www-data    4096 Jan 22  2002 2002-03
drwxrwxr-x  2 www-data   www-data    4096 Apr 15  2002 2002-04
drwxrwxr-x  2 www-data   www-data    4096 Apr 19  2002 2002-05
...

$ alias lt='ll -t'
$ lt -d 2002*
drwxrwxr-x  2 www-data www-data 4096 Apr 19  2002 2002-05
drwxrwxr-x  2 www-data www-data 4096 Apr 15  2002 2002-04
drwxrwxr-x  2 www-data www-data 4096 Jan 22  2002 2002-03
drwxrwxr-x  2 www-data www-data 4096 Jan 16  2002 2002-02

$ alias m='pinky | grep mstreicher'
$ m
mstreicher Martin Streicher     ...

$ alias snap='pinky >> ~/.pinky'

$ snap
$ snap
$ cat ~/.pinky
Login            Name            TTY      Idle   When             Where
mstreicher  Martin Streicher    pts/0    Jun 18 16:40 cpe-071-065-224-025.nc.res.rr.com
Login            Name            TTY      Idle   When             Where
mstreicher  Martin Streicher    pts/0    Jun 18 16:40 cpe-071-065-224-025.nc.res.rr.com

ll diğer adı, /bin/ls yoluna başvurur -- mutlak yolların yerine hiçbir zaman diğer adlar kullanılmaz.

ll yazdığınızda, bunun yerini diğer adı alır ve kalan komut satırı bağımsız değişkenleri sona eklenir. Bu nedenle, ll -d 2002*, gerçekte /bin/ls -l -d 2002* komutudur. lt diğer adı, ll diğer adını belirtir ve oluşturma tarihine göre sıralama yapmak için -t işaretini ekler. lt diğer adının açılımı /bin/ls -l -t -d 2002* komutudur. m diğer adı bir dikey çubuk içerir. snap diğer adı, bir komutun çıkışını bir dosyaya eklemek için yeniden yönlendirmeyi kullanır.

Kabuğunuzdaki ayarlı tüm diğer adları görmek için Liste 10'da gösterildiği gibi yalnızca alias yazmanız (bağımsız değişkenler olmadan) yeterlidir.


Liste 10. Kabuğunuzdaki tüm diğer adların görüntülenmesi
   
$ alias
alias findreports='find $HOME -type f -name "*.txt" -print | xargs grep -l
  "Monthly Report"'
alias ll='/bin/ls -l'
alias lt='ll -t'
alias m='pinky | grep mstreicher'
alias snap='pinky >> ~/.pinky'
...

Bir diğer adı kaldırmak istiyorsanız, unalias yazın ve kaldırmak istediğiniz diğer adı belirtin. Liste 11'de gösterilen şekilde bir defada birden çok diğer adı da listeleyebilirsiniz.


Liste 11. Birden çok diğer adın eşzamanlı olarak görüntülenmesi
 
$ unalias m snap
$ alias
alias findreports='find $HOME -type f -name "*.txt" -print | xargs grep -l
  "Aylık Rapor"'
alias ll='/bin/ls -l'
alias lt='ll -t'

Son olarak, ortamınızı oluşturmak için bu kadar çalıştıktan sonra ayarlarınızı sonraki oturumlarınız için korumak isteyebilirsiniz. Gerçekten de, kabuğunuzun tüm oturumlar ve örneklerde tutarlı olmasını isteyebilirsiniz -- örneğin, iş istasyonunuzda birden çok uçbirim açıldığında.

Kabuklar, kabuğunuz başlatıldığında ortamınızı (yeniden) başlatan başlatma dosyalarını içerir. Başlatma dosyaları basit -- yalnızca bir değişken ve değer listesi -- ya da oldukça karmaşık olabilir -- özelleştirme mantığını ve ayrıntılı işlevleri içerebilir. Bazı kullanıcıların birçok başlatma dosyası seti olabilir. Her bir proje için bir set ayarlanabilir.

Z kabuğu, .zshrc ve .zprofile başlatma dosyalarını kullanır. Bu dosyaların ikisi de ana dizininizde bulunur. (Diğer kabukların benzer adlara sahip benzer dosyaları vardır ve özel bilgiler için kabuk belgelerinizi okuyabilirsiniz. Bazı kabuklar, kapatma dosyaları ya da kabuktan çıkarken çalıştırılacak dosyalar da sağlayabilir.) .zshrc dosyası, yeni bir kabuk başlattığınızda kaynak olarak kullanılır ya da okunur ve işlenir; .zprofile dosyası, yalnızca bir oturum açma kabuğu başlattığınızda kaynak olarak kullanılır.

Kabuğunuzu yapılandırdıktan sonra ayarlarınızın bir anlık görünümünü alın ve bunları, kabuk başlangıç dosyalarından birinde saklayın:

$ set >> $HOME/.zshrc

$ alias >> $HOME/.zshrc

Not: .zshrc sonuç dosyasını düzenlemek ve oturuma özgü değişkenleri kaldırmak isteyebilirsiniz.


Daha fazla güç

Vay! UNIX Dilinde Konuşma'nın bu makalesinde çok fazla konu üzerinde durduk, ancak bu gayretiniz size büyük ödüller kazandıracak. Daha çok değil, daha akıllıca çalışıp gerçekten önemli şeyleri yapmak için -- örneğin PS2 oynamak gibi -- fazladan zaman kazanabilirsiniz.

Bir sonraki UNIX Dilinde Konuşma makalesinde daha geleneksel konulara değinilecek. Bu gözde tarayıcıları bırakıp komut satırından nasıl bağlantı kurulacağını, yükleme yapılacağını, aktarımı ve iletişim kurmayı tam olarak inceleyeceğim.

Bizi izlemeye devam edin.



Kaynaklar

Bilgi Edinme
  • UNIX Dilinde Konuşma: Bu dizinin diğer bölümlerini de inceleyin.

  • zsh posta listesi arşivi: Z kabuğu incelikleri ve ipuçlarıyla ilgili daha fazla bilgi için bu listeyi okuyun.

  • AIX ve UNIX: Daha ayrıntılı bilgi ister misiniz? developerWorks AIX ve UNIX alanı, bilgi içerikli yüzlerce makaleyi ve giriş düzeyindeki, orta ve ileri düzeydeki öğreticiyi içerir.

  • developerWorks teknik etkinlikler ve web yayınları: Güncel developerWorks teknik etkinliklerini ve web yayınlarını izleyin.

  • Podcasts: İlgili ayarları yapın ve IBM teknik uzmanlarının bilgilerine ulaşın.

Ürün ve teknoloji edinme

Tartışma


Yazar hakkında

Martin Streicher, Linux Magazine adlı dergide Şef Editör'dür. Purdue University'den bilgisayar bilimi konusunda master derecesi almış ve 1982 yılından bu yana UNIX benzeri sistemlerde Pascal, C, Perl, Java ve (en son) Ruby programlama dillerinde programlama yapmaktadır. Martin'e martin.streicher@linux-mag.com adresinden erişebilirsiniz.

İlgili Yazılar

Geniş bir Linux kümesinin kurulması, Bölüm 2

tongucyumruk

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

UNIX Dilinde Konuşma, Bölüm 1: Komut satırının gücüne hükmedin

tongucyumruk

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

UNIX Dilinde Konuşma, Bölüm 6: Her şeyi otomatikleştirin!

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

Sürdürmeler ve gelişmiş akış denetimi

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

GTK+ ile ilgili temel bilgiler, Bölüm 2: GTK+ nasıl kullanılır?

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.