İçeriğe geç
academia.sh

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 Esc normal kipe döndürür.
  • Kipsiz editörlerin öğrenme eşiği düşüktür ama her sistemde bulunacakları varsayılamaz.
  • Editör tercihi VISUAL ve EDITOR ortam değişkenleriyle bildirilir ve export edilmedikç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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat