Linux betiği başlangıç ​​koşulları ağı. Bilgisayar önyüklendiğinde kendi otomatik çalıştırma komut dosyanızı oluşturma. # Programların yüklenmesi

Bir kabuk betiği, birden çok kez kullanabileceğiniz bir komut dizisidir. Bu sıra genellikle betiğin adını komut satırına yazarak yürütülür. Ayrıca, cron ile görevleri otomatikleştirmek için betikleri kullanabilirsiniz. Betiklerin başka bir kullanımı, init betiklerinin arka plan programları ve hizmetler üzerindeki işlemleri tanımladığı bir UNIX sistemini başlatmak ve kapatmaktır.

Kabuk komut dosyası oluşturmak için düzenleyicinizde yeni bir boş dosya açın. Bunun için herhangi bir metin editörünü kullanabilirsiniz: vim, emac'lar, gedit, dtpad vesaire.; herhangi biri yapacak. Ancak, aşağıdaki gibi daha gelişmiş bir düzenleyici seçebilirsiniz. vim veya emac'lar, çünkü bu tür düzenleyiciler kabuk ve Bash sözdizimini tanıyacak şekilde yapılandırılabilir ve parantezleri ve noktalı virgülleri kapatmayı unutmak gibi yeni başlayanların sıklıkla yaptığı hataları önlemede iyi bir yardımcı olabilir.

UNIX komutlarını, komut satırına yazdığınız gibi yeni boş dosyaya yazın. Önceki bölümde tartışıldığı gibi ("Komut yürütme" bölümüne bakın), komutlar kabuk işlevleri, yerleşik komutlar, UNIX komutları veya diğer komut dosyaları olabilir.

Komut dosyanız için, komut dosyasının ne yaptığını söyleyen anımsatıcı bir ad seçin. Betik adınızın mevcut komutlarla çakışmadığından emin olun. Herhangi bir karışıklığı önlemek için komut dosyası adları genellikle .sh uzantısıyla biter. Ancak, sisteminizde seçtiğiniz isimle başka betikler olabilir. komutlar Hangi, nerede ve diğerleri, bu adda zaten var olan programlar ve dosyalar hakkında bilgi arayın:

Hangi -a script_name burada script_name script_name bulun ( yaklaşık trans. : script_name'i betiğinizin adıyla değiştirin).

Komut dosyası komut dosyası1.sh

Bu örnekte, komutu kullanıyoruz EkoÇıktı üretilmeden önce ne yapılması gerektiği konusunda kullanıcıyı bilgilendirecek olan Bash'te yerleşiktir. Kullanıcıların komut dosyasının ne yaptığı konusunda bilgilendirilmeleri önemle tavsiye edilir, böylece kullanıcılar senaryonun hiçbir şey yapmadığını düşünmeleri durumunda gergin değillerdi. Kullanıcıları uyarma konusuna Bölüm 8, "Etkileşimli Komut Dosyası Yazma"da döneceğiz.


Şekil 2.1. Komut dosyası komut dosyası1.sh

Aynı senaryoyu kendiniz için yazın. Komut dosyalarınızı içeren bir ~/scripts dizini oluşturmak iyi bir fikir olacaktır. Bu dizini PATH değişkeninin içeriğine ekleyin:

PATH="$PATH:~/scriptleri" dışa aktar

Bash'te yeniyseniz, farklı kabuk yapıları için farklı renkler kullanan bir metin düzenleyici kullanın. Sözdizimi vurgulama şurada desteklenir: vim, gvim, (x)emac'lar, yazmak ve diğer birçok düzenleyici için favori düzenleyicinizin belgelerine bakın.

Komut dosyası yürütme

Bir betiğin çalışabilmesi için uygun kullanıcılar için çalıştırma haklarına sahip olması gerekir. İzinleri ayarladıktan sonra, gerçekten ihtiyacınız olan izinleri ayarladığınızdan emin olun. Bu yapıldıktan sonra, komut dosyası diğer herhangi bir komut gibi çalıştırılabilir:

Willy:~/scripts> chmod u+x script1.sh willy:~/scripts> ls -l script1.sh -rwxrw-r-- 1 willy willy 456 24 Aralık 17:11 script1.sh willy:~> script1.sh Senaryo şimdi başlıyor. Hey Willy! Şimdi size bağlı kullanıcıların bir listesini getireceğim: 18 gün boyunca 15:38, 5:37, 4 kullanıcı, ortalama yük: 0,12, 0,22, 0,15 KULLANICI TTY FROM [e-posta korumalı] BOŞTA JCPU PCPU NE kök tty2 - Cmt 14:25m 0,24s 0,05s -bash willy:0 - Cmt 14 ? 0.00s? - willy pts/3 - Cts 14:33m 36.39s 36.39s BitchX willy ir willy pts/2 - Cts 14:33m 0.13s 0.06s /usr/bin/screen Şimdi iki değişken ayarlıyorum. Bu bir dize : siyah Ve bu bir sayı: 9 Şimdi isteminizi size geri veriyorum. willy:~/scripts> echo $COLOUR willy:~/scripts> echo $VALUE willy:~/scripts>

Bu, bir betiği çalıştırmanın en yaygın yoludur. Bunun gibi betiklerin bir alt kabukta çalıştırılması tercih edilir. Bu alt kabukta oluşturulan değişkenler, işlevler ve takma adlar, yalnızca o alt kabuktaki belirli bash oturumu tarafından bilinir. Bu kabuktan çıkıldığında ve kontrol üst kabuk tarafından devralındığında, tüm ayarlar silinir ve kabuğun durumundaki komut dosyasıyla yapılan tüm değişiklikler unutulur.

Komut dosyalarını veya . (geçerli dizin), betiği şu şekilde etkinleştirebilirsiniz:

./script_name.sh

Bir betiği mevcut bir kabuk içinde çalıştırmak da mümkündür, ancak bu genellikle yalnızca erişilebilirlik istiyorsanız, örneğin betiğin başka bir kabukla çalışıp çalışmadığını kontrol etmek veya hata ayıklama amacıyla bir geri izleme yayınlamak istiyorsanız yapılır ( yaklaşık trans.- betik_adı'nı betiğinizin adıyla değiştirin):

rbash script_name.sh sh script_name.sh bash -x script_name.sh

Belirtilen kabuk, mevcut kabuğunuzun bir alt kabuğu olarak başlatılacak ve betiği çalıştıracaktır. Bu, betiğin belirli parametrelerle veya betiğin kendisinde belirtilmeyen belirli koşullar altında çalıştırılmasını istediğinizde yapılır.

Yeni bir kabuk başlatmak istemiyor ancak betiği mevcut kabukta çalıştırmak istiyorsanız, source komutunu kullanın:

Kaynak script_name.sh

Bu durumda, betiğin yürütme izinlerine ihtiyacı yoktur. Komutlar geçerli kabuk bağlamında yürütülür, bu nedenle ortamınızda yapılan herhangi bir değişiklik, komut dosyasının yürütülmesi bittiğinde görünür olmaya devam eder:

Willy:~/scripts> kaynak script1.sh --çıktı atlandı-- willy:~/scripts> echo $VALUE 9 willy:~/scripts>

İçin basit bir bash betiği yazmak aşağıdaki basit adımları uygulamamız gerekiyor:

Her şey nasıl çalışır:

Komut dosyamızın ilk satırı #!/bin/bash, komut dosyamızın başarılı bir şekilde çalışması için gereklidir.

ikinci satır mkdir testdir testdir dizinini oluşturur

üçüncü satır cd testdir, oluşturulan testdir dizinine geçmenizi sağlar

takım dokunmak sonraki satırda dosya1 dosya2 dosya3'e dokunun üç dosya oluşturur

ve ls -al betiğimizin satırındaki son komut, önceki satır sayesinde üç boş dosyanın göründüğü geçerli dizinin içeriğini görüntülememize izin verir.

Gördüğümüz gibi, bizim basit komut dosyası tüm komutlar yeni bir satırda başlar. Komut dosyası başlatıldığında her satır, belirli eylemleri gerçekleştirerek sırayla işini gerçekleştirir.

Linux'ta her gün aynı komutlardan (sabit parametrelerle) oluşan bir zincir çalıştırıyorsanız, aynı komutları yazmanız mantıklı olabilir. basit bash betiği, bu da zamandan tasarruf etmenizi ve işinizi otomatikleştirmenizi sağlar.

Öncelikle ne olduğunu anlayalım senaryo ve ne için olduğunu

Senaryoİngilizce'den çevrilmiş - senaryo. Hepimiz film izleriz, çoğumuz performans izleriz. Bir film/performans oluşturmak için senaristler onlar için senaryolar yazarlar; bu senaryolara göre oyuncular, filmin/performansın oluştuğu sahnede rollerini sahne sahne oynarlar. Bir senaryo yaratma işi oldukça zahmetlidir, burada her şeyi en küçük ayrıntısına kadar hesaba katmanız gerekir, böylece sonunda sanatçılar senaristin planını yerine getirebilir ve izleyici bütünsel bir çalışma görür.

Benzer şekilde, komut dosyaları, kullanıcının işletim sisteminde çalıştırılmalarını daha kolay ve daha hızlı hale getirmek için bir araya getirdiği (kod) bir görev listesini yürütmek için yazılır. Basit betikler yazmak için programcı eğitimine sahip olmak gerekli değildir.

Başlamak için en fazlasını yaratalım, ikisi de değil, en basiti komut dosyası kabuğu sistemi güncellemek için.

Sistem ile gerçekleştireceğim tüm işlemler ubuntu, ancak diğer sistemler için de geçerlidir. linux, elde edilen ubuntu. Bunun için ihtiyacımız var: Metin düzeltici bir komut dosyası (kod) oluşturmak için gerekli görevlerle doldurmak ve terminal- oluşturulan komut dosyasını yürütmek için. Bu araçlar herhangi bir dağıtımda kurulur linux varsayılan.

Yani, bir metin düzenleyici açın gedit ve adın altındaki ilk gerekli karakterleri girin olay.
olay programlamada, iki karakterden oluşan bir dizidir: bir kare işareti ve bir ünlem işareti ( #! ) betik dosyasının başında. Ve bu karakterlere boşluk bırakmadan ekleyin /bin/sh- betiğin yürütüleceği tercüman. /bin/sh- Genellikle Bourne kabuğu veya geçen uyumlu bir komut satırı yorumlayıcısı "yol/to/komut dosyası" ilk parametre olarak.
Komut dosyasının gerekli ilk satırı şöyle görünecektir:

# İlk Ubuntu Güncelleme Komut Dosyam

Satırın en başındaki diyez işareti (#) yorumlayıcıya/terminale bu satırın okunması ve yürütülmesi gerekmediğini söyler. Satır, bu betiğin kodunda gereklidir, böylece betiğin yaratıcısı, koddaki bu segmentte / sahnede ne yürüteceğini bilir, böylece gelecekte çok fazla olacağı zaman kafası karışmaz. böyle çizgiler Pound işareti olan bu tür dizilere - denir yorum yapılmadı .

sudo apt güncellemesi
sudo uygun yükseltme -y

-y ikinci komutun sonunda, tercümana/terminale, bu eylemin/komutun, bir tuşa basmanın ek kullanıcı onayı olmadan otomatik olarak gerçekleştirilmesi gerektiğini açıkça belirtir. Giriş. y- İngilizce'nin kısaltması Evet, yani Evet.

Bu kadar. İlk betiğiniz oluşturuldu. Resimdeki gibi bir şeye sahip olmalısınız:


Oluşturulan dosyayı / betiği kaydetmek ve vermek için kalır İsim sonunda zorunlu bir uzatma ile - .sh. Eklenti .sh yürütülebilir dosyaya atanır.
ona verdim İsim - güncelleme.sh, kaydetme ana klasör kullanıcı:


Oluşturulan dosyanın/komut dosyasının yürütülebilir olması için, kendisine izin verilmesi gerekir. Bu iki şekilde yapılabilir.

1. Aşağıdaki komutu bir terminalde çalıştırın:

sudo chmod +x update.sh

2. Veya dosya yöneticisini şurada açın: ana klasör(oluşturulan betiği kaydettiğiniz yer), içerik menüsünde dosyaya sağ tıklayın - Özellikler - İzinler ve öğeyi etkinleştirin - Verim: Dosyanın bir program olarak çalışmasına izin ver:


Oluşturulan betiği çalıştırmak için, terminali açmanız gerekir (makalenin en başında yazdığım, terminalin betiği yürütmek için gerekli bir özellik / araç olduğu), girin sh, boşlukla ayrılmış kod adı - güncelleme.sh ve tuşuna basın Giriş:


Veya terminalde girin sh ve oluşturulan dosyayı komut dosyasıyla birlikte dosya yöneticisinden sürükleyin (ayrıca bir boşlukla ayrılmış):


Komuttan sonra dosya yolu görüntülendikten sonra sh ve bir boşluk, sadece tuşa basın Girmek(Enter) sistem güncellemesi yapmak için:


Artık istediğiniz zaman kendi komut dosyanız tarafından oluşturulan bir sistem güncellemesi yapabilirsiniz.

Evet, birisi terminalde bu iki komutu çalıştırarak sistemi güncellemenin zor olmadığını iddia edebilir, neden şişirip bir tür komut dosyası oluşturalım? Bu doğru. Ancak bu, "tanrıların çömlek yakmadığını" göstermek için basit bir komut dosyası oluşturmanın bir örneğidir.

Soru şu ise: "başlangıca bir program nasıl eklenir?" - acemi kullanıcılar yanıtı yeterince hızlı bulurlar, ardından komut dosyasını kapatma / yeniden başlatma sırasında çalıştırma sorusu kafalarını karıştırır. Makale, linux'u açarken ve kapatırken komutları otomatik olarak yürütmenin standart yolunun yanı sıra gdm'yi ve ubuntu gibi bir grafik arabirimi kuran kullanıcılar için daha kolay bir yolu açıklayacaktır.

Konsol seçeneği.

Biraz teori.
Linux'ta 7 çalışma seviyesi olduğunu bilmelisiniz. Ancak sadece 6 tanesi kullanılabilir.
Tüm kendine saygı duyan programlar gibi, geri sayım 0-la'dan başlar.
0 - Sistemi durdurun veya kapatın.
1 - Tek kullanıcı modu.
2 - Çok oyunculu mod, ancak ağ desteği olmadan.
3 - Aynı, ancak bir ağ ile.
4 - Güzellik için eklendi Kullanılmıyor.
5 - X sunucusu yüklemeli grafik modu.
6 - Yeniden başlatın.
/etc klasörüne (bazı dağıtımlarda /etc/rc.d) giderseniz, 7 çalışma düzeyine sahip klasörleri görebilirsiniz.

Örneğin, bilgisayar kapatıldığında rc0.d klasöründeki tüm komut dosyaları yürütülür.


Burada daha ayrıntılı durmalıyız. Gerçek şu ki, bu klasörde komut dosyaları (veya daha doğrusu komut dosyaları) yoktur, ancak yalnızca /etc/init.d klasöründeki dosyalara bağlantılar vardır. Bu betikler, start veya stop parametresine bağlı olarak farklı görevler gerçekleştirir (örneğin, /etc/init.d/reboot start ve /etc/init.d/reboot stop farklı komutlardır ve /etc/init.d/reboot çalışmayacaktır. iş). Bağlantıda ilk S harfi varsa, komut dosyasına start parametresi verilir ve K harfi (kill kelimesinden) varsa, o zaman stop parametresi verilir. Harften sonraki sayı, komut dosyasının yürütülme sırasını gösterir.
Örneğin, yukarıdaki ekran görüntüsünde önce /etc/init.d/hddtemp stop komutu çalıştırılacak ve daha sonra /etc/init.d/networking başlayacak.
Yeter teori. Uygulamaya geçelim.
Otomatik yüklemeye bir komut eklemek için /etc/rc.local dosyasına yerleştirmeniz yeterlidir.

Yazının bu kısmı için editör olarak nano kullanılacak ama siz gedit gibi favori editörünüzü kullanabilirsiniz.

sudo nano /etc/rc.local

Ve komutlarımızı çıkışı 0 olan satırın hemen üstüne yerleştiriyoruz.
Kapatmadan veya yeniden başlatmadan önce komutların çalıştırılabilmesi için /etc/init.d klasöründe bir komut dosyası oluşturmamız gerekir.

sudo nano /etc/init.d/scriptname

Aşağıdaki kodu yapıştırın:

#! /bin/sh
durumda "$1"
başlangıç)
yankı "başlangıç ​​sinyali verildi"
;;
durmak)
yankı "dur sinyali verildi"
;; esac

Yalnızca bir sinyal verilecekse, komutun başına # işaretini koyarak satırı yorumlayın.
Örneğin

...
durumda "$1"
başlangıç)
#
;;
...

Şimdi dosyayı yürütülebilir hale getiriyoruz:

sudo chmod +x /etc/init.d/scriptname

sudo update-rc.d betik adı start 20 0 6 . 1 0 6'yı durdur .

Noktalar önemlidir (her ikisi de). İnternetin enginliğini keşfederken, bu programın sözdiziminin bazen değiştiği izlenimini edindim. Güncel örnekler "man update-rc.d" komutu kullanılarak görüntülenebilir. Örnekler altta olacak.

Bu komut /etc/rc dizinlerinde 2 link oluşturacaktır. 0 .d (komuttaki ikinci sayı) ve /etc/rc 6 .d (komuttaki üçüncü sayı). Ayrıca script önce stop parametresi ile (çünkü maliyeti 1) ve ancak o zaman start parametresi ile (çünkü maliyeti 20) yürütülecektir.
İkinci parametre gerekli değilse, şu komutu çalıştırabilirsiniz:

sudo update-rc.d betik adı stop 1 0 6 .

Önceliği daha yükseğe ayarlamanızı tavsiye ederim (yani, başlatma veya durdurmadan sonraki sayı küçük olmalıdır), tercihen 20'den az. Aksi takdirde, yeniden başlatmayı denediğimde bilgisayarım bazen takılıyor.

Ubuntu kullanıcıları ve gdm'li diğer birçok modern dağıtım için kullanabilirsiniz ...

Grafik seçeneği.

Otomatik yüklemeye gelince, açıklanan yöntemi kullanabilirsiniz.
Veya şu komutla "başlangıç ​​uygulamalarını" açın:

gnome-oturum-özellikleri

Komut dosyasını bilgisayar kapalıyken çalıştırmak için /etc/gdm/PostSession/Default dosyasına koyun

sudo gedit /etc/gdm/PostSession/Default

Çıkış 0 satırının hemen üstünde.

Boş bir dosya oluşturuyoruz.

İlk satıra şunu yazıyoruz:

#!/bin/sh

Bu satır hangi komut kabuğunun kullanılacağını belirtir. Sırada komutlarınız var.

/usr/sbin/ dizinine orjinal isimle (mevcut isimle çakışmayacak şekilde) kaydedelim.

Komut dosyasının açılışta çalışabilmesi için /etc/rc.local dosyasına çıkış 0 satırından önce yazmanız gerekir.Bu dosyanız yoksa oluşturun ve içine aşağıdaki içeriği yapıştırın:

#!/bin/sh -e #Komut dosyanızla birlikte buraya bir satır ekleyin. /usr/sbin/mescripts çıkış 0

Biraz daha karmaşık bir yol

Yükleme sırasını ve komut dosyası davranışını farklı çalışma düzeylerinde ayarlamanıza olanak tanır.

/etc/init.d/skeleton dosyasını inceliyoruz, temelinde uygulamamızı başlatacak / durduracak bir /etc/init.d/my_script betiği oluşturuyoruz.

Bu dizinler, hizmetleri durdurmak için komut dosyaları içerir:

/etc/rc0.d/ /etc/rc1.d/ /etc/rc6.d/

bunlarda - hizmetleri başlatmak için komut dosyaları:

/etc/rc2.d/ /etc/rc3.d/ /etc/rc4.d/ /etc/rc5.d/

Bunları sıra için inceleriz (komut dosyasının başlangıcındaki ilk hane ne kadar küçükse, uygulama o kadar erken başlar/durur). Uygulamanız bazı hizmetlere bağlıysa bu kritik olabilir.

Başlatma komut dosyasına ve sırasına karar verdikten sonra aşağıdakileri yaparız:

Sudo update-rc.d my_script start 70 2 3 4 5 . dur 20 0 1 6 .

Burada betiğimin diğerlerinden daha geç başlaması (70) ve erken bitmesi (20) gerektiğini tanımladım. 2 3 4 5 0 1 6 sayıları yük seviyelerini gösterir.

Bir şeyi beğenmediyseniz, her şeyi silebilirsiniz

sudo update-rc.d -f my_script kaldır

Ayrıntılar için man update-rc.d'ye bakın.

Açık/kapalı ağda bir betiği çalıştırma

if-down.d , if-pre-up.d , if-post-down.d , if-up.d alt dizinlerine sahip bir /etc/network/ dizini vardır. Komut dosyasını bu alt dizinlerden birine yerleştirirseniz, sırasıyla kapatma sırasında, açmadan önce, kapattıktan sonra veya ağ açıldığında yürütülür.

Başka bir yol da /etc/network/interfaces dosyasında şu yönergelerden birini belirtmektir: up , pre-up , post-up , down , pre-down , post-down . Örneğin, çizgi

Gönderim sonrası /yol/to/script.sh

ağı açtıktan sonra komut dosyasını yürütür komut dosyası.sh. Man arayüzlerinde daha fazlasını okuyabilirsiniz.

Her durumda, betiğin yürütmeye izin verecek şekilde ayarlanmış izinleri olmalıdır, aksi takdirde çalışamaz.

Fok
Konunun devamı:
Çözümler

Çoğu kullanıcı, farklı tarayıcılarla çalışırken, boş bir sayfadan veya ihtiyaç duymadıkları bir sayfadan başlamak zorunda oldukları gerçeğiyle karşı karşıya kalır.