Ders 20 / 20
Terminal Metin Editörleri
Satır editöründen ekran editörüne uzanan tasarım çizgisi, kip tabanlı ve kipsiz editörlerin karşılaştırması, temel düzenleme komutları ve editör seçiminin ortam değişkeniyle bildirilmesi.
İçindekiler
Kurs boyunca dosyalar printf ve yönlendirmeyle oluşturuldu. Bu, tek satırlık dosyalar için
işe yarar; bir betiğin ortasındaki satırı değiştirmek veya bir yapılandırma dosyasına iki
satır eklemek için yetersizdir.
Grafik arayüz bulunmayan bir sunucuda — uzak oturumların çoğunda durum budur — düzenleme terminalde yapılır. Bu ders terminal editörlerinin iki tasarım ailesini ve aralarındaki seçimi ele alır.
Satır Editörü
Terminal editörlerinin tasarımı, yazıcı terminallerin kullanıldığı dönemden gelir. O dönemde ekran yoktu; çıktı kâğıda basılıyordu ve imleci hareket ettirmek diye bir şey söz konusu değildi. Düzenleme, satır numaraları üzerinden komutlarla yapılıyordu.
Bu tasarımın temsilcisi ed hâlâ POSIX’te tanımlıdır ve çalışır durumdadır. Proje betiğine
bir satır eklemek için tam bir oturum:
$ ed betik/ozet.sh 139 $ echo "ham olcum dosyasi: $(ls -1 "$HOME/proje/veri/ham" | wc -l)" a echo "guncel olcum: $(readlink "$HOME/proje/veri/guncel.csv")" . %p #!/bin/sh # proje/veri/ham icindeki olcum dosyalarinin sayisini bildirir echo "ham olcum dosyasi: $(ls -1 "$HOME/proje/veri/ham" | wc -l)" echo "guncel olcum: $(readlink "$HOME/proje/veri/guncel.csv")" w 202 q
Oturum satır satır okunmalıdır. Açılışta yazdırılan 139, dosyanın bayt sayısıdır. $
komutu son satırı yazdırır. a ekleme kipine geçer; sonraki satırlar dosyaya eklenir ve tek
başına bir nokta ekleme kipini bitirir. %p dosyanın tamamını yazdırır. w yazar ve yeni
bayt sayısını bildirir, q çıkar.
ed istem göstermez ve hata durumunda yalnızca bir soru işareti yazdırır. Bu, gündelik
kullanım için elverişsizdir; ancak iki nedenle önemlidir. Birincisi, komut dilinin
tamamı sonraki editörlere miras kalmıştır. İkincisi, ed betiklerden yönlendirmeyle
sürülebilir ve bu, kurtarma ortamlarında bazen tek seçenektir.
Kip Tabanlı Ekran Editörü
Ekranlı terminaller yaygınlaştığında, satır editörünün üzerine bir görsel kip eklendi:
dosyanın bir bölümü ekranda gösterilir, imleç üzerinde gezinir. Bu tasarım POSIX’te vi adıyla
standartlaştırılmıştır ve standarda uyan her sistemde bulunması beklenir.
Editörün ayırt edici özelliği kiplerdir. Aynı tuş, bulunulan kipe göre farklı iş yapar:
| Kip | İşlevi | Nasıl girilir |
|---|---|---|
| Normal | Gezinme ve düzenleme komutları | Esc |
| Ekleme | Yazılan karakterler metne girer | i, a, o |
| Komut satırı | Satır editörü komutları | : |
Tasarımın gerekçesi, tuşların bir dile dönüşmesidir. Normal kipte harf tuşları
karakter girmediği için tümü komut olarak kullanılabilir; komutlar da eylem ve hareket
birleşimiyle kurulur. d silme eylemi, w bir sözcük ilerleme hareketidir; dw bir
sözcüğü siler. 3dw üç sözcüğü siler. Öğrenilen her hareket, öğrenilen her eylemle
birleşebilir.
Karşılaştırıldığı yaklaşım, komutları değiştirici tuş bileşimlerine bağlamaktır. O yaklaşımda komut sayısı, bileşim sayısıyla sınırlıdır ve bileşimler birleştirilemez.
Kip tabanlı tasarımın ikinci kazancı, yalnızca temel karakterleri kullanmasıdır: ok tuşları ve değiştirici bileşimleri göndermeyen terminallerde de çalışır. Bu, uzak oturumlar ve kurtarma konsolları için pratik bir üstünlüktür.
Bedeli, ekleme kipinde yazılan bir komutun metne karışmasıdır. Kip karışıklığı, yeni
kullanıcıların en sık karşılaştığı sorundur ve çözümü sabittir: emin olunmadığında Esc
tuşuna basılır, normal kipe dönülür.
En Küçük Hayatta Kalma Kümesi
Bir dosyayı açmak, değiştirmek ve kaydetmek için gereken komutlar azdır:
| Komut | İşlevi |
|---|---|
i |
İmlecin önünde ekleme kipine geçer |
a |
İmlecin ardında ekleme kipine geçer |
o |
Altına yeni satır açar ve ekleme kipine geçer |
Esc |
Normal kipe döner |
h j k l |
Sol, aşağı, yukarı, sağ |
0 / $ |
Satır başı / satır sonu |
gg / G |
Dosya başı / dosya sonu |
x |
İmleçteki karakteri siler |
dd |
Bulunulan satırı siler |
u |
Son değişikliği geri alır |
/desen |
İleri arama; n sonraki eşleşme |
:w |
Kaydeder |
:q |
Çıkar |
:q! |
Değişiklikleri atarak çıkar |
:wq |
Kaydeder ve çıkar |
Son dört satırdaki iki nokta üst üste ile başlayan komutlar, satır editörünün komutlarıdır.
Miras burada görünür: :w ve :q, ed oturumundaki w ve q ile aynı komutlardır.
Aynı komut dili doğrudan da çalıştırılabilir; editörün satır kipi betiklerden sürülebilir:
$ printf '%s/dosyasi/sayisi/\nwq\n' | ex -s /tmp/duzenle.sh $ cat /tmp/duzenle.sh #!/bin/sh # proje/veri/ham icindeki olcum dosyalarinin sayisini bildirir echo "ham olcum sayisi: $(ls -1 "$HOME/proje/veri/ham" | wc -l)" echo "guncel olcum: $(readlink "$HOME/proje/veri/guncel.csv")"
%s/eski/yeni/ komutu tüm satırlarda değiştirme yapar; wq kaydedip çıkar. Ekran
editöründe iki nokta üst üste yazıp aynı komutu vermek aynı sonucu üretir. Ekran tabanlı bir
oturum metin olarak gösterilemez, ama komut dili gösterilebilir ve gösterilen budur.
Kipsiz Editörler
İkinci tasarım ailesi kip kullanmaz: yazılan karakterler doğrudan metne girer, komutlar denetim tuşu bileşimleriyle verilir ve kullanılabilir komutlar ekranın altında sürekli listelenir.
Karşılaştırma iki eksende yapılır:
| Ölçüt | Kip tabanlı | Kipsiz |
|---|---|---|
| Öğrenme eşiği | Yüksek; kip kavramı öğrenilmeli | Düşük; komutlar ekranda yazılı |
| Komut birleştirme | Eylem ve hareket birleşir | Bileşim başına tek komut |
| Bulunma güvencesi | POSIX’te tanımlı, her sistemde beklenir | Ayrı paket, kurulu olmayabilir |
| Sınırlı terminal | Temel karakterlerle çalışır | Denetim bileşimleri gerekir |
Üçüncü satır pratikte belirleyicidir. Yalın bir sistemde veya bir kurtarma ortamında kipsiz editör bulunmayabilir:
$ command -v vi ed nano /usr/bin/vi /usr/bin/ed /usr/bin/nano
Bu sistemde üçü de vardır; ancak yalnızca ilk ikisinin bulunacağı varsayılabilir. Bu nedenle kip tabanlı editörün hayatta kalma kümesi, tercih edilen editör ne olursa olsun öğrenilmelidir.
Editör Tercihini Bildirmek
Birçok program, düzenleme gerektiğinde bir editör başlatır: zamanlanmış görev tanımları, sürüm denetimi araçlarının ileti ekranları ve yetkili dosya düzenleme araçları. Hangi editörün açılacağı ortam değişkenlerinden okunur.
$ echo "EDITOR=${EDITOR:-tanimsiz}"
EDITOR=tanimsiz
$ EDITOR=vi
$ export EDITOR
$ echo "EDITOR=$EDITOR"
EDITOR=vi
export olmadan yapılan atama yalnızca kabuğun kendi değişkeni olur ve çalıştırılan
programlara aktarılmazdı; komut yolu dersindeki ortam ayrımı burada doğrudan uygulanır.
Ayarın kalıcı olması için, PATH değişikliğiyle aynı yere — oturum açılışında okunan
yapılandırma dosyasına — yazılır.
İki değişken kullanılır: tam ekran editörü için VISUAL, satır tabanlı ortamlar için
EDITOR. İkisi de tanımlıysa programların çoğu VISUAL değerini yeğler; yalnızca biri
tanımlanacaksa EDITOR yeterlidir.
Özet
- Terminal editörlerinin komut dili, ekransız terminaller için tasarlanan satır
editöründen miras alınmıştır ve
:ile başlayan komutlarda hâlâ görünür. - Kip tabanlı editörde harf tuşları komut olarak kullanılabildiği için eylem ve hareket birleşerek bir komut dili oluşturur.
- Bir dosyayı açıp değiştirip kaydetmek için gereken komut kümesi küçüktür ve emin
olunmadığında
Escnormal kipe döndürür. - Kipsiz editörlerin öğrenme eşiği düşüktür ama her sistemde bulunacakları varsayılamaz.
- Editör tercihi
VISUALveEDITORortam değişkenleriyle bildirilir veexportedilmedikçe çalıştırılan programlara aktarılmaz.
Kurs Kapanışı
Kurs, tek bir dizin ağacı üzerinde ilerledi. Ağaç kurulduğunda boştu; kapanışta üzerinde yapılmış her işlemi taşıyor:
$ betik/ozet.sh ham olcum dosyasi: 4 guncel olcum: ham/olcum-03.csv
Bu iki satırın arkasında kursun tamamı vardır. Betiğin çalışması için arama listesinde bulunması ve çalıştırma bitinin açık olması gerekti. Saydığı dosyalar oluşturuldu, kopyalandı ve taşındı; sayıldıkları dizin yol çözümlemesiyle bulundu. Bildirdiği güncel ölçüm bir sembolik bağın hedefidir. Ağacın tamamı arşivlendi, sıkıştırıldı, uzak bir makineye eşitlendi; bir gruba açıldı ve paylaşılan dizini özel izin bitleriyle korundu.
Kursun kazanımları geriye dönük olarak şöyle toplanır:
- Gezinme ve dosya işlemleri: Hiyerarşinin mantığı, yol çözümlemesi, oluşturma, kopyalama, taşıma, silme, bağlar, arşivleme ve aktarım.
- İzinler ve sahiplik: Kimliğin sayısal temsili, dokuz izin biti ve sekizlik gösterim, sahiplik değişikliği, yetki yükseltme ve üç özel bit.
- Paket yönetimi: Paketin yapısı, bağımlılık çözümlemesi, işlem sınıfları ve depo güven zinciri.
Kurs boyunca komutların yanında bir alışkanlık kümesi de kuruldu ve bunlar komutlardan daha uzun ömürlüdür: yıkıcı bir komutu çalıştırmadan önce açılımını görmek, bir arşivi açmadan önce listelemek, bir eşitlemeyi kuru çalışmayla denemek, bir aktarımı özetiyle doğrulamak ve bir yetkiyi olabilecek en dar kapsamda almak.
Bir sonraki kurs, bu kursun bilinçli olarak dışarıda bıraktığı katmanı ele alır: komutları birbirine bağlamak. Kabuk Programlama kursu girdi ve çıktı yönlendirmesini, boru hatlarını, değişkenleri, koşulları ve döngüleri kurar; bu kursta tek tek çalıştırılan komutlar orada yeniden çalıştırılabilir betiklere dönüşür. Kabuk dersinde tanıtılan sözcüklere bölme ve açılım kuralları, o kursun dilbilgisinin temelini oluşturacaktır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.