Merhaba.
Bir kaç günden beri bash script'te takıldığım birkaç yerle uğraşıyorum. Öncelikle, bash dilinde bilgimin temel düzey olduğunu belirtmek istiyorum. İnternette sorularımı cevaplayabilecek türkçe kaynak ya da örnek bulamadım. İngilizce dili konuşulan bir foruma ise, konu açıp derdimi anlatabilecek kadar ingilizce bilgim yok. Bash dilinde, sistem açılışında otomatik başlatmayı hedeflediğim bir script yazdım. Amacım, istediğim yazılım ve komutları otomatik çalıştırmaktan ziyade, bash dilini ve bash dilindeki kafama takılan, aşağıda anlatacağım işlemlerin algoritmasını ve kodlarını yazarak ve çalıştırarak anlamak.
Not: Yazdığım script'te istediğim komutun çalışması için sorulan parolayı nasıl tanımlayabileceğimi ya da komutu parola sormasını engelleyerek, istediğim kullanıcı üzerinde çalıştırabileceğimi bilmediğimden, sudoers aracılığıyla, sudo komutundaki parola onayını kapatıp, sudo ekleyerek yazdım.
Yazdığım script bu:
#!/bin/bash
sudo -u root systemctl restart NetworkManager
sudo -u root rm -rf /home/mahmut/Downloads
sudo -u root rm -rf /home/mahmut/.local/share/Trash/files/*
if [ $USER == mahmut ]
then
if sudo -u mahmut -E konsole | sudo -u mahmut -E /opt/sublime_text_3/sublime_text | sudo -u mahmut -E /usr/bin/chromium ns1.google.com | sudo -u root systemctl start httpd
then
echo "Yazılım ya da yazılımlar başlatıldı."
else
echo "HATA: Yazılım ya da yazılımlar başlatılamadı."
fi
else
echo "HATA: Yazılımlar başlatılamadı. Giriş yapılan kullanıcı 'mahmut' kullanıcısı değil."
fi
İlk takıldığım yer, ilk if koşulundaki komutları açtırmadan önce konsole uygulamasını açıp, if koşulunun konsole uygulaması üzerinde çalışmasını istiyorum. Örneğin; sudo -u mahmut -E /usr/bin/chromium ns1.google.com komutunda chromium'un ns1.google.com adresindeki sekmeyle açılması gibi konsole'un da yukarıdaki en üstteki if koşuluyla çalışmasını istiyorum.
İkinci takıldığım yer ise, uygulamanın çalışıp çalışmadığı kontrol ettirme işlemini nasıl koda dökebileceğim konusu. İkinci if koşulunda belirttiğim bu komutlardaki uygulamaların sudo -u mahmut -E konsole | sudo -u mahmut -E /opt/sublime_text_3/sublime_text | sudo -u mahmut -E /usr/bin/chromium ns1.google.com | sudo -u root systemctl start httpd çalışma durumunu, ikinci if koşulunda then bölümüne, ekleyeceğim üçünçü if koşulu kontrol ettirip, sonuca göre hangi yazılımın başlatıldığını veya başlatılamadığını konsole'a yazmasını istiyorum. Bunun için aklıma bir algoritma geldi. Fakat bilgim temel düzey olduğu için koda dökemedim. Aklıma gelen algoritma şu; ps -aux ile aktif süreçlerin çıktısını alıp, grep ile kontrol ettirmek istediğimiz süreç isimlerini aratıp, bu sonucu bir metin belgesine aktarıp, metin belgesi içinde ilgili süreçlerin adını aratmak, ardından, adı bulunan ve bulunmayan süreçleri echo komutu ile yazdırmak. Yazdırdıktan sonra da, metin belgesinin sed ile içini boşaltmak.
Belki bu işlemler için, daha basit bir algoritma veya yardımcı olabilecek araç vardır. Varsa, önerilerinize açığım. Yoksa da, bir yardımseverin, bu algoritmadaki işlemi koda dökmesini rica ediyorum. Üstteki script'te yapmak istediklerimi daha farklı bir algoritmayla yapabileceksem, algoritma önerilerinize de açığım.
Öncelikle Merhaba
Bilgisayar sistemleri kullananların (Unix/Windows/Linux/MAC OS X) az çok pc ingilizce alt yapılarının olması gerektiği düşünüyorum.Bu itibarla aşağıdaki kaynaklara bir bakınız.
http://www.tldp.org/LDP/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf
http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
Link Kaynak Sitesi: https://linuxturkey.org
Türkçe Kaynak:
http://web.deu.edu.tr/doc/lis/lis-3.html
https://www.ozban.com/shell-programlama
http://www.muratyazici.com/wp-content/dersler/acikkaynak/8-KabukProgramlama.pdf
https://www.dijitalders.com/icerik/22/2546/shell_bashsh_zsh_programming_kabuk_programlama.html
https://linux.web.tr/linux-dersleri/1/unix-linux-shell-kernel
https://seminer.linux.org.tr/wp-content/uploads/kabukprogramlama.pdf
http://yunus.hacettepe.edu.tr/~yurdugul/3/indir/KabukProgramlama.pdf
https://pdfs.semanticscholar.org/presentation/4e38/701d9b356397bd5e4f20a9abebe5e3f84115.pdf
http://www.penguen.net/wp-content/uploads/2011/08/KabukProgramlama.pdf
https://sudo.ubuntu-tr.net/Bash-1
http://cayfer.bilkent.edu.tr/~cayfer/kku/141-189.pdf
https://gist.github.com/roktas/8051467
http://kisi.deu.edu.tr//asli.ergun/acikkaynakisletimsistemleri3.pdf
http://docplayer.biz.tr/25860102-Shell-bash-sh-zsh-programming-kabuk-programlama.html
[mention=639476]@LinuxMaster[/mention]
Kaynaklar için teşekkür ederim. İnceleyeceğim.
Alıntı yapılan: LinuxMaster - 28 Haziran 2018 - 17:39:53
Öncelikle Merhaba
Bilgisayar sistemleri kullananların (Unix/Windows/Linux/MAC OS X) az çok pc ingilizce alt yapılarının olması gerektiği düşünüyorum.Bu itibarla aşağıdaki kaynaklara bir bakınız.
http://www.tldp.org/LDP/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf
http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
Link Kaynak Sitesi: https://linuxturkey.org
Türkçe Kaynak:
http://web.deu.edu.tr/doc/lis/lis-3.html
https://www.ozban.com/shell-programlama
http://www.muratyazici.com/wp-content/dersler/acikkaynak/8-KabukProgramlama.pdf
https://www.dijitalders.com/icerik/22/2546/shell_bashsh_zsh_programming_kabuk_programlama.html
https://linux.web.tr/linux-dersleri/1/unix-linux-shell-kernel
https://seminer.linux.org.tr/wp-content/uploads/kabukprogramlama.pdf
http://yunus.hacettepe.edu.tr/~yurdugul/3/indir/KabukProgramlama.pdf
https://pdfs.semanticscholar.org/presentation/4e38/701d9b356397bd5e4f20a9abebe5e3f84115.pdf
http://www.penguen.net/wp-content/uploads/2011/08/KabukProgramlama.pdf
https://sudo.ubuntu-tr.net/Bash-1
http://cayfer.bilkent.edu.tr/~cayfer/kku/141-189.pdf
https://gist.github.com/roktas/8051467
http://kisi.deu.edu.tr//asli.ergun/acikkaynakisletimsistemleri3.pdf
http://docplayer.biz.tr/25860102-Shell-bash-sh-zsh-programming-kabuk-programlama.html
Çok teşekkür ederim banada yardımcı oldu verdiğiniz makalelerin hepsini okuyacağım
[mention=639476]@LinuxMaster[/mention] Linux Türkiye sitesini sayenizde keşfettim gelecek kokan bir siteye benziyor.
Alıntı yapılan: .py - 28 Haziran 2018 - 23:28:03
[mention=639476]@LinuxMaster[/mention] Linux Türkiye sitesini sayenizde keşfettim gelecek kokan bir siteye benziyor.
Birde şuna göz at (devasa bir hazine deposu)
http://www.allitebooks.com/
Sorunu olan üyenin kesinkes çözüme ulaştıracak kaynak (.pdf) döküman;
http://file.allitebooks.com/20160309/Linux%20Command%20Line%20and%20Shell%20Scripting%20Bible,%203rd%20Edition.pdf
"Yazdığım script'te istediğim komutun çalışması için sorulan parolayı nasıl tanımlayabileceğimi ya da komutu parola sormasını engelleyerek, istediğim kullanıcı üzerinde çalıştırabileceğimi bilmediğimden, sudoers aracılığıyla, sudo komutundaki parola onayını kapatıp, sudo ekleyerek yazdım."
pw="" && echo $pw|sudo -S komutlar..
kullanabilirsin
"İlk takıldığım yer, ilk if koşulundaki komutları açtırmadan önce konsole uygulamasını açıp, if koşulunun konsole uygulaması üzerinde çalışmasını istiyorum. Örneğin; sudo -u mahmut -E /usr/bin/chromium ns1.google.com
komutunda chromium'un ns1.google.com adresindeki sekmeyle açılması gibi konsole'un da yukarıdaki en üstteki if koşuluyla çalışmasını istiyorum."
konsole açık değilse açıp veya açıksa yeni sekmede açıp komutu girmek için önce "xsel" panoya kopyalama uygulamasını kullanabirsin komut=$(sudo -u mahmut -E /usr/bin/chromium ns1.google.com) && echo $komut|xsel
(konsole uygulamasının açık değilse açmayı, açıksa sekme açmayı şunla yapabilirsin if pgrep konsole;then konsole &; else xdotool key Control+Shift_L+t; fi
açık değilse açıldıktan sonra komutu girmeden önce pencereyi ön plana getirmek için xdotool search --sync --onlyvisible --class konsole windowfocus
, açıksa yeni sekme olacağından diğer işleme geçebiliriz.
uygulama çalışıyor mu kontrolü
pgrep uygulama ile eğer çalışıyorsa pid ini alabilirsin. çalışmıyorsa boş döner oda işe yarar;
if pgrep uygulama; then #çalışıyorsa işlemler; else #çalışmıyorsa işlemler; fi
islemler="sudo -u mahmut -E konsole && sudo -u mahmut -E /opt/sublime_text_3/sublime_text && sudo -u mahmut -E /usr/bin/chromium ns1.google.com && sudo -u root systemctl start httpd"
a=$(echo $işlemler|tr "&&" "\n"|wc -l)
for (( a=1; a<=$a; a++ )); do b=$($işlemler|tr "&&" "\n"|sed -n $a'p') if exec $b &>/dev/null;then ; echo "$b çalıştı" else echo "$b çalışmadı"; done
Konuyu açalı uzun süre oldu. Farkındayım fakat uzun bir süredir bu işlere vakit ayıramamıştım. Şimdi script'imin son hali aşağıdaki gibi.
#!/bin/bash
if sudo systemctl stop NetworkManager
then
if sudo systemctl start NetworkManager
then
date >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo echo "'NetworkManager' servisi yeniden başlatıldı. PID numarası: " >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo pgrep NetworkManager >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/NetworkManagerStatusLogs
else
date >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo echo "'NetworkManager' servisinin PID numarası alınamadı veya olay zamanı yazdırılamadı." >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/NetworkManagerStatusLogs
fi
else
date >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo echo "NetworkManager servisi yeniden başlatmak için durdurulamadı." >> /var/log/StartupSettings/NetworkManagerStatusLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/NetworkManagerStatusLogs
fi
if sudo rm -rf /home/mahmut/Downloads
then
date >> /var/log/StartupSettings/RemovingLogs && sudo echo "'mahmut' kullanıcısının 'Downloads' dizini silindi." >> /var/log/StartupSettings/RemovingLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/RemovingLogs
else
date >> /var/log/StartupSettings/RemovingLogs && sudo echo "'mahmut' kullanıcısının 'Downloads' dizini silinemedi." >> /var/log/StartupSettings/RemovingLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/RemovingLogs
fi
if rm -rf /home/mahmut/.local/share/Trash/files/*
then
date >> /var/log/StartupSettings/RemovingLogs && sudo echo "'mahmut' kullanıcısının çöp kutusu boşaltıldı." >> /var/log/StartupSettings/RemovingLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/RemovingLogs
else
date >> /var/log/StartupSettings/RemovingLogs && sudo echo "'mahmut' kullanıcısının çöp kutusu boşaltılamadı." >> var/log/StartupSettings/RemovingLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/RemovingLogs
fi
if [ $USER == mahmut ]
then
sudo systemctl start httpd && date >> /var/log/StartupSettings/httpdLogs && sudo echo "Kullanıcının 'mahmut' kullanıcısı olduğu doğrulandı. 'httpd' servisi başlatıldı. PID numarası: " >> /var/log/StartupSettings/httpdLogs && sudo pgrep httpd >> /var/log/StartupSettings/httpdLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/httpdLogs
else
date >> /var/log/StartupSettings/httpdLogs && sudo echo "Kullanıcının 'mahmut' kullanıcısı olduğu doğrulanamadı veya belirlenemeyen bir nedenden dolayı 'httpd' servisi başlatılamadı." >> /var/log/StartupSettings/httpdLogs && sudo echo "--------------------------------------------------------------------------------" >> /var/log/StartupSettings/httpdLogs
fi
[mention=639565]@mimiksiz[/mention] Size çok teşekkür ediyorum. Verdiğiniz bilgiler tam aradığım bilgilerdi.
[mention=639476]@LinuxMaster[/mention] Ayrıca teşekkürler. Verdiğiniz kaynaklar kayda değer bilgiler içeriyor.