Teknoloji topluluğunun çoğunluğu, sistemlerle komut satırı arayüzü (CMD) veya kabuk (shell) aracılığıyla etkileşime girmekten keyif alır. Genellikle bu, işlerini kolaylaştırır. Örneğin, bir GUI'nin birkaç düğmesine tıklamak zorunda kalmak yerine, birkaç görevi otomatik olarak yürütebilen bir kabuk komutu oluşturabilirsiniz.
Bir kabuk veya CMD programı başlattığınızda, birkaç bilgi parçasını derler. Bu bilgiler, programın temel sistem kaynaklarına nasıl erişeceğini ve genel davranışını belirler. Bunu ortam (environment) adı verilen bir yerde saklayabilirsiniz. Ortam, anahtar-değer çiftlerini temsil eden dizelerden oluşur. Bu öğreticide, Ubuntu 20.04 VPS sunucusunu, ortam veya kabuk değişkenlerini ayarlarken size rehberlik etmesi için bir örnek olarak kullanacağız. Bu kılavuz diğer Linux dağıtımları için de geçerli olmalıdır.
Ortam Değişkenleri ile Kabuk Değişkenleri Arasındaki Fark Nedir?
Bir oturum başlattığınızda, bilgiler sistemin ayarlarından ve yapılandırma dosyalarından toplanır. Ardından, kabuk işlemi ve onun alt işlemleri için kullanılabilir hale gelir. Bu bilgiler, şu biçimdeki bir dizi anahtar-değer çiftidir:
|
1 2 3 |
KEY=value KEY="Some value" KEY=data1:data2 |
Değişkenlerin adları, yani anahtarlar, büyük/küçük harfe duyarlıdır. Ancak, geleneksel olarak BÜYÜK HARF ile yazılmaları kabul edilir. Bu, onları diğer bağlamlar içinde ayırt etmenize yardımcı olur. İki nokta üst üste ‘:’ karakteri ile aynı değişkene birden fazla değer atayabilirsiniz. Ayrıca = işaretinin etrafında boşluk bırakmadığınızdan emin olmanız da önemlidir. Anahtarlar değişkenlerdir ve ikiye ayrılırlar: ortam değişkenleri ve kabuk değişkenleri. Ortam Değişkenleri, sistem genelinde tanımlanan ve her alt kabuk veya işlem için kullanılabilir olan tüm değişkenleri içerir. Kabuk komutları aracılığıyla başlattığınız işlemlere bilgi aktarılmasına yardımcı olurlar. Kabuk Değişkenleri ise yalnızca belirli kabuk oturumunda tanımlanan değişkenleri içerir. Dahası, yalnızca kendi kabuk örnekleri içinde özel olarak kullanılabilen değişkenleri içerir.
Ortam ve Kabuk Değişkenlerini Listeleme
Varsayılan olarak terminal, ortam ve kabuk değişkenlerini listelemek için iki komut sağlar: env veya printenv. Varsayılan durumlarında aynı bilgileri gösterirler. İşte bu komutlardan örnek bir çıktı:
env Kullanımı:

printenv Kullanımı:

Gördüğünüz gibi çıktı aynıdır. Fark, belirli bir anahtarın değerini istediğinizde ortaya çıkar. İşte o zaman değişkenin adıyla birlikte printenv komutunu kullanırsınız:

Birden fazla değeri görmek için printenv komutuna birden fazla argüman iletebilirsiniz. Değerler, argümanları girdiğiniz sırayla görünecektir:

Bir değişkenin değerini görüntülemek için değişken adıyla birlikte echo komutunu da kullanabilirsiniz:

env komutu, programların çalıştığı ortamı, şu şekilde bir sözdiziminde değişken tanımları ileterek değiştirmenize olanak tanır:
|
1 |
env VAR1="var 1 value" command_to_run command_options |
Bu altında yatan değerleri geçersiz kılmanıza veya alt işlem tarafından kullanılabilecek yeni değerler ayarlamanıza olanak tanır. printenv ve env komutları, yukarıda görüldüğü gibi ortam değişkenlerini listeler. Bunlar zaten sistem işlemleri için tanımlanmıştı. Kabuk değişkenlerinin bir listesini görmek istiyorsanız, set komutunu kullanabilirsiniz. Herhangi bir değişken olmadan set yazmak; tüm ortam değişkenlerinin, kabuk değişkenlerinin, yerel değişkenlerin ve kabuk işlevlerinin bir listesini döndürür:

Değişkenler çok fazla olabilir. Gerekirse, şu komutu kullanarak bunları sayfalara ayırabilirsiniz:
|
1 |
set | less |
set komutunun POSIX'te yürütülmesini belirterek çıktıyı daha da temizleyebilir, böylece kabuk işlevlerinin yazdırılmamasını sağlayabilirsiniz. Burada, komutun mevcut ortamı değiştirmesini önlemek için bir alt kabukta (komut işlemcisinin ayrı bir örneği) yürütüyoruz:
|
1 |
(set -o posix; set) |
Yukarıdakiler, sistemde mevcut olan tüm ortam ve kabuk komutlarını listeler. Yalnızca kabuk değişkenlerini almaya çalışmak için aşağıdaki komutu kullanarak çıktıyı daraltabilirsiniz:
|
1 |
comm -23 <(set -o posix; set | sort) <(env | sort) |
Yukarıdaki komutun örnek bir çıktısı şöyledir:

Komut birkaç ortam değişkeni içerse de, kabuk ve ortam değişkenleri arasındaki farkı anlamanıza yardımcı olacaktır. Bunun nedeni, set komutunun değişkenlerin değerlerini tırnak içine alması, printenv ve env komutlarının ise değerleri tırnak içine almamasıdır. Kabuk değişkenleri, değişiklikleri dosyalara kalıcı olarak yazmadan oturumlar için kalıcı değerler ayarlamak için kullanışlıdır.
Yaygın Ortam Değişkenleri
USER – Şu anda oturum açmış olan kullanıcı.
SHELL – Girdiğiniz komutları yorumlayacak olan kabuk. Varsayılan bash'tir, ancak bunu değiştirebilirsiniz.
HOME – Mevcut kullanıcının ev dizini.
TERM – Öykünülecek terminal türünü belirtir. Mevcut öykünülen terminali gösterir.
PWD – Mevcut çalışma dizini.
OLDPWD – Önceki çalışma dizini. Dizin değiştirme komutunu cd olarak girdiğinizde kabuğun önceki dizine geçmesine yardımcı olur.
EDITOR – Terminalinizde edit yazdığınızda varsayılan dosya düzenleyici.
LS_COLORS – ls komutunu girdiğinizde renkli çıktı eklemek için kullanılan renk kodlarını tanımlar. Dosya türlerini ayırt etmeye ve kullanıcılara bilgi sağlamaya yardımcı olur.
LOGNAME – Mevcut kullanıcının adı.
MAIL – Mevcut kullanıcının posta kutusunun yolunu tanımlar.
LANG – Mevcut yerel ayarı tanımlar.
PATH – Komutları yürütürken aranacak dizinlerin listesini belirtir. Bir komutun yürütülmesi sırasında sistem bu dizinleri arar ve bulunan ilk yürütülebilir dosyayı kullanır.
_ – Son yürütülen komut.
Yaygın Kabuk Değişkenleri:
BASH_VERSION – İnsan tarafından okunabilir çıktıda bash sürümü.
BASH_VERSINFO – Makine tarafından okunabilir çıktıda bash sürümü.
BASHOPTS – bash yürütüldüğünde kullanılan seçeneklerin listesi. Kabuk ortamının beklediğiniz gibi çalışıp çalışmayacağını belirlemek için kullanışlıdır.
COLUMNS – Ekranda çıktı çizmek için kullanılan sütun genişliği sayısı.
DIRSTACK – pushd ve popd komutlarıyla kullanılabilen dizin yığını.
HOSTNAME – Bilgisayarın şu anki ana bilgisayar adı.
HISTFILESIZE – Bir dosyada saklanan komut geçmişi satır sayısı.
HISTSIZE – Bellekte izin verilen komut geçmişi satır sayısı.
IFS – Komut satırındaki girdileri ayırmak için dahili alan ayırıcı. Varsayılan olarak bir boşluktur.
SHELLOPTS-Kabuk seçeneklerini ayarlamak için kullanılır.
UID-Mevcut kullanıcının UID'si.
PS1– Birincil komut istemi tanımı. Bu, bir kabuk oturumu başlattığınızda isteminizin nasıl görüneceğini tanımlamak için kullanılır.
PS2 – Bir komut birden fazla satıra yayıldığında ikincil istemleri bildirin.
Ortam ve Kabuk Komutlarını Ayarlama
İlk olarak, daha önce açıklandığı gibi değişken adlarını tamamen büyük harf olarak tutacağız. Sonra, kabuk değişkenleri oluşturma adımlarını inceleyeceğiz. Son olarak, ortam değişkenleri oluşturacağız.
Kabuk Değişkenleri Oluşturma
Her zamanki merhaba dünya ile başlayalım. Terminalinize aşağıdakileri girin:
|
1 |
MY_FIRST_VAR=’Hello World!’ |
Tırnak işareti, değişkende boşluk olduğu için kullanılır. Ünlem işareti özel bir karakter olduğundan ve kaçış karakteriyle kullanılmalı ya da tek tırnak içine alınmalı olduğundan tek tırnak kullandığımıza dikkat edin. Şimdi ilk kabuk değişkeninizi oluşturdunuz. Bu değişken yalnızca mevcut kabuk oturumunda kullanılabilir. Kabuk değişkenleri alt kabuklar ve işlemler için mevcut değildir. Grep komutu ile set kullanarak bunu terminale yazdırabilirsiniz:

Veya $ işareti ve değişken adını kullanarak referans verip echo ile değeri görüntüleyin:

Printenv kullanarak yazdırmayı denerseniz, herhangi bir çıktı göstermeyecektir. Bu, bunun bir ortam değişkeni olmadığını doğrulamanıza yardımcı olur:

Ortam Değişkenleri Oluşturma
Daha önce oluşturulan kabuk değişkeni, export komutu kullanılarak bir ortam değişkenine dönüştürülebilir. İlk olarak bir kabuk değişkeni oluşturursunuz. Ardından, bir ortam değişkeni oluşturmak için export komutunu kullanmanız gerekir. Bu komutu yürüttükten sonra, değişken alt kabuklar ve işlemler için kullanılabilir olacaktır:
|
1 |
export MY_FIRST_VAR |
Şimdi, printenv komutunu kullanarak test ederseniz, değişkeni ve değeri görmelisiniz:

Ayrıca şu sözdizimini kullanarak tek bir adımda bir çevre değişkeni oluşturabilirsiniz:
|
1 |
export MY_SECOND_VAR='Bu benim ikinci değişkenim' |
Çevre değişkenleri yalnızca alt kabuklara aktarılır, üst kabuğa aktarılmaz. Bu, alt işlemlerin kendilerini çağıran programın ortamını etkilemesini önlemeye yardımcı olur.
Değişkenlerin Derecesini Düşürme ve Kaldırma
Eğer bu ana kadar eğitimi takip ettiyseniz, hala bir çevre değişkeni olarak tanımlanmış MY_FIRST_VAR değişkenine sahipsiniz demektir. echo komutunu –n bayrağıyla yazarak bunu tekrar bir kabuk değişkenine dönüştürebilirsiniz:
|
1 |
export -n MY_FIRST_VAR |
printenv ile test ederseniz, çıktı olmayacaktır. Ancak, echo komutu bunu görüntüleyecektir çünkü hala bir kabuk değişkenidir:

unset komutunu kullanarak bir kabuk veya çevre değişkenini kaldırabilirsiniz. Ve echo kullanarak artık var olmadığını doğrulayabilirsiniz. Görebileceğiniz gibi hiçbir çıktı göstermez:

Giriş Sırasında Çevre Değişkenlerini Ayarlama
Birçok program çalışmak için çevre değişkenlerine bağlıdır. Bir programı her çalıştırmak istediğinizde değişkenleri ayarlamak verimli olmadığından, Linux bunları tanımlamak ve bir dosyaya kaydetmek için bir yol sunar. Bu sayede, giriş anında otomatik olarak ayarlanabilirler. Kabuk, oturumun nasıl başlatıldığına bağlı olarak farklı yapılandırma dosyalarını okur. Bunlar aşağıda tartışılmaktadır:
Kabuk Oturumu Türleri ve Farkları
- Giriş Kabuğu Oturumu – kullanıcının kimliğini doğrulayarak başlar. Oturum, SSH veya terminal oturumu üzerinden giriş yaptığınızda ayarlanır.
- Giriş Yapılmayan Kabuk Oturumu – kimliği doğrulanmış kabuğunuzun içinden yeni bir kabuk başlattığınızda başlar. bash komutunu kullanarak yeni bir kabuk başlatabilirsiniz. Kimlik doğrulama bilgisi gerekmez.
- Etkileşimli Kabuk Oturumu – bir terminal oturumuna bağlı kabuk oturumu.
- Etkileşimsiz Kabuk Oturumu – bir terminal oturumuna bağlı olmayan kabuk oturumu – arka planda çalışır.
Bir oturum; giriş yapılan veya giriş yapılmayan, ve etkileşimli veya etkileşimsiz olarak sınıflandırılır. SSH üzerinden giriş yapıp bir kabuk oturumu başlattığınızda, bu bir giriş yapılan ve etkileşimli kabuk oturumu olacaktır. Terminalde bir betik çalıştırdığınızda, bu genellikle giriş yapılmayan ve etkileşimsiz bir oturumda çalışır. Bir kabuk oturumu bu ikisinin bir kombinasyonu da olabilir. Peki, hangi yapılandırma dosyası seçilir?
Bir giriş oturumu ilk olarak /etc/profile dizinindeki yapılandırma dosyalarını okur. İkinci olarak, kullanıcının ev dizinindeki kullanıcıya özel yapılandırma dosyalarını kontrol eder. ~/.bash_profile, ~/.bash_login ve ~/.profile dosyalarından yalnızca ilk bulunan dosya okunur ve diğer tüm dosyalar yoksayılır. Giriş yapılmayan bir oturum ise önce /etc/bash.bashrc dosyasını, ardından ~/.bashrc dosyasını okur. Etkileşimsiz oturumlar, yeni ortamı tanımlamak için kullanılacak dosyanın adını almak için BASH_ENV adlı çevre değişkenini okur.
Çevre Değişkenlerini Uygulama
Değişkenlerinizi ayarlarken, yukarıdaki tartışmamıza dayanarak bunları hangi dosyaya yerleştirdiğinize her zaman dikkat edin. Bu, belirli değişkenlerin yalnızca belirli oturumlarda kullanılabilir olmasını sağlayarak esneklik sağlayacaktır. Önemli bir değişkenin bir oturumda eksik olmasını istemezsiniz.
Bazı durumlarda, değişkenin hem giriş yapılan hem de giriş yapılmayan oturumlarda var olmasını isteriz. Neyse ki, çoğu Linux dağıtımı varsayılan olarak, giriş yapılandırmalarını giriş yapılmayan yapılandırmaları okuyacak ve bunları işlemleriniz için kullanılabilir hale getirecek şekilde yapılandırmıştır. Bu nedenle, değişkenlerinizi giriş yapılmayan yapılandırma dosyalarında tanımlamanız yeterlidir. Genellikle, kullanıcıya özel çevre değişkenleri ayarlarız ve ayarlarımızın hem giriş yapılan hem de giriş yapılmayan kabuk oturumlarında kullanılabilir olmasını isteriz. Bu nedenle ~/.bashrc dosyasını kullanacağız. Dosyayı düzenlemek için nano kullanacağız. Dosyayı açmak için terminalinize aşağıdakini girin:
|
1 |
nano ~/.bashrc |
Açık yapılandırma dosyasında zaten birkaç değişken görebilirsiniz. Çevre değişkenlerini komut satırını kullanırken yaptığınız gibi ekleyebilirsiniz. Sadece şu komutu yazın:
|
1 |
export ANAHTAR_ADI=değer. |
Bunları dosyanın herhangi bir yerine -yeni bir satıra ve bir döngü fonksiyonunun içine olmayacak şekilde- ekleyebilirsiniz. Ardından dosyayı kaydedip kapatın. Başlatacağınız bir sonraki kabuk oturumu dosyadan okuma yapacaktır. Mevcut kabuğun yeni eklediğiniz ayarları yeniden başlatmaya gerek kalmadan okumasını istiyorsanız şu komutu kullanabilirsiniz:
|
1 |
source ~/.bashrc |
Sistem genelindeki çevre değişkenlerini şunlardan herhangi birine eklemelisiniz: /etc/profile, /etc/bash.bashrc veya /etc/environment.
Özetlemek Gerekirse
Son olarak, artık kabuk ve çevre değişkenlerini ayarlayabilir ve bu araçların VPS'nize kazandırdığı büyük gücün tadını çıkarabilirsiniz! Bazı işlemlerin çalıştırılmasını otomatikleştirmek veya kimlik doğrulama bilgileri gerektiren otomatik dağıtım yapılandırması, değişkenleri alt işlemlere aktarmak ve daha fazlası gibi birçok avantajı vardır. Çevre değişkenleri, diğer verilerin yanı sıra kimlik doğrulama bilgileri gibi hassas verileri genel depolardan gizlemenize yardımcı olur. Bu temel sayesinde, sürekli kullanıcı girişine gerek kalmadan komut satırı üzerinden otomatik olarak yürütebileceğiniz karmaşık betikler oluşturabilirsiniz.
Keyifli Çalışmalar!
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.