Apt-get komutunu çalıştırmak için bir bash betiğini nasıl yapabilirim?


1

Bash betiği ile sahip olduğum bazı yapılandırmaları otomatikleştirmeye çalışıyorum, bunu daha önce hiç yapmadım, bu yüzden kolay bir şeyle denedim Hello World! ve her şey yolunda gidiyor, ama sonra şöyle bir şey denedim:

#!/bin/bash
sudo su
apt-get purge postfix

ve hiçbir şey yapmıyor, kontrol edip postfix hala kurulu ve herhangi bir zamanda herhangi bir girişimi soruyor, denedim. apt-get ama gibi şeyler yapacağım ssh-keygen hatta sanırım ile dosya yazmak cat ya da bir şey, senaryonun çalışmasını ve neler olduğunu görmeyi nasıl yapabilirim?

Yanıtlar:


7

sudo su koşar su sizin için sırayla sizi bir kabuğun içinde kök olarak bırakır, girişinizi bekler.

Ne yapmak istiyorsun sudo apt-get purge postfix. man sudo nedenini görmek için.

Daha fazla başvuru için etrafta birçok bash betiği örneği bulacaksınız.


Hiçbir şey bulamadım, ilk defa bash ile çıktım ve nasıl soracağımı bilmiyordum, başka bir hızlı soru, eğer bash yanlış bir şey bulursa ne yapar?
poz2k4444

Dosyadaki her şeyi çalıştırmaya çalışır. Eğer bir şey başarısız olursa, çıktıyı göreceksiniz (eğer varsa) ancak script çalışmaya devam edecektir. Kullanabilirsiniz || Bir komut başarısız olursa bir şeyi çalıştırmak için "OR" olarak, ya da komut dosyasını sonlandırırsanız: cp /file/that/doesnt/exist /destination/ || exit 1. Bu öğretici başlamanıza yardımcı olacaktır.
dset0x

dosyadaki her şeyi yapmaya çalışırsa, neden bir şey sormuyor veya bir şey göstermiyorsa, ne zaman àpt-get purge postfix??
poz2k4444

sudo kendi içinde bir komuttur. Öyle su. Ne zaman yaz sudo su, sistem yürütür su sizi kök kabuğunun içine iten kök olarak. sudo yürütmek için kullandığınız komut su hala çalışıyor, bekliyor su bitirmek için komut. Ne zaman su bitirir, apt-get koşacak. tip exit Dışına çıkmak su. İstediğiniz şey, @zmode'nin cevabında önerdiği şey. sudo apt-get purge postfix bir senaryoda yapmak kötü bir fikir. Bunu neden bu kadar sık ​​yapıyorsunuz, bir temizleme komutu yazmanız gerekecek?
UtahJarhead

@ poz2k4444 Muhtemelen bir şifre sormuyor çünkü sudo bir kez kullandıktan sonra bir süre şifrenizi hatırlar. Yazarsanız whoami betiği çalıştırdıktan sonra size gerçekte bulunduğunuzu söylemelidir root, @ UtahJarhead'in dediği gibi, çıkana kadar.
dset0x

4

Bu en iyi root / admin hesabı tarafından otomatikleştirilir ve standart bir kullanıcının dosyalarında bırakılmaz.

Neyi başarmak istediğiniz ile ilgili en iyi uygulama kök olmaktır sudo su - ve / root user dizininde çalışınız. Böyle bir şey genellikle en iyi şekilde saklanır. ~/bin veya ~/scripts bu yüzden mevcut değilse, onu oluşturmanız gerekebilir ve yeni evin sizin bir parçanız olduğunu doğrulayın. PATH. Sistemlerinizi zaman içinde yönetmek için kullandığınız küçük betikleri barındırmak için bir tür komut dosyası dizini tutmak her zaman iyi bir fikirdir. bunlar için saklarlar. İşin püf noktası, yeniden kullanılabilir bir kod yazmaya çalışmak ve böylece hayatınızı kolaylaştırmaktır.

Bu dosyalardan bazılarını kullanacaksanız, onlar için özel bir dizin oluşturabilirim. ~/scripts/sysupdates ve her dosyayı tek bir şey yapmaya devam etmeye çalışın. Bu, init.d gibi diğer * nix sistemlerinin işlevini yansıtır ve sistemin daha kolay ve sezgisel bir şekilde korunmasını sağlar. Bu, yakında göreceğiniz gibi, girişlerimizi başka yerlerde de sınırlandırma amacına sahiptir.

Yukarıda belirtildiği gibi güncellemek istediğiniz dosyaları (örneğin, postfix, qmail, update) oluşturursanız, ~ / scripts içindeki bir betiği kullanarak bunlara göz atabilirsiniz:

#/usr/bin/bash
#
# Script: updater.sh
# Author: My Name  
# Date: yyyymmdd - ee   (ee = times edited)
# 
# Purpose: run update scripts from ~/scripts/sysupdates
# 
# Notes:
# 

for SCRIPT in `ls ~/scripts/sysupdates`; do ${SCRIPT}; done

Kendinize bir iyilik yapın ve oluşturduğunuz her dosya için uygun bir başlık oluşturma alışkanlığı edinin. Sadece bir dakika sürecek ve yolun başındaki baş ağrılarından kurtulacak, neden daha sonra yarattığınızı ya da ne yaptığını hatırlayamayacağınızı ya da bir gün sürdürmesi gereken kişi olamayacağınızı unutmayın.

Bunun kök kısmı crontab'ı düzenlemek için. Cron, belirli bir komut dosyasını belirli bir aralıkta çalıştıran bir programdır. Yani updater.sh betiğimizi crontab'a eklersek, tek yapmamız gereken dosya eklemek ~/scripts/sysupdates ve otomatik olarak çalışacaklar.

İle crontab'a erişirsiniz. crontab -e hangi crontab'ı tanımlanmış sistem editörü ile düzenler (genellikle linux'da vim). Size yardımcı olacak bir crontab jeneratörü bulunur: http://www.thepcmanwebsite.com/crontab_generator.shtml kendin yapmak için. Satır ekle:

5 0 1 * * /root/scripts/updater.sh

Gitmek için iyi olmalısın. Bir SysAdmin'in ömrünü çok daha kolaylaştırabileceği için bu araçlarla eğlenin.

Bir uyarı kelimesi; Senaryolarına apt-get -y dist-upgrade ekleyemem, başa çıkmak için hazır olduğunuzda, kötü bir şekilde çalışması durumunda bunu çalıştırın.


Yani, kötü bir fikir kullanımı apt-get bir komut dosyası içinde ??? Cevabınızın son bölümünü anlamıyorum
poz2k4444

1
@ poz2k4444 Sizin için açıklığa kavuşturmama izin verin: Bir komut dosyasında apt-get kullanmak genellikle iyidir. Bahsettiğim uyarı, çekirdeği ve bazı sistem ikili dosyalarını yükseltmeyi deneyeceğinden, "yükseltme" ile kullanmak içindir. Bu genellikle tehlikeli olmamakla birlikte, buradaki bir hata sisteminizi işlevsiz bırakabilir. Bu yüzden izlerken daha iyi yapılan güncellemelerden biri. Umarım bu, neden bu şekilde yapılmasını önerdiğimi anlamanıza yardımcı olur.
Patrick

1

apt-get purge sadece sudo veya root olarak çalışır, sudo'yu bir betikten çalıştırmak için, sudo'yu şifrelemeden sudo'yu etkinleştirmeniz gerekir, aksi takdirde şifre ister ve bekler.

Koşmak visudo ve alt okumaya bir satır ekleyin:

yourusername ALL=NOPASSWD: ALL

Ayrıca apt-get, paketi hemen istemeden kaldırmak için bir komut verir: -y

sudo apt-get purge package -y

Sonuçta şöyle bir şey olur:

#!/bin/bash
sudo apt-get purge postfix -y

Bu güvenlik sorunları oluşturmayacak?
poz2k4444

1
Evet, bu oldukça güvensiz. Nopasswd seçeneğini tek bir çalıştırılabilir / script ile de sınırlayabilirsiniz, bunun için sudo belgelerini okumalısınız.
Niels van Reijmersdal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.