LaBlog

Linux: 35 Süper Script!

11.10.2024

1.Disk Alanını Kontrol Edin

#!/bin/bash
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $6 }' | while read output;
do
echo $output
if [ $(echo $output | awk '{print $1}' | sed 's/%//g') -ge 80 ]; then
echo "Warning: $output"
fi
done

Bu Bash script’i, Linux sisteminizde disk kullanımı %80’i geçen bölümleri tespit eder ve uyarı verir. • df -h komutu ile disk kullanım bilgileri okunur. • grep komutu ile gereksiz satırlar (Filesystem, tmpfs, cdrom) filtrelenir. • awk ile disk doluluk yüzdesi ve mount point (bağlama noktası) ayrıştırılır. • Yüzde değeri %80 veya daha yüksekse, ilgili disk bölümü için uyarı mesajı gösterilir. Bu sayede, disk doluluğunun kritik seviyelere ulaştığı durumları önceden fark etmenizi sağlar.

2.Sistem Yükünü İzleme

#!/bin/bash
uptime | awk -F 'load average:' '{print $2}' | sed 's/,//g'

Sistemin uptime (çalışma süresi) bilgisi içerisinden sadece load average (sistem yükü ortalaması) değerlerini alıp temizler ve gösterir. • uptime komutu, sistemin ne kadar süredir açık olduğunu ve CPU yükü ortalamalarını verir. • awk ile yük ortalaması kısmı ayrıştırılır. • sed ile yük değerleri arasındaki virgüller kaldırılır. Sistemin anlık yük ortalamalarını sade bir biçimde sunar.

3.Belirli Bir Boyuttaki Dosyaları Bul ve Sil

#!/bin/bash
find /path/to/search -type f -size +100M -exec rm -f {} \;

Belirtilen dizin (/path/to/search) içinde 100 MB’den büyük olan dosyaları bulur ve siler. • find komutu ile belirli bir dizinde dosya aranır. • -type f sadece dosyaları bulur. • -size +100M 100 MB’den büyük dosyaları hedefler. • -exec rm -f {} ; bulunan dosyaları zorla siler. Dikkatli kullanılmalı !!, büyük dosyaları otomatik olarak temizler.

4.Processes Ada Göre Listeleyin ve Sonlandırın

#!/bin/bash
ps aux | grep 'process_name' | awk '{print $2}' | xargs kill

Bu Bash komutu, belirli bir process_name’e sahip çalışan işlemleri bulur ve bu işlemleri sonlandırır. • ps aux ile tüm çalışan işlemler listelenir. • grep ile belirtilen process_name filtrelenir. • awk ile işlem ID’leri (PID) alınır. • xargs kill bu PID’leri alarak ilgili işlemleri öldürür. Kısacası, belirtilen işlem adını taşıyan tüm süreçleri otomatik olarak sonlandırır.

5.Belirli Bir Port Noktasını İzleme

#!/bin/bash
lsof -i :80

80 numaralı portu kullanan tüm açık dosyaları veya işlemleri listeler. • lsof (list open files), sistemdeki açık dosyaları ve bu dosyalara erişen işlemleri gösterir. • -i :80 seçeneği, yalnızca 80 numaralı portu kullanan işlemleri filtreler (genellikle HTTP trafiği için kullanılır). 80 numaralı portu dinleyen veya kullanan işlemleri görmenizi sağlar.

6.Klasör Sıkıştırmak

#!/bin/bash
tar -czvf archive_name.tar.gz /path/to/directory

belirtilen bir dizini sıkıştırılmış bir arşiv dosyasına dönüştürür. • tar arşiv oluşturma komutudur. • -czvf seçenekleri: • c: yeni bir arşiv oluşturur. • z: gzip ile sıkıştırır. • v: işlemi ayrıntılı olarak gösterir (verbose). • f: arşiv dosyasının adını belirtir. • archive_name.tar.gz oluşturulacak arşivin adıdır. • /path/to/directory sıkıştırılacak dizinin yoludur. Belirtilen dizin .tar.gz formatında sıkıştırılmış bir arşiv dosyasına dönüştürülür.

7.Dosyaları Çıkartmak

#!/bin/bash
tar -xzvf file_name.tar.gz

Sıkıştırılmış bir .tar.gz arşiv dosyasını açar ve içeriğini çıkarır. • tar arşiv işlemleri için kullanılır. • -xzvf seçenekleri: • x: arşivi açar (extract). • z: gzip ile sıkıştırılmış arşivi açar. • v: işlemi ayrıntılı olarak gösterir (verbose). • f: açılacak arşiv dosyasının adını belirtir. • file_name.tar.gz açılacak arşiv dosyasının adıdır. file_name.tar.gz dosyasındaki tüm içerik mevcut dizine çıkarılır.

8.Dosyaları Toplu Yeniden Adlandırma

#!/bin/bash
for file in *.jpg; do
  mv "$file" "${file%.jpg}_renamed.jpg"
done

Bu Bash komutu, mevcut dizindeki tüm .jpg uzantılı dosyaları yeniden adlandırır ve her dosya adına “_renamed” ekler. • for file in *.jpg; döngüyle dizindeki tüm .jpg dosyalarını seçer. • mv “$file” “${file%.jpg}_renamed.jpg” komutu, her bir dosyayı orijinal adını koruyarak, “_renamed” ekini ekleyip yeni adla taşır. Sonuç olarak, tüm .jpg dosyaları, yeni bir adla “_renamed” eklenerek yeniden adlandırılır. Örneğin, image.jpg dosyası image_renamed.jpg olarak değiştirilir.

9.MySQL Veritabanı Yedeklemek

#!/bin/bash
mysqldump -u root -p database_name > backup_file.sql

Belirtilen MySQL veritabanının bir yedeklemesini oluşturur. • mysqldump: MySQL veritabanlarının yedeklerini almak için kullanılır. • -u root: root kullanıcısı ile veritabanına bağlanır. • -p: şifre isteyeceğini belirtir. • database_name: yedeklenecek veritabanının adıdır. • > backup_file.sql: yedek dosyasının adını ve nereye kaydedileceğini belirtir. database_name adlı veritabanının yedeği backup_file.sql dosyasına kaydedilir.

10.Sistem Günlüklerini Temizleme

#!/bin/bash
find /var/log/ -type f -mtime +30 -exec rm -f {} \;

Bu Bash komutu, /var/log/ dizininde 30 günden eski olan tüm dosyaları bulur ve siler. • find /var/log/: Bu komut, belirtilen dizinde dosya arar. • -type f: Sadece dosyaları hedefler (dizinler hariç). • -mtime +30: Son değiştirilme tarihi 30 günden eski olan dosyaları bulur. • -exec rm -f {} ;: Bulunan dosyaları zorla (-f) siler. Sonuç olarak, /var/log/ dizinindeki 30 günden eski log dosyaları otomatik olarak temizlenir.

11.CPU Kullanımını İzleme

#!/bin/bash
top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}'

Sistemin anlık CPU kullanım yüzdesini hesaplar ve gösterir. • top -bn1: CPU ve diğer sistem bilgilerini bir kez gösterir. • grep “Cpu(s)”: Çıktıdaki CPU kullanım bilgilerini filtreler. • sed: CPU’nun boşta olduğu yüzdelik değeri (id) ayıklar. • awk ‘{print 100 - $1”%”}’: Boşta olan CPU yüzdesini, toplam yüzdeden çıkararak kullanılan CPU yüzdesini hesaplar. CPU’nun o anki kullanım yüzdesini basit bir şekilde gösterir.

12.Boş Klasörleri Listele

#!/bin/bash
find /path/to/search -type d -empty

Belirtilen dizinde boş olan tüm alt dizinleri bulur. • find /path/to/search: Belirtilen dizinde arama yapar. • -type d: Sadece dizinleri hedefler. • -empty: Boş olan dizinleri bulur. /path/to/search dizininde herhangi bir dosya veya alt dizin içermeyen tüm boş dizinleri listeler.​

13.Bellek Kullanımını İzleme

#!/bin/bash
free -m | grep Mem | awk '{print "Memory Usage: " $3/$2 * 100 "% Used, " $3/1024 " GB Used, " $2/1024 " GB Total"}'

Sistemdeki RAM kullanımını yüzdesel ve GB cinsinden hesaplar ve gösterir. • free -m: RAM kullanım bilgilerini megabayt (MB) cinsinden gösterir. • grep Mem: Sadece RAM ile ilgili satırı filtreler. • awk: RAM kullanımını hesaplar ve şu şekilde çıktı verir: • % Used: Kullanılan RAM’in toplam RAM’e oranını yüzde olarak hesaplar. • GB Used: Kullanılan RAM miktarını gigabayt cinsinden gösterir. • GB Total: Toplam RAM kapasitesini gigabayt cinsinden gösterir. Sonuç olarak, sistemde kullanılan RAM miktarını hem yüzde hem de GB cinsinden görmenizi sağlar.

14.SSH Port Kontrolü

#!/bin/bash
nc -zv localhost 22

localhost (yerel makine) üzerindeki 22 numaralı portun açık olup olmadığını kontrol eder. • nc (netcat), ağ bağlantıları oluşturmak ve kontrol etmek için kullanılan bir araçtır. • -z: Port taraması yapar, veri göndermez. • -v: Ayrıntılı çıktı sağlar (verbose). • localhost 22: Yerel makinedeki 22 numaralı portu kontrol eder (genellikle SSH için kullanılır). Bu komut, yerel makinedeki 22 numaralı portun açık olup olmadığını bildirir.

15.Başarısız Hizmeti İzleme ve Otomatik Yeniden Başlatma

#!/bin/bash
SERVICE="myapp"
while true; do
if ! systemctl is-active --quiet $SERVICE; then
echo "Service $SERVICE is down, attempting to restart."
        systemctl restart $SERVICE
sleep 10
else
echo "Service $SERVICE is running."
sleep 60
fi
done

Bu Bash script’i, belirli bir servis olan myapp’in sürekli çalışıp çalışmadığını kontrol eder ve eğer servis çalışmıyorsa yeniden başlatmayı dener. • SERVICE=“myapp”: Kontrol edilecek servis adını belirler. • while true; do: Sonsuz bir döngü başlatır, böylece servis sürekli kontrol edilir. • systemctl is-active –quiet $SERVICE: Servisin aktif olup olmadığını kontrol eder. • Eğer servis çalışmıyorsa, echo ile uyarı verir ve servisi yeniden başlatmak için systemctl restart $SERVICE komutunu kullanır. • Servis çalışıyorsa, her 60 saniyede bir servisin çalıştığını belirten mesaj verir. • sleep 10 ve sleep 60: Yeniden başlatma denemeleri ve normal kontrol aralıkları için bekleme sürelerini ayarlar. Sonuç olarak, bu script, sürekli olarak myapp servisini izler ve eğer servis kapanırsa, otomatik olarak yeniden başlatır.

16.MySQL Veritabanını Yedekle ve Sıkıştır

#!/bin/bash
DB_NAME="mydatabase"
DB_USER="root"
DB_PASS="mypassword"
BACKUP_DIR="/backups"
DATE=$(date +%Y-%m-%d_%H%M%S)
FILENAME="$BACKUP_DIR/$DB_NAME-$DATE.sql.gz"
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $FILENAME
echo "Database backup completed: $FILENAME"

Bu Bash script’i, bir MySQL veritabanının sıkıştırılmış bir yedeğini alır ve belirtilen bir dizine kaydeder. • DB_NAME=“mydatabase”, DB_USER=“root”, DB_PASS=“mypassword”: Yedeklenecek veritabanının adı, kullanıcı adı ve şifresi. • BACKUP_DIR=”/backups”: Yedeklerin kaydedileceği dizin. • DATE=$(date +%Y-%m-%d_%H%M%S): Yedeğin alındığı tarih ve saat bilgilerini içeren bir zaman damgası oluşturur. • FILENAME=”$BACKUP_DIR/$DB_NAME-$DATE.sql.gz”: Yedeğin sıkıştırılmış dosya adı. • mysqldump | gzip > $FILENAME: Veritabanını yedekler ve sonuçta oluşan SQL dosyasını gzip ile sıkıştırıp belirtilen dosyaya kaydeder. • echo: Yedekleme işlemi tamamlandığında başarı mesajını görüntüler. Sonuç olarak, bu komut mydatabase veritabanının sıkıştırılmış bir yedeğini alır ve /backups dizinine tarih damgalı bir dosya olarak kaydeder.

17.Eski Dosyaları Bul ve Sil

#!/bin/bash
find /path/to/files -type f -mtime +30 -exec rm {} \;
echo "Deleted files older than 30 days."

Belirtilen dizindeki 30 günden daha eski dosyaları bulur ve siler, ardından silme işleminin tamamlandığını bildirir. • find /path/to/files: Belirtilen dizin içinde arama yapar. • -type f: Yalnızca dosyaları hedefler (dizinleri hariç tutar). • -mtime +30: Son değiştirilme tarihi 30 günden eski olan dosyaları bulur. • -exec rm {} ;: Bulunan dosyaları siler. • echo “Deleted files older than 30 days.”: Silme işlemi tamamlandıktan sonra bilgi mesajı verir. Sonuç olarak, belirtilen dizinde 30 günden eski dosyalar temizlenir ve işlemin başarılı olduğu kullanıcıya bildirilir.

18.Günlük Dosyalarını Analiz Edin ve Uyarı E-postaları Gönderin

#!/bin/bash
ERROR_COUNT=$(grep -c "ERROR" /var/log/myapp.log)
if [ $ERROR_COUNT -gt 0 ]; then
    echo "Detected $ERROR_COUNT errors in the log file." | mail -s "Error Alert" admin@example.com
fi

Bu Bash script’i, bir log dosyasındaki “ERROR” kelimesini sayar ve eğer hata tespit edilirse, e-posta yoluyla bir uyarı gönderir. • grep -c “ERROR” /var/log/myapp.log: Log dosyasında “ERROR” kelimesini arar ve kaç kez geçtiğini sayar. • if [ $ERROR_COUNT -gt 0 ]: Eğer hata sayısı sıfırdan büyükse (yani hata varsa) işlem yapılır. • echo “Detected $ERROR_COUNT errors in the log file.”: Hata sayısını içeren mesaj oluşturur. • mail -s “Error Alert” [email protected]: Hata mesajını e-posta ile “Error Alert” başlığıyla belirtilen e-posta adresine gönderir. Bu script, log dosyasında hata tespit ettiğinde sistem yöneticisine otomatik olarak uyarı e-postası gönderir.

19.Dinamik Olarak SSH Anahtar Çifti Oluşturun

#!/bin/bash
KEY_DIR="/home/user/.ssh"
KEY_NAME="mykey"
mkdir -p $KEY_DIR
ssh-keygen -t rsa -b 4096 -f $KEY_DIR/$KEY_NAME -N ""
echo "SSH key pair generated at $KEY_DIR/$KEY_NAME"

belirtilen dizinde yeni bir SSH anahtar çifti oluşturur. • KEY_DIR=”/home/user/.ssh”: SSH anahtarlarının kaydedileceği dizin. • KEY_NAME=“mykey”: Oluşturulacak SSH anahtar çiftinin adı. • mkdir -p $KEY_DIR: Dizin mevcut değilse oluşturur. • ssh-keygen -t rsa -b 4096 -f $KEY_DIR/$KEY_NAME -N “”: RSA algoritmasını kullanarak 4096 bit uzunluğunda yeni bir SSH anahtar çifti oluşturur. -N “” ile şifre olmadan (boş şifre) anahtar oluşturulur. • echo “SSH key pair generated at $KEY_DIR/$KEY_NAME”: Anahtar çiftinin başarıyla oluşturulduğunu bildiren mesajı görüntüler. Belirtilen dizinde 4096 bitlik bir SSH anahtar çifti oluşturulur ve kullanıcıya konumu hakkında bilgi verilir.

20.Dosya Uzantılarını Toplu Değiştirme

#!/bin/bash
for file in *.txt; do
    mv "$file" "${file%.txt}.md"
done
echo "File extensions changed from .txt to .md"

mevcut dizindeki .txt uzantılı dosyaların adlarını .md uzantısına dönüştürür. • for file in *.txt;: Dizin içinde tüm .txt uzantılı dosyalar üzerinde işlem yapar. • mv “$file” “${file%.txt}.md”: Her dosyanın uzantısını .txt’den .md’ye değiştirir. • echo: İşlem tamamlandıktan sonra dosya uzantılarının başarıyla değiştirildiğini bildirir. Sonuç olarak, tüm .txt dosyaları .md uzantısına çevrilir ve başarı mesajı görüntülenir.

21.Periyodik Olarak Poll API ve Süreç Yanıtı

#!/bin/bash
while true; do
    RESPONSE=$(curl -s http://api.example.com/data)
    process_response "$RESPONSE"
sleep 60
done 

process_response(){
# Process the response here
echo "$1"
}

belirtilen bir API’den sürekli olarak veri alır ve her 60 saniyede bir yanıtı işler. • while true; do: Sonsuz bir döngü başlatır, sürekli olarak veri çeker. • RESPONSE=$(curl -s http://api.example.com/data): API’den veri alır ve yanıtı RESPONSE değişkenine kaydeder. -s seçeneği, curl’ün sessiz modda çalışmasını sağlar (sadece çıktıyı döner). • process_response “$RESPONSE”: API yanıtını process_response fonksiyonuna gönderir. • sleep 60: Her 60 saniyede bir API’yi tekrar sorgular. • process_response(): Yanıtı işlemek için bir fonksiyon. Şu an sadece aldığı veriyi ekrana yazdırıyor (echo “$1”), ancak bu fonksiyona daha karmaşık işleme adımları eklenebilir. Bu script her dakika API’den veri alır ve işleyerek ekrana yazdırır. Yanıtı işleme kısmı fonksiyon içinde özelleştirilebilir.

22.Disk Alanını Kontrol Edin ve Geçici Dosyaları Otomatik Temizleyin

#!/bin/bash
FREE_SPACE=$(df / | grep / | awk '{print $5}' | sed 's/%//g')
if [ $FREE_SPACE -le 10 ]; then
echo "Low disk space, cleaning up temporary files..."
rm -rf /tmp/*
echo "Temporary files cleaned up."
fi

Bu Bash script’i, root dizinindeki boş disk alanını kontrol eder ve eğer boş alan %10 veya daha azsa, /tmp dizinindeki geçici dosyaları silerek disk alanını temizler. • FREE_SPACE=$(df / | grep / | awk ‘{print $5}’ | sed ‘s/%//g’): Root dizinindeki disk kullanım oranını alır ve yüzde işaretini kaldırarak sayısal değer olarak kaydeder. • if [ $FREE_SPACE -le 10 ]; then: Eğer boş alan %10 veya daha azsa, aşağıdaki işlemleri yapar. • echo “Low disk space, cleaning up temporary files…”: Düşük disk alanı uyarısını ekrana yazar. • rm -rf /tmp/*: /tmp dizinindeki tüm geçici dosyaları siler. • echo “Temporary files cleaned up.”: Temizlik işlemi tamamlandıktan sonra kullanıcıya bildirim verir. Sonuç olarak, bu script root dizininde kritik derecede düşük disk alanı olduğunda otomatik olarak geçici dosyaları temizleyerek alan açar.

23.Otomatik Dağıtım Komut Dosyası

#!/bin/bash
# Assuming Git is used for version control
git pull
# Build the project (e.g., using Maven)
mvn clean install
# Stop the currently running service
systemctl stop myapp
# Deploy the newly built app
cp target/myapp.jar /var/lib/myapp/
# Restart the service
systemctl start myapp
echo "Deployment completed successfully."

bir projeyi Git’ten çekip derler ve ardından yeni sürümü dağıtarak ilgili servisi yeniden başlatır. • git pull: Versiyon kontrol sistemi olarak kullanılan Git’ten en son değişiklikleri çeker. • mvn clean install: Maven kullanarak projeyi temizler ve yeniden derler (örneğin, Java projeleri için). • systemctl stop myapp: Hâlihazırda çalışan myapp servisini durdurur. • cp target/myapp.jar /var/lib/myapp/: Derlenen uygulamanın (myapp.jar) yeni sürümünü hedef dizine kopyalar. • systemctl start myapp: Servisi yeni sürümle yeniden başlatır. • echo “Deployment completed successfully.”: Dağıtım işleminin başarıyla tamamlandığını bildirir. Projeyi güncelleyip yeniden dağıtır ve servisi kesintisiz şekilde güncellenmiş sürümle çalıştırır.

24.CSV Dosyalarını awk ile İşlemek

#!/bin/bash
awk -F, '{if ($1=="John Doe") print $2}' input.csv

input.csv dosyasında John Doe adını içeren satırların ikinci sütunundaki verileri çıkarır ve ekrana yazdırır. • awk -F,: Virgül (,) ile ayrılmış sütunları işler. • if ($1==“John Doe”): İlk sütunu (genellikle isim) John Doe olan satırları filtreler. • print $2: Bu satırlardaki ikinci sütunu ekrana yazdırır. input.csv dosyasındaki John Doe isimli kişinin ikinci sütundaki verilerini listeler.

25.Dosya İzinlerini Toplu Değiştirme

#!/bin/bash
for file in /path/to/files/*; do
    chmod 644 "$file"
done
echo "Permissions updated for all files in /path/to/files/"

belirtilen dizindeki tüm dosyaların izinlerini 644 olarak ayarlar. • for file in /path/to/files/*: Belirtilen dizindeki tüm dosyaları döngüye alır. • chmod 644 “$file”: Her dosyanın izinlerini 644 olarak değiştirir. Bu, dosya sahibine okuma ve yazma, gruba ve diğer kullanıcılara sadece okuma izni verir. • echo “Permissions updated for all files in /path/to/files/”: İşlem tamamlandığında bir bilgilendirme mesajı görüntüler. Belirtilen dizindeki tüm dosyaların izinleri güncellenir ve kullanıcıya bildirilir.

26.JSON API Yanıtını İşlemek için curl ve jq kullanın

#!/bin/bash
response=$(curl -s https://api.example.com/data)
echo "$response" | jq '.items[].name'

Bir API’den alınan JSON yanıtını işler ve belirli bir alan olan name değerlerini çıkarır ve ekrana yazdırır. • curl -s api.example.com/data: API’yi sessiz modda sorgular ve JSON formatında bir yanıt alır. • jq ‘.items[].name’: JSON yanıtında items dizisindeki tüm name alanlarını alıp ekrana yazdırır. jq komutu, JSON verilerini işlemek için kullanılır. API yanıtındaki tüm name alanlarının değerleri listelenir.

27.Ağ Bant Genişliği Kullanımını İzleyin

#!/bin/bash
ifconfig eth0 | grep 'RX bytes' | awk '{print $2 $3}' | cut -d: -f2 | sed 's/ //g'
ifconfig eth0 | grep 'TX bytes' | awk '{print $2 $3}' | cut -d: -f2 | sed 's/ //g'

eth0 ağ arayüzü için alınan (RX) ve gönderilen (TX) veri miktarlarını çıkartır ve gösterir. • ifconfig eth0: eth0 adlı ağ arayüzünün bilgilerini getirir. • grep ‘RX bytes’: Alınan baytlar (RX) bilgisini içeren satırı bulur. • awk ‘{print $2 $3}’: Bu satırdaki ikinci ve üçüncü sütunları (örneğin, RX bytes:123456) alır. • cut -d: -f2: : karakterine göre ayırır ve ikinci bölümü (RX bayt değerini) seçer. • sed ‘s/ //g’: Boşlukları kaldırır ve sadece bayt değerini alır. Aynı işlemler TX bytes (gönderilen veri) için de yapılır. eth0 arayüzünden alınan ve gönderilen toplam veri miktarları ayrı ayrı ekrana yazdırılır.

28.Dosyalardaki Metni Yinelemeli Olarak Arama ve Değiştirme

#!/bin/bash
find /path/to/search -type f -exec sed -i 's/old_text/new_text/g' {} +
echo "All occurrences of 'old_text' replaced with 'new_text'."

Belirtilen dizindeki tüm dosyalar içerisinde “old_text” ifadelerini “new_text” ile değiştirir. • find /path/to/search -type f: Belirtilen dizindeki tüm dosyaları bulur. • -exec sed -i ‘s/old_text/new_text/g’ {} +: Her dosyada sed komutunu kullanarak old_text’i new_text ile değiştirir. -i seçeneği dosyaları yerinde (in-place) düzenler, g bayrağı ise her satırda bulunan tüm eşleşmeleri değiştirir. • echo “All occurrences of ‘old_text’ replaced with ‘new_text’.”: İşlemin başarıyla tamamlandığını bildiren bir mesaj görüntüler. Belirtilen dizindeki tüm dosyalarda old_text’in tüm örnekleri new_text ile değiştirilir ve kullanıcıya bilgilendirme mesajı verilir.

29.İki Dizini diff ile karşılaştırın

#!/bin/bash
diff -rq /dir1 /dir2

iki dizin olan /dir1 ve /dir2’yi karşılaştırır ve aralarındaki farklılıkları listeler. • diff -rq: İki dizini karşılaştırır. • -r: Dizinleri rekürsif olarak, yani alt dizinleri de dahil ederek karşılaştırır. • -q: Sadece farklı olan dosyalar ve dizinler hakkında bilgi verir, ayrıntılı içerik farklarını göstermez. Bu komut, /dir1 ve /dir2 dizinleri arasındaki farkları (eksik, farklı veya aynı olmayan dosyalar) özet olarak bildirir.

30./tmp Dizini için Zamanlanmış Temizleme Komut Dosyası

#!/bin/bash
find /tmp -type f -mtime +7 -exec rm -f {} \;
echo "/tmp cleaned up of files older than 7 days."

/tmp dizininde 7 günden eski olan tüm dosyaları siler ve işlem tamamlandıktan sonra bir bilgilendirme mesajı verir. • find /tmp -type f -mtime +7: /tmp dizinindeki son değiştirilme tarihi 7 günden daha eski olan dosyaları bulur. • -exec rm -f {} ;: Bulunan dosyaları zorla siler (-f). • echo “/tmp cleaned up of files older than 7 days.”: Temizlik işleminin tamamlandığını belirten bir mesaj görüntüler. Sonuç olarak, /tmp dizininde 7 günden eski dosyalar otomatik olarak temizlenir ve kullanıcıya bilgi verilir.

31.Kullanıcı Oluşturun ve Şifreyi Ayarlayın (chpasswd Kullanarak)

#!/bin/bash
echo "username:password" | sudo chpasswd
sudo useradd -m username
echo "User 'username' created and password set."

Bu Bash script’i, yeni bir kullanıcı oluşturur ve bu kullanıcı için bir parola belirler. • echo “username:password” | sudo chpasswd: Belirtilen kullanıcı adı ve parolayı alır ve chpasswd komutu ile bu kullanıcının parolasını ayarlar. • sudo useradd -m username: Belirtilen kullanıcı adını kullanarak yeni bir kullanıcı oluşturur ve kullanıcının ana dizinini (-m) oluşturur. • echo “User ‘username’ created and password set.”: Kullanıcı başarıyla oluşturulduktan ve parola ayarlandıktan sonra bir bilgilendirme mesajı verir. Bu script, yeni bir kullanıcı oluşturur ve onun için otomatik olarak bir parola ayarlar.

32.Disk G/Ç'yi İzleyin ve Uyarı Gönderin (iostat ve mail kullanarak)

#!/bin/bash
iowait=$(iostat -dx 1 2 | tail -1 | awk '{print $11}')
if [ "$iowait" -gt 30 ]; then
echo "High IO wait ($iowait%) detected." | mail -s "IO Wait Warning" admin@example.com
fi

Sistemdeki IO wait (girdi/çıktı bekleme süresi) yüzdesini kontrol eder ve belirli bir eşik değerini aşarsa bir uyarı e-postası gönderir. • iowait=$(iostat -dx 1 2 | tail -1 | awk ‘{print $11}’): İki döngüde iostat komutunu çalıştırarak son satırdaki IO wait değerini (% olarak) alır. • if [ “$iowait” -gt 30 ]; then: Eğer IO wait %30’dan büyükse, aşağıdaki işlemi gerçekleştirir. • echo “High IO wait ($iowait%) detected.” | mail -s “IO Wait Warning” [email protected]: IO wait yüzdesini içeren bir uyarı mesajını, belirli bir e-posta adresine konu başlığı ile birlikte gönderir. Sonuç olarak, bu script yüksek IO wait durumlarını otomatik olarak algılar ve bir uyarı gönderir, böylece sistemde olası bir yavaşlama veya performans sorunu fark edilebilir.

33.Dosyaları rsync ile senkronize edin

#!/bin/bash
rsync -avz /source/ /destination/
echo "Files synchronized from /source/ to /destination/."

Bu Bash script’i, rsync komutunu kullanarak /source/ dizinindeki dosyaları /destination/ dizinine senkronize eder ve işlem tamamlandıktan sonra bir bilgilendirme mesajı verir. • rsync -avz /source/ /destination/: • -a: Arşiv modunda çalışır, tüm dosya izinleri, zaman damgaları ve dizin yapısını korur. • -v: Ayrıntılı çıktı (verbose) sağlar, dosya kopyalama işlemini gösterir. • -z: Dosyaları sıkıştırarak aktarır (eğer ağ üzerinden senkronize ediliyorsa). • /source/: Kaynak dizin. • /destination/: Hedef dizin. • echo “Files synchronized from /source/ to /destination/.”: Senkronizasyon tamamlandıktan sonra kullanıcıya bilgilendirme mesajı verir. Sonuç olarak, bu script, /source/ dizinindeki dosyaları /destination/ dizinine senkronize eder ve kullanıcıya işlemin başarıyla tamamlandığını bildirir.

34.Port Durumunu ve Günlük Sonucunu Kontrol Edin

#!/bin/bash
if nc -z localhost 80; then
echo "Port 80 is open."
else
echo "Port 80 is closed."
fi

localhost üzerindeki 80 numaralı portun açık olup olmadığını kontrol eder ve buna göre bir mesaj verir. • nc -z localhost 80: netcat kullanarak localhost’ta 80 numaralı portun açık olup olmadığını kontrol eder. -z bayrağı, port taraması yapar ve veri göndermez. • if … then … else: Eğer port açık ise “Port 80 is open” mesajı, kapalı ise “Port 80 is closed” mesajı görüntülenir. Sonuç olarak, bu script, localhost üzerindeki 80 numaralı portun durumunu kontrol eder ve port açık veya kapalıysa uygun bir mesaj verir.

35.Docker Konteynerlerini Dinamik Olarak Oluşturun ve Yönetin

#!/bin/bash
CONTAINER_NAME="myapp_container"
IMAGE="myapp:latest"
if docker ps -aqf "name=^/$CONTAINER_NAME$"; then
    echo "Container $CONTAINER_NAME already exists. Restarting..."
    docker restart $CONTAINER_NAME
else
    echo "Creating and starting new container $CONTAINER_NAME..."
    docker run -d --name $CONTAINER_NAME $IMAGE
fi

Bu Bash script’i, belirtilen bir Docker konteynerini kontrol eder; eğer konteyner zaten varsa onu yeniden başlatır, yoksa yeni bir konteyner oluşturur ve başlatır. • CONTAINER_NAME=“myapp_container”: Kontrol edilecek veya oluşturulacak konteynerin adı. • IMAGE=“myapp:latest”: Kullanılacak Docker imajı. • docker ps -aqf “name=^/$CONTAINER_NAME$”: Bu komut, belirtilen isimde bir konteynerin olup olmadığını kontrol eder. • -a: Tüm konteynerleri listeler (çalışan ve durdurulmuş). • -q: Sadece konteyner ID’lerini döner. • -f “name=…”: Belirtilen isimle filtreler. • Eğer konteyner mevcutsa, docker restart $CONTAINER_NAME ile konteyner yeniden başlatılır. • Eğer konteyner mevcut değilse, docker run -d –name $CONTAINER_NAME $IMAGE komutu ile belirtilen imajdan yeni bir konteyner başlatılır. Sonuç olarak, bu script, mevcut bir Docker konteynerini yeniden başlatır veya eğer konteyner yoksa yeni bir tane oluşturup başlatır.

BONUS! - Web Sayfalarını Toplu İndirin ve HTML Dosyaları Olarak Kaydedin

#!/bin/bash
URLS=("http://example1.com" "http://example2.com")
for url in "${URLS[@]}"; do
    filename=$(echo "$url" | tr -d '/' | sed 's|^http://||;s|$|.html|')
    curl -o "$filename" "$url"
done

belirtilen URL’lerden içerik indirir ve her bir URL için dosya adlarını düzenleyerek, içerikleri bu dosyalara kaydeder. • URLS=(“http://example1.com”" title="http://example1.com”" style="font-weight:bold; text-decoration:underline; color: var(--primary);" target="_blank">http://example1.com” “http://example2.com”): İndirilecek URL’leri içeren bir dizi. • for url in “${URLS[@]}”; do: URL dizisindeki her bir öğe üzerinde döngü oluşturur. • filename=$(echo “$url” | tr -d ‘/’ | sed ‘s|^http://||;s|$|.html|’): URL’yi dosya adı olarak düzenler. • tr -d ‘/’: URL’deki eğik çizgileri kaldırır. • sed ’s|^http://||:http://” kısmını URL’den kaldırır. • s|$|.html|: Dosya adına “.html” uzantısı ekler. • curl -o “$filename” “$url”: URL’den içerik indirir ve bu içeriği filename olarak adlandırılan dosyaya kaydeder. Bu script belirtilen URL’lerden içerik indirir ve her bir URL’yi, adından belirlenen dosyalara kaydeder. Örneğin, http://example1.com içeriği example1.com.html adlı dosyaya kaydedilir.

Umarız buradaki scriptler işinize yaramıştır. Daha fazlası için sayfamızı takip etmeyi ve içeriklere yorum yapmayı lütfen unutmayın.