Linux'ta sistem yönetimi için döngü için Bash betiği nasıl kullanılır

Bash komut dosyası, her Linux yöneticisinin İsviçre Çakısı'dır. Bash komut dosyalarıyla birlikte bir for döngüsü kullanmanın nasıl güçlü sonuçlar üretebileceğini öğrenin.

<a href="https://www.techrepublic.com/a/hub/i/r/2021/06/04/4c5137c6-51ce-49a4-a075-c42e59652e14/resize/770x/6b43f588dc61d86bb5736a0c731bd2df/bash-script.jpg " target="_blank" data-component="modalEnlargeImage" data-headline="

" data-credit="Resim: jivacore/Shutterstock">bash-script.jpg

Resim: jivacore/Shutterstock

Bash komut dosyası, sistem yöneticisi olarak Linux'taki çabalarımın temelini oluşturmaya devam ediyor ve iş yükümü hafifletmek için her gün kullanıyorum. En sık kullandığım kabuk komut dosyası türlerinden biri, oluşturduğum hedef ana bilgisayar adlarını içeren bir metin dosyasına dayalı olarak komutları işleyen ve sunuculara uygulayan bir for döngüsü içerir.

GÖRMEK: Kubernetes: Bir hile sayfası (ücretsiz PDF) (Teknoloji Cumhuriyeti)

Bu komut dosyaları, çeşitli komutları çalıştırmak için dosyaları sunuculara kopyalayabilir veya ssh aracılığıyla bu sistemlerde oturum açabilir. Bu süreç en iyi şekilde kullanılır.
SSH ana bilgisayar anahtarları yerinde

hedef sistemlere parolasız erişime izin vermek için aksi takdirde betiğinizin bağlanacağı her sistem için bir parola yazmanız gerekir. Bu komutları da çalıştırmak için uygun izinlere sahip olmanız gerekir.

Hedef ana bilgisayar listenizin doğru olması ve yalnızca bu komutların çalıştırılması gereken sistemleri içermesi gerektiği göz ardı edilemez, aksi takdirde bu listede olmaması gereken dosyaları silerek veya ana bilgisayarları yeniden başlatarak çok hızlı bir şekilde hasara yol açabilirsiniz. Üretim sistemlerini yeniden başlatmak, BT'de CEE olarak adlandırdığımız bir kariyer sonu olayı olabilir.

Bu komut dosyalarının bir .sh uzantısı içermesi ve chmod +x (komut dosyası adı) kullanılarak yürütülebilir olarak ayarlanması gerektiğini unutmayın. Sunucu listesini içeren dosya adı, komut dosyasını çalıştırdığınız dizinde değilse, komut dosyasında tam yolu belirtmeniz gerekir. Komut dosyalarımı genellikle "root" altındaki bir alt klasörden çalıştırırım.

İşte basit komut dosyalarımdan birine bir örnek, "besrestart.sh." Bu komut dosyası, "sunucular" adlı bir metin dosyasında listelenen tüm ana bilgisayarlarda besclient hizmetini (sistem düzeltme eki için kullanılan BigFix) başlatmak için tasarlanmıştır:

for l in `cat servers`; do echo $l;ssh -q $l service besclient restart;echo $l; done

Komut dosyası, küçük L harfinde olduğu gibi (i veya I ile karıştırılmamalıdır) "for I" kullanır, bu, sunucuların metin dosyasını cat ve birer birer komutları yürütmek için kullanmak için her bir ana bilgisayar adını yarı- kolon. "Ben" sadece her bir ana bilgisayar adı girişini ifade eder. Her noktalı virgül, zincirdeki komutları ayırır.

` tek bir alıntı olmadığını unutmayın; "geri alıntı" karakteridir ve tipik bir klavyenin sol üst köşesindeki yaklaşık işareti (~) ile aynı tuşu paylaşır.

"do echo $l", bir sonraki komutu çalıştırmadan önce ana bilgisayar adını çıkaracaktır.

Şimdi, ssh -q $l komut dosyasına hedef ana bilgisayara ssh yapmasını söylediği nitty-cesur geliyor. Artık uzak kutudadır ve "service besclient restart" komutunu başlatabilir.

"echo $I", komutun başarıyla çalıştığını doğrulamanın bir yolu olarak ilgili ana bilgisayar adını görüntüler.

GÖRMEK: Baştan sona: Bir LDAP sunucusu nasıl dağıtılır (TechRepublic Premium)

Son olarak, "bitti", komut zincirini sonlandırır ve sonraki sisteme geçer veya üzerinde çalışılacak başka sistem yoksa komut dosyasını çalıştırmayı bitirir.

Sunucu dosyanızın şu öğeleri içerdiğini varsayalım:

Sunucu 1
sunucu2
sunucu3
sunucu4
sunucu5

Komut dosyası çalıştıktan sonra, sistemin tüm hedeflere bağlanabileceğini varsayarak aşağıdakine benzer bir çıktı görürsünüz.

Sunucu 1
Sunucu 1
sunucu2
sunucu2
sunucu3
sunucu3
sunucu4
sunucu4
sunucu5
sunucu5

Bir ana bilgisayar adı için tek bir giriş görürseniz, o ana bilgisayara olan bağlantının çalıştığından emin olun ve yeniden deneyin.

İşte bir sisteme bağlanan, bir servisi durduran, bir dosyayı silen, yeni bir dosyayı scp ile sisteme kopyalayan ve ardından ilgili servisi başlatan başka bir örnek script.

for l in `cat servers`; do echo $l;ssh -q $l service besclient stop;echo $l; done 
for l in `cat servers`; do echo $l;ssh -q $l rm -rf /var/opt/BESClient/besclient.config;echo l; done 
for l in `cat servers`; do scp besclient.config $l:/var/opt/BESClient/;echo $l; done 
for l in `cat servers`; do echo $l;ssh -q $l service besclient start;echo $l; done

Belirli bir sırayla, günlük görevler için güvendiğim ana komut dosyaları şunlardır:

Bu komut dosyası bir hizmeti durdurabilir, ilgili rpm'leri kaldırabilir ve ardından hedef sistemleri temizlemek için uygulama dizinini silebilir:

for l in `cat servers`; do echo $l;ssh -q $l service besclient stop;echo $l; done 
for l in `cat servers`; do echo $l;ssh -q $l rpm -e BESAgent-9.5.10.79-rhe6.x86_64;echo $l; done 
for l in `cat servers`; do echo $l;ssh -q $l rpm -e BESAgent-9.5.3.211-rhe5.x86_64;echo $l; done 
for l in `cat servers`; do echo $l;ssh -q $l rm -rf /etc/opt/BESClient /var/opt/BESClient /opt/BESClient;echo $l; done 

Bu komut dosyası, envanter oluşturma sistemleri için yararlı olabilecek hedef ana bilgisayarlardan bazı donanım ayrıntılarını toplar:

 for l in `cat servers`; do echo $l;ssh -q $l dmidecode | grep -i serial;echo $l; done
 for l in `cat servers`; do echo $l;ssh -q $l lscpu | grep "CPU(s):";echo $l; done
 for l in `cat servers`; do echo $l;ssh -q $l lscpu | grep "Core(s) per socket:";echo $l; done
 for l in `cat servers`; do echo $l;ssh -q $l lscpu | grep "Socket(s):";echo $l; done 
 for l in `cat servers`; do echo $l;ssh -q $l free -h;echo $l; done 

Bu komut dosyası, hedef sistemler /etc/cron.daily klasörlerine başka bir komut dosyası kopyalar, böylece bu komut dosyaları her 24 saatte bir yürütülür:

 for l in `cat servers`; do ssh -q $l /etc/cron.daily/update-tools.sh; done 

Bu komut dosyası, hedef sistemlerdeki belirli bir dosyanın sahibini "prod1" olarak ayarlar:

 for l in `cat servers`; do echo $l;ssh -q $l chown prod1:prod /fileData/fileroot/certs/interac.jks;echo $l; done 

Bu komut dosyası, tüm hedef ana bilgisayarlara bir yum güncellemesi çalıştırmasını ve paketleri yüklemesini istememesini söyler:

 for l in `cat servers`; do ssh -q $l yum -y update; echo $l; done 

Bu komut dosyası, tüm hedef ana bilgisayarlardaki /etc/shadow dosyasını kök dizine yedekler:

 for l in `cat servers`; do echo $l;ssh -q $l cp /etc/shadow /root/shadow20210604;echo $l; done 

Bu komut dosyası, sunucular dosyasında listelenen tüm sunucuları yeniden başlatır:

 for l in `cat servers`; do ssh -q $l shutdown -r now; echo $l; done 

Bu komut dosyası, mevcut bir NFS biriminin bağlantısını kesmek, ardından /etc/fstab'ı yeni bir NFS bağlama adıyla güncellemek ve tüm birimleri yeniden monte etmek için kullanışlı olabilir:

 for l in `cat servers`; do echo $l;ssh -q $l umount /clover;echo $l; done 
 for l in `cat servers`; do echo $l;ssh -q $l;sed -r -i 's|vnx-corp-nfs1|unity-corp-nfs01|' /etc/fstab;mount -a;echo $l;      done 

Bu komut dosyası, hedef sistemlere bir ana bilgisayar dosyası girişi ekleyebilir

 for l in `cat servers`; do ssh -q $l 'echo "10.18.12.33  github.devops.local" >> /etc/hosts'; echo $l; done 

Son olarak, bu komut dosyası, tüm hedef ana bilgisayarlarda geçerli çalışma süresini size söyleyebilir:

 for l in `cat servers`; do echo $l;ssh -q $l uptime;echo $l; done 

Gördüğünüz gibi, bu komut dosyalarının işlevselliği yalnızca hayal gücünüzle sınırlıdır. Umarım bunlar yardımcı olur ve idari iş yükünüzü hafifletir.

Ayrıca bkz.

Source link

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*