Linux'ta Bash'te “Buradaki Belgeler” Nasıl Kullanılır
Yayınlanan: 2022-01-29Garip bir şekilde adlandırılan "buradaki belgeler", Linux'ta Bash betiklerinde giriş/çıkış yönlendirmesini kullanmanıza izin verir. Uzak bir bilgisayarda çalıştırmanız gereken komutları otomatikleştirmenin harika bir yoludur.
İşte Belgeler
Linux'taki birçok komutun iki veya üç harfli adı vardır. Bu kısmen, Linux'un öğrenmenin zor olduğu ve gizli komutlarla dolu olduğu fikrini ortaya çıkaran şeydir. Ancak Linux'taki en tuhaf isimlerden biri, şifreli olarak kısa olanlardan biri değil. "Buradaki belgeler" belge değildir ve "burada"nın ne anlama geldiği de tam olarak açık değildir.
Nispeten belirsiz bir yapıdır, ancak faydalıdırlar. Tabii ki, bu Linux, yani bir kedinin derisini yüzmenin birden fazla yolu var. Burada belgeler tarafından sağlanan bazı işlevler başka şekillerde de çoğaltılabilir. Bu alternatif yöntemler genellikle daha karmaşıktır. Programlama ve komut dosyası oluşturmada "daha karmaşık" aynı zamanda "hatalara daha yatkın" anlamına gelir ve kodunuzun bakımı daha zordur.
Burada belgelerin gerçekten mükemmel olduğu yer, bir komut dosyası içinden kurulan bir bağlantıdan uzak bir bilgisayara göndermek istediğiniz komutların otomasyonundadır. Bağlantı kurmak kolaydır, ancak bağlantı kurulduktan sonra komutlarınızı komut dosyanızdan uzak bilgisayardaki kabuğa nasıl "pompalarsınız"? İşte belgeler bunu çok basit bir şekilde yapmanızı sağlar.
Burada Belgelerin Temel İlkeleri
Burada bir belgenin deyimsel temsili şöyle görünür:
KOMUT << limit_string . . Metin veri değişkenler . . limit_string
- KOMUT : Bu, yeniden yönlendirilen girişi kabul eden herhangi bir Linux komutu olabilir.
echo
komutunun yeniden yönlendirilen girişi kabul etmediğini unutmayın. Ekrana yazmanız gerekiyorsacat
komutunu kullanabilirsiniz, o da yapar. - << : Yönlendirme operatörü.
- limit_string : Bu bir etikettir. Komuta yönlendirdiğiniz veri listesinde görünmediği sürece istediğiniz gibi olabilir. Metin, veri ve değişkenler listesinin sonunu işaretlemek için kullanılır.
- Veri Listesi : Komuta beslenecek verilerin listesi. Komutlar, metinler ve değişkenler içerebilir. Veri listesinin içeriği, _limit_string ile karşılaşılıncaya kadar her seferinde bir satır komuta beslenir.
Muhtemelen burada sınır dizesi olarak “EOF” kullanan belge örnekleri göreceksiniz. Biz bu yaklaşımı desteklemiyoruz. Çalışır, ancak “EOF”, “Dosya Sonu” anlamına gelir. Bir ev belgesinin bir komut dosyasındaki son şey olduğu nadir durumun dışında, “EOF” hatalı bir şekilde kullanılıyor.
Yaptığınız şeye atıfta bulunan bir sınır dizesi kullanırsanız, komut dosyalarınızı çok daha okunabilir hale getirecektir. Secure Shell (SSH) üzerinden uzak bir bilgisayara bir dizi komut gönderiyorsanız, “_remote_commands” gibi bir sınır dizesi çok mantıklı olacaktır. Alt çizgi “ _
” karakteri ile başlamanıza gerek yoktur. Bunu, senaryonuzda sıra dışı bir şey olarak işaretlediği için yapıyoruz.
Basit Örnekler
Buradaki belgeleri komut satırında ve komut dosyalarında kullanabilirsiniz. Bir terminal penceresine aşağıdakini yazdığınızda, “Enter” tuşuna her bastığınızda bir “ >
” satır devam istemi göreceksiniz. "_end_of_text" sınır dizesini yazıp "Enter"a bastığınızda, web sitelerinin listesi cat,
iletilir ve bunlar terminal penceresinde görüntülenir.
kedi << _end_of_text Nasıl Yapılır? Geek'i İncele Hayat Bilgisi Bulut Bilgili BT ZihinBounce _end_of_text
Bu, alıştırmaların en değerlisi değildir, ancak tüm veri listesi derlenene ve sınır dizesiyle karşılaşılana kadar komuta hiçbir şey gönderilmediğini gösterir. cat
komutu, siz “_end_of_text” sınır dizesini girip “Enter” tuşuna basana kadar herhangi bir girdi almaz.
Aynı şeyi bir komut dosyasında da yapabiliriz. Bu örneği bir düzenleyiciye yazın veya kopyalayın, dosyayı “heredoc-1.sh” olarak kaydedin ve düzenleyiciyi kapatın.
#!/bin/bash kedi << "_end_of_text" Kullanıcı adınız: $(whoami) Mevcut çalışma dizininiz: $PWD Bash sürümünüz: $BASH_VERSION _end_of_text
Bu makaleyi takip ederken, her komut dosyası oluşturduğunuzda, çalıştırmadan önce onu yürütülebilir hale getirmeniz gerekir. Her durumda, chmod
komutunu kullanın. Burada kullanılan komut dosyası adı için her örnekte komut dosyasının adını değiştirin.
chmod +x heredoc-1.sh
Bu komut dosyası iki ortam değişkeni içerir, $PWD
ve $BASH_VERSION
. Ortam değişkeni adları, komut dosyası yürütüldüğünde veri değerleriyle (geçerli çalışma dizini ve Bash sürümü) değiştirilir.
Komut dosyası ayrıca whoami
komutunda komut ikamesi kullanır. Komutun adı kendi çıktısıyla değiştirilir. Tüm betiğin çıktısı, cat komutuyla terminal penceresine yazılır. Komut dosyasını adıyla çağırarak çalıştırıyoruz:
./heredoc-1.sh
Komut dosyasını değiştirir ve buradaki belgenin ilk satırındaki sınır dizesini tırnak işaretleri ” "
" içine alırsanız, veri listesi burada belge komutuna kelimesi kelimesine iletilir. Değişken değerleri yerine değişken adları görüntülenir ve komut ikamesi yer almamak.
#!/bin/bash kedi <<- "_end_of_text" Kullanıcı adınız: $(whoami) Mevcut çalışma dizininiz: $PWD Bash sürümünüz: $BASH_VERSION _end_of_text
./heredoc-1.sh
Sekme Karakterlerini Kullanma
Varsayılan olarak, veri listenizdeki sekme karakterleri tutulacak ve terminal penceresine yazılacaktır. Bu örneği kopyalayıp “heredoc-2.sh” olarak kaydedin. chmod
komutunu kullanarak yürütülebilir hale getirin. Satır başında bir dizi boşluk yerine bir veya iki sekme karakteri olduğundan emin olmak için girintili satırları düzenleyin.
#!/bin/bash kedi << _end_of_text Kullanıcı adınız: $(whoami) Mevcut çalışma dizininiz: $PWD Bash sürümünüz: $BASH_VERSION _end_of_text
./heredoc-2.sh
Sekmeler terminal penceresine yazılır.
Yeniden yönlendirme operatörüne bir tire “ -
” eklendiğinde, buradaki belge baştaki sekme karakterlerini yok sayacaktır. Bu örneği “heredoc-3.sh” olarak kaydedin ve çalıştırılabilir hale getirin.
#!/bin/bash kedi <<- _end_of_text Kullanıcı adınız: $(whoami) Mevcut çalışma dizininiz: $PWD Bash sürümünüz: $BASH_VERSION _end_of_text
./heredoc-3.sh
Sekmeler yoksayılır. Bu önemsiz görünebilir, ancak komut dosyalarının girintili bölümleri nedeniyle önde gelen sekmelerle başa çıkmanın düzgün bir yoludur.
Döngüler ve diğer mantıksal yapılar genellikle girintilidir. Buradaki belgeniz bir komut dosyasının girintili bir bölümünde yer alıyorsa, yeniden yönlendirme operatörüyle birlikte tire “ -
” kullanmak, baştaki sekme karakterlerinin neden olduğu biçimlendirme sorunlarını ortadan kaldırır.
#!/bin/bash Eğer doğruysa; sonra kedi <<- _limit_string Önde gelen sekmeli 1. satır. Önde gelen sekmeli 2. satır. Önde gelen sekmeli 3. satır. _limit_string fi
Dosyaya Yönlendirme
Buradaki belgeyle birlikte kullanılan komutun çıktısı bir dosyaya yeniden yönlendirilebilir. Buradaki belgenin ilk satırındaki sınır dizesinden sonra “ >
” (dosyayı oluşturun) veya “ >>
” (dosya yoksa oluşturun, varsa dosyaya ekleyin) yeniden yönlendirme operatörlerini kullanın.
Bu komut dosyası “heredoc-4.sh” şeklindedir. Çıktısını “session.txt” adlı bir metin dosyasına yönlendirecektir.
#!/bin/bash kedi << _end_of_text > session.txt Kullanıcı adınız: $(whoami) Mevcut çalışma dizininiz: $PWD Bash sürümünüz: $BASH_VERSION _end_of_text
./heredoc-4.sh
kedi oturumu.metni
Çıktıyı Başka Bir Komuta Aktarma
Burada bir belgede kullanılan komutun çıktısı, başka bir komuta girdi olarak iletilebilir. “ |
Buradaki belgenin ilk satırındaki limit dizesinden sonra ” operatörü. Buradaki belge komutunun çıktısını, cat
, sed
içine aktaracağız. "a" harfinin tüm oluşumlarını "e" harfiyle değiştirmek istiyoruz.
Bu komut dosyasını “heredoc-5.sh” olarak adlandırın.
#!/bin/bash kedi << _end_of_text | sed 's/a/e/g' Nasıl İle gaak _end_of_text
./heredoc-5.sh
"Gaak", "Geek" olarak düzeltildi.
Bir Fonksiyona Parametre Gönderme
Burada bir belgeyle kullanılan komut, komut dosyasında bir işlev olabilir.
Bu komut dosyası, bazı araç verilerini bir işleve iletir. İşlev, verileri bir kullanıcı tarafından yazılmış gibi okur. Değişkenlerin değerleri daha sonra yazdırılır. Bu betiği “heredoc-6.sh” olarak kaydedin.
#!/bin/bash # set_car_details() işlevi set_car_details () { oku yap modeli oku new_used oku Delivery_collect'i oku konumu oku fiyatı oku } # Verileri set_car_details()'e ileten buradaki belge set_car_details << _mars_rover_data NASA azim gezgini Kullanılmış Toplamak Mars (uzun, enlem) 77.451865,18.445161 2,2 milyar _mars_rover_data # Araç detaylarını alın echo "Yap: $yap" echo "Model: $model" echo "Yeni veya Kullanılmış: $new_used" echo "Teslimat veya Toplama: $delivery_collect" echo "Konum: $konum" echo "Fiyat \$: $fiyat"
./heredoc-6.sh
Araç detayları terminal penceresine yazılır.
E-posta Oluşturma ve Gönderme
Bir e-posta oluşturmak ve göndermek için burada bir belge kullanabiliriz. Yeniden yönlendirme operatörünün önündeki komuta parametreleri iletebileceğimizi unutmayın. Yerel posta sistemi aracılığıyla “dave” adlı kullanıcı hesabına bir e-posta göndermek için Linux mail
komutunu kullanıyoruz. -s
(konu) seçeneği, e-postanın konusunu belirlememizi sağlar.
Bu örnek, "heredoc-7.sh" komut dosyasını oluşturur.
#!/bin/bash makale="İşte Belgeler" mail -s 'İş yükü durumu' dave << _project_report Kullanıcı adı: $(whoami) Görevi tamamladı: Makale: $makale _proje raporu
./heredoc-7.sh
Bu komut dosyasından görünür bir çıktı yok. Ancak postamızı kontrol ettiğimizde, e-postanın oluşturulduğunu, gönderildiğini ve teslim edildiğini görüyoruz.
posta
Here Belgelerini SSH ile Kullanmak
Burada belgeler, bir SSH bağlantısı kurulduktan sonra uzak bir bilgisayarda bazı komutları yürütmenin güçlü ve kullanışlı bir yoludur. İki bilgisayar arasında SSH anahtarları kurduysanız, oturum açma işlemi tamamen otomatik olacaktır. Bu hızlı ve kirli örnekte, uzak bilgisayardaki kullanıcı hesabının parolasını girmeniz istenecektir.
Bu komut dosyası “heredoc-8.sh” dir. “Remote-pc” adlı uzak bir bilgisayara bağlanacağız. Kullanıcı hesabına "dave" denir. -T
(sözde terminal tahsisini devre dışı bırak) seçeneğini kullanıyoruz çünkü bize atanacak etkileşimli bir sözde terminale ihtiyacımız yok.
Komut dosyasının “burada biraz iş yapın” bölümünde, bir komut listesi iletebiliriz ve bunlar uzak bilgisayarda yürütülür. Tabii ki, sadece uzak bilgisayardaki bir komut dosyasını çağırabilirsiniz. Uzak komut dosyası, yürütmek istediğiniz tüm komutları ve rutinleri içerebilir.
Komut dosyamızın (heredoc-8.sh) yapacağı tek şey, uzak bilgisayardaki bir bağlantı günlüğünü güncellemek. Kullanıcı hesabı ve bir saat ve tarih damgası bir metin dosyasına kaydedilir.
#!/bin/bash ssh -T [email protected] << _remote_commands # burada biraz iş yap # bağlantı günlüğünü güncelle echo $USER "-" $(tarih) >> /home/dave/conn_log/script.log _remote_commands
Komutu çalıştırdığımızda, uzak bilgisayardaki hesabın şifresi sorulur.
./heredoc-8.sh
Uzak bilgisayarla ilgili bazı bilgiler görüntülenir ve komut istemine geri döneriz.
Uzak bilgisayarda, bağlantı günlüğünü kontrol etmek için cat
kullanabiliriz:
cat conn_log/script.log
Her bağlantı bizim için listelenir.
İLGİLİ: Linux Kabuğundan SSH Anahtarları Nasıl Oluşturulur ve Yüklenir
Garip İsim, Düzgün Özellikler
Burada belgeler ilginç ama güçlüdür, özellikle de uzak bir bilgisayara komut göndermek için kullanıldığında. rsync
kullanarak bir yedekleme rutini yazmak basit bir mesele olurdu. Komut dosyası daha sonra uzak bilgisayara bağlanabilir, kalan depolama alanını kontrol edebilir ve alan azalırsa bir uyarı e-postası gönderebilir.
İLGİLİ: Linux Sisteminizi rsync ile Nasıl Yedeklersiniz?