Apa hubungan antara direktori "/etc/init.d" dan "/etc/rcX.d" di Linux?

25

Saya belajar baris perintah dari sebuah buku berjudul " Linux Command Line dan Shell Scripting Bible, Second Edition ." Buku ini menyatakan ini:

Beberapa implementasi Linux berisi tabel proses untuk memulai secara otomatis saat bootup. Pada sistem Linux, tabel ini biasanya terletak di file khusus / etc / inittab.

Sistem lain (seperti distribusi Ubuntu Linux yang populer) menggunakan folder /etc/init.d, yang berisi skrip untuk memulai dan menghentikan aplikasi individual pada saat boot. Skrip dimulai melalui entri di bawah folder /etc/rcX.d, di mana X adalah level run.

Mungkin karena saya baru mengenal linux, saya tidak mengerti apa arti paragraf kedua yang dikutip. Bisakah seseorang menjelaskan hal yang sama dalam bahasa yang lebih sederhana?

ini aku
sumber
ini telah ditanyakan berkali-kali sebelumnya
bsd
@ mengikat yang satu ini berbeda. Saya punya konteks. Pertanyaan yang saya lihat di halaman yang Anda tautkan berbeda dari ini, IMO.
its_me
@membatasi, tetapi flag sebagai duplikat akan lebih informatif jika Anda merasa begitu
n611x007

Jawaban:

30

Mari kita lupakan init.datau rcx.ddan jaga agar semuanya tetap sederhana. Bayangkan Anda sedang memprogram program yang satu-satunya tanggung jawab menjalankan atau membunuh skrip lain satu per satu.

Namun masalah Anda berikutnya adalah memastikan semuanya berjalan berurutan. Bagaimana Anda melakukan itu?

Dan bayangkan program ini mencari di dalam scriptsfolder untuk menjalankan skrip. Untuk memesan prioritas skrip Anda akan menamainya dengan katakanlah urutan numerik. Urutan ini adalah yang menentukan hubungan antara init.ddanrc

Dengan kata lain init.dberisi skrip untuk menjalankan dan rcX.dberisi perintah untuk dijalankan.

The Xnilai rcX.d adalah tingkat run. Ini bisa diterjemahkan secara longgar ke status OS saat ini.

Jika Anda menggali di dalam rcX.dskrip Anda akan menemukan format ini:

Xxxabcd
  • Xdiganti dengan Katau S, yang merupakan kependekan dari apakah skrip seharusnya killedatau starteddalam level run saat ini
  • xx adalah nomor urut
  • abcd adalah nama skrip (nama itu tidak relevan namun yang menunjukkan skrip ini akan dijalankan)
siapa saya
sumber
2
penjelasan yang luar biasa, sangat jelas. Terima kasih @whoami
its_me
9

Ada beberapa sistem init berbeda untuk Linux. Yang utama adalah SysVinit (yang tradisional), pemula (pengganti Ubuntu), dan SystemD (didorong oleh Fedora dan Gnome). Direktori /etc/init.ddan /etc/rc?.ddigunakan oleh SysVinit. Buku ini mungkin menyebutkan mereka sehubungan dengan Ubuntu karena informasinya agak ketinggalan jaman (Ubuntu digunakan untuk menggunakan SysVinit seperti orang lain) atau karena direktori tersebut masih ada untuk kompatibilitas.

/etc/init.dberisi banyak skrip, masing-masing berisi instruksi untuk memulai dan menghentikan layanan. Beberapa layanan ini harus dimulai pada saat boot; yang lain harus dimulai dalam mode multiuser tetapi tidak dalam mode pemeliharaan satu pengguna; dan dimungkinkan untuk menentukan mode yang berbeda dengan berbagai set layanan yang diinginkan. SysVinit mengelola ini melalui runlevel . Direktori /etc/rc$N.dberisi skrip yang harus dijalankan ketika memasukkan runlevel N ( /etc/rc$N.d/S*) dan skrip untuk dijalankan saat meninggalkan runlevel N ( /etc/rc$N.d/K*). Karena banyak runlevel memiliki skrip yang sama, daripada menyimpan salinan skrip untuk setiap runlevel, skrip semua disimpan dalam satu lokasi /etc/init.d, dan direktori runlevel-spesifik/etc/rc?.dmengandung tautan simbolik. Lebih jauh lagi, nama-nama tautan simbolik mengindikasikan apakah layanan harus dimulai ( S*) atau dihentikan (dibunuh, K*) di runlevel itu, dan awalan numerik digunakan untuk mengontrol urutan di mana skrip dieksekusi.

Script yang bertanggung jawab untuk melintasi /etc/rc$N.dadalah /etc/init.d/rc(pada pra-Pemula Ubuntu dan pada Debian; lokasi dapat berbeda pada distribusi Linux lainnya).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Jadi, Ubuntu tidak menggunakan /etc/init.ddan /etc/rc?.dlagi, dan memiliki Upstart?
its_me
1
@ KrishD'Souza Tidak cukup. Ubuntu menggunakan Upstart bukan SysVinit, tetapi banyak paket masih mengirimkan skrip /etc/init.d(bukan .conffile Upstart masuk /etc/init), sehingga Upstart masih mendukung /etc/init.ddan /etc/rc?.duntuk kompatibilitas.
Gilles 'SO- stop being evil'
Ubuntu beralih dari Upstart ke systemd sejak 15.04. Jadi pada saat ini (16.04) Ubuntu memiliki tiga sistem init: SysVinit, Upstart dan systemd. Pertama dan kedua dibiarkan untuk kompatibilitas ke belakang.
PetroCliff
4

/etc/init.d adalah direktori tempat skrip init berada.

Di etc/rcX.dsinilah tautan yang mengontrol layanan mana yang dimatikan atau dimulai ketika memasuki runlevel X. File di rcX.dmulai dengan K dieksekusi dengan parameter stop, dan file yang dimulai dengan Sdieksekusi dengan parameter start. Biasanya untuk mengurutkan startup dan menghentikan pesanan menggunakan nomor dua digit setelah Katau S. Untuk memastikan mulai dan berhenti memesan yang tepat adalah umum untuk dua urutan untuk menambahkan hingga 100.

Program dapat dinonaktifkan pada level run dengan menghapus tautan atau mengubah kasing Katau Ske katau s.

EDIT: Administrator biasanya menjalankan skrip dari /etc/init.dmana mungkin merupakan tautan simbolis ke direktori lain tergantung pada distribusi. (Distribusi yang berbeda memiliki standar yang berbeda.)

Ini rcX.ddigunakan oleh kode inisialisasi untuk mengubah level run.

BillThor
sumber
Pada sebagian besar sistem, /etc/init.dadalah symlink ke direktori di bawah/etc/rc.d/init.d
Nikhil Mulley
1
Jadi, pada dasarnya /etc/init.dtidak ada gunanya tanpa /etc/rcX.d? Dan karena /etc/rcX.dpengontrol program yang diluncurkan saat startup, fungsinya mirip dengan /etc/init.d, benar?
its_me
Ini tergantung pada sistem. Gentoo, misalnya, hanya menggunakan /etc/init.d untuk file init; tidak memiliki direktori /etc/rc*.d. Arch Linux, juga, hanya memiliki /etc/rc.d, bukannya /etc/init.d.
laebshade
1

Meskipun @BillThor telah menjawabnya dengan sangat baik, inilah pemahaman saya tentang /etc/rcX.ddan /etc/init.d:

  • /etc/init.d berisi skrip untuk memulai dan menghentikan aplikasi individual pada saat boot.
  • /etc/rc?.ddirektori mewakili berbagai level run dan skrip yang terkandung di dalamnya hanyalah tautan simbolik ke skrip aktual dalam /etc/init.ddirektori. Mengubah level run mengubah mode sistem, seperti mode Pengguna tunggal yang sangat mendasar ke mode hanya konsol ke antarmuka grafis lanjutan.

Jadi, tidak ada penggunaan /etc/rc?.ddirektori tanpa direktori /etc/init.ditu sendiri (dan tentu saja, sebaliknya).

ini aku
sumber