Linux'ta “/etc/init.d” ve “/etc/rcX.d” dizinleri arasındaki bağlantı nedir?


25

" Linux Komut Satırı ve Shell Scripting Bible, Second Edition " adlı bir kitaptan komut satırı öğreniyorum . Kitap şunu belirtir:

Bazı Linux uygulamaları açılışta otomatik olarak başlatmak için bir işlemler tablosu içerir. Linux sistemlerinde, bu tablo genellikle / etc / inittabs özel dosyasında bulunur.

Diğer sistemler (popüler Ubuntu Linux dağıtımı gibi), açılışta tek tek uygulamaları başlatmak ve durdurmak için komut dosyaları içeren /etc/init.d klasörünü kullanır. Komut dosyaları /etc/rcX.d klasörlerinin altındaki girişlerle başlatılır, burada X bir çalışma düzeyidir.

Muhtemelen Linux için yeni olduğum için, ikinci paragrafın ne anlama geldiğini anlamadım. Birisi aynı şeyi daha sade bir dilde açıklayabilir mi?


Bu defalarca istendi önce
bsd

Bu biraz farklı. Benim bir bağlamım var. Bağlandığınız sayfada gördüğüm sorular bundan farklı, IMO.
its_me

Eğer kapalı, ama yinelenen olarak işaretlemek, eğer istersen daha bilgilendirici olurdu
n611x007

Yanıtlar:


30

Unutalım init.dya da rcx.dve işleri çok basit tutalım. Tek sorumluluğu diğer komut dosyalarını tek tek çalıştırmak veya öldürmek olan bir program programladığınızı hayal edin.

Ancak bir sonraki sorun, sırayla çalıştıklarından emin olmaktır. Bunu nasıl yaparsın?

Ve bu programın scriptskomut dosyalarını çalıştırmak için bir klasöre baktığını düşünelim . Komut dosyalarının önceliğini sıralamak için, onları sayısal sırayla söyleyelim. Bu düzen init.dve arasındaki ilişkiyi belirleyen şeydir.rc

Başka bir deyişle init.d, çalıştırılacak komut dosyalarını ve çalışma rcX.dsırasını içerir.

Buradaki Xdeğer rcX.d çalışma seviyesidir. Bu, işletim sisteminin mevcut durumuna gevşekçe çevrilebilir.

rcX.dSenaryoların içinde kazarsan, bu formatı bulacaksın:

Xxxabcd
  • XKveya ile değiştirilir S, bu betiğin olması gereken killedveya startedgeçerli çalışma seviyesinde olması gerekip gerekmediği
  • xx sipariş numarası
  • abcd komut dosyası adı (adın önemi yoktur, ancak işaret ettiği yer bu kodun çalışacağı koddur)

2
harika bir açıklama, çok açık. Thanks @whoami
its_me 10:12

9

Linux için birkaç farklı init sistemi var. Bunlardan başlıcaları SysVinit (geleneksel olanı), Upstart (Ubuntu'nun değiştirilmesi) ve SystemD'dir (Fedora ve Gnome tarafından bastırılmıştır ). Dizinler /etc/init.dve /etc/rc?.dSysVinit tarafından kullanılır. Kitapta Ubuntu ile ilgili olarak bahsedilmiş olabilir, çünkü bilgiler biraz tarihlidir (Ubuntu, diğerleri gibi SysVinit'i kullanırdı) veya bu dizinler hala uyumluluk için var.

/etc/init.dher biri bir hizmeti başlatmak ve durdurmak için talimatlar içeren bir dizi komut dosyası içerir. Bu hizmetlerden bazılarının önyükleme sırasında başlatılması gerekiyor; diğerlerinin çok kullanıcılı modda başlatılması gerekir, ancak tek kullanıcılı bakım modunda değil; ve istenen modları farklı servis grupları ile tanımlamak mümkündür. SysVinit bunu çalışma seviyeleri ile yönetir . Dizin /etc/rc$N.d, runlevel N ( /etc/rc$N.d/S*) girerken çalıştırılacak komut dosyalarını ve runlevel N ( ) bırakırken çalıştırılacak komut dosyalarını içerir /etc/rc$N.d/K*. Çoğu çalışma seviyesinin ortak komut dosyaları bulunduğundan, her çalışma düzeyi için komut dosyalarının bir kopyasını saklamak yerine, komut dosyalarının tümü tek bir konumda /etc/init.dve çalışma düzeyine özgü dizinlerde depolanır/etc/rc?.dsembolik bağlantılar içerir. Ayrıca, sembolik bağların adları, hizmetin o çalışma düzeyinde başlatılmasının ( S*) veya durdurulmasının (öldürülmesinin K*) olup olmadığını belirtir ve kodların yürütüldüğü sırayı kontrol etmek için sayısal bir önek kullanılır.

Geçilen sorumlu komut /etc/rc$N.dolan /etc/init.d/rc(ön-Sonradan görme Ubuntu ve Debian'daki; yerleri diğer Linux dağıtımlarında değişebilir).


Yani, Ubuntu artık kullanmıyor /etc/init.dve /etc/rc?.dbunun yerine Upstart var mı?
its_me

1
@ KrishD'Souza Pek değil. Ubuntu, SysVinit yerine Upstart kullanıyor, ancak birçok paket hala komut dosyalarını /etc/init.d(Upstart .confdosyaları yerine) içeriyor /etc/init, bu yüzden Upstart yine de destekleniyor /etc/init.dve /etc/rc?.duyumluluk için.
Gilles 'SO- kötülük olmayı bırak'

Ubuntu, 15.04'ten beri Upstart'tan systemd'ye geçti. Dolayısıyla şu anda (16.04) Ubuntu'da üç tane init sistemi var: SysVinit, Upstart ve systemd. Geriye dönük uyumluluk için birinci ve ikinci kalanlar.
PetroCliff

4

/etc/init.d init komut dosyalarının ait olduğu dizindir.

Çalışma etc/rcX.dseviyesine girerken hangi hizmetlerin öldürüldüğünü veya başlatıldığını kontrol eden bağlantılar X. Dosyalar rcX.dK ile başlayan parametreyle yürütülür stopve dosyalar ile başlayan Sparametreyle yürütülür start. KVeya sonrasında iki basamaklı bir sayı kullanarak sıralamayı başlatmak ve durdurmak için tipiktir S. Doğru başlatma ve durdurma sırasını sağlamak için iki dizinin 100'e kadar eklemesi yaygındır.

Programlar bağlantıların kaldırılmasını veya harf değiştirerek çalışma düzeyindeki devre dışı bırakılabilir Kveya Shiç kya s.

EDIT: Yöneticiler genellikle /etc/init.ddağılıma bağlı olarak başka bir dizine sembolik bir bağlantı olabilen komut dosyalarını çalıştırır . (Farklı dağıtımların farklı standartları vardır.)

rcX.dÇalıştırma düzeylerini değiştirmek başlatma kodu kullanılır.


Çoğu sistemde, /etc/init.daltındaki dizine bir bağlantıdır/etc/rc.d/init.d
Nikhil Mulley

1
Yani, temelde /etc/init.donsuz işe yaramaz /etc/rcX.dmı? Ve /etc/rcX.dbaşlangıçta başlatılan programların denetleyicisi olduğundan, bu fonksiyonun fonksiyonuna benzer, değil /etc/init.dmi?
its_me

Bu sisteme bağlıdır. Örneğin Gentoo, init dosyalarında sadece /etc/init.d dosyasını kullanır; /etc/rc*.d dizinine sahip değildir. Arch Linux, aynı şekilde, /etc/init.d yerine yalnızca /etc/rc.d'ye sahiptir.
laebshade

1

@ BillThor çok iyi cevap vermiş olsa da, işte benim anlayışım /etc/rcX.dve /etc/init.d:

  • /etc/init.d Bireysel uygulamaları önyükleme sırasında başlatmak ve durdurmak için komut dosyaları içerir.
  • /etc/rc?.ddizinler çeşitli çalışma seviyelerini temsil eder ve içerdiği komut dosyaları, /etc/init.ddizindeki gerçek komut dosyalarına sembolik bağlardan başka bir şey değildir . Çalışma seviyelerinin değiştirilmesi sistemin modunu değiştirir, tıpkı çok basit Tek kullanıcı modundan sadece konsol kipine kadar gelişmiş grafik arayüze.

Yani, kendisi /etc/rc?.dolmadan dizinlerin kullanımı yoktur /etc/init.d(ve tersi de geçerlidir).

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.